@@ -47,7 +47,6 @@ describe('App', () => {
4747 const mockClearConversionError = vi . fn ( ) ;
4848 const mockClearResult = vi . fn ( ) ;
4949 const mockRetryPreviewFetch = vi . fn ( ) ;
50- const mockRestoreResult = vi . fn ( ) ;
5150
5251 beforeEach ( ( ) => {
5352 vi . clearAllMocks ( ) ;
@@ -91,7 +90,6 @@ describe('App', () => {
9190 clearError : mockClearConversionError ,
9291 clearResult : mockClearResult ,
9392 retryPreviewFetch : mockRetryPreviewFetch ,
94- restoreResult : mockRestoreResult ,
9593 } ) ;
9694 } ) ;
9795
@@ -104,7 +102,7 @@ describe('App', () => {
104102 expect ( screen . queryByRole ( 'combobox' ) ) . not . toBeInTheDocument ( ) ;
105103 expect ( screen . getByLabelText ( 'Utilities' ) ) . toBeInTheDocument ( ) ;
106104 expect ( screen . getByRole ( 'link' , { name : 'Bookmarklet' } ) ) . toBeInTheDocument ( ) ;
107- expect ( document . querySelector ( '.form-shell' ) ) . toHaveAttribute ( 'data-state' , 'idle ' ) ;
105+ expect ( document . querySelector ( '.form-shell' ) ) . toHaveAttribute ( 'data-state' , 'create ' ) ;
108106 } ) ;
109107
110108 it ( 'keeps the page url field permissive enough for hostname-only input' , ( ) => {
@@ -170,61 +168,13 @@ describe('App', () => {
170168 } ) ;
171169 } ) ;
172170
173- it ( 'restores result state from local snapshot when opening a result deep link' , async ( ) => {
174- globalThis . localStorage . setItem (
175- 'html2rss_feed_result_snapshot:generated-token' ,
176- JSON . stringify ( {
177- savedAt : '2026-04-05T09:00:00.000Z' ,
178- result : {
179- feed : {
180- id : 'feed-123' ,
181- name : 'Example Feed' ,
182- url : 'https://example.com/articles' ,
183- feed_token : 'generated-token' ,
184- public_url : '/api/v1/feeds/generated-token' ,
185- json_public_url : '/api/v1/feeds/generated-token.json' ,
186- created_at : '2026-04-05T08:59:00.000Z' ,
187- updated_at : '2026-04-05T09:00:00.000Z' ,
188- } ,
189- preview : {
190- items : [ ] ,
191- isLoading : false ,
192- } ,
193- workflowState : 'preview_ready' as const ,
194- warnings : [ ] ,
195- } ,
196- } )
197- ) ;
171+ it ( 'shows the create flow when opening a stale result deep link' , async ( ) => {
198172 globalThis . history . replaceState ( { } , '' , 'http://localhost:3000/#/result/generated-token' ) ;
199173
200174 render ( < App /> ) ;
201175
202- await waitFor ( ( ) => {
203- expect ( mockRestoreResult ) . toHaveBeenCalledTimes ( 1 ) ;
204- expect ( mockRestoreResult ) . toHaveBeenCalledWith (
205- expect . objectContaining ( {
206- feed : expect . objectContaining ( { feed_token : 'generated-token' } ) ,
207- workflowState : 'preview_ready' ,
208- } )
209- ) ;
210- } ) ;
211- } ) ;
212-
213- it ( 'shows a recovery notice when result deep link has no snapshot to restore' , async ( ) => {
214- globalThis . history . replaceState ( { } , '' , 'http://localhost:3000/#/result/missing-token' ) ;
215-
216- render ( < App /> ) ;
217-
218- await waitFor ( ( ) => {
219- expect ( screen . getByRole ( 'heading' , { name : 'Saved result unavailable' } ) ) . toBeInTheDocument ( ) ;
220- } ) ;
221-
222- expect ( screen . getByRole ( 'alert' ) ) . toHaveClass ( 'result-shell' , 'result-recovery' ) ;
223- expect ( screen . getByRole ( 'alert' ) ) . toHaveAttribute ( 'data-state' , 'failed' ) ;
224- expect ( document . querySelector ( '.result-recovery .ui-hero' ) ) . toBeInTheDocument ( ) ;
225- expect ( document . querySelector ( '.result-recovery .layout-rail-reading' ) ) . toBeInTheDocument ( ) ;
226- expect ( screen . getAllByRole ( 'button' ) ) . toHaveLength ( 1 ) ;
227- expect ( screen . getByRole ( 'button' , { name : 'Go to create' } ) ) . toHaveClass ( 'btn--primary' ) ;
176+ expect ( screen . getByLabelText ( 'Page URL' ) ) . toBeInTheDocument ( ) ;
177+ expect ( screen . queryByRole ( 'heading' , { name : 'Saved result unavailable' } ) ) . not . toBeInTheDocument ( ) ;
228178 } ) ;
229179
230180 it ( 'shows inline token prompt when submitting without a token' , async ( ) => {
@@ -237,10 +187,10 @@ describe('App', () => {
237187
238188 expect ( screen . getByText ( 'Enter access token' ) ) . toBeInTheDocument ( ) ;
239189 expect ( globalThis . location . hash ) . toMatch ( / ^ # \/ t o k e n / ) ;
240- expect ( document . querySelector ( '.form-shell' ) ) . toHaveAttribute ( 'data-state' , 'token_required ' ) ;
190+ expect ( document . querySelector ( '.form-shell' ) ) . toHaveAttribute ( 'data-state' , 'token_prompt ' ) ;
241191 expect ( screen . getByLabelText ( 'Page URL' ) ) . toBeDisabled ( ) ;
242192 expect ( screen . queryByRole ( 'combobox' ) ) . not . toBeInTheDocument ( ) ;
243- expect ( screen . queryByLabelText ( 'Utilities' ) ) . not . toBeInTheDocument ( ) ;
193+ expect ( screen . getByLabelText ( 'Utilities' ) ) . toBeInTheDocument ( ) ;
244194 expect ( screen . getByRole ( 'link' , { name : 'Set up your own instance with Docker.' } ) ) . toBeInTheDocument ( ) ;
245195 expect ( screen . getByText ( 'Required by this instance.' ) ) . toBeInTheDocument ( ) ;
246196 expect ( screen . queryByText ( 'Paste an access token to keep going.' ) ) . not . toBeInTheDocument ( ) ;
@@ -319,12 +269,11 @@ describe('App', () => {
319269 clearError : mockClearConversionError ,
320270 clearResult : mockClearResult ,
321271 retryPreviewFetch : mockRetryPreviewFetch ,
322- restoreResult : mockRestoreResult ,
323272 } ) ;
324273
325274 render ( < App /> ) ;
326275
327- expect ( document . querySelector ( '.result-shell' ) ) . toHaveAttribute ( 'data-state' , 'failed ' ) ;
276+ expect ( document . querySelector ( '.result-shell' ) ) . toHaveAttribute ( 'data-state' , 'result ' ) ;
328277 expect ( screen . getByRole ( 'button' , { name : 'Create another feed' } ) ) . toBeInTheDocument ( ) ;
329278 expect ( screen . getByRole ( 'link' , { name : 'Open feed' } ) ) . toBeInTheDocument ( ) ;
330279 expect ( screen . getByRole ( 'link' , { name : 'Bookmarklet' } ) ) . toBeInTheDocument ( ) ;
@@ -354,7 +303,6 @@ describe('App', () => {
354303 clearError : mockClearConversionError ,
355304 clearResult : mockClearResult ,
356305 retryPreviewFetch : mockRetryPreviewFetch ,
357- restoreResult : mockRestoreResult ,
358306 } ) ;
359307
360308 render ( < App /> ) ;
@@ -372,7 +320,6 @@ describe('App', () => {
372320 clearError : mockClearConversionError ,
373321 clearResult : mockClearResult ,
374322 retryPreviewFetch : mockRetryPreviewFetch ,
375- restoreResult : mockRestoreResult ,
376323 } ) ;
377324
378325 render ( < App /> ) ;
@@ -563,7 +510,6 @@ describe('App', () => {
563510 clearError : mockClearConversionError ,
564511 clearResult : mockClearResult ,
565512 retryPreviewFetch : mockRetryPreviewFetch ,
566- restoreResult : mockRestoreResult ,
567513 } ) ;
568514 mockUseAccessToken . mockReturnValue ( {
569515 token : 'saved-token' ,
@@ -604,7 +550,6 @@ describe('App', () => {
604550 clearError : mockClearConversionError ,
605551 clearResult : mockClearResult ,
606552 retryPreviewFetch : mockRetryPreviewFetch ,
607- restoreResult : mockRestoreResult ,
608553 } ) ;
609554 mockUseAccessToken . mockReturnValue ( {
610555 token : 'saved-token' ,
@@ -643,7 +588,6 @@ describe('App', () => {
643588 clearError : mockClearConversionError ,
644589 clearResult : mockClearResult ,
645590 retryPreviewFetch : mockRetryPreviewFetch ,
646- restoreResult : mockRestoreResult ,
647591 } ) ;
648592 mockUseAccessToken . mockReturnValue ( {
649593 token : 'saved-token' ,
@@ -682,7 +626,6 @@ describe('App', () => {
682626 clearError : mockClearConversionError ,
683627 clearResult : mockClearResult ,
684628 retryPreviewFetch : mockRetryPreviewFetch ,
685- restoreResult : mockRestoreResult ,
686629 } ) ;
687630 mockUseAccessToken . mockReturnValue ( {
688631 token : 'saved-token' ,
0 commit comments