@@ -26,45 +26,112 @@ test.describe('frontend smoke', () => {
2626 } ) ;
2727 } ) ;
2828
29- await page . route ( / \/ a p i \/ v 1 \/ s t r a t e g i e s $ / , async ( route ) => {
29+ await page . goto ( '/' ) ;
30+
31+ await expect ( page . getByLabel ( 'Page URL' ) ) . toBeVisible ( ) ;
32+ await expect ( page . getByRole ( 'button' , { name : 'Generate feed URL' } ) ) . toBeVisible ( ) ;
33+
34+ await page . getByLabel ( 'Page URL' ) . fill ( 'https://example.com/articles' ) ;
35+ await page . getByRole ( 'button' , { name : 'Generate feed URL' } ) . click ( ) ;
36+
37+ await expect ( page . getByRole ( 'heading' , { name : 'Enter access token' } ) ) . toBeVisible ( ) ;
38+ await expect ( page . getByRole ( 'textbox' , { name : 'Access token' } ) ) . toBeVisible ( ) ;
39+ await expect ( page . getByRole ( 'button' , { name : 'Save and continue' } ) ) . toBeVisible ( ) ;
40+ await expect ( page . getByRole ( 'button' , { name : 'Back' } ) ) . toBeVisible ( ) ;
41+
42+ await page . getByRole ( 'button' , { name : 'Back' } ) . click ( ) ;
43+ await expect ( page ) . toHaveURL ( / # \/ c r e a t e (?: \? .* ) ? $ / ) ;
44+ await expect ( page . getByRole ( 'button' , { name : 'Generate feed URL' } ) ) . toBeVisible ( ) ;
45+ await expect ( page . locator ( '.form-shell' ) ) . toHaveAttribute ( 'data-state' , 'create' ) ;
46+ await expect ( page . getByLabel ( 'Utilities' ) ) . toBeVisible ( ) ;
47+ } ) ;
48+
49+ test ( 'shows result after successful feed creation without snapshot recovery' , async ( { page } ) => {
50+ await page . route ( / \/ a p i \/ v 1 $ / , async ( route ) => {
3051 await route . fulfill ( {
3152 status : 200 ,
3253 contentType : 'application/json' ,
3354 body : JSON . stringify ( {
3455 success : true ,
3556 data : {
36- strategies : [
37- { id : 'faraday' , name : 'faraday' , display_name : 'Default' } ,
38- {
39- id : 'browserless' ,
40- name : 'browserless' ,
41- display_name : 'JavaScript pages (recommended)' ,
57+ api : {
58+ name : 'html2rss-web API' ,
59+ description : 'RESTful API for converting websites to RSS feeds' ,
60+ openapi_url : 'http://example.test/openapi.yaml' ,
61+ } ,
62+ instance : {
63+ feed_creation : {
64+ enabled : true ,
65+ access_token_required : true ,
4266 } ,
43- ] ,
67+ featured_feeds : [ ] ,
68+ } ,
4469 } ,
45- meta : { total : 2 } ,
4670 } ) ,
4771 } ) ;
4872 } ) ;
4973
50- await page . goto ( '/' ) ;
74+ await page . route ( / \/ a p i \/ v 1 \/ f e e d s $ / , async ( route ) => {
75+ await route . fulfill ( {
76+ status : 201 ,
77+ contentType : 'application/json' ,
78+ body : JSON . stringify ( {
79+ success : true ,
80+ data : {
81+ feed : {
82+ id : 'feed-123' ,
83+ name : 'Example Feed' ,
84+ url : 'https://example.com/articles' ,
85+ feed_token : 'generated-token' ,
86+ public_url : '/api/v1/feeds/generated-token' ,
87+ json_public_url : '/api/v1/feeds/generated-token.json' ,
88+ created_at : '2026-04-05T08:59:00.000Z' ,
89+ updated_at : '2026-04-05T09:00:00.000Z' ,
90+ } ,
91+ } ,
92+ } ) ,
93+ } ) ;
94+ } ) ;
5195
52- await expect ( page . getByLabel ( 'Page URL' ) ) . toBeVisible ( ) ;
53- await expect ( page . getByRole ( 'button' , { name : 'Generate feed URL' } ) ) . toBeVisible ( ) ;
54- await expect ( page . getByLabel ( 'Utilities' ) ) . toBeVisible ( ) ;
55- await expect ( page . getByRole ( 'link' , { name : 'Bookmarklet' } ) ) . toBeVisible ( ) ;
96+ await page . route ( / \/ a p i \/ v 1 \/ f e e d s \/ g e n e r a t e d - t o k e n \. j s o n $ / , async ( route ) => {
97+ await route . fulfill ( {
98+ status : 200 ,
99+ contentType : 'application/feed+json' ,
100+ body : JSON . stringify ( {
101+ items : [
102+ {
103+ title : 'Sample preview item' ,
104+ content_text : 'Current preview fetch includes rendered content.' ,
105+ date_published : '2026-04-05T09:00:00.000Z' ,
106+ url : 'https://example.com/articles/sample-preview-item' ,
107+ } ,
108+ ] ,
109+ } ) ,
110+ } ) ;
111+ } ) ;
112+
113+ await page . addInitScript ( ( ) => {
114+ sessionStorage . setItem ( 'html2rss_access_token' , 'token-123' ) ;
115+ } ) ;
56116
117+ await page . goto ( '/' ) ;
57118 await page . getByLabel ( 'Page URL' ) . fill ( 'https://example.com/articles' ) ;
58119 await page . getByRole ( 'button' , { name : 'Generate feed URL' } ) . click ( ) ;
59120
60- await expect ( page . getByRole ( 'heading' , { name : 'Enter access token' } ) ) . toBeVisible ( ) ;
61- await expect ( page . getByRole ( 'textbox' , { name : 'Access token' } ) ) . toBeVisible ( ) ;
62- await expect ( page . getByRole ( 'button' , { name : 'Save and continue' } ) ) . toBeVisible ( ) ;
63- await expect ( page . getByRole ( 'button' , { name : 'Back' } ) ) . toBeVisible ( ) ;
121+ await expect ( page . getByRole ( 'heading' , { name : 'Feed ready' } ) ) . toBeVisible ( ) ;
122+ await expect ( page . locator ( '.result-shell' ) ) . toHaveAttribute ( 'data-state' , 'result' ) ;
123+ await expect ( page . getByText ( 'Example Feed' ) ) . toBeVisible ( ) ;
124+ await expect ( page . getByRole ( 'link' , { name : 'Open feed' } ) ) . toBeVisible ( ) ;
125+ await expect ( page . getByRole ( 'link' , { name : 'Open JSON Feed' } ) ) . toBeVisible ( ) ;
126+ await expect ( page . getByRole ( 'link' , { name : 'Open in feed reader' } ) ) . toBeVisible ( ) ;
127+ await expect ( page . getByRole ( 'button' , { name : 'Create another feed' } ) ) . toBeVisible ( ) ;
128+ await expect ( page . getByText ( 'Sample preview item' ) ) . toBeVisible ( ) ;
129+ await expect ( page . getByText ( 'Current preview fetch includes rendered content.' ) ) . toBeVisible ( ) ;
64130
65- await page . getByRole ( 'button' , { name : 'Back' } ) . click ( ) ;
66- await expect ( page . getByRole ( 'button' , { name : 'Generate feed URL' } ) ) . toBeVisible ( ) ;
67- await expect ( page . getByLabel ( 'Utilities' ) ) . toBeVisible ( ) ;
68- await expect ( page . getByRole ( 'link' , { name : 'Bookmarklet' } ) ) . toBeVisible ( ) ;
131+ await page . goto ( '/#/result/missing-token' ) ;
132+
133+ await expect ( page . getByLabel ( 'Page URL' ) ) . toBeVisible ( ) ;
134+ await expect ( page . getByText ( 'Saved result unavailable' ) ) . toHaveCount ( 0 ) ;
135+ await expect ( page . locator ( '.result-recovery' ) ) . toHaveCount ( 0 ) ;
69136 } ) ;
70137} ) ;
0 commit comments