@@ -76,6 +76,60 @@ test.describe("Unauthenticated Articles Page", () => {
7676 page . getByText ( "Sign in or sign up to leave a comment" ) ,
7777 ) . toBeVisible ( ) ;
7878 } ) ;
79+
80+ test ( "Should sort articles by Newest" , async ( { page } ) => {
81+ await page . goto ( "http://localhost:3000/articles" ) ;
82+ await page . waitForSelector ( "article" ) ;
83+
84+ const articles = await page . $$eval ( "article" , ( articles ) => {
85+ return articles . map ( ( article ) => ( {
86+ date : article . querySelector ( "time" ) ?. dateTime ,
87+ } ) ) ;
88+ } ) ;
89+ const isSortedNewest = articles . every ( ( article , index , arr ) => {
90+ if ( index === arr . length - 1 ) return true ;
91+ if ( ! article . date || ! arr [ index + 1 ] . date ) return false ;
92+ return new Date ( article . date ) >= new Date ( arr [ index + 1 ] . date ! ) ;
93+ } ) ;
94+ expect ( isSortedNewest ) . toBeTruthy ( ) ;
95+ } ) ;
96+
97+ test ( "Should sort articles by Oldest" , async ( { page } ) => {
98+ await page . goto ( "http://localhost:3000/articles?filter=oldest" ) ;
99+ await page . waitForSelector ( "article" ) ;
100+ const articles = await page . $$eval ( "article" , ( articles ) => {
101+ return articles . map ( ( article ) => ( {
102+ date : article . querySelector ( "time" ) ?. dateTime ,
103+ } ) ) ;
104+ } ) ;
105+ const isSortedOldest = articles . every ( ( article , index , arr ) => {
106+ if ( index === arr . length - 1 ) return true ;
107+ if ( ! article . date || ! arr [ index + 1 ] . date ) return false ;
108+ return new Date ( article . date ) <= new Date ( arr [ index + 1 ] . date ! ) ;
109+ } ) ;
110+ expect ( isSortedOldest ) . toBeTruthy ( ) ;
111+ } ) ;
112+
113+ test ( "Should sort articles by Top - likes" , async ( { page } ) => {
114+ await page . goto ( "http://localhost:3000/articles?filter=top" ) ;
115+ await page . waitForSelector ( "article" ) ;
116+
117+ const articles = await page . $$eval ( "article" , ( articles ) => {
118+ return articles . map ( ( article ) => ( {
119+ likes : parseInt (
120+ article . querySelector ( "[data-likes]" ) ?. getAttribute ( "data-likes" ) ||
121+ "0" ,
122+ 10 ,
123+ ) ,
124+ } ) ) ;
125+ } ) ;
126+
127+ const isSortedTop = articles . every ( ( article , index , arr ) => {
128+ if ( index === arr . length - 1 ) return true ;
129+ return article . likes >= arr [ index + 1 ] . likes ;
130+ } ) ;
131+ expect ( isSortedTop ) . toBeTruthy ( ) ;
132+ } ) ;
79133} ) ;
80134
81135test . describe ( "Authenticated Articles Page" , ( ) => {
0 commit comments