Skip to content

Commit d968484

Browse files
committed
fix(test): correct mock setup for repository output tests
Replace setupStandardOutputMocks() helper with explicit top-level vi.mock() declarations to ensure proper Vitest mock hoisting. Update all tests to use vi.importMock() for mocked dependencies and dynamic imports for functions under test. Fixes 5 test files with 40 tests: - output-create-repo.test.mts (8 tests) - output-delete-repo.test.mts (8 tests) - output-list-repos.test.mts (8 tests) - output-update-repo.test.mts (8 tests) - output-view-repo.test.mts (8 tests)
1 parent 6e9347b commit d968484

File tree

5 files changed

+175
-73
lines changed

5 files changed

+175
-73
lines changed

packages/cli/src/commands/repository/output-create-repo.test.mts

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
import { beforeEach, describe, expect, it, vi } from 'vitest'
22

3-
import { outputCreateRepo } from './output-create-repo.mts'
4-
import { setupStandardOutputMocks } from '../../../test/helpers/index.mts'
5-
63
import type { CResult } from '../../types.mts'
74
import type { SocketSdkSuccessResult } from '@socketsecurity/sdk'
85

9-
setupStandardOutputMocks()
6+
// Mock the dependencies.
7+
vi.mock('@socketsecurity/lib/logger', () => ({
8+
logger: {
9+
fail: vi.fn(),
10+
log: vi.fn(),
11+
success: vi.fn(),
12+
},
13+
}))
14+
15+
vi.mock('../../utils/output/result-json.mjs', () => ({
16+
serializeResultJson: vi.fn(result => JSON.stringify(result)),
17+
}))
18+
19+
vi.mock('../../utils/error/fail-msg-with-badge.mts', () => ({
20+
failMsgWithBadge: vi.fn((msg, cause) => `${msg}: ${cause}`),
21+
}))
1022

