Skip to content

Commit f1edb0b

Browse files
chore(deps-dev): bump vitest from 3.2.4 to 4.0.6 (#256)
* chore(deps-dev): bump vitest from 3.2.4 to 4.0.6 Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 3.2.4 to 4.0.6. - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.6/packages/vitest) --- updated-dependencies: - dependency-name: vitest dependency-version: 4.0.6 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> * chore(deps-dev): bump vitest from 3.2.4 to 4.0.6 Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 3.2.4 to 4.0.6. - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.6/packages/vitest) --- updated-dependencies: - dependency-name: vitest dependency-version: 4.0.6 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> * test: fix tests * chore: run pnpm format --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cody Spath <[email protected]>
1 parent 5299c2f commit f1edb0b

File tree

6 files changed

+245
-214
lines changed

6 files changed

+245
-214
lines changed

packages/toolbar/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@
101101
"storybook-addon-rslib": "^2.1.2",
102102
"storybook-react-rsbuild": "^2.1.2",
103103
"typescript": "^5.9.3",
104-
"vitest": "^3.2.2"
104+
"vitest": "^4.0.7"
105105
},
106106
"peerDependencies": {
107107
"launchdarkly-js-client-sdk": ">=3.9.0 <4.0.0",

packages/toolbar/src/core/tests/DevServerProvider.test.tsx

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
import React from 'react';
12
import { render, screen, waitFor } from '@testing-library/react';
2-
import { expect, test, describe, vi, beforeEach } from 'vitest';
3-
3+
import { expect, test, describe, vi, beforeEach, Mock } from 'vitest';
44
import { DevServerProvider, useDevServerContext } from '../ui/Toolbar/context/DevServerProvider';
55

6-
// Mock the DevServerClient and FlagStateManager
7-
const mockDevServerClient = {
6+
// Create mock instances that we can access in tests
7+
const mockDevServerClientInstance = {
88
getAvailableProjects: vi.fn().mockResolvedValue(['test-project']),
99
setProjectKey: vi.fn(),
1010
getProjectKey: vi.fn().mockReturnValue('test-project'),
@@ -17,23 +17,37 @@ const mockDevServerClient = {
1717
}),
1818
setOverride: vi.fn(),
1919
clearOverride: vi.fn(),
20-
healthCheck: vi.fn().mockResolvedValue(true),
2120
};
2221

23-
const mockFlagStateManager = {
22+
const mockFlagStateManagerInstance = {
2423
getEnhancedFlags: vi.fn().mockResolvedValue({}),
2524
setOverride: vi.fn(),
2625
clearOverride: vi.fn(),
2726
subscribe: vi.fn().mockReturnValue(() => {}),
2827
};
2928

30-
vi.mock('../services/DevServerClient', () => ({
31-
DevServerClient: vi.fn().mockImplementation(() => mockDevServerClient),
32-
}));
29+
vi.mock('../services/DevServerClient', () => {
30+
function MockDevServerClient() {
31+
// Assign all methods to this instance
32+
Object.assign(this, mockDevServerClientInstance);
33+
return this;
34+
}
35+
36+
return {
37+
DevServerClient: MockDevServerClient,
38+
};
39+
});
40+
41+
vi.mock('../services/FlagStateManager', () => {
42+
function MockFlagStateManager() {
43+
Object.assign(this, mockFlagStateManagerInstance);
44+
return this;
45+
}
3346

34-
vi.mock('../services/FlagStateManager', () => ({
35-
FlagStateManager: vi.fn().mockImplementation(() => mockFlagStateManager),
36-
}));
47+
return {
48+
FlagStateManager: MockFlagStateManager,
49+
};
50+
});
3751

3852
// Test component that consumes the context
3953
function TestConsumer() {
@@ -54,6 +68,21 @@ describe('DevServerProvider - Integration Flows', () => {
5468
beforeEach(() => {
5569
vi.clearAllMocks();
5670
localStorage.clear();
71+
72+
// Reset mock instances to default state
73+
mockDevServerClientInstance.getAvailableProjects.mockResolvedValue(['test-project']);
74+
mockDevServerClientInstance.setProjectKey.mockClear();
75+
mockDevServerClientInstance.getProjectKey.mockReturnValue('test-project');
76+
mockDevServerClientInstance.getProjectData.mockResolvedValue({
77+
sourceEnvironmentKey: 'test-environment',
78+
flagsState: {},
79+
overrides: {},
80+
availableVariations: {},
81+
_lastSyncedFromSource: Date.now(),
82+
});
83+
84+
mockFlagStateManagerInstance.getEnhancedFlags.mockResolvedValue({});
85+
mockFlagStateManagerInstance.subscribe.mockReturnValue(() => {});
5786
});
5887

5988
describe('Developer Setup Flow - Dev Server Mode', () => {
@@ -93,7 +122,7 @@ describe('DevServerProvider - Integration Flows', () => {
93122

94123
test('developer specifies exact project and connects successfully', async () => {
95124
// GIVEN: Developer knows exactly which project they want to work with
96-
mockDevServerClient.getAvailableProjects.mockResolvedValueOnce(['explicit-project', 'test-project']);
125+
mockDevServerClientInstance.getAvailableProjects.mockResolvedValueOnce(['explicit-project', 'test-project']);
97126

98127
// WHEN: They configure the toolbar with their specific project
99128
render(
@@ -114,12 +143,12 @@ describe('DevServerProvider - Integration Flows', () => {
114143
return connectionStatus.textContent === 'connected';
115144
});
116145

117-
expect(mockDevServerClient.setProjectKey).toHaveBeenCalledWith('explicit-project');
146+
expect(mockDevServerClientInstance.setProjectKey).toHaveBeenCalledWith('explicit-project');
118147
});
119148

120149
test('developer handles dev server connection issues gracefully', async () => {
121150
// GIVEN: Developer's dev server is not running or misconfigured
122-
mockDevServerClient.getAvailableProjects.mockRejectedValueOnce(new Error('Connection failed'));
151+
mockDevServerClientInstance.getAvailableProjects.mockRejectedValueOnce(new Error('Connection failed'));
123152

124153
// WHEN: They try to connect with the toolbar
125154
render(
@@ -145,7 +174,7 @@ describe('DevServerProvider - Integration Flows', () => {
145174

146175
test('developer handles network timeout errors during initial connection', async () => {
147176
// GIVEN: Developer's network connection is slow or unreliable
148-
mockDevServerClient.getAvailableProjects.mockRejectedValueOnce(new Error('ETIMEDOUT: connect timeout'));
177+
mockDevServerClientInstance.getAvailableProjects.mockRejectedValueOnce(new Error('ETIMEDOUT: connect timeout'));
149178

150179
// WHEN: They attempt to connect with the toolbar
151180
render(
@@ -198,7 +227,7 @@ describe('DevServerProvider - Integration Flows', () => {
198227
expect(screen.getByTestId('error')).toHaveTextContent('none');
199228

200229
// AND: Doesn't attempt to make server connections
201-
expect(mockDevServerClient.getAvailableProjects).not.toHaveBeenCalled();
230+
expect(mockDevServerClientInstance.getAvailableProjects).not.toHaveBeenCalled();
202231
});
203232
});
204233
});

packages/toolbar/src/core/tests/ExpandedToolbarContent.test.tsx

Lines changed: 58 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,51 @@ import { SearchProvider } from '../ui/Toolbar/context/SearchProvider';
88
import { AnalyticsProvider } from '../ui/Toolbar/context/AnalyticsProvider';
99
import { IEventInterceptionPlugin, IFlagOverridePlugin } from '../../types';
1010

11+
// Create mock instances that we can access in tests
12+
const mockDevServerClientInstance = {
13+
getAvailableProjects: vi.fn().mockResolvedValue(['test-project']),
14+
setProjectKey: vi.fn(),
15+
getProjectKey: vi.fn().mockReturnValue('test-project'),
16+
getProjectData: vi.fn().mockResolvedValue({
17+
sourceEnvironmentKey: 'test-environment',
18+
flagsState: {},
19+
overrides: {},
20+
availableVariations: {},
21+
_lastSyncedFromSource: Date.now(),
22+
}),
23+
setOverride: vi.fn(),
24+
clearOverride: vi.fn(),
25+
};
26+
27+
const mockFlagStateManagerInstance = {
28+
getEnhancedFlags: vi.fn().mockResolvedValue({}),
29+
setOverride: vi.fn(),
30+
clearOverride: vi.fn(),
31+
subscribe: vi.fn().mockReturnValue(() => {}),
32+
};
33+
1134
// Mock the DevServerClient and FlagStateManager
12-
vi.mock('../services/DevServerClient', () => ({
13-
DevServerClient: vi.fn().mockImplementation(() => ({
14-
getAvailableProjects: vi.fn().mockResolvedValue(['test-project']),
15-
setProjectKey: vi.fn(),
16-
getProjectKey: vi.fn().mockReturnValue('test-project'),
17-
getProjectData: vi.fn().mockResolvedValue({
18-
sourceEnvironmentKey: 'test-environment',
19-
flagsState: {},
20-
overrides: {},
21-
availableVariations: {},
22-
_lastSyncedFromSource: Date.now(),
23-
}),
24-
setOverride: vi.fn(),
25-
clearOverride: vi.fn(),
26-
healthCheck: vi.fn().mockResolvedValue(true),
27-
})),
28-
}));
35+
vi.mock('../services/DevServerClient', () => {
36+
function MockDevServerClient() {
37+
Object.assign(this, mockDevServerClientInstance);
38+
return this;
39+
}
40+
41+
return {
42+
DevServerClient: MockDevServerClient,
43+
};
44+
});
2945

30-
vi.mock('../services/FlagStateManager', () => ({
31-
FlagStateManager: vi.fn().mockImplementation(() => ({
32-
getEnhancedFlags: vi.fn().mockResolvedValue({}),
33-
setOverride: vi.fn(),
34-
clearOverride: vi.fn(),
35-
subscribe: vi.fn().mockReturnValue(() => {}),
36-
})),
37-
}));
46+
vi.mock('../services/FlagStateManager', () => {
47+
function MockFlagStateManager() {
48+
Object.assign(this, mockFlagStateManagerInstance);
49+
return this;
50+
}
51+
52+
return {
53+
FlagStateManager: MockFlagStateManager,
54+
};
55+
});
3856

3957
// Mock the tab content components
4058
vi.mock('../ui/Toolbar/TabContent/FlagDevServerTabContent', () => ({
@@ -129,6 +147,21 @@ describe('ExpandedToolbarContent - User Interaction Flows', () => {
129147

130148
beforeEach(() => {
131149
vi.clearAllMocks();
150+
151+
// Reset mock instances to default state
152+
mockDevServerClientInstance.getAvailableProjects.mockResolvedValue(['test-project']);
153+
mockDevServerClientInstance.setProjectKey.mockClear();
154+
mockDevServerClientInstance.getProjectKey.mockReturnValue('test-project');
155+
mockDevServerClientInstance.getProjectData.mockResolvedValue({
156+
sourceEnvironmentKey: 'test-environment',
157+
flagsState: {},
158+
overrides: {},
159+
availableVariations: {},
160+
_lastSyncedFromSource: Date.now(),
161+
});
162+
163+
mockFlagStateManagerInstance.getEnhancedFlags.mockResolvedValue({});
164+
mockFlagStateManagerInstance.subscribe.mockReturnValue(() => {});
132165
});
133166

134167
describe('Dev Server Mode - Server-Side Flag Management Flow', () => {

packages/toolbar/src/core/tests/LaunchDarklyToolbar.test.tsx

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,43 @@
1+
import React from 'react';
12
import { render, screen, fireEvent, waitFor, waitForElementToBeRemoved } from '@testing-library/react';
23
import { expect, test, describe, vi, beforeEach } from 'vitest';
3-
44
import { LaunchDarklyToolbar } from '../ui/Toolbar/LaunchDarklyToolbar';
55

66
// Mock the DevServerClient to avoid actual network calls in tests
7-
vi.mock('../services/DevServerClient', () => ({
8-
DevServerClient: vi.fn().mockImplementation(() => ({
9-
getAvailableProjects: vi.fn().mockResolvedValue(['test-project']),
10-
setProjectKey: vi.fn(),
11-
getProjectKey: vi.fn().mockReturnValue('test-project'),
12-
getProjectData: vi.fn().mockResolvedValue({
7+
vi.mock('../services/DevServerClient', () => {
8+
function MockDevServerClient() {
9+
this.getAvailableProjects = vi.fn().mockResolvedValue(['test-project']);
10+
this.setProjectKey = vi.fn();
11+
this.getProjectKey = vi.fn().mockReturnValue('test-project');
12+
this.getProjectData = vi.fn().mockResolvedValue({
1313
sourceEnvironmentKey: 'test-environment',
1414
flagsState: {},
1515
overrides: {},
1616
availableVariations: {},
1717
_lastSyncedFromSource: Date.now(),
18-
}),
19-
setOverride: vi.fn(),
20-
clearOverride: vi.fn(),
21-
healthCheck: vi.fn().mockResolvedValue(true),
22-
})),
23-
}));
18+
});
19+
this.setOverride = vi.fn();
20+
this.clearOverride = vi.fn();
21+
}
22+
23+
return {
24+
DevServerClient: MockDevServerClient,
25+
};
26+
});
2427

2528
// Mock the FlagStateManager
26-
vi.mock('../services/FlagStateManager', () => ({
27-
FlagStateManager: vi.fn().mockImplementation(() => ({
28-
getEnhancedFlags: vi.fn().mockResolvedValue({}),
29-
setOverride: vi.fn(),
30-
clearOverride: vi.fn(),
31-
subscribe: vi.fn().mockReturnValue(() => {}),
32-
})),
33-
}));
29+
vi.mock('../services/FlagStateManager', () => {
30+
function MockFlagStateManager() {
31+
this.getEnhancedFlags = vi.fn().mockResolvedValue({});
32+
this.setOverride = vi.fn();
33+
this.clearOverride = vi.fn();
34+
this.subscribe = vi.fn().mockReturnValue(() => {});
35+
}
36+
37+
return {
38+
FlagStateManager: MockFlagStateManager,
39+
};
40+
});
3441

3542
describe('LaunchDarklyToolbar - User Flows', () => {
3643
beforeEach(() => {

packages/toolbar/vitest.setup.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ Object.defineProperty(window, 'scrollBy', {
1818
});
1919

2020
// Mock ResizeObserver
21-
global.ResizeObserver = class ResizeObserver {
22-
observe() {}
23-
unobserve() {}
24-
disconnect() {}
25-
};
21+
globalThis.ResizeObserver =
22+
globalThis.ResizeObserver ||
23+
class ResizeObserver {
24+
observe() {}
25+
unobserve() {}
26+
disconnect() {}
27+
};

0 commit comments

Comments
 (0)