Skip to content

Commit 8425f7c

Browse files
committed
setup e2e tests
1 parent ecdcef4 commit 8425f7c

File tree

9 files changed

+1475
-1118
lines changed

9 files changed

+1475
-1118
lines changed

ATTRIBUTIONS.md

Lines changed: 721 additions & 735 deletions
Large diffs are not rendered by default.

package-lock.json

Lines changed: 635 additions & 382 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"test": "nx run-many -t test",
1515
"test:sdk": "nx test sdk",
1616
"test:cli": "nx test cli",
17+
"test:e2e": "nx run cli-e2e:e2e",
1718
"test:coverage": "nx run-many -t test --coverage",
1819
"lint": "nx run-many -t lint",
1920
"lint:sdk": "nx lint sdk",
@@ -55,7 +56,7 @@
5556
"@nx/eslint": "^21.3.5",
5657
"@nx/js": "^21.3.5",
5758
"@nx/node": "^21.3.5",
58-
"@nx/vite": "^21.3.5",
59+
"@nx/vite": "^21.6.6",
5960
"@semantic-release/commit-analyzer": "^13.0.0",
6061
"@semantic-release/github": "^11.0.0",
6162
"@semantic-release/npm": "^12.0.1",
@@ -68,7 +69,9 @@
6869
"eslint": "^9.31.0",
6970
"eslint-config-prettier": "^10.1.8",
7071
"eslint-plugin-prettier": "^5.5.3",
72+
"execa": "^9.6.0",
7173
"fishery": "^2.3.1",
74+
"fs-extra": "^11.3.2",
7275
"husky": "^9.1.7",
7376
"license-checker-rseidelsohn": "^4.4.2",
7477
"msw": "^2.10.4",

packages/cli-e2e/project.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name": "cli-e2e",
3+
"root": "packages/cli-e2e",
4+
"sourceRoot": "packages/cli-e2e/src",
5+
"projectType": "library",
6+
"targets": {
7+
"e2e": {
8+
"executor": "@nx/vite:test",
9+
"dependsOn": [{ "projects": "dependencies", "target": "build" }],
10+
"options": {
11+
"passWithNoTests": false,
12+
"reportsDirectory": "coverage",
13+
"config": "packages/cli-e2e/vite.config.ts",
14+
"testEnvironment": "node",
15+
"dependsOn": ["cli:build"]
16+
},
17+
"inputs": ["default", { "externalDependencies": ["execa", "fs-extra", "get-port"] }]
18+
}
19+
},
20+
"implicitDependencies": ["cli"]
21+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { describe, it, expect } from 'vitest';
2+
import { execa } from 'execa';
3+
4+
describe('cli smoke', () => {
5+
it('prints help and exits 0', async () => {
6+
const { stdout, exitCode } = await execa('node', [__CLI_BIN__, '--help']);
7+
expect(exitCode).toBe(0);
8+
expect(stdout.toLowerCase()).toContain('usage');
9+
});
10+
11+
it('prints version and exits 0', async () => {
12+
const { stdout, exitCode } = await execa('node', [__CLI_BIN__, '--version']);
13+
expect(exitCode).toBe(0);
14+
expect(stdout).toMatch(/\d+\.\d+\.\d+/); // version pattern
15+
});
16+
17+
it('shows info command output', async () => {
18+
const { stdout, exitCode } = await execa('node', [__CLI_BIN__, 'info']);
19+
expect(exitCode).toBe(0);
20+
expect(stdout).toContain('Aignostics Platform SDK');
21+
expect(stdout).toContain('Version');
22+
});
23+
24+
it('requires authentication for API commands', async () => {
25+
// This should fail with authentication error since we're not logged in
26+
const { exitCode } = await execa('node', [__CLI_BIN__, 'list-applications'], { reject: false });
27+
expect(exitCode).toBe(1); // Should exit with error code due to auth
28+
});
29+
});

packages/cli-e2e/src/types.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
declare const __CLI_BIN__: string;

packages/cli-e2e/tsconfig.app.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"extends": "../../tsconfig.base.json",
3+
"compilerOptions": {
4+
"outDir": "../../dist/out-tsc",
5+
"types": ["node"],
6+
"incremental": true,
7+
"tsBuildInfoFile": "./dist/.tsbuildinfo"
8+
},
9+
"include": [
10+
"src/**/*.ts"
11+
],
12+
"exclude": [
13+
"src/**/*.spec.ts",
14+
"src/**/*.test.ts",
15+
"src/**/*.e2e.test.ts"
16+
]
17+
}

packages/cli-e2e/tsconfig.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"extends": "./tsconfig.app.json",
3+
"compilerOptions": {
4+
"types": ["vitest/globals", "node"]
5+
},
6+
"include": [
7+
"src/**/*.ts",
8+
"src/**/*.spec.ts",
9+
"src/**/*.test.ts",
10+
"src/**/*.e2e.test.ts",
11+
"vitest.config.ts"
12+
]
13+
}

packages/cli-e2e/vite.config.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { defineConfig } from 'vitest/config';
2+
import path from 'node:path';
3+
import fs from 'node:fs';
4+
5+
/**
6+
* Resolve the CLI executable:
7+
* - Prefer `bin` from packages/cli/package.json (best for real-world e2e).
8+
* - Fallback to built dist file if needed.
9+
*/
10+
function resolveCliBin() {
11+
const root = path.resolve(__dirname, '..', 'cli', 'package.json');
12+
const pkg = JSON.parse(fs.readFileSync(root, 'utf8'));
13+
const binEntry = typeof pkg.bin === 'string' ? pkg.bin : pkg.bin?.[Object.keys(pkg.bin ?? {})[0]];
14+
const candidate = binEntry
15+
? path.resolve(path.dirname(root), binEntry)
16+
: path.resolve(path.dirname(root), 'dist/bin.cjs');
17+
18+
return candidate;
19+
}
20+
21+
export default defineConfig({
22+
test: {
23+
include: ['src/**/*.e2e.test.ts'],
24+
environment: 'node',
25+
pool: 'threads',
26+
setupFiles: [],
27+
hookTimeout: 60000,
28+
testTimeout: 60000,
29+
globals: true,
30+
},
31+
define: {
32+
__CLI_BIN__: JSON.stringify(resolveCliBin()),
33+
},
34+
});

0 commit comments

Comments
 (0)