@@ -17,17 +17,29 @@ test.describe('data transfer', () => {
1717 await expect
1818 . poll ( async ( ) => ( await getMockCalls ( page ) ) . some ( ( call ) => call . cmd === 'export_data' ) )
1919 . toBe ( true )
20+
21+ await expect ( page . getByText ( 'The export is complete.' ) ) . toBeVisible ( )
22+ await expect
23+ . poll ( async ( ) => {
24+ const calls = await getMockCalls ( page )
25+ const revealCall = calls . find ( ( call ) => call . cmd === 'show_item_in_folder' )
26+ return revealCall ? firstInvokeArg ( revealCall ) : null
27+ } )
28+ . toBe ( '/Users/e2e/exports/switchhosts_20260509_121436.789.json' )
2029 } )
2130
2231 test ( 'imports backup data from a file' , async ( { page } ) => {
2332 await clearMockCalls ( page )
33+ await page . evaluate ( ( ) => window . __SWITCHHOSTS_E2E__ . delayNextImport ( 600 ) )
2434
2535 await page . getByLabel ( 'Settings' ) . click ( )
2636 await page . getByRole ( 'menuitem' , { name : / ^ I m p o r t $ / } ) . click ( )
2737
38+ await expect ( page . getByText ( 'Loading...' ) . first ( ) ) . toBeVisible ( )
2839 await expect ( page . locator ( '[data-id="imported-local"]' ) ) . toContainText ( 'Imported Backup' )
2940 await expect ( page . locator ( '[data-id="imported-folder"]' ) ) . toContainText ( 'Imported Folder' )
3041 await expect ( page . locator ( '[data-id="imported-group"]' ) ) . toContainText ( 'Imported Group' )
42+ await expect ( page . getByText ( 'The import is complete.' ) ) . toBeVisible ( )
3143 await expect
3244 . poll ( async ( ) => {
3345 const state = await getMockState ( page )
@@ -47,6 +59,19 @@ test.describe('data transfer', () => {
4759 expect ( calls . some ( ( call ) => call . cmd === 'import_data' ) ) . toBe ( true )
4860 } )
4961
62+ test ( 'shows an error notification when file import fails' , async ( { page } ) => {
63+ await clearMockCalls ( page )
64+ await page . evaluate ( ( ) => window . __SWITCHHOSTS_E2E__ . failNextImport ( 'mock_import_error' ) )
65+
66+ await page . getByLabel ( 'Settings' ) . click ( )
67+ await page . getByRole ( 'menuitem' , { name : / ^ I m p o r t $ / } ) . click ( )
68+
69+ await expect ( page . getByText ( 'Import failed! [mock_import_error]' ) ) . toBeVisible ( )
70+
71+ const calls = await getMockCalls ( page )
72+ expect ( calls . some ( ( call ) => call . cmd === 'import_data' ) ) . toBe ( true )
73+ } )
74+
5075 test ( 'imports backup data from a URL' , async ( { page } ) => {
5176 await clearMockCalls ( page )
5277
@@ -62,6 +87,7 @@ test.describe('data transfer', () => {
6287 await expect ( page . locator ( '[data-id="imported-url"]' ) ) . toContainText ( 'Imported From URL' )
6388 await page . locator ( '[data-id="imported-url"]' ) . click ( )
6489 await expect ( page . getByText ( importUrl ) ) . toBeVisible ( )
90+ await expect ( page . getByText ( 'The import is complete.' ) ) . toBeVisible ( )
6591 await expect
6692 . poll ( async ( ) => {
6793 const state = await getMockState ( page )
@@ -77,4 +103,24 @@ test.describe('data transfer', () => {
77103 expect ( importCall ) . toBeDefined ( )
78104 expect ( firstInvokeArg ( importCall ! ) ) . toBe ( importUrl )
79105 } )
106+
107+ test ( 'shows an error notification when URL import fails' , async ( { page } ) => {
108+ await clearMockCalls ( page )
109+ await page . evaluate ( ( ) => window . __SWITCHHOSTS_E2E__ . failNextImportFromUrl ( 'mock_url_error' ) )
110+
111+ const importUrl = 'https://example.test/swh_data.json'
112+ await page . getByLabel ( 'Settings' ) . click ( )
113+ await page . getByRole ( 'menuitem' , { name : 'Import from URL' } ) . click ( )
114+
115+ const dialog = page . getByRole ( 'dialog' )
116+ await dialog . locator ( 'input' ) . fill ( importUrl )
117+ await dialog . getByRole ( 'button' , { name : 'OK' } ) . click ( )
118+
119+ await expect ( page . getByText ( 'Import failed! [mock_url_error]' ) ) . toBeVisible ( )
120+
121+ const calls = await getMockCalls ( page )
122+ const importCall = calls . find ( ( call ) => call . cmd === 'import_data_from_url' )
123+ expect ( importCall ) . toBeDefined ( )
124+ expect ( firstInvokeArg ( importCall ! ) ) . toBe ( importUrl )
125+ } )
80126} )
0 commit comments