amaran-light-cli 1.1.4 → 1.4.0
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.
- package/CHANGELOG.md +44 -9
- package/README.md +32 -5
- package/dist/__tests__/autoCct.test.js +89 -20
- package/dist/__tests__/autoCct.test.js.map +1 -1
- package/dist/__tests__/autostart.test.js +87 -41
- package/dist/__tests__/autostart.test.js.map +1 -1
- package/dist/__tests__/cctUtil.test.js +26 -27
- package/dist/__tests__/cctUtil.test.js.map +1 -1
- package/dist/__tests__/cli.smoke.test.js +18 -13
- package/dist/__tests__/cli.smoke.test.js.map +1 -1
- package/dist/__tests__/intensityApi.test.js +4 -9
- package/dist/__tests__/intensityApi.test.js.map +1 -1
- package/dist/__tests__/lightControl.test.js +79 -68
- package/dist/__tests__/lightControl.test.js.map +1 -1
- package/dist/__tests__/setupTests.js +9 -8
- package/dist/__tests__/setupTests.js.map +1 -1
- package/dist/__tests__/simulateSchedule.test.d.ts +2 -0
- package/dist/__tests__/simulateSchedule.test.d.ts.map +1 -0
- package/dist/__tests__/simulateSchedule.test.js +87 -0
- package/dist/__tests__/simulateSchedule.test.js.map +1 -0
- package/dist/autostart.js +19 -60
- package/dist/autostart.js.map +1 -1
- package/dist/cctUtil.d.ts.map +1 -1
- package/dist/cctUtil.js +106 -107
- package/dist/cctUtil.js.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +52 -247
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/integration.test.d.ts +2 -0
- package/dist/commands/__tests__/integration.test.d.ts.map +1 -0
- package/dist/commands/__tests__/integration.test.js +279 -0
- package/dist/commands/__tests__/integration.test.js.map +1 -0
- package/dist/commands/autoCct.d.ts +1 -1
- package/dist/commands/autoCct.d.ts.map +1 -1
- package/dist/commands/autoCct.js +74 -76
- package/dist/commands/autoCct.js.map +1 -1
- package/dist/commands/cct.d.ts +1 -1
- package/dist/commands/cct.d.ts.map +1 -1
- package/dist/commands/cct.js +17 -23
- package/dist/commands/cct.js.map +1 -1
- package/dist/commands/color.d.ts +1 -1
- package/dist/commands/color.d.ts.map +1 -1
- package/dist/commands/color.js +9 -15
- package/dist/commands/color.js.map +1 -1
- package/dist/commands/config.d.ts +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +64 -66
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/discover.d.ts +1 -1
- package/dist/commands/discover.d.ts.map +1 -1
- package/dist/commands/discover.js +8 -14
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/graphSchedule.d.ts +5 -0
- package/dist/commands/graphSchedule.d.ts.map +1 -0
- package/dist/commands/graphSchedule.js +293 -0
- package/dist/commands/graphSchedule.js.map +1 -0
- package/dist/commands/hsi.d.ts +1 -1
- package/dist/commands/hsi.d.ts.map +1 -1
- package/dist/commands/hsi.js +11 -17
- package/dist/commands/hsi.js.map +1 -1
- package/dist/commands/intensity.d.ts +1 -1
- package/dist/commands/intensity.d.ts.map +1 -1
- package/dist/commands/intensity.js +9 -15
- package/dist/commands/intensity.js.map +1 -1
- package/dist/commands/list.d.ts +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +6 -12
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/power.d.ts +1 -1
- package/dist/commands/power.d.ts.map +1 -1
- package/dist/commands/power.js +18 -24
- package/dist/commands/power.js.map +1 -1
- package/dist/commands/printSchedule.d.ts +5 -0
- package/dist/commands/printSchedule.d.ts.map +1 -0
- package/dist/commands/{schedule.js → printSchedule.js} +113 -116
- package/dist/commands/printSchedule.js.map +1 -0
- package/dist/commands/service.d.ts +1 -1
- package/dist/commands/service.d.ts.map +1 -1
- package/dist/commands/service.js +54 -88
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/simulateSchedule.d.ts +1 -1
- package/dist/commands/simulateSchedule.d.ts.map +1 -1
- package/dist/commands/simulateSchedule.js +50 -70
- package/dist/commands/simulateSchedule.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +8 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/commands.d.ts +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +52 -54
- package/dist/commands.js.map +1 -1
- package/dist/constants.d.ts +13 -14
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +21 -27
- package/dist/constants.js.map +1 -1
- package/dist/discovery.js +8 -15
- package/dist/discovery.js.map +1 -1
- package/dist/geoipUtil.js +3 -9
- package/dist/geoipUtil.js.map +1 -1
- package/dist/lightControl.js +18 -20
- package/dist/lightControl.js.map +1 -1
- package/dist/test/MockLightServer.d.ts +13 -0
- package/dist/test/MockLightServer.d.ts.map +1 -0
- package/dist/test/MockLightServer.js +140 -0
- package/dist/test/MockLightServer.js.map +1 -0
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/package.json +17 -15
- package/scripts/release.js +8 -4
- package/scripts/test.sh +2 -2
- package/dist/commands/schedule.d.ts +0 -5
- package/dist/commands/schedule.d.ts.map +0 -1
- package/dist/commands/schedule.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,20 +1,55 @@
|
|
|
1
|
-
## [1.
|
|
1
|
+
## [1.4.0] - 2025-12-15
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
- **Feature**: Added `graph-schedule` command to generate visual graphs of the lighting schedule.
|
|
4
4
|
|
|
5
|
-
## [1.
|
|
5
|
+
## [1.3.6] - 2025-12-14
|
|
6
|
+
|
|
7
|
+
- **Fix**: Updated workflow to use latest `npm` version for better OIDC support.
|
|
8
|
+
|
|
9
|
+
## [1.3.5] - 2025-12-14
|
|
10
|
+
|
|
11
|
+
- **Fix**: Re-applied `registry-url` configuration fix (previous attempt in v1.3.4 failed to update workflow).
|
|
12
|
+
|
|
13
|
+
## [1.3.4] - 2025-12-14
|
|
14
|
+
|
|
15
|
+
- **Fix**: Restored `registry-url` configuration (required for OIDC `ENEEDAUTH` fix).
|
|
16
|
+
|
|
17
|
+
## [1.3.3] - 2025-12-14
|
|
18
|
+
|
|
19
|
+
- **Fix**: Removed conflicting `registry-url` configuration to enable OIDC authentication.
|
|
6
20
|
|
|
7
|
-
|
|
21
|
+
## [1.3.2] - 2025-12-14
|
|
8
22
|
|
|
9
|
-
|
|
23
|
+
- **Fix**: Updated release workflow to use NPM Trusted Publishing (OIDC) instead of auth tokens.
|
|
24
|
+
|
|
25
|
+
## [1.3.1] - 2025-12-14
|
|
26
|
+
|
|
27
|
+
- **Fix**: Resolved timezone issue in integration tests causing CI failures.
|
|
28
|
+
|
|
29
|
+
## [1.3.0] - 2025-12-14
|
|
30
|
+
|
|
31
|
+
- **Breaking**: Migrated project to ESM (`type: module`).
|
|
32
|
+
- **Breaking**: Migrated testing framework from Jest to Vitest.
|
|
33
|
+
- **Feature**: Added `intensityMultiplier` support to `auto-cct`.
|
|
34
|
+
- **Feature**: `auto-cct` command now accepts a device argument (defaults to 'all').
|
|
35
|
+
- **Refactor**: Renamed `schedule` command to `print-schedule`.
|
|
36
|
+
- **Fix**: Resolved `suncalc` import issues.
|
|
37
|
+
- **Fix**: Improved CLI output styling for light mode terminals.
|
|
38
|
+
- **Chore**: Comprehensive linting and formatting fixes.
|
|
39
|
+
|
|
40
|
+
## [1.1.4] - 2025-11-02
|
|
41
|
+
|
|
42
|
+
- test token config
|
|
43
|
+
|
|
44
|
+
## [1.1.3] - 2025-11-02
|
|
10
45
|
|
|
11
|
-
|
|
46
|
+
- curve config and refactors
|
|
12
47
|
|
|
13
|
-
## [1.1.2] -
|
|
48
|
+
## [1.1.2] - 2025-11-01
|
|
14
49
|
|
|
15
50
|
- Enhanced CLI help output and documentation
|
|
16
51
|
|
|
17
|
-
## [1.1.0] -
|
|
52
|
+
## [1.1.0] - 2025-10-31
|
|
18
53
|
|
|
19
54
|
- Added more curves for auto-cct
|
|
20
55
|
- Improved schedule table display with all curves
|
|
@@ -24,7 +59,7 @@ All notable changes to this project will be documented in this file.
|
|
|
24
59
|
- Added more special times in schedule (e.g., Nautical Dawn)
|
|
25
60
|
- Various tests and refactoring
|
|
26
61
|
|
|
27
|
-
## [1.0.3] -
|
|
62
|
+
## [1.0.3] - 2025-10-30
|
|
28
63
|
|
|
29
64
|
- Initial stable release with full CLI functionality
|
|
30
65
|
- WebSocket control for Aputure Amaran lights
|
package/README.md
CHANGED
|
@@ -288,7 +288,7 @@ View how color temperature and intensity will change throughout the day:
|
|
|
288
288
|
|
|
289
289
|
```console
|
|
290
290
|
# Preview schedule for today at your current location
|
|
291
|
-
$ amaran-cli schedule
|
|
291
|
+
$ amaran-cli print-schedule
|
|
292
292
|
|
|
293
293
|
═══════════════════════════════════════════════════════════
|
|
294
294
|
Auto-CCT Schedule Preview
|
|
@@ -354,16 +354,16 @@ Time HANN WM_SMALL WM_MEDIUM WM_LARGE CIE SUN_ALT
|
|
|
354
354
|
─────────────────────────────────────────────────────────────────────────────────────────────────
|
|
355
355
|
|
|
356
356
|
# Preview with manual location
|
|
357
|
-
amaran-cli schedule --lat 40.7128 --lon -74.0060
|
|
357
|
+
amaran-cli print-schedule --lat 40.7128 --lon -74.0060
|
|
358
358
|
|
|
359
359
|
# Preview for a specific date
|
|
360
|
-
amaran-cli schedule --date 2025-12-21
|
|
360
|
+
amaran-cli print-schedule --date 2025-12-21
|
|
361
361
|
|
|
362
362
|
# Change time interval (default: 30 minutes)
|
|
363
|
-
amaran-cli schedule --interval 15
|
|
363
|
+
amaran-cli print-schedule --interval 15
|
|
364
364
|
|
|
365
365
|
# Combine options
|
|
366
|
-
amaran-cli schedule --lat 51.5074 --lon -0.1278 --date 2025-06-21 --interval 60
|
|
366
|
+
amaran-cli print-schedule --lat 51.5074 --lon -0.1278 --date 2025-06-21 --interval 60
|
|
367
367
|
```
|
|
368
368
|
|
|
369
369
|
The schedule shows CCT and intensity values from 30 minutes before sunrise to 30 minutes after sunset, with special highlighting for:
|
|
@@ -376,6 +376,33 @@ This helps you visualize and plan your automated lighting schedule before implem
|
|
|
376
376
|
|
|
377
377
|
Note: The schedule respects any configured bounds set via `amaran-cli config --cct-min/--cct-max` and `--intensity-min/--intensity-max`. If no bounds are set, it uses the default curve from `calculateCCT`.
|
|
378
378
|
|
|
379
|
+
### Generate Schedule Graph
|
|
380
|
+
|
|
381
|
+
Generate a visual graph of your auto-cct schedule over the day:
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
# Generate graph for today (saved as schedule-YYYY-MM-DD.png)
|
|
385
|
+
amaran-cli graph-schedule
|
|
386
|
+
|
|
387
|
+
# Specify output filename
|
|
388
|
+
amaran-cli graph-schedule -o my-schedule.png
|
|
389
|
+
|
|
390
|
+
# Customize graph dimensions
|
|
391
|
+
amaran-cli graph-schedule -W 1920 -H 1080
|
|
392
|
+
|
|
393
|
+
# Graph specific curves
|
|
394
|
+
amaran-cli graph-schedule --curve cie-daylight
|
|
395
|
+
amaran-cli graph-schedule --curve "perez-daylight, sun-altitude"
|
|
396
|
+
|
|
397
|
+
# View all available curves on one graph
|
|
398
|
+
amaran-cli graph-schedule --curve all
|
|
399
|
+
|
|
400
|
+
# Preview for a specific date and location
|
|
401
|
+
amaran-cli graph-schedule --date 2025-06-21 --lat 64.1466 --lon -21.9426
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
This creates a PNG image showing the CCT and/or intensity curves, which is great for visualizing how different algorithms behave.
|
|
405
|
+
|
|
379
406
|
### Get light status
|
|
380
407
|
|
|
381
408
|
```bash
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const globals_1 = require("@jest/globals");
|
|
7
|
-
const commander_1 = require("commander");
|
|
8
|
-
const commands_1 = __importDefault(require("../commands"));
|
|
9
|
-
globals_1.jest.mock('../geoipUtil', () => ({
|
|
10
|
-
getLocationFromIP: globals_1.jest.fn(() => ({ ll: [37.7749, -122.4194] })),
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { vi } from 'vitest';
|
|
3
|
+
import registerCommands from '../commands.js';
|
|
4
|
+
vi.mock('../geoipUtil', () => ({
|
|
5
|
+
getLocationFromIP: vi.fn(() => ({ ll: [37.7749, -122.4194] })),
|
|
11
6
|
}));
|
|
12
|
-
|
|
13
|
-
calculateCCT:
|
|
14
|
-
parseCurveType:
|
|
7
|
+
vi.mock('../cctUtil', () => ({
|
|
8
|
+
calculateCCT: vi.fn(() => ({ cct: 5600, intensity: 500 })),
|
|
9
|
+
parseCurveType: vi.fn(() => 'HANN'),
|
|
15
10
|
CurveType: {
|
|
16
11
|
HANN: 'hann',
|
|
17
12
|
WIDER_MIDDLE_SMALL: 'wider-middle-small',
|
|
@@ -24,7 +19,7 @@ globals_1.jest.mock('../cctUtil', () => ({
|
|
|
24
19
|
}));
|
|
25
20
|
describe('auto-cct command', () => {
|
|
26
21
|
const originalFetch = global.fetch;
|
|
27
|
-
const mockFetch =
|
|
22
|
+
const mockFetch = vi.fn();
|
|
28
23
|
beforeAll(() => {
|
|
29
24
|
mockFetch.mockImplementation(async () => ({
|
|
30
25
|
json: async () => ({ ip: '1.2.3.4' }),
|
|
@@ -38,18 +33,18 @@ describe('auto-cct command', () => {
|
|
|
38
33
|
global.fetch = originalFetch;
|
|
39
34
|
});
|
|
40
35
|
test('skips sleeping lights when running auto-cct', async () => {
|
|
41
|
-
const setCCT =
|
|
42
|
-
const disconnect =
|
|
36
|
+
const setCCT = vi.fn();
|
|
37
|
+
const disconnect = vi.fn(async () => Promise.resolve());
|
|
43
38
|
const sleepState = {
|
|
44
39
|
'400J5-F2C008': false,
|
|
45
40
|
'400J5-F2C009': true,
|
|
46
41
|
};
|
|
47
42
|
const controllerStub = {
|
|
48
|
-
getDevices:
|
|
43
|
+
getDevices: vi.fn(() => [
|
|
49
44
|
{ node_id: '400J5-F2C008', device_name: 'On Light' },
|
|
50
45
|
{ node_id: '400J5-F2C009', device_name: 'Off Light' },
|
|
51
46
|
]),
|
|
52
|
-
getLightSleepStatus:
|
|
47
|
+
getLightSleepStatus: vi.fn((nodeId, cb) => {
|
|
53
48
|
setImmediate(() => cb(true, 'ok', { sleep: sleepState[nodeId] }));
|
|
54
49
|
}),
|
|
55
50
|
setCCT,
|
|
@@ -62,14 +57,88 @@ describe('auto-cct command', () => {
|
|
|
62
57
|
loadConfig: () => ({}),
|
|
63
58
|
saveWsUrl: undefined,
|
|
64
59
|
};
|
|
65
|
-
const program = new
|
|
60
|
+
const program = new Command();
|
|
66
61
|
program.exitOverride();
|
|
67
|
-
(
|
|
62
|
+
registerCommands(program, deps);
|
|
68
63
|
await program.parseAsync(['node', 'test', 'auto-cct']);
|
|
69
64
|
expect(setCCT).toHaveBeenCalledTimes(1);
|
|
70
65
|
// auto-cct should pass through calculateCCT result
|
|
71
66
|
expect(setCCT).toHaveBeenCalledWith('400J5-F2C008', 5600, 500);
|
|
72
67
|
expect(disconnect).toHaveBeenCalledTimes(1);
|
|
73
68
|
});
|
|
69
|
+
test('applies intensity multiplier from config', async () => {
|
|
70
|
+
const setCCT = vi.fn();
|
|
71
|
+
const disconnect = vi.fn(async () => Promise.resolve());
|
|
72
|
+
const controllerStub = {
|
|
73
|
+
getDevices: vi.fn(() => [
|
|
74
|
+
{ node_id: '400J5-F2C008', device_name: 'Key Light' },
|
|
75
|
+
{ node_id: '400J5-F2C009', device_name: 'Fill Light' },
|
|
76
|
+
]),
|
|
77
|
+
getLightSleepStatus: vi.fn((_nodeId, cb) => {
|
|
78
|
+
setImmediate(() => cb(true, 'ok', { sleep: false }));
|
|
79
|
+
}),
|
|
80
|
+
setCCT,
|
|
81
|
+
disconnect,
|
|
82
|
+
};
|
|
83
|
+
const deps = {
|
|
84
|
+
createController: async () => controllerStub,
|
|
85
|
+
findDevice: (_controller, _deviceQuery) => null,
|
|
86
|
+
asyncCommand: (fn) => (...args) => fn(...args),
|
|
87
|
+
loadConfig: () => ({
|
|
88
|
+
intensityMultiplier: {
|
|
89
|
+
'400J5-F2C008': 0.5, // 50% multiplier
|
|
90
|
+
// 400J5-F2C009 has no multiplier, defaults to 1.0
|
|
91
|
+
},
|
|
92
|
+
}),
|
|
93
|
+
saveWsUrl: undefined,
|
|
94
|
+
};
|
|
95
|
+
const program = new Command();
|
|
96
|
+
program.exitOverride();
|
|
97
|
+
registerCommands(program, deps);
|
|
98
|
+
await program.parseAsync(['node', 'test', 'auto-cct']);
|
|
99
|
+
expect(setCCT).toHaveBeenCalledTimes(2);
|
|
100
|
+
// 5600K at 50% intensity (base 500 * 0.5 = 250)
|
|
101
|
+
// Note: The logic in autoCct computes percent first, then multiplies.
|
|
102
|
+
// Base intensity 500 -> 50%. 50% * 0.5 = 25%.
|
|
103
|
+
// Then it converts back to raw intensity: 500 * (25 / 50) = 250.
|
|
104
|
+
expect(setCCT).toHaveBeenCalledWith('400J5-F2C008', 5600, 250);
|
|
105
|
+
// Normal intensity for the other light
|
|
106
|
+
expect(setCCT).toHaveBeenCalledWith('400J5-F2C009', 5600, 500);
|
|
107
|
+
expect(disconnect).toHaveBeenCalledTimes(1);
|
|
108
|
+
});
|
|
109
|
+
test('targets specific device when argument is provided', async () => {
|
|
110
|
+
const setCCT = vi.fn();
|
|
111
|
+
const disconnect = vi.fn(async () => Promise.resolve());
|
|
112
|
+
const targetDevice = { node_id: '400J5-F2C008', device_name: 'Target Light' };
|
|
113
|
+
const otherDevice = { node_id: '400J5-F2C009', device_name: 'Other Light' };
|
|
114
|
+
const controllerStub = {
|
|
115
|
+
getDevices: vi.fn(() => [targetDevice, otherDevice]),
|
|
116
|
+
getLightSleepStatus: vi.fn((_nodeId, cb) => {
|
|
117
|
+
setImmediate(() => cb(true, 'ok', { sleep: false }));
|
|
118
|
+
}),
|
|
119
|
+
setCCT,
|
|
120
|
+
disconnect,
|
|
121
|
+
};
|
|
122
|
+
const findDeviceMock = vi.fn((_controller, query) => {
|
|
123
|
+
if (query === 'Target')
|
|
124
|
+
return targetDevice;
|
|
125
|
+
return null;
|
|
126
|
+
});
|
|
127
|
+
const deps = {
|
|
128
|
+
createController: async () => controllerStub,
|
|
129
|
+
findDevice: findDeviceMock,
|
|
130
|
+
asyncCommand: (fn) => (...args) => fn(...args),
|
|
131
|
+
loadConfig: () => ({}),
|
|
132
|
+
saveWsUrl: undefined,
|
|
133
|
+
};
|
|
134
|
+
const program = new Command();
|
|
135
|
+
program.exitOverride();
|
|
136
|
+
registerCommands(program, deps);
|
|
137
|
+
await program.parseAsync(['node', 'test', 'auto-cct', 'Target']);
|
|
138
|
+
expect(findDeviceMock).toHaveBeenCalledWith(controllerStub, 'Target');
|
|
139
|
+
expect(setCCT).toHaveBeenCalledTimes(1);
|
|
140
|
+
expect(setCCT).toHaveBeenCalledWith('400J5-F2C008', 5600, 500);
|
|
141
|
+
expect(disconnect).toHaveBeenCalledTimes(1);
|
|
142
|
+
});
|
|
74
143
|
});
|
|
75
144
|
//# sourceMappingURL=autoCct.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoCct.test.js","sourceRoot":"","sources":["../../src/__tests__/autoCct.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autoCct.test.js","sourceRoot":"","sources":["../../src/__tests__/autoCct.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,gBAAgB,MAAM,gBAAgB,CAAC;AAG9C,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;CAC/D,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3B,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1D,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,kBAAkB,EAAE,oBAAoB;QACxC,mBAAmB,EAAE,qBAAqB;QAC1C,kBAAkB,EAAE,oBAAoB;QACxC,YAAY,EAAE,cAAc;QAC5B,YAAY,EAAE,cAAc;QAC5B,cAAc,EAAE,gBAAgB;KACjC;CACF,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IACnC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,kBAAkB,CAC1B,KAAK,IAAI,EAAE,CACT,CAAC;YACC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;SACtC,CAAwB,CAC5B,CAAC;QACF,MAAM,CAAC,KAAK,GAAG,SAAoC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,SAAS,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAExD,MAAM,UAAU,GAA4B;YAC1C,cAAc,EAAE,KAAK;YACrB,cAAc,EAAE,IAAI;SACrB,CAAC;QAEF,MAAM,cAAc,GAAG;YACrB,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACtB,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;gBACpD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE;aACtD,CAAC;YACF,mBAAmB,EAAE,EAAE,CAAC,EAAE,CACxB,CAAC,MAAc,EAAE,EAAsE,EAAE,EAAE;gBACzF,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC,CACF;YACD,MAAM;YACN,UAAU;SACX,CAAC;QAEF,MAAM,IAAI,GAAG;YACX,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,cAA4C;YAC1E,UAAU,EAAE,CAAC,WAA4B,EAAE,YAAoB,EAAQ,EAAE,CAAC,IAAI;YAC9E,YAAY,EACV,CAAsB,EAAiC,EAAE,EAAE,CAC3D,CAAC,GAAG,IAAO,EAAE,EAAE,CACb,EAAE,CAAC,GAAG,IAAI,CAAC;YACf,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAA4B;YACjD,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,YAAY,EAAE,CAAC;QACvB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,mDAAmD;QACnD,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAExD,MAAM,cAAc,GAAG;YACrB,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACtB,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE;gBACrD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE;aACvD,CAAC;YACF,mBAAmB,EAAE,EAAE,CAAC,EAAE,CACxB,CAAC,OAAe,EAAE,EAAsE,EAAE,EAAE;gBAC1F,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC,CACF;YACD,MAAM;YACN,UAAU;SACX,CAAC;QAEF,MAAM,IAAI,GAAG;YACX,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,cAA4C;YAC1E,UAAU,EAAE,CAAC,WAA4B,EAAE,YAAoB,EAAQ,EAAE,CAAC,IAAI;YAC9E,YAAY,EACV,CAAsB,EAAiC,EAAE,EAAE,CAC3D,CAAC,GAAG,IAAO,EAAE,EAAE,CACb,EAAE,CAAC,GAAG,IAAI,CAAC;YACf,UAAU,EAAE,GAAG,EAAE,CACf,CAAC;gBACC,mBAAmB,EAAE;oBACnB,cAAc,EAAE,GAAG,EAAE,iBAAiB;oBACtC,kDAAkD;iBACnD;aACF,CAA4B;YAC/B,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,YAAY,EAAE,CAAC;QACvB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,gDAAgD;QAChD,sEAAsE;QACtE,8CAA8C;QAC9C,iEAAiE;QACjE,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/D,uCAAuC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAExD,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;QAC9E,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAE5E,MAAM,cAAc,GAAG;YACrB,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACpD,mBAAmB,EAAE,EAAE,CAAC,EAAE,CACxB,CAAC,OAAe,EAAE,EAAsE,EAAE,EAAE;gBAC1F,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC,CACF;YACD,MAAM;YACN,UAAU;SACX,CAAC;QAEF,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,WAA4B,EAAE,KAAa,EAAE,EAAE;YAC3E,IAAI,KAAK,KAAK,QAAQ;gBAAE,OAAO,YAAY,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG;YACX,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,cAA4C;YAC1E,UAAU,EAAE,cAGuB;YACnC,YAAY,EACV,CAAsB,EAAiC,EAAE,EAAE,CAC3D,CAAC,GAAG,IAAO,EAAE,EAAE,CACb,EAAE,CAAC,GAAG,IAAI,CAAC;YACf,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAA4B;YACjD,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,YAAY,EAAE,CAAC;QACvB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEjE,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,84 +1,116 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { exec } from 'node:child_process';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import { vi } from 'vitest';
|
|
4
|
+
import { handleAutostart, isAmaranAppRunning, startAmaranApp } from '../autostart.js';
|
|
4
5
|
// Mock the child_process module
|
|
5
|
-
|
|
6
|
-
promisify:
|
|
6
|
+
vi.mock('node:util', () => ({
|
|
7
|
+
promisify: vi.fn((fn) => fn),
|
|
7
8
|
}));
|
|
8
|
-
|
|
9
|
-
exec:
|
|
9
|
+
vi.mock('node:child_process', () => ({
|
|
10
|
+
exec: vi.fn(),
|
|
10
11
|
}));
|
|
11
|
-
|
|
12
|
-
existsSync:
|
|
13
|
-
readFileSync:
|
|
14
|
-
writeFileSync:
|
|
15
|
-
appendFileSync:
|
|
16
|
-
}));
|
|
17
|
-
jest.mock('chalk', () => ({
|
|
18
|
-
yellow: jest.fn((text) => text),
|
|
19
|
-
green: jest.fn((text) => text),
|
|
20
|
-
gray: jest.fn((text) => text),
|
|
21
|
-
red: jest.fn((text) => text),
|
|
22
|
-
blue: jest.fn((text) => text),
|
|
12
|
+
vi.mock('node:fs', () => ({
|
|
13
|
+
existsSync: vi.fn(),
|
|
14
|
+
readFileSync: vi.fn(),
|
|
15
|
+
writeFileSync: vi.fn(),
|
|
16
|
+
appendFileSync: vi.fn(),
|
|
23
17
|
}));
|
|
18
|
+
vi.mock('chalk', () => {
|
|
19
|
+
const mocks = {
|
|
20
|
+
yellow: vi.fn((text) => text),
|
|
21
|
+
green: vi.fn((text) => text),
|
|
22
|
+
gray: vi.fn((text) => text),
|
|
23
|
+
red: vi.fn((text) => text),
|
|
24
|
+
blue: vi.fn((text) => text),
|
|
25
|
+
};
|
|
26
|
+
return { default: mocks };
|
|
27
|
+
});
|
|
24
28
|
describe('autostart', () => {
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
// The imported 'exec' and 'fs' are already the mocked versions due to vi.mock calls.
|
|
30
|
+
// We use vi.mocked() to get the typed mock objects.
|
|
31
|
+
const mockExec = vi.mocked(exec);
|
|
32
|
+
const mockFs = vi.mocked(fs);
|
|
27
33
|
beforeEach(() => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
34
|
+
vi.useFakeTimers();
|
|
35
|
+
vi.clearAllMocks();
|
|
36
|
+
vi.spyOn(console, 'log').mockImplementation(() => {
|
|
37
|
+
// no-op
|
|
38
|
+
});
|
|
39
|
+
vi.spyOn(console, 'warn').mockImplementation(() => {
|
|
40
|
+
// no-op
|
|
41
|
+
});
|
|
31
42
|
});
|
|
32
43
|
afterEach(() => {
|
|
33
|
-
|
|
44
|
+
vi.useRealTimers();
|
|
45
|
+
vi.restoreAllMocks();
|
|
34
46
|
});
|
|
35
47
|
describe('isAmaranAppRunning', () => {
|
|
36
48
|
it('should return true when amaran process is found', async () => {
|
|
37
|
-
|
|
49
|
+
// biome-ignore lint/suspicious/noExplicitAny: mocking overloaded function
|
|
50
|
+
mockExec.mockImplementation((_command, ...args) => {
|
|
51
|
+
const callback = args.find((arg) => typeof arg === 'function');
|
|
38
52
|
callback(null, 'amaran Desktop 12345 0.0 0.1 123456 1234 ?? 10:30AM 0:00.01 /Applications/amaran Desktop.app/Contents/MacOS/amaran Desktop', '');
|
|
53
|
+
// biome-ignore lint/suspicious/noExplicitAny: mock return
|
|
54
|
+
return {};
|
|
39
55
|
});
|
|
40
|
-
const result = await
|
|
56
|
+
const result = await isAmaranAppRunning(true);
|
|
41
57
|
expect(result).toBe(true);
|
|
42
58
|
expect(mockExec).toHaveBeenCalledWith('ps aux | grep -i "amaran desktop" | grep -v grep', expect.any(Function));
|
|
43
59
|
});
|
|
44
60
|
it('should return false when no amaran process is found', async () => {
|
|
45
|
-
|
|
61
|
+
// biome-ignore lint/suspicious/noExplicitAny: mocking overloaded function
|
|
62
|
+
mockExec.mockImplementation((_command, ...args) => {
|
|
63
|
+
const callback = args.find((arg) => typeof arg === 'function');
|
|
46
64
|
callback(null, '', '');
|
|
65
|
+
// biome-ignore lint/suspicious/noExplicitAny: mock return
|
|
66
|
+
return {};
|
|
47
67
|
});
|
|
48
|
-
const result = await
|
|
68
|
+
const result = await isAmaranAppRunning(true);
|
|
49
69
|
expect(result).toBe(false);
|
|
50
70
|
});
|
|
51
71
|
it('should return false when exec fails', async () => {
|
|
52
|
-
|
|
72
|
+
// biome-ignore lint/suspicious/noExplicitAny: mocking overloaded function
|
|
73
|
+
mockExec.mockImplementation((_command, ...args) => {
|
|
74
|
+
const callback = args.find((arg) => typeof arg === 'function');
|
|
53
75
|
callback(new Error('Command failed'), '', '');
|
|
76
|
+
// biome-ignore lint/suspicious/noExplicitAny: mock return
|
|
77
|
+
return {};
|
|
54
78
|
});
|
|
55
|
-
const result = await
|
|
79
|
+
const result = await isAmaranAppRunning(true);
|
|
56
80
|
expect(result).toBe(false);
|
|
57
81
|
});
|
|
58
82
|
});
|
|
59
83
|
describe('startAmaranApp', () => {
|
|
60
84
|
it('should start app successfully when autostart is enabled', async () => {
|
|
61
|
-
|
|
85
|
+
// biome-ignore lint/suspicious/noExplicitAny: mocking overloaded function
|
|
86
|
+
mockExec.mockImplementation((command, ...args) => {
|
|
87
|
+
const callback = args.find((arg) => typeof arg === 'function');
|
|
62
88
|
if (command.includes('open -a "amaran Desktop"')) {
|
|
63
89
|
callback(null, '', '');
|
|
64
90
|
}
|
|
91
|
+
// biome-ignore lint/suspicious/noExplicitAny: mock return
|
|
92
|
+
return {};
|
|
65
93
|
});
|
|
66
94
|
mockFs.existsSync.mockReturnValue(true);
|
|
67
95
|
mockFs.readFileSync.mockReturnValue(JSON.stringify({ autoStartApp: true }));
|
|
68
|
-
const
|
|
96
|
+
const promise = startAmaranApp(true);
|
|
97
|
+
await vi.runAllTimersAsync();
|
|
98
|
+
const result = await promise;
|
|
69
99
|
expect(result).toBe(true);
|
|
70
100
|
expect(mockExec).toHaveBeenCalledWith('open -a "amaran Desktop" 2>/dev/null', expect.any(Function));
|
|
71
101
|
});
|
|
72
102
|
it('should not start app when autostart is disabled', async () => {
|
|
73
103
|
mockFs.existsSync.mockReturnValue(true);
|
|
74
104
|
mockFs.readFileSync.mockReturnValue(JSON.stringify({ autoStartApp: false }));
|
|
75
|
-
const result = await
|
|
105
|
+
const result = await startAmaranApp(true);
|
|
76
106
|
expect(result).toBe(false);
|
|
77
107
|
expect(mockExec).not.toHaveBeenCalled();
|
|
78
108
|
});
|
|
79
109
|
it('should try multiple start methods', async () => {
|
|
80
110
|
let callCount = 0;
|
|
81
|
-
|
|
111
|
+
// biome-ignore lint/suspicious/noExplicitAny: mocking overloaded function
|
|
112
|
+
mockExec.mockImplementation((_command, ...args) => {
|
|
113
|
+
const callback = args.find((arg) => typeof arg === 'function');
|
|
82
114
|
callCount++;
|
|
83
115
|
if (callCount < 3) {
|
|
84
116
|
callback(new Error('Command not found'), '', '');
|
|
@@ -86,10 +118,14 @@ describe('autostart', () => {
|
|
|
86
118
|
else {
|
|
87
119
|
callback(null, '', '');
|
|
88
120
|
}
|
|
121
|
+
// biome-ignore lint/suspicious/noExplicitAny: mock return
|
|
122
|
+
return {};
|
|
89
123
|
});
|
|
90
124
|
mockFs.existsSync.mockReturnValue(true);
|
|
91
125
|
mockFs.readFileSync.mockReturnValue(JSON.stringify({}));
|
|
92
|
-
const
|
|
126
|
+
const promise = startAmaranApp(true);
|
|
127
|
+
await vi.runAllTimersAsync();
|
|
128
|
+
const result = await promise;
|
|
93
129
|
expect(result).toBe(true);
|
|
94
130
|
expect(mockExec).toHaveBeenCalledTimes(3);
|
|
95
131
|
});
|
|
@@ -98,32 +134,42 @@ describe('autostart', () => {
|
|
|
98
134
|
it('should return false when autostart is disabled', async () => {
|
|
99
135
|
mockFs.existsSync.mockReturnValue(true);
|
|
100
136
|
mockFs.readFileSync.mockReturnValue(JSON.stringify({ autoStartApp: false }));
|
|
101
|
-
const result = await
|
|
137
|
+
const result = await handleAutostart(true);
|
|
102
138
|
expect(result).toBe(false);
|
|
103
139
|
});
|
|
104
140
|
it('should return true when app is already running', async () => {
|
|
105
|
-
|
|
141
|
+
// biome-ignore lint/suspicious/noExplicitAny: mocking overloaded function
|
|
142
|
+
mockExec.mockImplementation((command, ...args) => {
|
|
143
|
+
const callback = args.find((arg) => typeof arg === 'function');
|
|
106
144
|
if (command.includes('ps aux')) {
|
|
107
145
|
callback(null, 'amaran Desktop 12345 0.0 0.1 123456 1234 ?? 10:30AM 0:00.01 /Applications/amaran Desktop.app/Contents/MacOS/amaran Desktop', '');
|
|
108
146
|
}
|
|
147
|
+
// biome-ignore lint/suspicious/noExplicitAny: mock return
|
|
148
|
+
return {};
|
|
109
149
|
});
|
|
110
150
|
mockFs.existsSync.mockReturnValue(true);
|
|
111
151
|
mockFs.readFileSync.mockReturnValue(JSON.stringify({}));
|
|
112
|
-
const result = await
|
|
152
|
+
const result = await handleAutostart(true);
|
|
113
153
|
expect(result).toBe(true);
|
|
114
154
|
});
|
|
115
155
|
it('should attempt to start app when not running', async () => {
|
|
116
|
-
|
|
156
|
+
// biome-ignore lint/suspicious/noExplicitAny: mocking overloaded function
|
|
157
|
+
mockExec.mockImplementation((command, ...args) => {
|
|
158
|
+
const callback = args.find((arg) => typeof arg === 'function');
|
|
117
159
|
if (command.includes('ps aux')) {
|
|
118
160
|
callback(null, '', '');
|
|
119
161
|
}
|
|
120
162
|
else if (command.includes('open -a "amaran Desktop"')) {
|
|
121
163
|
callback(null, '', '');
|
|
122
164
|
}
|
|
165
|
+
// biome-ignore lint/suspicious/noExplicitAny: mock return
|
|
166
|
+
return {};
|
|
123
167
|
});
|
|
124
168
|
mockFs.existsSync.mockReturnValue(true);
|
|
125
169
|
mockFs.readFileSync.mockReturnValue(JSON.stringify({}));
|
|
126
|
-
const
|
|
170
|
+
const promise = handleAutostart(true);
|
|
171
|
+
await vi.runAllTimersAsync();
|
|
172
|
+
const result = await promise;
|
|
127
173
|
expect(result).toBe(true);
|
|
128
174
|
});
|
|
129
175
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autostart.test.js","sourceRoot":"","sources":["../../src/__tests__/autostart.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autostart.test.js","sourceRoot":"","sources":["../../src/__tests__/autostart.test.ts"],"names":[],"mappings":"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"}
|