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 */