sdk

Radroots SDK and bindings
git clone https://radroots.dev/git/sdk.git
Log | Files | Refs | README

radroots_sdk_artifact.test.mjs (1452B)


      1 import assert from "node:assert/strict";
      2 import { mkdtempSync, mkdirSync, symlinkSync, writeFileSync } from "node:fs";
      3 import { tmpdir } from "node:os";
      4 import { join } from "node:path";
      5 import test from "node:test";
      6 
      7 import {
      8   ARTIFACT_ROUTES,
      9   artifactRoute,
     10   resolveCanonicalSourceRoot,
     11   validateConsumerRoot,
     12 } from "./radroots_sdk_artifact_lib.mjs";
     13 
     14 test("consumer marker fails closed", () => {
     15   const root = mkdtempSync(join(tmpdir(), "radroots-sdk-consumer-"));
     16   writeFileSync(join(root, ".radroots-consumer-root"), "mobile\n");
     17   assert.throws(() => validateConsumerRoot(root), /exactly sdk/);
     18 });
     19 
     20 test("source root rejects relative and symlink paths", () => {
     21   const root = mkdtempSync(join(tmpdir(), "radroots-sdk-source-"));
     22   const source = join(root, "source");
     23   const link = join(root, "source-link");
     24   mkdirSync(source);
     25   symlinkSync(source, link);
     26   assert.throws(() => resolveCanonicalSourceRoot("relative"), /absolute/);
     27   assert.throws(() => resolveCanonicalSourceRoot(link), /real directory/);
     28 });
     29 
     30 test("artifact routes own fixed safe outputs", () => {
     31   assert.deepEqual(Object.keys(ARTIFACT_ROUTES), [
     32     "typescript",
     33     "wasm",
     34     "swift",
     35     "kotlin",
     36   ]);
     37   for (const route of Object.values(ARTIFACT_ROUTES)) {
     38     assert.match(route.output, /^contracts\/provenance\/sdk\/[a-z]+\.json$/);
     39     assert.ok(!route.output.includes(".."));
     40   }
     41   assert.throws(() => artifactRoute("../swift"), /unsupported/);
     42 });