Waldo_test.res.mjs
1// Generated by ReScript, PLEASE EDIT WITH CARE
2
3import * as Waldo from "../src/ffi/Waldo.res.mjs";
4import * as Vitest from "vitest";
5
6let sampleResultJson = `{
7 "gid": 102191569,
8 "name": "Washington",
9 "placetype": "region",
10 "lon": -77.0369,
11 "lat": 38.9072,
12 "distance": 0.0,
13 "bearing": 0.0,
14 "region": ["Washington", "District of Columbia", "United States", "North America"],
15 "country": "US"
16}`;
17
18let sampleGeocodeResponseJson = `{
19 "results": [` + sampleResultJson + `],
20 "num_results": 1
21}`;
22
23let sampleErrorResponseJson = `{
24 "error": "missing required parameter: q"
25}`;
26
27Vitest.describe("Waldo FFI bindings", () => {
28 Vitest.describe("decodeResult", () => {
29 Vitest.test("decodes valid result", ctx => {
30 let json = JSON.parse(sampleResultJson);
31 let result = Waldo.decodeResult(json);
32 if (result !== undefined) {
33 ctx.expect(result.gid).toBe(102191569);
34 ctx.expect(result.name).toBe("Washington");
35 ctx.expect(result.placetype).toBe("region");
36 ctx.expect(result.lon).toBeCloseTo(-77.0369, 4);
37 ctx.expect(result.lat).toBeCloseTo(38.9072, 4);
38 ctx.expect(result.distance).toBeCloseTo(0.0, 4);
39 ctx.expect(result.bearing).toBeCloseTo(0.0, 4);
40 ctx.expect(result.region).toEqual([
41 "Washington",
42 "District of Columbia",
43 "United States",
44 "North America"
45 ]);
46 ctx.expect(result.country).toBe("US");
47 } else {
48 ctx.fail("Should decode result");
49 }
50 });
51 Vitest.test("returns None for invalid JSON", ctx => {
52 let json = JSON.parse(`{"invalid": "data"}`);
53 ctx.expect(Waldo.decodeResult(json)).toEqual(undefined);
54 });
55 Vitest.test("returns None for missing fields", ctx => {
56 let json = JSON.parse(`{"gid": 123}`);
57 ctx.expect(Waldo.decodeResult(json)).toEqual(undefined);
58 });
59 });
60 Vitest.describe("decodeGeocodeResponse", () => {
61 Vitest.test("decodes valid geocode response", ctx => {
62 let json = JSON.parse(sampleGeocodeResponseJson);
63 let response = Waldo.decodeGeocodeResponse(json);
64 if (response !== undefined) {
65 ctx.expect(response.numResults).toBe(1);
66 ctx.expect(response.results).toHaveLength(1);
67 let first = response.results[0];
68 if (first !== undefined) {
69 ctx.expect(first.name).toBe("Washington");
70 } else {
71 ctx.fail("Should have first result");
72 }
73 return;
74 }
75 ctx.fail("Should decode response");
76 });
77 Vitest.test("returns None for invalid response", ctx => {
78 let json = JSON.parse(`{"invalid": "data"}`);
79 ctx.expect(Waldo.decodeGeocodeResponse(json)).toEqual(undefined);
80 });
81 });
82 Vitest.describe("decodeErrorResponse", () => {
83 Vitest.test("decodes error response", ctx => {
84 let json = JSON.parse(sampleErrorResponseJson);
85 let err = Waldo.decodeErrorResponse(json);
86 if (err !== undefined) {
87 ctx.expect(err.error).toBe("missing required parameter: q");
88 } else {
89 ctx.fail("Should decode error");
90 }
91 });
92 Vitest.test("returns None for non-error JSON", ctx => {
93 let json = JSON.parse(`{"success": true}`);
94 ctx.expect(Waldo.decodeErrorResponse(json)).toEqual(undefined);
95 });
96 });
97 Vitest.describe("Forward.buildUrl", () => {
98 Vitest.test("builds URL with query only", ctx => {
99 let url = Waldo.Forward.buildUrl({
100 query: "Washington DC"
101 });
102 ctx.expect(url).toBe("/forward?q=Washington%20DC");
103 });
104 Vitest.test("builds URL with bias point", ctx => {
105 let url = Waldo.Forward.buildUrl({
106 query: "Washington",
107 biasPoint: [
108 -77.0,
109 38.9
110 ]
111 });
112 ctx.expect(url).toContain("q=Washington");
113 ctx.expect(url).toContain("lon=-77");
114 ctx.expect(url).toContain("lat=38.9");
115 });
116 Vitest.test("URL encodes special characters", ctx => {
117 let url = Waldo.Forward.buildUrl({
118 query: "São Paulo"
119 });
120 ctx.expect(url.includes(" ")).toEqual(false);
121 ctx.expect(url).toContain("q=S%C3%A3o%20Paulo");
122 });
123 });
124 Vitest.describe("Reverse.buildUrl", () => {
125 Vitest.test("builds URL with coordinates", ctx => {
126 let url = Waldo.Reverse.buildUrl({
127 lon: -77.0369,
128 lat: 38.9072
129 });
130 ctx.expect(url).toBe("/reverse?lon=-77.0369&lat=38.9072");
131 });
132 });
133});
134
135export {
136 sampleResultJson,
137 sampleGeocodeResponseJson,
138 sampleErrorResponseJson,
139}
140/* Not a pure module */