diff --git a/lib/parse/__tests__/news.test.ts b/lib/parse/__tests__/news.test.ts index 29648fc0..6da88eec 100644 --- a/lib/parse/__tests__/news.test.ts +++ b/lib/parse/__tests__/news.test.ts @@ -4,92 +4,182 @@ import { news, newsItemDetails } from '../news' let response: EtjanstResponse describe('news', () => { - beforeEach(() => { - response = { - Success: true, - Error: null, - Data: { - CurrentChild: null, - NewsItems: [ - { - NewsId: 'news id', - SiteId: - 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700', - NewsListId: '3EC323A1-EA16-4D24-84C8-DAA49E76F9F4', - NewsItemId: - 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700_99', - Header: 'Problemet med att se betyg i bild, slöjd och teknik löst!', - PublicationDate: '/Date(1608304542000)/', - PubDateSE: '18 december 2020 16:15', - ModifiedDate: '/Date(1608304680000)/', - ModDateSE: '18 december 2020 16:18', - Source: 'Livets hårda skolklasser', - Preamble: - 'Hej,Nu är problemet löst! Alla betyg syns som de ska.God jul!...', - BannerImageUrl: 'A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg', - BannerImageGuid: 'A703552D-DBF3-45B0-8E67-6E062105A0C5', - BannerImageListId: 'FFBE49E9-BDE1-4C75-BA0E-D98D4E2FCF21', - Body: - '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', - BodyNoHtml: null, - AuthorDisplayName: 'Eva-Lotta Rönnberg', - altText: 'Nyhetsbild. Bildtext ej tillgänglig.', - }, - ], - ViewGlobalTranslations: {}, - ViewLocalTranslations: {}, - Children: null, - Status: null, - GlobalTranslationIds: [ - 'InformationalHeader', - 'ContactUsMessageLabel', - 'Send', - 'RequiredFieldMessageInfo', - 'Sex', - 'Male', - 'Female', - 'SSN', - 'FirstName', - 'LastName', - 'Email', - 'Zip', - 'Address', - 'ValidationRequiredFieldMessage', - 'ValidationErrorMessage', - ], - LocalTranslationIds: ['IndexPageHeading1'], - }, - } - }) - it(' news items (except body) correctly', () => { - const [item] = news(response) + describe('parsing', () => { + beforeEach(() => { + response = { + Success: true, + Error: null, + Data: { + CurrentChild: null, + NewsItems: [ + { + NewsId: 'news id', + SiteId: + 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700', + NewsListId: '3EC323A1-EA16-4D24-84C8-DAA49E76F9F4', + NewsItemId: + 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700_99', + Header: 'Problemet med att se betyg i bild, slöjd och teknik löst!', + PublicationDate: '/Date(1608304542000)/', + PubDateSE: '18 december 2020 16:15', + ModifiedDate: '/Date(1608304680000)/', + ModDateSE: '18 december 2020 16:18', + Source: 'Livets hårda skolklasser', + Preamble: + 'Hej,Nu är problemet löst! Alla betyg syns som de ska.God jul!...', + BannerImageUrl: 'A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg', + BannerImageGuid: 'A703552D-DBF3-45B0-8E67-6E062105A0C5', + BannerImageListId: 'FFBE49E9-BDE1-4C75-BA0E-D98D4E2FCF21', + Body: + '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', + BodyNoHtml: null, + AuthorDisplayName: 'Eva-Lotta Rönnberg', + altText: 'Nyhetsbild. Bildtext ej tillgänglig.', + }, + ], + ViewGlobalTranslations: {}, + ViewLocalTranslations: {}, + Children: null, + Status: null, + GlobalTranslationIds: [ + 'InformationalHeader', + 'ContactUsMessageLabel', + 'Send', + 'RequiredFieldMessageInfo', + 'Sex', + 'Male', + 'Female', + 'SSN', + 'FirstName', + 'LastName', + 'Email', + 'Zip', + 'Address', + 'ValidationRequiredFieldMessage', + 'ValidationErrorMessage', + ], + LocalTranslationIds: ['IndexPageHeading1'], + }, + } + }) + it(' news items (except body) correctly', () => { + const [item] = news(response) - expect(item.id).toEqual('news id') - expect(item.author).toEqual('Eva-Lotta Rönnberg') - expect(item.header).toEqual( - 'Problemet med att se betyg i bild, slöjd och teknik löst!' - ) - expect(item.imageUrl).toEqual('A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg') - expect(item.fullImageUrl).toEqual( - 'https://etjanst.stockholm.se/Vardnadshavare/inloggad2/NewsBanner?url=A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg' - ) - expect(item.imageAltText).toEqual('Nyhetsbild. Bildtext ej tillgänglig.') - expect(item.intro).toEqual( - 'Hej, Nu är problemet löst! Alla betyg syns som de ska. God jul!...' - ) - expect(item.modified).toEqual('2020-12-18T15:18:00.000Z') - expect(item.published).toEqual('2020-12-18T15:15:42.000Z') - }) - it(' body correctly', () => { - const [item] = news(response) + expect(item.id).toEqual('news id') + expect(item.author).toEqual('Eva-Lotta Rönnberg') + expect(item.header).toEqual( + 'Problemet med att se betyg i bild, slöjd och teknik löst!' + ) + expect(item.imageUrl).toEqual('A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg') + expect(item.fullImageUrl).toEqual( + 'https://etjanst.stockholm.se/Vardnadshavare/inloggad2/NewsBanner?url=A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg' + ) + expect(item.imageAltText).toEqual('Nyhetsbild. Bildtext ej tillgänglig.') + expect(item.intro).toEqual( + 'Hej, Nu är problemet löst! Alla betyg syns som de ska. God jul!...' + ) + expect(item.modified).toEqual('2020-12-18T15:18:00.000Z') + expect(item.published).toEqual('2020-12-18T15:15:42.000Z') + }) + it(' body correctly', () => { + const [item] = news(response) - const expected = - 'Hej, Nu är problemet löst! Alla betyg syns som de ska. God jul!' - const trimmed = (item.body || '') - .split('\n') - .map((t) => t.trim()) - .join(' ') - expect(trimmed).toEqual(expected) + const expected = + 'Hej, Nu är problemet löst! Alla betyg syns som de ska. God jul!' + const trimmed = (item.body || '') + .split('\n') + .map((t) => t.trim()) + .join(' ') + expect(trimmed).toEqual(expected) + }) + }) + describe('sorting', () => { + beforeEach(() => { + response = { + Success: true, + Error: null, + Data: { + CurrentChild: null, + NewsItems: [ + { + NewsId: 'news id', + SiteId: + 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700', + NewsListId: '3EC323A1-EA16-4D24-84C8-DAA49E76F9F4', + NewsItemId: + 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700_99', + Header: 'Problemet med att se betyg i bild, slöjd och teknik löst!', + PublicationDate: '/Date(1608304542000)/', + PubDateSE: '18 december 2020 16:15', + ModifiedDate: '/Date(1608304680000)/', + ModDateSE: '18 december 2020 16:18', + Source: 'Livets hårda skolklasser', + Preamble: + 'Hej,Nu är problemet löst! Alla betyg syns som de ska.God jul!...', + BannerImageUrl: 'A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg', + BannerImageGuid: 'A703552D-DBF3-45B0-8E67-6E062105A0C5', + BannerImageListId: 'FFBE49E9-BDE1-4C75-BA0E-D98D4E2FCF21', + Body: + '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', + BodyNoHtml: null, + AuthorDisplayName: 'Eva-Lotta Rönnberg', + altText: 'Nyhetsbild. Bildtext ej tillgänglig.', + }, + { + NewsId: 'news id updated', + SiteId: + 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700', + NewsListId: '3EC323A1-EA16-4D24-84C8-DAA49E76F9F4', + NewsItemId: + 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700_99', + Header: 'Problemet med att se betyg i bild, slöjd och teknik löst!', + PublicationDate: '/Date(1608304542000)/', + PubDateSE: '18 november 2021 16:15', + ModifiedDate: '/Date(1608304680000)/', + ModDateSE: '18 december 2020 16:18', + Source: 'Livets hårda skolklasser', + Preamble: + 'Hej,Nu är problemet löst! Alla betyg syns som de ska.God jul!...', + BannerImageUrl: 'A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg', + BannerImageGuid: 'A703552D-DBF3-45B0-8E67-6E062105A0C5', + BannerImageListId: 'FFBE49E9-BDE1-4C75-BA0E-D98D4E2FCF21', + Body: + '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', + BodyNoHtml: null, + AuthorDisplayName: 'Eva-Lotta Rönnberg', + altText: 'Nyhetsbild. Bildtext ej tillgänglig.', + }, + ], + ViewGlobalTranslations: {}, + ViewLocalTranslations: {}, + Children: null, + Status: null, + GlobalTranslationIds: [ + 'InformationalHeader', + 'ContactUsMessageLabel', + 'Send', + 'RequiredFieldMessageInfo', + 'Sex', + 'Male', + 'Female', + 'SSN', + 'FirstName', + 'LastName', + 'Email', + 'Zip', + 'Address', + 'ValidationRequiredFieldMessage', + 'ValidationErrorMessage', + ], + LocalTranslationIds: ['IndexPageHeading1'], + }, + } + }) + it('sorts by modified date desc', () => { + const [item] = news(response) + + expect(item.id).toEqual('news id updated') + }) }) }) diff --git a/lib/parse/news.ts b/lib/parse/news.ts index 505e9911..5bbbd05c 100644 --- a/lib/parse/news.ts +++ b/lib/parse/news.ts @@ -29,8 +29,14 @@ export const newsItem = ({ body: toMarkdown(body), }) +const newsSort = (item1: NewsItem, item2: NewsItem): number => { + const m1 = item1.modified || item1.published + const m2 = item2.modified || item2.published + return m1 < m2 ? 1 : -1 +} + export const news = (data: any): NewsItem[] => - etjanst(data).newsItems.map(newsItem) + etjanst(data).newsItems.map(newsItem).sort(newsSort) export const newsItemDetails = (data: any): NewsItem => newsItem(etjanst(data).currentNewsItem)