@@ -5,10 +5,23 @@ import { articleExcerpt } from "./constants";
55
66type TabName = "Drafts" | "Scheduled" | "Published" ;
77
8- async function openTab ( page : Page , tabName : TabName ) {
8+ async function openTab (
9+ page : Page ,
10+ tabName : TabName ,
11+ isMobile : boolean = false ,
12+ ) {
913 await page . goto ( "http://localhost:3000/my-posts" ) ;
1014 await page . waitForLoadState ( "domcontentloaded" ) ;
11- await page . getByRole ( "link" , { name : tabName } ) . click ( ) ;
15+
16+ // Mobile renders tabs as a select dropdown, desktop uses links
17+ if ( isMobile ) {
18+ const tabSelect = page . locator ( "select#tabs" ) ;
19+ await expect ( tabSelect ) . toBeVisible ( { timeout : 10000 } ) ;
20+ await tabSelect . selectOption ( { label : tabName } ) ;
21+ } else {
22+ await page . getByRole ( "link" , { name : tabName } ) . click ( ) ;
23+ }
24+
1225 const slug = tabName . toLowerCase ( ) ;
1326 await page . waitForURL ( `http://localhost:3000/my-posts?tab=${ slug } ` ) ;
1427 await expect ( page ) . toHaveURL ( new RegExp ( `\\/my-posts\\?tab=${ slug } ` ) ) ;
@@ -52,38 +65,57 @@ test.describe("Authenticated my-posts Page", () => {
5265
5366 test ( "Tabs for different type of posts should be visible" , async ( {
5467 page,
68+ isMobile,
5569 } ) => {
5670 await page . goto ( "http://localhost:3000/my-posts" ) ;
5771
58- await expect ( page . getByRole ( "link" , { name : "Drafts" } ) ) . toBeVisible ( ) ;
59- await expect ( page . getByRole ( "link" , { name : "Scheduled" } ) ) . toBeVisible ( ) ;
60- await expect ( page . getByRole ( "link" , { name : "Published" } ) ) . toBeVisible ( ) ;
72+ // Mobile renders tabs as a select dropdown, desktop uses links
73+ if ( isMobile ) {
74+ const tabSelect = page . locator ( "select#tabs" ) ;
75+ await expect ( tabSelect ) . toBeVisible ( { timeout : 10000 } ) ;
76+ // Verify the select has the correct options
77+ await expect ( tabSelect . locator ( 'option:has-text("Drafts")' ) ) . toBeVisible ( ) ;
78+ await expect (
79+ tabSelect . locator ( 'option:has-text("Scheduled")' ) ,
80+ ) . toBeVisible ( ) ;
81+ await expect (
82+ tabSelect . locator ( 'option:has-text("Published")' ) ,
83+ ) . toBeVisible ( ) ;
84+ } else {
85+ await expect ( page . getByRole ( "link" , { name : "Drafts" } ) ) . toBeVisible ( ) ;
86+ await expect ( page . getByRole ( "link" , { name : "Scheduled" } ) ) . toBeVisible ( ) ;
87+ await expect ( page . getByRole ( "link" , { name : "Published" } ) ) . toBeVisible ( ) ;
88+ }
6189 } ) ;
6290
6391 test ( "Different article tabs should correctly display articles matching that type" , async ( {
6492 page,
93+ isMobile,
6594 } ) => {
6695 await page . goto ( "http://localhost:3000/my-posts" ) ;
6796
68- await expect ( page . getByRole ( "link" , { name : "Drafts" } ) ) . toBeVisible ( ) ;
69- await expect ( page . getByRole ( "link" , { name : "Scheduled" } ) ) . toBeVisible ( ) ;
70- await expect ( page . getByRole ( "link" , { name : "Published" } ) ) . toBeVisible ( ) ;
97+ // Check tab visibility - on mobile these are in a select dropdown
98+ if ( ! isMobile ) {
99+ await expect ( page . getByRole ( "link" , { name : "Drafts" } ) ) . toBeVisible ( ) ;
100+ await expect ( page . getByRole ( "link" , { name : "Scheduled" } ) ) . toBeVisible ( ) ;
101+ await expect ( page . getByRole ( "link" , { name : "Published" } ) ) . toBeVisible ( ) ;
102+ }
71103
72- await openTab ( page , "Published" ) ;
104+ await openTab ( page , "Published" , isMobile ) ;
73105 await expect (
74106 page . getByRole ( "heading" , { name : "Published Article" } ) ,
75107 ) . toBeVisible ( { timeout : 15000 } ) ;
76108 await expect ( page . getByText ( articleExcerpt ) ) . toBeVisible ( ) ;
77109
78- await openTab ( page , "Scheduled" ) ;
110+ await openTab ( page , "Scheduled" , isMobile ) ;
79111 await expect (
80112 page . getByRole ( "heading" , { name : "Scheduled Article" } ) ,
81113 ) . toBeVisible ( { timeout : 15000 } ) ;
82114 await expect (
83115 page . getByText ( "This is an excerpt for a scheduled article." ) ,
84116 ) . toBeVisible ( ) ;
85117
86- await openTab ( page , "Drafts" ) ;
118+ await openTab ( page , "Drafts" , isMobile ) ;
87119 await expect (
88120 page . getByRole ( "heading" , { name : "Draft Article" , exact : true } ) ,
89121 ) . toBeVisible ( { timeout : 15000 } ) ;
@@ -96,10 +128,11 @@ test.describe("Authenticated my-posts Page", () => {
96128
97129 test ( "User should close delete modal with Cancel button" , async ( {
98130 page,
131+ isMobile,
99132 } ) => {
100133 const title = "Published Article" ;
101134 await page . goto ( "http://localhost:3000/my-posts" ) ;
102- await openTab ( page , "Published" ) ;
135+ await openTab ( page , "Published" , isMobile ) ;
103136 await openDeleteModal ( page , title ) ;
104137
105138 const closeButton = page . getByRole ( "button" , { name : "Cancel" } ) ;
@@ -110,10 +143,13 @@ test.describe("Authenticated my-posts Page", () => {
110143 ) . toBeHidden ( ) ;
111144 } ) ;
112145
113- test ( "User should close delete modal with Close button" , async ( { page } ) => {
146+ test ( "User should close delete modal with Close button" , async ( {
147+ page,
148+ isMobile,
149+ } ) => {
114150 const title = "Published Article" ;
115151 await page . goto ( "http://localhost:3000/my-posts" ) ;
116- await openTab ( page , "Published" ) ;
152+ await openTab ( page , "Published" , isMobile ) ;
117153 await openDeleteModal ( page , title ) ;
118154
119155 const closeButton = page . getByRole ( "button" , { name : "Close" } ) ;
@@ -124,7 +160,7 @@ test.describe("Authenticated my-posts Page", () => {
124160 ) . toBeHidden ( ) ;
125161 } ) ;
126162
127- test ( "User should delete published article" , async ( { page } ) => {
163+ test ( "User should delete published article" , async ( { page, isMobile } ) => {
128164 const article = {
129165 id : "test-id-for-deletion" ,
130166 title : "Article to be deleted" ,
@@ -134,7 +170,7 @@ test.describe("Authenticated my-posts Page", () => {
134170 } ;
135171 await createArticle ( article ) ;
136172 await page . goto ( "http://localhost:3000/my-posts" ) ;
137- await openTab ( page , "Published" ) ;
173+ await openTab ( page , "Published" , isMobile ) ;
138174 await expect ( page . getByRole ( "link" , { name : article . title } ) ) . toBeVisible ( ) ;
139175 await openDeleteModal ( page , article . title ) ;
140176
0 commit comments