Skip to content

Commit abbb534

Browse files
committed
🧪 Add plugin API tests and fix CI peer dep issue
- Add comprehensive tests for services.git.detect() API - Fix peer dep to >=0.24.0 (0.25.0 doesn't exist on npm yet) - Add warning when falling back to env vars on older CLI versions
1 parent 8f920ec commit abbb534

5 files changed

Lines changed: 173 additions & 2 deletions

File tree

clients/static-site/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
"registry": "https://registry.npmjs.org/"
6363
},
6464
"peerDependencies": {
65-
"@vizzly-testing/cli": ">=0.25.0"
65+
"@vizzly-testing/cli": ">=0.24.0"
6666
},
6767
"dependencies": {
6868
"cosmiconfig": "^9.0.0",

clients/static-site/src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@ export async function run(buildPath, options = {}, context = {}) {
181181
pullRequestNumber = gitInfo.prNumber;
182182
} else {
183183
// Fallback for older CLI versions - use environment variables
184+
logger.warn(
185+
'⚠️ Upgrade to @vizzly-testing/cli@>=0.25.0 for improved git detection'
186+
);
184187
branch = process.env.VIZZLY_BRANCH || 'main';
185188
commit = process.env.VIZZLY_COMMIT_SHA || undefined;
186189
message = process.env.VIZZLY_COMMIT_MESSAGE || undefined;

clients/storybook/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
"registry": "https://registry.npmjs.org/"
5959
},
6060
"peerDependencies": {
61-
"@vizzly-testing/cli": ">=0.25.0"
61+
"@vizzly-testing/cli": ">=0.24.0"
6262
},
6363
"dependencies": {
6464
"playwright-core": "^1.50.0",

clients/storybook/src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ export async function run(storybookPath, options = {}, context = {}) {
125125
pullRequestNumber = gitInfo.prNumber;
126126
} else {
127127
// Fallback for older CLI versions - use environment variables
128+
logger.warn(
129+
'⚠️ Upgrade to @vizzly-testing/cli@>=0.25.0 for improved git detection'
130+
);
128131
branch = process.env.VIZZLY_BRANCH || 'main';
129132
commit = process.env.VIZZLY_COMMIT_SHA || undefined;
130133
message = process.env.VIZZLY_COMMIT_MESSAGE || undefined;

tests/unit/plugin-api.test.js

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
import assert from 'node:assert';
2+
import { afterEach, beforeEach, describe, it } from 'node:test';
3+
import { createPluginServices } from '../../src/plugin-api.js';
4+
import { resetGitHubEventCache } from '../../src/utils/ci-env.js';
5+
6+
describe('Plugin API', () => {
7+
let originalEnv;
8+
9+
// Minimal mock services required by createPluginServices
10+
let mockServices = {
11+
testRunner: {
12+
once: () => {},
13+
on: () => {},
14+
off: () => {},
15+
createBuild: () => {},
16+
finalizeBuild: () => {},
17+
},
18+
serverManager: {
19+
start: () => {},
20+
stop: () => {},
21+
},
22+
};
23+
24+
beforeEach(() => {
25+
originalEnv = { ...process.env };
26+
// Clear CI-related environment variables
27+
let ciVars = [
28+
'VIZZLY_BRANCH',
29+
'VIZZLY_COMMIT_SHA',
30+
'VIZZLY_COMMIT_MESSAGE',
31+
'VIZZLY_PR_NUMBER',
32+
'GITHUB_ACTIONS',
33+
'GITHUB_HEAD_REF',
34+
'GITHUB_REF_NAME',
35+
'GITHUB_SHA',
36+
'GITHUB_EVENT_NAME',
37+
'GITHUB_EVENT_PATH',
38+
'GITHUB_REF',
39+
];
40+
for (let key of ciVars) {
41+
delete process.env[key];
42+
}
43+
resetGitHubEventCache();
44+
});
45+
46+
afterEach(() => {
47+
process.env = originalEnv;
48+
resetGitHubEventCache();
49+
});
50+
51+
describe('createPluginServices', () => {
52+
it('returns frozen object with expected shape', () => {
53+
let services = createPluginServices(mockServices);
54+
55+
assert.ok(Object.isFrozen(services), 'services should be frozen');
56+
assert.ok(services.git, 'should have git property');
57+
assert.ok(services.testRunner, 'should have testRunner property');
58+
assert.ok(services.serverManager, 'should have serverManager property');
59+
});
60+
61+
it('exposes git.detect as a function', () => {
62+
let services = createPluginServices(mockServices);
63+
64+
assert.strictEqual(typeof services.git.detect, 'function');
65+
});
66+
67+
it('exposes testRunner methods', () => {
68+
let services = createPluginServices(mockServices);
69+
70+
assert.strictEqual(typeof services.testRunner.once, 'function');
71+
assert.strictEqual(typeof services.testRunner.on, 'function');
72+
assert.strictEqual(typeof services.testRunner.off, 'function');
73+
assert.strictEqual(typeof services.testRunner.createBuild, 'function');
74+
assert.strictEqual(typeof services.testRunner.finalizeBuild, 'function');
75+
});
76+
77+
it('exposes serverManager methods', () => {
78+
let services = createPluginServices(mockServices);
79+
80+
assert.strictEqual(typeof services.serverManager.start, 'function');
81+
assert.strictEqual(typeof services.serverManager.stop, 'function');
82+
});
83+
});
84+
85+
describe('services.git.detect', () => {
86+
it('returns object with expected properties', async () => {
87+
let services = createPluginServices(mockServices);
88+
let result = await services.git.detect();
89+
90+
assert.ok('branch' in result, 'should have branch property');
91+
assert.ok('commit' in result, 'should have commit property');
92+
assert.ok('message' in result, 'should have message property');
93+
assert.ok('prNumber' in result, 'should have prNumber property');
94+
assert.ok('buildName' in result, 'should have buildName property');
95+
});
96+
97+
it('detects branch from local git repo', async () => {
98+
let services = createPluginServices(mockServices);
99+
let result = await services.git.detect();
100+
101+
// We're in a git repo, so branch should be detected
102+
assert.ok(result.branch, 'branch should be detected');
103+
assert.strictEqual(typeof result.branch, 'string');
104+
});
105+
106+
it('detects commit from local git repo', async () => {
107+
let services = createPluginServices(mockServices);
108+
let result = await services.git.detect();
109+
110+
// We're in a git repo, so commit should be detected
111+
assert.ok(result.commit, 'commit should be detected');
112+
assert.strictEqual(result.commit.length, 40, 'commit should be 40 char SHA');
113+
});
114+
115+
it('uses buildPrefix in buildName when provided', async () => {
116+
let services = createPluginServices(mockServices);
117+
let result = await services.git.detect({ buildPrefix: 'Storybook' });
118+
119+
assert.ok(result.buildName, 'buildName should be present');
120+
assert.ok(
121+
result.buildName.startsWith('Storybook'),
122+
`buildName should start with prefix, got: ${result.buildName}`
123+
);
124+
});
125+
126+
it('respects VIZZLY_BRANCH environment variable', async () => {
127+
process.env.VIZZLY_BRANCH = 'custom-branch';
128+
129+
let services = createPluginServices(mockServices);
130+
let result = await services.git.detect();
131+
132+
assert.strictEqual(result.branch, 'custom-branch');
133+
});
134+
135+
it('respects VIZZLY_COMMIT_SHA environment variable', async () => {
136+
process.env.VIZZLY_COMMIT_SHA = 'abc123def456';
137+
138+
let services = createPluginServices(mockServices);
139+
let result = await services.git.detect();
140+
141+
assert.strictEqual(result.commit, 'abc123def456');
142+
});
143+
144+
it('detects GitHub Actions PR context', async () => {
145+
process.env.GITHUB_ACTIONS = 'true';
146+
process.env.GITHUB_HEAD_REF = 'feature/my-branch';
147+
process.env.GITHUB_EVENT_NAME = 'pull_request';
148+
process.env.GITHUB_REF = 'refs/pull/42/merge';
149+
150+
let services = createPluginServices(mockServices);
151+
let result = await services.git.detect();
152+
153+
assert.strictEqual(result.branch, 'feature/my-branch');
154+
assert.strictEqual(result.prNumber, 42);
155+
});
156+
157+
it('returns null for prNumber when not in PR context', async () => {
158+
let services = createPluginServices(mockServices);
159+
let result = await services.git.detect();
160+
161+
// Not in a PR context, so prNumber should be null
162+
assert.strictEqual(result.prNumber, null);
163+
});
164+
});
165+
});

0 commit comments

Comments
 (0)