test(scripts): share ios fixture setup

This commit is contained in:
Vincent Koc
2026-04-12 04:51:01 +01:00
parent 74a9d99d6a
commit ccf29464db
3 changed files with 58 additions and 76 deletions

View File

@@ -1,51 +1,11 @@
import fs from "node:fs"; import fs from "node:fs";
import path from "node:path"; import path from "node:path";
import { afterEach, describe, expect, it } from "vitest"; import { describe, expect, it } from "vitest";
import { pinIosVersion, parseArgs } from "../../scripts/ios-pin-version.ts"; import { pinIosVersion, parseArgs } from "../../scripts/ios-pin-version.ts";
import { resolveIosVersion } from "../../scripts/lib/ios-version.ts"; import { resolveIosVersion } from "../../scripts/lib/ios-version.ts";
import { cleanupTempDirs, makeTempDir } from "../helpers/temp-dir.js"; import { installIosFixtureCleanup, writeIosFixture } from "./ios-version.test-support.ts";
const tempDirs: string[] = []; installIosFixtureCleanup();
function writeIosFixture(params: {
version: string;
changelog: string;
packageVersion?: string;
releaseNotes?: string;
versionXcconfig?: string;
}) {
const rootDir = makeTempDir(tempDirs, "openclaw-ios-pin-");
fs.mkdirSync(path.join(rootDir, "apps", "ios", "Config"), { recursive: true });
fs.mkdirSync(path.join(rootDir, "apps", "ios", "fastlane", "metadata", "en-US"), {
recursive: true,
});
fs.writeFileSync(
path.join(rootDir, "package.json"),
`${JSON.stringify({ version: params.packageVersion ?? "2026.4.6" }, null, 2)}\n`,
"utf8",
);
fs.writeFileSync(
path.join(rootDir, "apps", "ios", "version.json"),
`${JSON.stringify({ version: params.version }, null, 2)}\n`,
"utf8",
);
fs.writeFileSync(path.join(rootDir, "apps", "ios", "CHANGELOG.md"), params.changelog, "utf8");
fs.writeFileSync(
path.join(rootDir, "apps", "ios", "Config", "Version.xcconfig"),
params.versionXcconfig ?? "",
"utf8",
);
fs.writeFileSync(
path.join(rootDir, "apps", "ios", "fastlane", "metadata", "en-US", "release_notes.txt"),
params.releaseNotes ?? "",
"utf8",
);
return rootDir;
}
afterEach(() => {
cleanupTempDirs(tempDirs);
});
describe("parseArgs", () => { describe("parseArgs", () => {
it("requires exactly one pin source", () => { it("requires exactly one pin source", () => {
@@ -68,6 +28,7 @@ describe("pinIosVersion", () => {
- Draft release notes. - Draft release notes.
`, `,
prefix: "openclaw-ios-pin-",
}); });
const result = pinIosVersion({ const result = pinIosVersion({
@@ -106,6 +67,7 @@ describe("pinIosVersion", () => {
- Candidate release notes. - Candidate release notes.
`, `,
prefix: "openclaw-ios-pin-",
}); });
const result = pinIosVersion({ const result = pinIosVersion({
@@ -132,6 +94,7 @@ describe("pinIosVersion", () => {
`, `,
versionXcconfig: "stale\n", versionXcconfig: "stale\n",
releaseNotes: "stale\n", releaseNotes: "stale\n",
prefix: "openclaw-ios-pin-",
}); });
const result = pinIosVersion({ const result = pinIosVersion({

View File

@@ -0,0 +1,49 @@
import fs from "node:fs";
import path from "node:path";
import { afterEach } from "vitest";
import { cleanupTempDirs, makeTempDir } from "../helpers/temp-dir.js";
const tempDirs: string[] = [];
export function installIosFixtureCleanup(): void {
afterEach(() => {
cleanupTempDirs(tempDirs);
});
}
export function writeIosFixture(params: {
version: string;
changelog: string;
packageVersion?: string;
releaseNotes?: string;
versionXcconfig?: string;
prefix?: string;
}): string {
const rootDir = makeTempDir(tempDirs, params.prefix ?? "openclaw-ios-version-");
fs.mkdirSync(path.join(rootDir, "apps", "ios", "Config"), { recursive: true });
fs.mkdirSync(path.join(rootDir, "apps", "ios", "fastlane", "metadata", "en-US"), {
recursive: true,
});
fs.writeFileSync(
path.join(rootDir, "package.json"),
`${JSON.stringify({ version: params.packageVersion ?? "2026.4.6" }, null, 2)}\n`,
"utf8",
);
fs.writeFileSync(
path.join(rootDir, "apps", "ios", "version.json"),
`${JSON.stringify({ version: params.version }, null, 2)}\n`,
"utf8",
);
fs.writeFileSync(path.join(rootDir, "apps", "ios", "CHANGELOG.md"), params.changelog, "utf8");
fs.writeFileSync(
path.join(rootDir, "apps", "ios", "Config", "Version.xcconfig"),
params.versionXcconfig ?? "",
"utf8",
);
fs.writeFileSync(
path.join(rootDir, "apps", "ios", "fastlane", "metadata", "en-US", "release_notes.txt"),
params.releaseNotes ?? "",
"utf8",
);
return rootDir;
}

View File

@@ -1,6 +1,6 @@
import fs from "node:fs"; import fs from "node:fs";
import path from "node:path"; import path from "node:path";
import { afterEach, describe, expect, it } from "vitest"; import { describe, expect, it } from "vitest";
import { import {
extractChangelogSection, extractChangelogSection,
normalizeGatewayVersionToPinnedIosVersion, normalizeGatewayVersionToPinnedIosVersion,
@@ -9,39 +9,9 @@ import {
resolveGatewayVersionForIosRelease, resolveGatewayVersionForIosRelease,
resolveIosVersion, resolveIosVersion,
} from "../../scripts/lib/ios-version.ts"; } from "../../scripts/lib/ios-version.ts";
import { cleanupTempDirs, makeTempDir } from "../helpers/temp-dir.js"; import { installIosFixtureCleanup, writeIosFixture } from "./ios-version.test-support.ts";
const tempDirs: string[] = []; installIosFixtureCleanup();
function writeIosFixture(params: { version: string; changelog: string; packageVersion?: string }) {
const rootDir = makeTempDir(tempDirs, "openclaw-ios-version-");
fs.mkdirSync(path.join(rootDir, "apps", "ios", "Config"), { recursive: true });
fs.mkdirSync(path.join(rootDir, "apps", "ios", "fastlane", "metadata", "en-US"), {
recursive: true,
});
fs.writeFileSync(
path.join(rootDir, "package.json"),
`${JSON.stringify({ version: params.packageVersion ?? "2026.4.6" }, null, 2)}\n`,
"utf8",
);
fs.writeFileSync(
path.join(rootDir, "apps", "ios", "version.json"),
`${JSON.stringify({ version: params.version }, null, 2)}\n`,
"utf8",
);
fs.writeFileSync(path.join(rootDir, "apps", "ios", "CHANGELOG.md"), params.changelog, "utf8");
fs.writeFileSync(path.join(rootDir, "apps", "ios", "Config", "Version.xcconfig"), "", "utf8");
fs.writeFileSync(
path.join(rootDir, "apps", "ios", "fastlane", "metadata", "en-US", "release_notes.txt"),
"",
"utf8",
);
return rootDir;
}
afterEach(() => {
cleanupTempDirs(tempDirs);
});
describe("resolveIosVersion", () => { describe("resolveIosVersion", () => {
it("parses pinned CalVer versions and derives Apple marketing fields", () => { it("parses pinned CalVer versions and derives Apple marketing fields", () => {