jetzig/demo/src/app/views/root.zig
Bob Farrell e30d340a7a Embed static routes in compiled exe
Remove need for static routes output files to be copied/generated in
deployment.
2024-06-08 19:37:41 +01:00

84 lines
2.5 KiB
Zig

const std = @import("std");
const jetzig = @import("jetzig");
const importedFunction = @import("../lib/example.zig").exampleFunction;
pub const layout = "application";
pub fn index(request: *jetzig.Request, data: *jetzig.Data) !jetzig.View {
var root = try data.object();
try root.put("message", "Welcome to Jetzig!");
try root.put("custom_number", customFunction(100, 200, 300));
try root.put("imported_number", importedFunction(100, 200, 300));
try request.response.headers.append("x-example-header", "example header value");
return request.render(.ok);
}
fn customFunction(a: i32, b: i32, c: i32) i32 {
return a + b + c;
}
test "404 Not Found" {
var app = try jetzig.testing.app(std.testing.allocator, @import("routes"));
defer app.deinit();
const response = try app.request(.GET, "/foobar", .{});
try response.expectStatus(.not_found);
}
test "200 OK" {
var app = try jetzig.testing.app(std.testing.allocator, @import("routes"));
defer app.deinit();
const response = try app.request(.GET, "/", .{});
try response.expectStatus(.ok);
}
test "response body" {
var app = try jetzig.testing.app(std.testing.allocator, @import("routes"));
defer app.deinit();
const response = try app.request(.GET, "/", .{});
try response.expectBodyContains("Welcome to Jetzig!");
}
test "header" {
var app = try jetzig.testing.app(std.testing.allocator, @import("routes"));
defer app.deinit();
const response = try app.request(.GET, "/", .{});
try response.expectHeader("content-type", "text/html");
}
test "json" {
var app = try jetzig.testing.app(std.testing.allocator, @import("routes"));
defer app.deinit();
const response = try app.request(.GET, "/.json", .{});
try response.expectJson(".message", "Welcome to Jetzig!");
try response.expectJson(".custom_number", 600);
}
test "json from header" {
var app = try jetzig.testing.app(std.testing.allocator, @import("routes"));
defer app.deinit();
const response = try app.request(
.GET,
"/",
.{ .headers = &.{.{ .name = "accept", .value = "application/json" }} },
);
try response.expectJson(".message", "Welcome to Jetzig!");
try response.expectJson(".custom_number", 600);
}
test "public file" {
var app = try jetzig.testing.app(std.testing.allocator, @import("routes"));
defer app.deinit();
const response = try app.request(.GET, "/jetzig.png", .{});
try response.expectStatus(.ok);
}