11import { describe , it , expect , beforeEach , vi } from 'vitest'
2- import { mount } from '@vue/test-utils'
2+ import { mount , flushPromises } from '@vue/test-utils'
33import ApplicationSpaceSettings from '@/components/application_spaces/ApplicationSpaceSettings.vue'
44import { ElMessage } from 'element-plus'
55
6- vi . mock ( 'element-plus' , ( ) => ( {
7- ElMessage : {
8- success : vi . fn ( ) ,
9- warning : vi . fn ( )
10- }
11- } ) )
6+ vi . mock ( 'element-plus' , ( ) => {
7+ const ElMessage = vi . fn ( )
8+ ElMessage . success = vi . fn ( )
9+ ElMessage . warning = vi . fn ( )
10+ const ElMessageBox = vi . fn ( ( ) => Promise . resolve ( ) )
11+ return { ElMessage, ElMessageBox }
12+ } )
1213
1314vi . mock ( '../../../packs/useFetchApi' , ( ) => ( {
1415 default : ( ) => ( {
1516 post : ( ) => ( {
1617 json : ( ) =>
1718 Promise . resolve ( {
18- response : { ok : true } ,
19+ response : { value : { ok : true , status : 200 } } ,
1920 data : { value : { msg : 'Success' } } ,
2021 error : { value : null }
2122 } )
@@ -53,14 +54,12 @@ const createWrapper = (props = {}) => {
5354 applicationSpaceDesc : 'Test Description' ,
5455 default_branch : 'main' ,
5556 appStatus : 'Running' ,
56- sdk : 'gradio' , // Add default sdk
5757 ...props
5858 } ,
5959 global : {
6060 mocks : {
6161 $t : ( key , params ) => {
6262 if ( key === 'application_spaces.edit.updateSuccess' ) return 'Success'
63- if ( key === 'application_spaces.sdkType' ) return 'SDK Type'
6463 if ( key === 'all.unknown' ) return 'Unknown'
6564 return key
6665 }
@@ -85,21 +84,87 @@ describe('ApplicationSpaceSettings', () => {
8584
8685 it ( 'displays space path correctly' , ( ) => {
8786 const pathElements = wrapper . findAll ( '.bg-gray-50' )
88- expect ( pathElements ) . toHaveLength ( 2 ) // SDK type + space path
89- expect ( pathElements [ 1 ] . text ( ) ) . toBe ( 'test/application_space' ) // second element is the space path
87+ expect ( pathElements ) . toHaveLength ( 1 )
88+ expect ( pathElements [ 0 ] . text ( ) ) . toBe ( 'test/application_space' )
9089 } )
9190
9291 it ( 'updates application space nickname when button is clicked' , async ( ) => {
9392 const wrapper = createWrapper ( )
9493 await wrapper . setData ( { theApplicationSpaceNickname : 'New Name' } )
95- await wrapper . findComponent ( '[data-test="update-nickname"]' ) . vm . $emit ( 'click' )
94+ await wrapper . vm . updateNickname ( )
95+ await flushPromises ( )
9696 expect ( ElMessage . success ) . toHaveBeenCalledWith ( 'Success' )
9797 } )
9898
9999 it ( 'update application space description when button is clicked' , async ( ) => {
100100 const wrapper = createWrapper ( )
101101 await wrapper . setData ( { theApplicationSpaceDesc : 'New Description' } )
102- await wrapper . findComponent ( '[data-test="update-description"]' ) . vm . $emit ( 'click' )
102+ await wrapper . vm . updateApplicationSpaceDesc ( )
103+ await flushPromises ( )
103104 expect ( ElMessage . success ) . toHaveBeenCalledWith ( 'Success' )
104105 } )
106+
107+ it ( 'updates cloud resource and refreshes repo' , async ( ) => {
108+ const wrapper = createWrapper ( { cloudResource : '1' } )
109+ await wrapper . setData ( { theCloudResource : '2' } )
110+ await wrapper . vm . updateApplicationSpaceCloudResource ( )
111+ expect ( ElMessage . success ) . toHaveBeenCalled ( )
112+ expect ( mockFetchRepoDetail ) . toHaveBeenCalled ( )
113+ } )
114+
115+ it ( 'updates env and refreshes repo detail' , async ( ) => {
116+ const wrapper = createWrapper ( )
117+ await wrapper . setData ( { envJSON : '{"A":"1"}' , secretJSON : '{"B":"2"}' } )
118+ await wrapper . find ( '[data-test="update-mcp-env"]' ) . trigger ( 'click' )
119+ expect ( ElMessage . success ) . toHaveBeenCalled ( )
120+ expect ( mockFetchRepoDetail ) . toHaveBeenCalled ( )
121+ } )
122+
123+ it ( 'stops space successfully' , async ( ) => {
124+ const wrapper = createWrapper ( { appStatus : 'Running' } )
125+ const ok = await wrapper . vm . stopSpace ( )
126+ expect ( ok ) . toBe ( true )
127+ expect ( ElMessage . success ) . toHaveBeenCalled ( )
128+ } )
129+
130+ it ( 'restarts space successfully' , async ( ) => {
131+ const wrapper = createWrapper ( { appStatus : 'Stopped' } )
132+ const ok = await wrapper . vm . restartSpace ( )
133+ expect ( ok ) . toBe ( true )
134+ expect ( ElMessage . success ) . toHaveBeenCalled ( )
135+ } )
136+
137+ it ( 'change visibility confirmed by ElMessageBox' , async ( ) => {
138+ const wrapper = createWrapper ( )
139+ await wrapper . vm . changeVisibility ( 'Private' )
140+ await flushPromises ( )
141+ expect ( ElMessage . success ) . toHaveBeenCalled ( )
142+ expect ( mockFetchRepoDetail ) . toHaveBeenCalled ( )
143+ } )
144+
145+ it ( 'change visibility canceled reverts selection and warns' , async ( ) => {
146+ const { ElMessageBox } = await import ( 'element-plus' )
147+ ElMessageBox . mockImplementationOnce ( ( ) => Promise . reject ( ) )
148+ const wrapper = createWrapper ( )
149+ await wrapper . vm . changeVisibility ( 'Private' )
150+ await flushPromises ( )
151+ expect ( ElMessage ) . toHaveBeenCalled ( )
152+ } )
153+
154+ it ( 'emits showSpaceLogs when error banner link clicked' , async ( ) => {
155+ const wrapper = createWrapper ( { appStatus : 'DeployFailed' } )
156+ await wrapper . find ( 'p.text-brand-700' ) . trigger ( 'click' )
157+ expect ( wrapper . emitted ( 'showSpaceLogs' ) ) . toBeTruthy ( )
158+ } )
159+
160+ it ( 'updates docker variables when variables exist' , async ( ) => {
161+ const wrapper = createWrapper ( { variables : { FOO : 'bar' } } )
162+ await wrapper . setData ( { theVariables : { FOO : 'baz' } } )
163+ const btn = wrapper . find ( '[data-test="update-varibles"]' )
164+ expect ( btn . exists ( ) ) . toBe ( true )
165+ await btn . trigger ( 'click' )
166+ expect ( ElMessage . success ) . toHaveBeenCalled ( )
167+ expect ( mockFetchRepoDetail ) . toHaveBeenCalled ( )
168+ } )
105169} )
170+
0 commit comments