@@ -7,69 +7,108 @@ import {
77} from '../../../test/helpers/mocks.mts'
88
99// Mock the dependencies.
10- vi . mock ( '../../utils/sdk.mts' , ( ) => ( {
11- withSdk : vi . fn ( ) ,
10+ vi . mock ( '../../utils/socket/api.mts' , ( ) => ( {
11+ handleApiCall : vi . fn ( ) ,
12+ } ) )
13+
14+ vi . mock ( '../../utils/socket/sdk.mts' , ( ) => ( {
15+ setupSdk : vi . fn ( ) ,
1216} ) )
1317
1418describe ( 'fetchDeleteRepo' , ( ) => {
1519 beforeEach ( ( ) => {
1620 vi . clearAllMocks ( )
1721 } )
18- it ( 'deletes repository successfully' , async ( ) => {
19- const { withSdk } = await import ( '../../utils/sdk.mts' )
20- const mockWithSdk = vi . mocked ( withSdk )
2122
22- const successResult = createSuccessResult ( {
23- id : 'repo-123' ,
24- name : 'deleted-repo' ,
25- status : 'deleted' ,
26- } )
23+ it ( 'deletes repository successfully' , async ( ) => {
24+ const { setupSdk } = await vi . importMock ( '../../utils/socket/sdk.mts' )
25+ const { handleApiCall } = await vi . importMock ( '../../utils/socket/api.mts' )
26+ const mockSetupSdk = vi . mocked ( setupSdk )
27+ const mockHandleApi = vi . mocked ( handleApiCall )
28+
29+ const mockSdk = {
30+ deleteRepository : vi . fn ( ) . mockResolvedValue ( {
31+ success : true ,
32+ data : {
33+ id : 'repo-123' ,
34+ name : 'deleted-repo' ,
35+ status : 'deleted' ,
36+ } ,
37+ } ) ,
38+ }
2739
28- mockWithSdk . mockResolvedValueOnce ( successResult )
40+ mockSetupSdk . mockResolvedValue ( createSuccessResult ( mockSdk as any ) )
41+ mockHandleApi . mockResolvedValue (
42+ createSuccessResult ( {
43+ id : 'repo-123' ,
44+ name : 'deleted-repo' ,
45+ status : 'deleted' ,
46+ } ) ,
47+ )
2948
3049 const result = await fetchDeleteRepo ( 'test-org' , 'deleted-repo' )
3150
32- expect ( mockWithSdk ) . toHaveBeenCalledWith (
33- expect . any ( Function ) ,
34- 'to delete a repository' ,
35- undefined ,
51+ expect ( mockSdk . deleteRepository ) . toHaveBeenCalledWith (
52+ 'test-org' ,
53+ 'deleted-repo' ,
3654 )
37- expect ( result ) . toEqual ( successResult )
55+ expect ( mockHandleApi ) . toHaveBeenCalledWith ( expect . any ( Promise ) , {
56+ description : 'to delete a repository' ,
57+ } )
58+ expect ( result . ok ) . toBe ( true )
3859 } )
3960
4061 it ( 'handles SDK setup failure' , async ( ) => {
41- const { withSdk } = await import ( '../../utils/sdk.mts' )
42- const mockWithSdk = vi . mocked ( withSdk )
43-
44- const error = createErrorResult ( 'Failed to setup SDK' , {
45- code : 1 ,
46- cause : 'Missing API token' ,
47- } )
48- mockWithSdk . mockResolvedValueOnce ( error )
62+ const { setupSdk } = await vi . importMock ( '../../utils/socket/sdk.mts' )
63+ const mockSetupSdk = vi . mocked ( setupSdk )
64+
65+ mockSetupSdk . mockResolvedValue (
66+ createErrorResult ( 'Failed to setup SDK' , {
67+ code : 1 ,
68+ cause : 'Missing API token' ,
69+ } ) ,
70+ )
4971
5072 const result = await fetchDeleteRepo ( 'org' , 'repo' )
5173
52- expect ( result ) . toEqual ( error )
74+ expect ( result . ok ) . toBe ( false )
5375 } )
5476
5577 it ( 'handles API call failure' , async ( ) => {
56- const { withSdk } = await import ( '../../utils/sdk.mts' )
57- const mockWithSdk = vi . mocked ( withSdk )
78+ const { setupSdk } = await vi . importMock ( '../../utils/socket/sdk.mts' )
79+ const { handleApiCall } = await vi . importMock ( '../../utils/socket/api.mts' )
80+ const mockSetupSdk = vi . mocked ( setupSdk )
81+ const mockHandleApi = vi . mocked ( handleApiCall )
5882
59- const error = createErrorResult ( 'Repository not found' , { code : 404 } )
60- mockWithSdk . mockResolvedValueOnce ( error )
83+ const mockSdk = {
84+ deleteRepository : vi . fn ( ) . mockRejectedValue ( new Error ( 'Repository not found' ) ) ,
85+ }
86+
87+ mockSetupSdk . mockResolvedValue ( createSuccessResult ( mockSdk as any ) )
88+ mockHandleApi . mockResolvedValue (
89+ createErrorResult ( 'Repository not found' , { code : 404 } ) ,
90+ )
6191
6292 const result = await fetchDeleteRepo ( 'org' , 'nonexistent-repo' )
6393
6494 expect ( result . ok ) . toBe ( false )
65- expect ( result . code ) . toBe ( 404 )
95+ if ( ! result . ok ) {
96+ expect ( result . code ) . toBe ( 404 )
97+ }
6698 } )
6799
68100 it ( 'passes custom SDK options' , async ( ) => {
69- const { withSdk } = await import ( '../../utils/sdk.mts' )
70- const mockWithSdk = vi . mocked ( withSdk )
101+ const { setupSdk } = await vi . importMock ( '../../utils/socket/sdk.mts' )
102+ const { handleApiCall } = await vi . importMock ( '../../utils/socket/api.mts' )
103+ const mockSetupSdk = vi . mocked ( setupSdk )
104+ const mockHandleApi = vi . mocked ( handleApiCall )
105+
106+ const mockSdk = {
107+ deleteRepository : vi . fn ( ) . mockResolvedValue ( { } ) ,
108+ }
71109
72- mockWithSdk . mockResolvedValueOnce ( createSuccessResult ( { } ) )
110+ mockSetupSdk . mockResolvedValue ( createSuccessResult ( mockSdk as any ) )
111+ mockHandleApi . mockResolvedValue ( createSuccessResult ( { } ) )
73112
74113 const sdkOpts = {
75114 apiToken : 'delete-token' ,
@@ -78,56 +117,29 @@ describe('fetchDeleteRepo', () => {
78117
79118 await fetchDeleteRepo ( 'my-org' , 'old-repo' , { sdkOpts } )
80119
81- expect ( mockWithSdk ) . toHaveBeenCalledWith (
82- expect . any ( Function ) ,
83- 'to delete a repository' ,
84- { sdkOpts } ,
85- )
120+ expect ( mockSetupSdk ) . toHaveBeenCalledWith ( sdkOpts )
86121 } )
87122
88123 it ( 'handles insufficient permissions error' , async ( ) => {
89- const { withSdk } = await import ( '../../utils/sdk.mts' )
90- const mockWithSdk = vi . mocked ( withSdk )
91-
92- const error = createErrorResult ( 'Insufficient permissions' , { code : 403 } )
93- mockWithSdk . mockResolvedValueOnce ( error )
94-
95- const result = await fetchDeleteRepo ( 'protected-org' , 'protected-repo' )
96-
97- expect ( result . ok ) . toBe ( false )
98- expect ( result . code ) . toBe ( 403 )
99- } )
100-
101- it ( 'handles special repository names' , async ( ) => {
102- const { withSdk } = await import ( '../../utils/sdk.mts' )
103- const mockWithSdk = vi . mocked ( withSdk )
124+ const { setupSdk } = await vi . importMock ( '../../utils/socket/sdk.mts' )
125+ const { handleApiCall } = await vi . importMock ( '../../utils/socket/api.mts' )
126+ const mockSetupSdk = vi . mocked ( setupSdk )
127+ const mockHandleApi = vi . mocked ( handleApiCall )
104128
105- mockWithSdk . mockResolvedValueOnce ( createSuccessResult ( { } ) )
106-
107- const result = await fetchDeleteRepo (
108- 'special-org' ,
109- 'repo-with-hyphens_and_underscores' ,
110- )
129+ const mockSdk = {
130+ deleteRepository : vi . fn ( ) . mockRejectedValue ( new Error ( 'Insufficient permissions' ) ) ,
131+ }
111132
112- expect ( mockWithSdk ) . toHaveBeenCalledWith (
113- expect . any ( Function ) ,
114- 'to delete a repository' ,
115- undefined ,
133+ mockSetupSdk . mockResolvedValue ( createSuccessResult ( mockSdk as any ) )
134+ mockHandleApi . mockResolvedValue (
135+ createErrorResult ( 'Insufficient permissions' , { code : 403 } ) ,
116136 )
117- expect ( result . ok ) . toBe ( true )
118- } )
119-
120- it ( 'uses null prototype for options' , async ( ) => {
121- const { withSdk } = await import ( '../../utils/sdk.mts' )
122- const mockWithSdk = vi . mocked ( withSdk )
123-
124- mockWithSdk . mockResolvedValueOnce ( createSuccessResult ( { } ) )
125137
126- // This tests that the function properly works with __proto__: null pattern
127- const result = await fetchDeleteRepo ( 'test-org' , 'test-repo' )
138+ const result = await fetchDeleteRepo ( 'protected-org' , 'protected-repo' )
128139
129- // The function should work without prototype pollution issues
130- expect ( mockWithSdk ) . toHaveBeenCalled ( )
131- expect ( result . ok ) . toBe ( true )
140+ expect ( result . ok ) . toBe ( false )
141+ if ( ! result . ok ) {
142+ expect ( result . code ) . toBe ( 403 )
143+ }
132144 } )
133145} )
0 commit comments