101 lines · 3.4 KB · TypeScript
RawDownload
import { existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";import { tmpdir } from "node:os";import { dirname, join, resolve } from "node:path"; import { describe, expect, it } from "vitest"; import {  releasePackageFiles,  updateReleasePackageVersions,} from "./update-release-package-versions";import { writeKeybindingsJsonSchemas } from "./lib/keybindings-schema";import { writeServerSettingsJsonSchemas } from "./lib/server-settings-schema"; describe("updateReleasePackageVersions", () => {  it("updates package versions and writes latest plus versioned config schemas", () => {    const rootDir = mkdtempSync(join(tmpdir(), "t3-release-version-bump-"));     try {      for (const relativePath of releasePackageFiles) {        const filePath = resolve(rootDir, relativePath);        mkdirSync(dirname(filePath), { recursive: true });        writeFileSync(          filePath,          `${JSON.stringify({ name: relativePath, version: "0.0.0" }, null, 2)}\n`,        );      }       const result = updateReleasePackageVersions("1.2.3", { rootDir });      expect(result.changed).toBe(true);       for (const relativePath of releasePackageFiles) {        const packageJson = JSON.parse(readFileSync(resolve(rootDir, relativePath), "utf8")) as {          version?: string;        };        expect(packageJson.version).toBe("1.2.3");      }       expect(        JSON.parse(          readFileSync(resolve(rootDir, "apps/marketing/public/schemas/settings.json"), "utf8"),        ),      ).toMatchObject({ title: "T3 Code Server Settings" });       expect(        JSON.parse(          readFileSync(            resolve(rootDir, "apps/marketing/public/schemas/settings/1.2.3.json"),            "utf8",          ),        ),      ).toMatchObject({ title: "T3 Code Server Settings" });       expect(        JSON.parse(          readFileSync(resolve(rootDir, "apps/marketing/public/schemas/keybindings.json"), "utf8"),        ),      ).toMatchObject({ title: "T3 Code Keybindings" });       expect(        JSON.parse(          readFileSync(            resolve(rootDir, "apps/marketing/public/schemas/keybindings/1.2.3.json"),            "utf8",          ),        ),      ).toMatchObject({ title: "T3 Code Keybindings" });    } finally {      rmSync(rootDir, { recursive: true, force: true });    }  });   it("skips versioned schema snapshots when the latest schemas are unchanged", () => {    const rootDir = mkdtempSync(join(tmpdir(), "t3-release-version-bump-"));     try {      for (const relativePath of releasePackageFiles) {        const filePath = resolve(rootDir, relativePath);        mkdirSync(dirname(filePath), { recursive: true });        writeFileSync(          filePath,          `${JSON.stringify({ name: relativePath, version: "1.2.3" }, null, 2)}\n`,        );      }       writeServerSettingsJsonSchemas({ rootDir });      writeKeybindingsJsonSchemas({ rootDir });       const result = updateReleasePackageVersions("1.2.3", { rootDir });      expect(result.changed).toBe(false);       expect(        existsSync(resolve(rootDir, "apps/marketing/public/schemas/settings/1.2.3.json")),      ).toBe(false);      expect(        existsSync(resolve(rootDir, "apps/marketing/public/schemas/keybindings/1.2.3.json")),      ).toBe(false);    } finally {      rmSync(rootDir, { recursive: true, force: true });    }  });});