33 lines
937 B
TypeScript
33 lines
937 B
TypeScript
import { expect } from "jsr:@std/expect";
|
|
import { type TaggedVariant, Variant, VariantTag } from "./variant.ts";
|
|
|
|
interface SuccessVariant extends TaggedVariant<"success"> {
|
|
[VariantTag]: "success";
|
|
data: string;
|
|
}
|
|
|
|
interface ErrorVariant extends TaggedVariant<"error"> {
|
|
[VariantTag]: "error";
|
|
message: string;
|
|
}
|
|
|
|
const successVariant = {
|
|
[VariantTag]: "success",
|
|
data: "Operation successful",
|
|
} as SuccessVariant | ErrorVariant;
|
|
|
|
const errorVariant = {
|
|
[VariantTag]: "error",
|
|
message: "Operation failed",
|
|
} as SuccessVariant | ErrorVariant;
|
|
|
|
Deno.test("is() should return true for a matching tag", () => {
|
|
expect(Variant.is(successVariant, "success")).toBe(true);
|
|
expect(Variant.is(errorVariant, "error")).toBe(true);
|
|
});
|
|
|
|
Deno.test("is() should return false for a non-matching tag", () => {
|
|
expect(Variant.is(successVariant, "error")).toBe(false);
|
|
expect(Variant.is(errorVariant, "success")).toBe(false);
|
|
});
|