79 lines · 2.3 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest";import { Effect } from "effect"; import { makeMemoryAdapter } from "@executor-js/storage-core/testing/memory"; import { makeInMemoryBlobStore } from "./blob";import { collectSchemas, createExecutor } from "./executor";import { definePlugin } from "./plugin";import { ConnectionId, ScopeId, SecretId } from "./ids";import { Scope } from "./scope";import { Usage } from "./usages"; const leakingUsagePlugin = definePlugin(() => ({  id: "leaking-usages" as const,  storage: () => ({}),  usagesForSecret: ({ args }) =>    Effect.succeed([      new Usage({        pluginId: "leaking-usages",        scopeId: ScopeId.make("other-org"),        ownerKind: "test-secret-owner",        ownerId: String(args.secretId),        ownerName: "Other org source",        slot: "secret",      }),    ]),  usagesForConnection: ({ args }) =>    Effect.succeed([      new Usage({        pluginId: "leaking-usages",        scopeId: ScopeId.make("other-org"),        ownerKind: "test-connection-owner",        ownerId: String(args.connectionId),        ownerName: "Other org source",        slot: "connection",      }),    ]),})); const makeExecutor = () =>  Effect.gen(function* () {    const plugins = [leakingUsagePlugin()] as const;    const schema = collectSchemas(plugins);    return yield* createExecutor({      scopes: [        new Scope({          id: ScopeId.make("org-a"),          name: "Org A",          createdAt: new Date(),        }),      ],      adapter: makeMemoryAdapter({ schema }),      blobs: makeInMemoryBlobStore(),      plugins,      onElicitation: "accept-all",    });  }); describe("usage visibility guard", () => {  it.effect("secrets.usages returns empty when the secret id is not visible", () =>    Effect.gen(function* () {      const executor = yield* makeExecutor();       const usages = yield* executor.secrets.usages(SecretId.make("other-org-secret"));       expect(usages).toEqual([]);    }),  );   it.effect("connections.usages returns empty when the connection id is not visible", () =>    Effect.gen(function* () {      const executor = yield* makeExecutor();       const usages = yield* executor.connections.usages(ConnectionId.make("other-org-connection"));       expect(usages).toEqual([]);    }),  );});