64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
import { readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { describe, expect, it } from "@suaveplan/testing/runner";
|
|
|
|
const pkgPath = join(__dirname, "..", "package.json");
|
|
const pkg = JSON.parse(readFileSync(pkgPath, "utf8")) as {
|
|
name: string;
|
|
version: string;
|
|
sideEffects: boolean;
|
|
dependencies: Record<string, string>;
|
|
devDependencies: Record<string, string>;
|
|
exports: Record<string, unknown>;
|
|
files: string[];
|
|
};
|
|
|
|
describe("@suaveplan/emailer package.json", () => {
|
|
it("starts at 0.1.0", { timeout: 5000 }, () => {
|
|
expect(pkg.version).toBe("0.1.0");
|
|
});
|
|
|
|
it("is tree-shake friendly", { timeout: 5000 }, () => {
|
|
expect(pkg.sideEffects).toBe(false);
|
|
});
|
|
|
|
it("depends on declared workspace siblings only", { timeout: 5000 }, () => {
|
|
for (const dep of [
|
|
"@suaveplan/error",
|
|
"@suaveplan/events",
|
|
"@suaveplan/logger",
|
|
"@suaveplan/queue",
|
|
"@suaveplan/timing",
|
|
"@suaveplan/types",
|
|
]) {
|
|
expect(pkg.dependencies[dep]).toBe("workspace:^");
|
|
}
|
|
// No nodemailer / googleapis hard deps.
|
|
expect(pkg.dependencies["nodemailer"]).toBeUndefined();
|
|
expect(pkg.dependencies["googleapis"]).toBeUndefined();
|
|
});
|
|
|
|
it("declares subpath exports", { timeout: 5000 }, () => {
|
|
for (const subpath of [
|
|
".",
|
|
"./error-codes",
|
|
"./schemas/schemas",
|
|
"./types/emailer",
|
|
"./core/email-service",
|
|
"./core/retry",
|
|
"./core/validate",
|
|
"./transports/dummy",
|
|
"./transports/smtp",
|
|
"./transports/gmail-rest",
|
|
"./fakes/fake-smtp-client",
|
|
"./otel/metrics",
|
|
]) {
|
|
expect(pkg.exports[subpath]).toBeDefined();
|
|
}
|
|
});
|
|
|
|
it("publishes dist, src, README.md", { timeout: 5000 }, () => {
|
|
expect(pkg.files).toEqual(["dist", "src", "README.md"]);
|
|
});
|
|
});
|