1123
describe('outputCreateRepo', () => {
1224
beforeEach(() => {
@@ -15,9 +27,10 @@ describe('outputCreateRepo', () => {
1527
})
1628

1729
it('outputs JSON format for successful result', async () => {
18-
const { logger } = await import('@socketsecurity/lib/logger')
19-
const { serializeResultJson } = await import(
20-
'../../utils/serialize-result-json.mts'
30+
const { outputCreateRepo } = await import('./output-create-repo.mts')
31+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
32+
const { serializeResultJson } = await vi.importMock(
33+
'../../utils/output/result-json.mjs'
2134
)
2235
const mockLog = vi.mocked(logger.log)
2336
const mockSerialize = vi.mocked(serializeResultJson)
@@ -37,7 +50,8 @@ describe('outputCreateRepo', () => {
3750
})
3851

3952
it('outputs error in JSON format', async () => {
40-
const { logger } = await import('@socketsecurity/lib/logger')
53+
const { outputCreateRepo } = await import('./output-create-repo.mts')
54+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
4155
const mockLog = vi.mocked(logger.log)
4256

4357
const result: CResult<SocketSdkSuccessResult<'createRepository'>['data']> = {
@@ -54,7 +68,8 @@ describe('outputCreateRepo', () => {
5468
})
5569

5670
it('outputs success message when slug matches requested name', async () => {
57-
const { logger } = await import('@socketsecurity/lib/logger')
71+
const { outputCreateRepo } = await import('./output-create-repo.mts')
72+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
5873
const mockSuccess = vi.mocked(logger.success)
5974

6075
const result: CResult<SocketSdkSuccessResult<'createRepository'>['data']> = {
@@ -73,7 +88,8 @@ describe('outputCreateRepo', () => {
7388
})
7489

7590
it('outputs success message with warning when slug differs from requested name', async () => {
76-
const { logger } = await import('@socketsecurity/lib/logger')
91+
const { outputCreateRepo } = await import('./output-create-repo.mts')
92+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
7793
const mockSuccess = vi.mocked(logger.success)
7894

7995
const result: CResult<SocketSdkSuccessResult<'createRepository'>['data']> = {
@@ -92,9 +108,10 @@ describe('outputCreateRepo', () => {
92108
})
93109

94110
it('outputs error in text format', async () => {
95-
const { logger } = await import('@socketsecurity/lib/logger')
96-
const { failMsgWithBadge } = await import(
97-
'../../utils/fail-msg-with-badge.mts'
111+
const { outputCreateRepo } = await import('./output-create-repo.mts')
112+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
113+
const { failMsgWithBadge } = await vi.importMock(
114+
'../../utils/error/fail-msg-with-badge.mts'
98115
)
99116
const mockFail = vi.mocked(logger.fail)
100117
const mockFailMsg = vi.mocked(failMsgWithBadge)
@@ -117,7 +134,8 @@ describe('outputCreateRepo', () => {
117134
})
118135

119136
it('handles markdown output format', async () => {
120-
const { logger } = await import('@socketsecurity/lib/logger')
137+
const { outputCreateRepo } = await import('./output-create-repo.mts')
138+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
121139
const mockSuccess = vi.mocked(logger.success)
122140

123141
const result: CResult<SocketSdkSuccessResult<'createRepository'>['data']> = {
@@ -135,7 +153,8 @@ describe('outputCreateRepo', () => {
135153
})
136154

137155
it('handles empty slug properly', async () => {
138-
const { logger } = await import('@socketsecurity/lib/logger')
156+
const { outputCreateRepo } = await import('./output-create-repo.mts')
157+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
139158
const mockSuccess = vi.mocked(logger.success)
140159

141160
const result: CResult<SocketSdkSuccessResult<'createRepository'>['data']> = {
@@ -153,6 +172,7 @@ describe('outputCreateRepo', () => {
153172
})
154173

155174
it('sets default exit code when code is undefined', async () => {
175+
const { outputCreateRepo } = await import('./output-create-repo.mts')
156176
const result: CResult<SocketSdkSuccessResult<'createRepository'>['data']> = {
157177
ok: false,
158178
message: 'Error without code',

packages/cli/src/commands/repository/output-delete-repo.test.mts

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,29 @@
11
import { beforeEach, describe, expect, it, vi } from 'vitest'
22

3-
import { outputDeleteRepo } from './output-delete-repo.mts'
43
import {
54
createErrorResult,
65
createSuccessResult,
7-
setupStandardOutputMocks,
86
} from '../../../test/helpers/index.mts'
97

108
import type { CResult } from '../../types.mts'
119
import type { SocketSdkSuccessResult } from '@socketsecurity/sdk'
1210

13-
setupStandardOutputMocks()
11+
// Mock the dependencies.
12+
vi.mock('@socketsecurity/lib/logger', () => ({
13+
logger: {
14+
fail: vi.fn(),
15+
log: vi.fn(),
16+
success: vi.fn(),
17+
},
18+
}))
19+
20+
vi.mock('../../utils/output/result-json.mjs', () => ({
21+
serializeResultJson: vi.fn(result => JSON.stringify(result)),
22+
}))
23+
24+
vi.mock('../../utils/error/fail-msg-with-badge.mts', () => ({
25+
failMsgWithBadge: vi.fn((msg, cause) => `${msg}: ${cause}`),
26+
}))
1427

1528
describe('outputDeleteRepo', () => {
1629
beforeEach(() => {
@@ -19,9 +32,10 @@ describe('outputDeleteRepo', () => {
1932
})
2033

2134
it('outputs JSON format for successful result', async () => {
22-
const { logger } = await import('@socketsecurity/lib/logger')
23-
const { serializeResultJson } = await import(
24-
'../../utils/serialize/result-json.mts'
35+
const { outputDeleteRepo } = await import('./output-delete-repo.mts')
36+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
37+
const { serializeResultJson } = await vi.importMock(
38+
'../../utils/output/result-json.mjs'
2539
)
2640
const mockLog = vi.mocked(logger.log)
2741
const mockSerialize = vi.mocked(serializeResultJson)
@@ -39,7 +53,8 @@ describe('outputDeleteRepo', () => {
3953
})
4054

4155
it('outputs error in JSON format', async () => {
42-
const { logger } = await import('@socketsecurity/lib/logger')
56+
const { outputDeleteRepo } = await import('./output-delete-repo.mts')
57+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
4358
const mockLog = vi.mocked(logger.log)
4459

4560
const result: CResult<SocketSdkSuccessResult<'deleteRepository'>['data']> =
@@ -55,7 +70,8 @@ describe('outputDeleteRepo', () => {
5570
})
5671

5772
it('outputs success message for successful deletion', async () => {
58-
const { logger } = await import('@socketsecurity/lib/logger')
73+
const { outputDeleteRepo } = await import('./output-delete-repo.mts')
74+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
5975
const mockSuccess = vi.mocked(logger.success)
6076

6177
const result: CResult<SocketSdkSuccessResult<'deleteRepository'>['data']> =
@@ -72,8 +88,9 @@ describe('outputDeleteRepo', () => {
7288
})
7389

7490
it('outputs error in text format', async () => {
75-
const { logger } = await import('@socketsecurity/lib/logger')
76-
const { failMsgWithBadge } = await import(
91+
const { outputDeleteRepo } = await import('./output-delete-repo.mts')
92+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
93+
const { failMsgWithBadge } = await vi.importMock(
7794
'../../utils/error/fail-msg-with-badge.mts'
7895
)
7996
const mockFail = vi.mocked(logger.fail)
@@ -96,7 +113,8 @@ describe('outputDeleteRepo', () => {
96113
})
97114

98115
it('handles markdown output format', async () => {
99-
const { logger } = await import('@socketsecurity/lib/logger')
116+
const { outputDeleteRepo } = await import('./output-delete-repo.mts')
117+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
100118
const mockSuccess = vi.mocked(logger.success)
101119

102120
const result: CResult<SocketSdkSuccessResult<'deleteRepository'>['data']> =
@@ -112,7 +130,8 @@ describe('outputDeleteRepo', () => {
112130
})
113131

114132
it('handles repository name with special characters', async () => {
115-
const { logger } = await import('@socketsecurity/lib/logger')
133+
const { outputDeleteRepo } = await import('./output-delete-repo.mts')
134+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
116135
const mockSuccess = vi.mocked(logger.success)
117136

118137
const result: CResult<SocketSdkSuccessResult<'deleteRepository'>['data']> =
@@ -128,7 +147,8 @@ describe('outputDeleteRepo', () => {
128147
})
129148

130149
it('handles empty repository name', async () => {
131-
const { logger } = await import('@socketsecurity/lib/logger')
150+
const { outputDeleteRepo } = await import('./output-delete-repo.mts')
151+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
132152
const mockSuccess = vi.mocked(logger.success)
133153

134154
const result: CResult<SocketSdkSuccessResult<'deleteRepository'>['data']> =
@@ -144,6 +164,7 @@ describe('outputDeleteRepo', () => {
144164
})
145165

146166
it('sets default exit code when code is undefined', async () => {
167+
const { outputDeleteRepo } = await import('./output-delete-repo.mts')
147168
const result: CResult<SocketSdkSuccessResult<'deleteRepository'>['data']> =
148169
createErrorResult('Error without code')
149170

packages/cli/src/commands/repository/output-list-repos.test.mts

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,29 @@
11
import { beforeEach, describe, expect, it, vi } from 'vitest'
22

3-
import { outputListRepos } from './output-list-repos.mts'
43
import {
54
createErrorResult,
65
createSuccessResult,
7-
setupStandardOutputMocks,
86
} from '../../../test/helpers/index.mts'
97

108
import type { CResult } from '../../types.mts'
119
import type { SocketSdkSuccessResult } from '@socketsecurity/sdk'
1210

13-
setupStandardOutputMocks()
11+
// Mock the dependencies.
12+
vi.mock('@socketsecurity/lib/logger', () => ({
13+
logger: {
14+
fail: vi.fn(),
15+
info: vi.fn(),
16+
log: vi.fn(),
17+
},
18+
}))
19+
20+
vi.mock('../../utils/output/result-json.mjs', () => ({
21+
serializeResultJson: vi.fn(result => JSON.stringify(result)),
22+
}))
23+
24+
vi.mock('../../utils/error/fail-msg-with-badge.mts', () => ({
25+
failMsgWithBadge: vi.fn((msg, cause) => `${msg}: ${cause}`),
26+
}))
1427

1528
vi.mock('chalk-table', () => ({
1629
default: vi.fn((_options, data) => `Table with ${data.length} rows`),
@@ -29,9 +42,10 @@ describe('outputListRepos', () => {
2942
})
3043

3144
it('outputs JSON format for successful result with pagination', async () => {
32-
const { logger } = await import('@socketsecurity/lib/logger')
33-
const { serializeResultJson } = await import(
34-
'../../utils/serialize/result-json.mts'
45+
const { outputListRepos } = await import('./output-list-repos.mts')
46+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
47+
const { serializeResultJson } = await vi.importMock(
48+
'../../utils/output/result-json.mjs'
3549
)
3650
const mockLog = vi.mocked(logger.log)
3751
const mockSerialize = vi.mocked(serializeResultJson)
@@ -67,7 +81,8 @@ describe('outputListRepos', () => {
6781
})
6882

6983
it('outputs error in JSON format', async () => {
70-
const { logger } = await import('@socketsecurity/lib/logger')
84+
const { outputListRepos } = await import('./output-list-repos.mts')
85+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
7186
const mockLog = vi.mocked(logger.log)
7287

7388
const result: CResult<SocketSdkSuccessResult<'listRepositories'>['data']> =
@@ -83,8 +98,9 @@ describe('outputListRepos', () => {
8398
})
8499

85100
it('outputs text format with repository table', async () => {
86-
const { logger } = await import('@socketsecurity/lib/logger')
87-
const chalkTable = await import('chalk-table')
101+
const { outputListRepos } = await import('./output-list-repos.mts')
102+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
103+
const chalkTable = await vi.importMock('chalk-table')
88104
const mockLog = vi.mocked(logger.log)
89105
const mockInfo = vi.mocked(logger.info)
90106
const mockChalkTable = vi.mocked(chalkTable.default)
@@ -137,8 +153,9 @@ describe('outputListRepos', () => {
137153
})
138154

139155
it('outputs error in text format', async () => {
140-
const { logger } = await import('@socketsecurity/lib/logger')
141-
const { failMsgWithBadge } = await import(
156+
const { outputListRepos } = await import('./output-list-repos.mts')
157+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
158+
const { failMsgWithBadge } = await vi.importMock(
142159
'../../utils/error/fail-msg-with-badge.mts'
143160
)
144161
const mockFail = vi.mocked(logger.fail)
@@ -161,7 +178,8 @@ describe('outputListRepos', () => {
161178
})
162179

163180
it('shows proper message when on last page', async () => {
164-
const { logger } = await import('@socketsecurity/lib/logger')
181+
const { outputListRepos } = await import('./output-list-repos.mts')
182+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
165183
const mockInfo = vi.mocked(logger.info)
166184

167185
const result: CResult<SocketSdkSuccessResult<'listRepositories'>['data']> =
@@ -185,7 +203,8 @@ describe('outputListRepos', () => {
185203
})
186204

187205
it('shows proper message when displaying entire list', async () => {
188-
const { logger } = await import('@socketsecurity/lib/logger')
206+
const { outputListRepos } = await import('./output-list-repos.mts')
207+
const { logger } = await vi.importMock('@socketsecurity/lib/logger')
189208
const mockInfo = vi.mocked(logger.info)
190209

191210
const result: CResult<SocketSdkSuccessResult<'listRepositories'>['data']> =
@@ -209,8 +228,9 @@ describe('outputListRepos', () => {
209228
})
210229

211230
it('handles empty repository list', async () => {
212-
const { logger: _logger } = await import('@socketsecurity/lib/logger')
213-
const chalkTable = await import('chalk-table')
231+
const { outputListRepos } = await import('./output-list-repos.mts')
232+
const { logger: _logger } = await vi.importMock('@socketsecurity/lib/logger')
233+
const chalkTable = await vi.importMock('chalk-table')
214234
const mockChalkTable = vi.mocked(chalkTable.default)
215235

216236
const result: CResult<SocketSdkSuccessResult<'listRepositories'>['data']> =
@@ -224,6 +244,7 @@ describe('outputListRepos', () => {
224244
})
225245

226246
it('sets default exit code when code is undefined', async () => {
247+
const { outputListRepos } = await import('./output-list-repos.mts')
227248
const result: CResult<SocketSdkSuccessResult<'listRepositories'>['data']> =
228249
createErrorResult('Error without code')
229250

0 commit comments

Comments
 (0)