@elaraai/e3-api-tests 0.0.2-beta.13 → 0.0.2-beta.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/src/cli.d.ts +71 -0
  2. package/dist/src/cli.d.ts.map +1 -0
  3. package/dist/src/cli.js +139 -0
  4. package/dist/src/cli.js.map +1 -0
  5. package/dist/src/context.d.ts +49 -0
  6. package/dist/src/context.d.ts.map +1 -0
  7. package/dist/src/context.js +108 -0
  8. package/dist/src/context.js.map +1 -0
  9. package/dist/src/fixtures.d.ts +61 -0
  10. package/dist/src/fixtures.d.ts.map +1 -0
  11. package/dist/src/fixtures.js +107 -0
  12. package/dist/src/fixtures.js.map +1 -0
  13. package/dist/src/index.d.ts +65 -0
  14. package/dist/src/index.d.ts.map +1 -0
  15. package/dist/src/index.js +85 -0
  16. package/dist/src/index.js.map +1 -0
  17. package/dist/src/suites/cli.d.ts +15 -0
  18. package/dist/src/suites/cli.d.ts.map +1 -0
  19. package/dist/src/suites/cli.js +152 -0
  20. package/dist/src/suites/cli.js.map +1 -0
  21. package/dist/src/suites/dataflow.d.ts +12 -0
  22. package/dist/src/suites/dataflow.d.ts.map +1 -0
  23. package/dist/src/suites/dataflow.js +167 -0
  24. package/dist/src/suites/dataflow.js.map +1 -0
  25. package/dist/src/suites/datasets.d.ts +12 -0
  26. package/dist/src/suites/datasets.d.ts.map +1 -0
  27. package/dist/src/suites/datasets.js +88 -0
  28. package/dist/src/suites/datasets.js.map +1 -0
  29. package/dist/src/suites/packages.d.ts +12 -0
  30. package/dist/src/suites/packages.d.ts.map +1 -0
  31. package/dist/src/suites/packages.js +86 -0
  32. package/dist/src/suites/packages.js.map +1 -0
  33. package/dist/src/suites/platform.d.ts +12 -0
  34. package/dist/src/suites/platform.d.ts.map +1 -0
  35. package/dist/src/suites/platform.js +114 -0
  36. package/dist/src/suites/platform.js.map +1 -0
  37. package/dist/src/suites/repository.d.ts +12 -0
  38. package/dist/src/suites/repository.d.ts.map +1 -0
  39. package/dist/src/suites/repository.js +93 -0
  40. package/dist/src/suites/repository.js.map +1 -0
  41. package/dist/src/suites/workspaces.d.ts +12 -0
  42. package/dist/src/suites/workspaces.d.ts.map +1 -0
  43. package/dist/src/suites/workspaces.js +127 -0
  44. package/dist/src/suites/workspaces.js.map +1 -0
  45. package/package.json +4 -4
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Package operations test suite.
7
+ *
8
+ * Tests: import, list, get, export, remove
9
+ */
10
+ import { describe, it, beforeEach } from 'node:test';
11
+ import assert from 'node:assert/strict';
12
+ import { readFileSync } from 'node:fs';
13
+ import { packageList, packageGet, packageImport, packageExport, packageRemove, } from '@elaraai/e3-api-client';
14
+ import { createPackageZip } from '../fixtures.js';
15
+ /**
16
+ * Register package operation tests.
17
+ *
18
+ * @param getContext - Function that returns the current test context
19
+ */
20
+ export function packageTests(getContext) {
21
+ describe('packages', () => {
22
+ let packageZipPath;
23
+ let packageZip;
24
+ beforeEach(async () => {
25
+ const ctx = getContext();
26
+ packageZipPath = await createPackageZip(ctx.tempDir, 'test-pkg', '1.0.0');
27
+ packageZip = readFileSync(packageZipPath);
28
+ });
29
+ it('packageList returns empty initially', async () => {
30
+ const ctx = getContext();
31
+ const opts = await ctx.opts();
32
+ const packages = await packageList(ctx.config.baseUrl, ctx.repoName, opts);
33
+ assert.deepStrictEqual(packages, []);
34
+ });
35
+ it('packageImport and packageList round-trip', async () => {
36
+ const ctx = getContext();
37
+ const opts = await ctx.opts();
38
+ // Import
39
+ const result = await packageImport(ctx.config.baseUrl, ctx.repoName, packageZip, opts);
40
+ assert.strictEqual(result.name, 'test-pkg');
41
+ assert.strictEqual(result.version, '1.0.0');
42
+ assert.strictEqual(result.packageHash.length, 64); // SHA256 hex
43
+ assert.ok(result.objectCount > 0n);
44
+ // List
45
+ const packages = await packageList(ctx.config.baseUrl, ctx.repoName, opts);
46
+ assert.strictEqual(packages.length, 1);
47
+ assert.strictEqual(packages[0].name, 'test-pkg');
48
+ assert.strictEqual(packages[0].version, '1.0.0');
49
+ });
50
+ it('packageGet returns package object', async () => {
51
+ const ctx = getContext();
52
+ const opts = await ctx.opts();
53
+ await packageImport(ctx.config.baseUrl, ctx.repoName, packageZip, opts);
54
+ const pkg = await packageGet(ctx.config.baseUrl, ctx.repoName, 'test-pkg', '1.0.0', opts);
55
+ // PackageObject has tasks Map with our 'compute' task
56
+ assert.ok(pkg.tasks instanceof Map);
57
+ assert.strictEqual(pkg.tasks.size, 1);
58
+ assert.ok(pkg.tasks.has('compute'));
59
+ });
60
+ it('packageExport returns zip bytes', async () => {
61
+ const ctx = getContext();
62
+ const opts = await ctx.opts();
63
+ await packageImport(ctx.config.baseUrl, ctx.repoName, packageZip, opts);
64
+ const exported = await packageExport(ctx.config.baseUrl, ctx.repoName, 'test-pkg', '1.0.0', opts);
65
+ assert.ok(exported instanceof Uint8Array);
66
+ assert.ok(exported.length > 0);
67
+ // ZIP files start with PK signature
68
+ assert.strictEqual(exported[0], 0x50); // 'P'
69
+ assert.strictEqual(exported[1], 0x4b); // 'K'
70
+ });
71
+ it('packageRemove deletes package', async () => {
72
+ const ctx = getContext();
73
+ const opts = await ctx.opts();
74
+ await packageImport(ctx.config.baseUrl, ctx.repoName, packageZip, opts);
75
+ // Verify exists
76
+ let packages = await packageList(ctx.config.baseUrl, ctx.repoName, opts);
77
+ assert.strictEqual(packages.length, 1);
78
+ // Remove
79
+ await packageRemove(ctx.config.baseUrl, ctx.repoName, 'test-pkg', '1.0.0', opts);
80
+ // Verify gone
81
+ packages = await packageList(ctx.config.baseUrl, ctx.repoName, opts);
82
+ assert.strictEqual(packages.length, 0);
83
+ });
84
+ });
85
+ }
86
+ //# sourceMappingURL=packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.js","sourceRoot":"","sources":["../../../src/suites/packages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import type { TestContext } from '../context.js';
6
+ /**
7
+ * Register platform function integration tests.
8
+ *
9
+ * @param getContext - Function that returns the current test context
10
+ */
11
+ export declare function platformTests(getContext: () => TestContext): void;
12
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../../src/suites/platform.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,WAAW,GAAG,IAAI,CAuIjE"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Platform function integration test suite.
7
+ *
8
+ * Tests that East Platform functions compile and execute correctly
9
+ * against the API server. These functions allow East programs to
10
+ * interact with the e3 API.
11
+ */
12
+ import { describe, it, beforeEach } from 'node:test';
13
+ import assert from 'node:assert/strict';
14
+ import { readFileSync } from 'node:fs';
15
+ import { workspaceCreate, workspaceList, workspaceRemove, packageImport, Platform, PlatformImpl, } from '@elaraai/e3-api-client';
16
+ import { StringType, IntegerType, NullType, ArrayType, East } from '@elaraai/east';
17
+ import { createPackageZip } from '../fixtures.js';
18
+ /**
19
+ * Register platform function integration tests.
20
+ *
21
+ * @param getContext - Function that returns the current test context
22
+ */
23
+ export function platformTests(getContext) {
24
+ describe('platform functions', () => {
25
+ beforeEach(async () => {
26
+ const ctx = getContext();
27
+ const opts = await ctx.opts();
28
+ // Create and import a simple package for workspace tests
29
+ const zipPath = await createPackageZip(ctx.tempDir, 'platform-pkg', '1.0.0');
30
+ const packageZip = readFileSync(zipPath);
31
+ await packageImport(ctx.config.baseUrl, ctx.repoName, packageZip, opts);
32
+ });
33
+ it('repoStatus platform function compiles and runs', async () => {
34
+ const ctx = getContext();
35
+ // Define an East function that uses the platform function
36
+ const getStatus = East.asyncFunction([StringType, StringType, StringType], Platform.Types.RepositoryStatus, ($, url, repo, token) => {
37
+ return Platform.repoStatus(url, repo, token);
38
+ });
39
+ // Compile with platform implementation
40
+ const compiled = East.compileAsync(getStatus, PlatformImpl);
41
+ // Run the compiled function with token from context
42
+ const status = await compiled(ctx.config.baseUrl, ctx.repoName, (await ctx.opts()).token);
43
+ // Verify results
44
+ assert.ok(typeof status.path === 'string' && status.path.length > 0, 'path should be a non-empty string');
45
+ assert.ok(typeof status.objectCount === 'bigint');
46
+ assert.ok(typeof status.packageCount === 'bigint');
47
+ assert.ok(typeof status.workspaceCount === 'bigint');
48
+ });
49
+ it('workspaceList platform function compiles and runs', async () => {
50
+ const ctx = getContext();
51
+ const opts = await ctx.opts();
52
+ // Create a workspace first
53
+ await workspaceCreate(ctx.config.baseUrl, ctx.repoName, 'platform-test-ws', opts);
54
+ // Define an East function that lists workspaces
55
+ const listWorkspaces = East.asyncFunction([StringType, StringType, StringType], ArrayType(Platform.Types.WorkspaceInfo), ($, url, repo, token) => {
56
+ return Platform.workspaceList(url, repo, token);
57
+ });
58
+ // Compile with platform implementation
59
+ const compiled = East.compileAsync(listWorkspaces, PlatformImpl);
60
+ // Run the compiled function
61
+ const workspaces = await compiled(ctx.config.baseUrl, ctx.repoName, (await ctx.opts()).token);
62
+ // Verify results
63
+ assert.strictEqual(workspaces.length, 1);
64
+ assert.strictEqual(workspaces[0].name, 'platform-test-ws');
65
+ // Clean up
66
+ await workspaceRemove(ctx.config.baseUrl, ctx.repoName, 'platform-test-ws', opts);
67
+ });
68
+ it('workspace create/remove flow via platform functions', async () => {
69
+ const ctx = getContext();
70
+ const opts = await ctx.opts();
71
+ // Define East function that creates and lists workspaces
72
+ const createAndList = East.asyncFunction([StringType, StringType, StringType, StringType], ArrayType(Platform.Types.WorkspaceInfo), ($, url, repo, name, token) => {
73
+ // Create workspace
74
+ $.let(Platform.workspaceCreate(url, repo, name, token));
75
+ // Return list
76
+ return Platform.workspaceList(url, repo, token);
77
+ });
78
+ // Compile with platform implementation
79
+ const compiled = East.compileAsync(createAndList, PlatformImpl);
80
+ // Run the compiled function
81
+ const workspaces = await compiled(ctx.config.baseUrl, ctx.repoName, 'east-created-ws', (await ctx.opts()).token);
82
+ // Verify workspace was created
83
+ assert.strictEqual(workspaces.length, 1);
84
+ assert.strictEqual(workspaces[0].name, 'east-created-ws');
85
+ assert.strictEqual(workspaces[0].deployed, false);
86
+ // Clean up using platform function
87
+ const removeWs = East.asyncFunction([StringType, StringType, StringType, StringType], NullType, ($, url, repo, name, token) => {
88
+ return Platform.workspaceRemove(url, repo, name, token);
89
+ });
90
+ const compiledRemove = East.compileAsync(removeWs, PlatformImpl);
91
+ await compiledRemove(ctx.config.baseUrl, ctx.repoName, 'east-created-ws', (await ctx.opts()).token);
92
+ // Verify removed
93
+ const finalList = await workspaceList(ctx.config.baseUrl, ctx.repoName, opts);
94
+ assert.strictEqual(finalList.length, 0);
95
+ });
96
+ it('$.let correctly infers array type from platform function', async () => {
97
+ const ctx = getContext();
98
+ // This test verifies the type inference fix - $.let should produce ArrayExpr not StructExpr
99
+ const listAndCount = East.asyncFunction([StringType, StringType, StringType], IntegerType, ($, url, repo, token) => {
100
+ // $.let should correctly infer this as ArrayExpr
101
+ const packages = $.let(Platform.packageList(url, repo, token));
102
+ // .size() should work since it's an array
103
+ return packages.size();
104
+ });
105
+ // Compile with platform implementation
106
+ const compiled = East.compileAsync(listAndCount, PlatformImpl);
107
+ // Run the compiled function
108
+ const count = await compiled(ctx.config.baseUrl, ctx.repoName, (await ctx.opts()).token);
109
+ // Should have 1 package (imported in beforeEach)
110
+ assert.strictEqual(count, 1n);
111
+ });
112
+ });
113
+ }
114
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../src/suites/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import type { TestContext } from '../context.js';
6
+ /**
7
+ * Register repository operation tests.
8
+ *
9
+ * @param getContext - Function that returns the current test context
10
+ */
11
+ export declare function repositoryTests(getContext: () => TestContext): void;
12
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/suites/repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,WAAW,GAAG,IAAI,CAmGnE"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Repository operations test suite.
7
+ *
8
+ * Tests: status, gc, create, remove
9
+ */
10
+ import { describe, it } from 'node:test';
11
+ import assert from 'node:assert/strict';
12
+ import { variant } from '@elaraai/east';
13
+ import { repoStatus, repoGc, repoCreate, repoRemove, packageRemove, } from '@elaraai/e3-api-client';
14
+ /**
15
+ * Register repository operation tests.
16
+ *
17
+ * @param getContext - Function that returns the current test context
18
+ */
19
+ export function repositoryTests(getContext) {
20
+ describe('repository', () => {
21
+ it('repoStatus returns repository info', async () => {
22
+ const ctx = getContext();
23
+ const opts = await ctx.opts();
24
+ const status = await repoStatus(ctx.config.baseUrl, ctx.repoName, opts);
25
+ assert.ok(typeof status.path === 'string' && status.path.length > 0, 'path should be a non-empty string');
26
+ assert.ok(typeof status.objectCount === 'bigint');
27
+ assert.ok(typeof status.packageCount === 'bigint');
28
+ assert.ok(typeof status.workspaceCount === 'bigint');
29
+ });
30
+ it('repoGc with dryRun returns stats', async () => {
31
+ const ctx = getContext();
32
+ const opts = await ctx.opts();
33
+ const result = await repoGc(ctx.config.baseUrl, ctx.repoName, { dryRun: true, minAge: variant('none', null) }, opts);
34
+ // Empty repo - nothing to delete
35
+ assert.strictEqual(result.deletedObjects, 0n);
36
+ assert.strictEqual(result.deletedPartials, 0n);
37
+ assert.ok(result.retainedObjects >= 0n);
38
+ assert.ok(result.bytesFreed >= 0n);
39
+ });
40
+ it('repoGc runs garbage collection', async () => {
41
+ const ctx = getContext();
42
+ const opts = await ctx.opts();
43
+ // Import a package then remove it to create garbage
44
+ const zipPath = await ctx.createPackage('gc-test-pkg', '1.0.0');
45
+ await ctx.importPackage(zipPath);
46
+ // Remove the package to create garbage (orphaned objects)
47
+ await packageRemove(ctx.config.baseUrl, ctx.repoName, 'gc-test-pkg', '1.0.0', opts);
48
+ // Run GC (not dry run)
49
+ const result = await repoGc(ctx.config.baseUrl, ctx.repoName, { dryRun: false, minAge: variant('none', null) }, opts);
50
+ // Should return valid stats
51
+ assert.ok(typeof result.deletedObjects === 'bigint');
52
+ assert.ok(typeof result.retainedObjects === 'bigint');
53
+ });
54
+ it('repoCreate creates a new repository', async () => {
55
+ const ctx = getContext();
56
+ const opts = await ctx.opts();
57
+ const newRepoName = `create-test-${Date.now()}`;
58
+ try {
59
+ // Create a new repo via API
60
+ const result = await repoCreate(ctx.config.baseUrl, newRepoName, opts);
61
+ assert.strictEqual(result, newRepoName);
62
+ // Verify it exists by getting status
63
+ const status = await repoStatus(ctx.config.baseUrl, newRepoName, opts);
64
+ assert.ok(typeof status.path === 'string' && status.path.length > 0, 'new repo should have a valid path');
65
+ }
66
+ finally {
67
+ // Clean up
68
+ try {
69
+ await repoRemove(ctx.config.baseUrl, newRepoName, opts);
70
+ }
71
+ catch {
72
+ // Ignore cleanup errors
73
+ }
74
+ }
75
+ });
76
+ it('repoRemove removes an existing repository', async () => {
77
+ const ctx = getContext();
78
+ const opts = await ctx.opts();
79
+ const tempRepoName = `remove-test-${Date.now()}`;
80
+ // Create a repo to delete
81
+ await repoCreate(ctx.config.baseUrl, tempRepoName, opts);
82
+ // Verify it exists
83
+ const status = await repoStatus(ctx.config.baseUrl, tempRepoName, opts);
84
+ assert.ok(typeof status.path === 'string' && status.path.length > 0);
85
+ // Remove it - should complete without error
86
+ await repoRemove(ctx.config.baseUrl, tempRepoName, opts);
87
+ // Verify removal worked by trying to create it again (should succeed if it was removed)
88
+ await repoCreate(ctx.config.baseUrl, tempRepoName, opts);
89
+ await repoRemove(ctx.config.baseUrl, tempRepoName, opts); // Clean up
90
+ });
91
+ });
92
+ }
93
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/suites/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import type { TestContext } from '../context.js';
6
+ /**
7
+ * Register workspace operation tests.
8
+ *
9
+ * @param getContext - Function that returns the current test context
10
+ */
11
+ export declare function workspaceTests(getContext: () => TestContext): void;
12
+ //# sourceMappingURL=workspaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/suites/workspaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,WAAW,GAAG,IAAI,CAkIlE"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Workspace operations test suite.
7
+ *
8
+ * Tests: create, list, get, status, deploy, remove
9
+ */
10
+ import { describe, it, beforeEach } from 'node:test';
11
+ import assert from 'node:assert/strict';
12
+ import { readFileSync } from 'node:fs';
13
+ import { packageImport, workspaceList, workspaceCreate, workspaceGet, workspaceStatus, workspaceRemove, workspaceDeploy, taskList, taskGet, dataflowGraph, } from '@elaraai/e3-api-client';
14
+ import { createPackageZip } from '../fixtures.js';
15
+ /**
16
+ * Register workspace operation tests.
17
+ *
18
+ * @param getContext - Function that returns the current test context
19
+ */
20
+ export function workspaceTests(getContext) {
21
+ describe('workspaces', () => {
22
+ it('workspaceList returns empty initially', async () => {
23
+ const ctx = getContext();
24
+ const opts = await ctx.opts();
25
+ const workspaces = await workspaceList(ctx.config.baseUrl, ctx.repoName, opts);
26
+ assert.deepStrictEqual(workspaces, []);
27
+ });
28
+ it('workspaceCreate and workspaceList round-trip', async () => {
29
+ const ctx = getContext();
30
+ const opts = await ctx.opts();
31
+ const info = await workspaceCreate(ctx.config.baseUrl, ctx.repoName, 'test-ws', opts);
32
+ assert.strictEqual(info.name, 'test-ws');
33
+ assert.strictEqual(info.deployed, false);
34
+ const workspaces = await workspaceList(ctx.config.baseUrl, ctx.repoName, opts);
35
+ assert.strictEqual(workspaces.length, 1);
36
+ assert.strictEqual(workspaces[0].name, 'test-ws');
37
+ // Clean up
38
+ await workspaceRemove(ctx.config.baseUrl, ctx.repoName, 'test-ws', opts);
39
+ });
40
+ it('workspaceRemove deletes workspace', async () => {
41
+ const ctx = getContext();
42
+ const opts = await ctx.opts();
43
+ await workspaceCreate(ctx.config.baseUrl, ctx.repoName, 'to-delete', opts);
44
+ let workspaces = await workspaceList(ctx.config.baseUrl, ctx.repoName, opts);
45
+ assert.strictEqual(workspaces.length, 1);
46
+ await workspaceRemove(ctx.config.baseUrl, ctx.repoName, 'to-delete', opts);
47
+ workspaces = await workspaceList(ctx.config.baseUrl, ctx.repoName, opts);
48
+ assert.strictEqual(workspaces.length, 0);
49
+ });
50
+ describe('with deployed package', () => {
51
+ beforeEach(async () => {
52
+ const ctx = getContext();
53
+ const opts = await ctx.opts();
54
+ // Create and import a test package (idempotent - may already exist)
55
+ const zipPath = await createPackageZip(ctx.tempDir, 'compute-pkg', '1.0.0');
56
+ const packageZip = readFileSync(zipPath);
57
+ try {
58
+ await packageImport(ctx.config.baseUrl, ctx.repoName, packageZip, opts);
59
+ }
60
+ catch {
61
+ // Package may already exist from previous test
62
+ }
63
+ // Create workspace and deploy (idempotent - may already exist)
64
+ try {
65
+ await workspaceCreate(ctx.config.baseUrl, ctx.repoName, 'deployed-ws', opts);
66
+ }
67
+ catch {
68
+ // Workspace may already exist from previous test
69
+ }
70
+ await workspaceDeploy(ctx.config.baseUrl, ctx.repoName, 'deployed-ws', 'compute-pkg@1.0.0', opts);
71
+ });
72
+ it('workspaceGet returns deployed state', async () => {
73
+ const ctx = getContext();
74
+ const opts = await ctx.opts();
75
+ const state = await workspaceGet(ctx.config.baseUrl, ctx.repoName, 'deployed-ws', opts);
76
+ assert.ok(state !== null);
77
+ assert.strictEqual(state.packageName, 'compute-pkg');
78
+ assert.strictEqual(state.packageVersion, '1.0.0');
79
+ });
80
+ it('workspaceStatus returns datasets and tasks', async () => {
81
+ const ctx = getContext();
82
+ const opts = await ctx.opts();
83
+ const status = await workspaceStatus(ctx.config.baseUrl, ctx.repoName, 'deployed-ws', opts);
84
+ assert.strictEqual(status.workspace, 'deployed-ws');
85
+ // Should have input and output datasets
86
+ assert.ok(status.datasets.length >= 2);
87
+ // Should have the compute task
88
+ assert.strictEqual(status.tasks.length, 1);
89
+ assert.strictEqual(status.tasks[0].name, 'compute');
90
+ // Summary should match
91
+ assert.strictEqual(status.summary.tasks.total, 1n);
92
+ });
93
+ it('taskList returns task info', async () => {
94
+ const ctx = getContext();
95
+ const opts = await ctx.opts();
96
+ const tasks = await taskList(ctx.config.baseUrl, ctx.repoName, 'deployed-ws', opts);
97
+ assert.ok(Array.isArray(tasks));
98
+ assert.ok(tasks.length > 0, 'should have at least one task');
99
+ const computeTask = tasks.find(t => t.name === 'compute');
100
+ assert.ok(computeTask, 'should have compute task');
101
+ assert.ok(computeTask.hash.length > 0);
102
+ });
103
+ it('taskGet returns task details', async () => {
104
+ const ctx = getContext();
105
+ const opts = await ctx.opts();
106
+ const task = await taskGet(ctx.config.baseUrl, ctx.repoName, 'deployed-ws', 'compute', opts);
107
+ assert.strictEqual(task.name, 'compute');
108
+ assert.ok(task.hash.length > 0);
109
+ assert.ok(Array.isArray(task.inputs));
110
+ assert.ok(task.output);
111
+ });
112
+ it('dataflowGraph returns dependency graph', async () => {
113
+ const ctx = getContext();
114
+ const opts = await ctx.opts();
115
+ const graph = await dataflowGraph(ctx.config.baseUrl, ctx.repoName, 'deployed-ws', opts);
116
+ assert.ok(Array.isArray(graph.tasks));
117
+ assert.ok(graph.tasks.length > 0);
118
+ const computeTask = graph.tasks.find(t => t.name === 'compute');
119
+ assert.ok(computeTask);
120
+ assert.ok(Array.isArray(computeTask.inputs));
121
+ assert.ok(computeTask.output);
122
+ assert.ok(Array.isArray(computeTask.dependsOn));
123
+ });
124
+ });
125
+ });
126
+ }
127
+ //# sourceMappingURL=workspaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/suites/workspaces.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elaraai/e3-api-tests",
3
- "version": "0.0.2-beta.13",
3
+ "version": "0.0.2-beta.14",
4
4
  "type": "module",
5
5
  "description": "East Execution Engine API Compliance Tests - shared test suites for e3 API implementations",
6
6
  "main": "dist/src/index.js",
@@ -35,9 +35,9 @@
35
35
  "directory": "packages/e3-api-tests"
36
36
  },
37
37
  "dependencies": {
38
- "@elaraai/e3": "^0.0.2-beta.13",
39
- "@elaraai/e3-api-client": "^",
40
- "@elaraai/e3-cli": "^",
38
+ "@elaraai/e3": "^0.0.2-beta.14",
39
+ "@elaraai/e3-api-client": "^0.0.2-beta.14",
40
+ "@elaraai/e3-cli": "^0.0.2-beta.14",
41
41
  "@elaraai/east": "^0.0.1-beta.29"
42
42
  },
43
43
  "devDependencies": {