@seasketch/geoprocessing
Version:
Geoprocessing and reporting framework for SeaSketch 2.0
95 lines (85 loc) • 2.04 kB
text/typescript
import { describe, test, expect, vi, afterEach, assert } from "vitest";
import { area, polygon } from "@turf/turf";
import { validatePolygon } from "./validatePolygon.js";
const valid = polygon([
[
[],
[],
[],
[],
[],
],
]);
const bowtie = polygon([
[
[],
[],
[],
[],
[],
],
]);
const tiny = polygon([
[
[],
[],
[],
[],
[],
],
]);
const world = polygon([
[
[-180, 90],
[-180, -90],
[],
[],
[-180, 90],
],
]);
describe("validatePolygon", () => {
afterEach(() => {
vi.restoreAllMocks();
});
test("validatePolygon - invalid polygon should throw", async () => {
try {
await validatePolygon(bowtie);
} catch (error: unknown) {
if (error instanceof Error) {
expect(error.message).toBe("Your sketch polygon crosses itself");
return;
}
}
assert.fail("This should not be reached");
});
test("validatePolygon - tiny polygon should throw", async () => {
try {
await validatePolygon(tiny);
} catch (error: unknown) {
if (error instanceof Error) {
expect(error.message).toBe(
"Shapes should be at least 100 square meters in size",
);
return;
}
}
assert.fail("This should not be reached");
});
test("validatePolygon - world polygon should throw", async () => {
try {
await validatePolygon(world);
} catch (error: unknown) {
if (error instanceof Error) {
expect(error.message).toBe(
"Shapes should be no more than 1,000,000 square km in size",
);
return;
}
}
assert.fail("This should not be reached");
});
test("validatePolygon - valid polygon", async () => {
const validatedPolygon = await validatePolygon(valid);
expect(validatedPolygon).toEqual(valid);
});
});