diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/calendar.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/calendar.test.ts new file mode 100644 index 000000000..3556621a8 --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/calendar.test.ts @@ -0,0 +1,74 @@ +import { EtjanstResponse } from '../' +import { calendar } from '../calendar' + +let response: EtjanstResponse + +beforeEach(() => { + response = { + Success: true, + Error: null, + Data: [ + { + Title: 'Jullov', + Id: 29, + Description: 'hello', + Location: null, + EventDate: '2020-12-21', + EventDateTime: '09:00', + LongEventDateTime: '2020-12-21 09:00', + EndDate: '2021-01-08', + EndDateTime: '10:00', + LongEndDateTime: '2021-01-08 10:00', + EventDateDayNumber: '21', + EventDateMonthName: 'dec', + EventDateMonthFullName: 'december', + FullDateDescription: '2020-12-21 09:00 - 2021-01-08 10:00', + IsSameDay: false, + AllDayEvent: false, + ListId: null, + Mentor: null, + }, + { + Title: 'Utvecklingsdag, förskolorna är stängda', + Id: 5, + Description: null, + Location: null, + EventDate: '2021-05-28', + EventDateTime: '', + LongEventDateTime: '2021-05-28', + EndDate: '2021-05-28', + EndDateTime: '', + LongEndDateTime: '2021-05-28', + EventDateDayNumber: '28', + EventDateMonthName: 'maj', + EventDateMonthFullName: 'maj', + FullDateDescription: '2021-05-28 - 2021-05-28', + IsSameDay: true, + AllDayEvent: true, + ListId: null, + Mentor: null, + }, + ], + } +}) + +it('parses calendar correctly', () => { + const [firstEvent] = calendar(response) + + expect(firstEvent).toEqual({ + id: 29, + location: null, + title: 'Jullov', + description: 'hello', + startDate: '2020-12-21T08:00:00.000Z', + endDate: '2021-01-08T09:00:00.000Z', + allDay: false, + }) +}) + +it('parses start and end date without time', () => { + const [, secondEvent] = calendar(response) + + expect(secondEvent.startDate).toEqual('2021-05-27T22:00:00.000Z') + expect(secondEvent.endDate).toEqual('2021-05-27T22:00:00.000Z') +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/children.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/children.test.ts new file mode 100644 index 000000000..d685f59ac --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/children.test.ts @@ -0,0 +1,43 @@ +import { EtjanstResponse } from '../' +import { children } from '../children' + +let response: EtjanstResponse + +beforeEach(() => { + response = { + Success: true, + Error: null, + Data: [ + { + Name: 'Some name', + Id: '42C3997E-D772-423F-9290-6FEEB3CB2DA7', + SDSId: '786E3393-F044-4660-9105-B444DEB289AA', + Status: 'GR', + UserType: 'Student', + SchoolId: 'DE2E1293-0F40-4B91-9D91-1E99355DC257', + SchoolName: null, + GroupId: null, + GroupName: null, + Classes: + 'VHsidan_0495CABC-77DB-41D7-824B-8B4D63E50D15;Section_AD1BB3B2-C1EE-4DFE-8209-CB6D42CE23D7;Section_0E67D0BF-594C-4C1B-9291-E753926DCD40;VHsidan_1C94EC54-9798-401C-B973-2454246D95DA', + isSameSDSId: false, + ResultUnitId: null, + ResultUnitName: null, + UnitId: null, + UnitName: null, + }, + ], + } +}) + +it('parses children correctly', () => { + expect(children(response)).toEqual([ + { + name: 'Some name', + id: '42C3997E-D772-423F-9290-6FEEB3CB2DA7', + sdsId: '786E3393-F044-4660-9105-B444DEB289AA', + schoolId: 'DE2E1293-0F40-4B91-9D91-1E99355DC257', + status: 'GR', + }, + ]) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/classmates.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/classmates.test.ts new file mode 100644 index 000000000..a86f1ad9b --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/classmates.test.ts @@ -0,0 +1,72 @@ +import { EtjanstResponse } from '../' +import { classmates } from '../classmates' + +let response: EtjanstResponse + +beforeEach(() => { + response = { + Success: true, + Error: null, + Data: [ + { + ID: 0, + BATCH: null, + SIS_ID: '22F0CFC7-09C7-45DC-9388-AE9A9EA1356B', + USERNAME: null, + SCHOOL_SIS_ID: null, + EMAILADDRESS: null, + STATUS: null, + ERRORCODE: 0, + PRIMARY_SCHOOL_SIS_ID: null, + MENTOR_SIS_ID: null, + FIRSTNAME: 'Bo', + LASTNAME: 'Burström', + ACTIVE: false, + Guardians: [ + { + SOCIALNUMBER: null, + DISPLAYNAME: null, + FIRSTNAME: 'Allan', + LASTNAME: 'Fridell', + ADDRESS: 'Hult södregård', + CITY: null, + POCODE: null, + TELHOME: null, + TELMOBILE: '0690-6346216', + EMAILHOME: 'allan.fridell@mailinater.com', + SECTION_NAME: null, + SECTION_ID: null, + TERM_STARTDATE: null, + TERM_ENDDATE: null, + GROUPTYPE: null, + STUDENT_FIRSTNAME: null, + STUDENT_LASTNAME: null, + STUDENT_ID: null, + }, + ], + ClassName: '7C', + ClassId: 'B2BF465B-581B-43AC-9CA7-F11BB0ED4646', + }, + ], + } +}) + +it('parses class mates correctly', () => { + expect(classmates(response)).toEqual([ + { + sisId: '22F0CFC7-09C7-45DC-9388-AE9A9EA1356B', + firstname: 'Bo', + lastname: 'Burström', + className: '7C', + guardians: [ + { + firstname: 'Allan', + lastname: 'Fridell', + address: 'Hult södregård', + mobile: '0690-6346216', + email: 'allan.fridell@mailinater.com', + }, + ], + }, + ]) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/index.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/index.test.ts new file mode 100644 index 000000000..794370b6c --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/index.test.ts @@ -0,0 +1,32 @@ +import * as parse from '../' + +let response: parse.EtjanstResponse + +describe('etjanst', () => { + beforeEach(() => { + response = { + Success: true, + Error: null, + Data: [ + { + Name: 'Some name', + }, + ], + } + }) + + it('returns data on success', () => { + expect(parse.etjanst(response)).toBeInstanceOf(Array) + }) + + it('throws error on Error', () => { + response.Success = false + response.Error = 'b0rk' + expect(() => parse.etjanst(response)).toThrowError('b0rk') + }) + + it('camelCases data keys', () => { + const parsed = parse.etjanst(response) + expect(parsed[0].name).toEqual(response.Data[0].Name) + }) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/menu.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/menu.test.ts new file mode 100644 index 000000000..157d9b2f6 --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/menu.test.ts @@ -0,0 +1,91 @@ +import { EtjanstResponse } from '../' +import { menu, menuList } from '../menu' + +let response: EtjanstResponse + +describe('menu', () => { + beforeEach(() => { + response = { + Success: true, + Error: null, + Data: [ + { + Title: 'Måndag - Vecka 52', + Description: 'Körrfärsrätt .
Veg färs', + }, + ], + } + }) + it(' menu correctly', () => { + expect(menu(response)).toEqual([ + { + title: 'Måndag - Vecka 52', + description: 'Körrfärsrätt .\nVeg färs', + }, + ]) + }) +}) + +describe('menu-list', () => { + beforeEach(() => { + response = { + Success: true, + Error: null, + Data: { + SelectedWeek: 12, + Menus: [ + { + Week: '12', + Mon: 'Köttfärslimpa med sås och potatis', + Tue: 'Curryfisk med ris', + Wed: 'Tagliatelle med vegetarisk sås', + Thu: 'Chorizo med stuvad potatis', + Fri: 'Ört och vitlöksinbakad fisk, potatis', + }, + { + Week: '19', + Mon: 'FISKGRATÄNG WALEWSKA', + Tue: 'STEKT FLÄSK MED RAGGMUNK', + Wed: 'PENNEPASTA MED TONFISK', + Thu: 'KÖTTGRYTA MED POTATIS', + Fri: 'GRÖNSAKSGRATÄNG MED TZATZIKI', + }, + { + Week: '20', + Mon: 'SPAGHETTI SALMONE ', + Tue: 'STEKT FALUKORV MED SENAPSSÅS OCH POTATIS', + Wed: 'SOPPA MED RISONI OCH HEMBAKAT BRÖD', + Thu: 'PANERAD FISK MED SKAGEN OCH POTATIS', + Fri: 'TACOS', + }, + ], + }, + } + }) + it(' menu correctly', () => { + const result = menuList(response) + + expect(result).toEqual([ + { + title: 'Måndag - Vecka 12', + description: 'Köttfärslimpa med sås och potatis', + }, + { + title: 'Tisdag - Vecka 12', + description: 'Curryfisk med ris', + }, + { + title: 'Onsdag - Vecka 12', + description: 'Tagliatelle med vegetarisk sås', + }, + { + title: 'Torsdag - Vecka 12', + description: 'Chorizo med stuvad potatis', + }, + { + title: 'Fredag - Vecka 12', + description: 'Ört och vitlöksinbakad fisk, potatis', + }, + ]) + }) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/news.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/news.test.ts new file mode 100644 index 000000000..a652de83a --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/news.test.ts @@ -0,0 +1,330 @@ +import { EtjanstResponse } from '../' +import { news, newsItemDetails } from '../news' + +let response: EtjanstResponse + +describe('news', () => { + 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) + + 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') + }) + }) +}) + +describe('newsItem', () => { + beforeEach(() => { + response = { + Success: true, + Error: null, + Data: { + CurrentNewsItem: { + NewsId: '123', + SiteId: + 'elevstockholm.sharepoint.com,d112c398-71d4-468f-9a59-84d806751b08,3addab10-546a-4551-8076-72c9cd67f961', + NewsListId: '95df7d70-fbf0-470d-9926-e4e633f77f27', + NewsItemId: + 'elevstockholm.sharepoint.com,d112c398-71d4-468f-9a59-84d806751b08,3addab10-546a-4551-8076-72c9cd67f961_40', + Header: 'Avlusningsdagarna 5-7 februari 2021', + PublicationDate: '/Date(1612445471000)/', + PubDateSE: '4 februari 2021 14:31', + ModifiedDate: '/Date(1612445852000)/', + ModDateSE: '14 februari 2021 14:37', + Source: 'Södra Ängby skola', + Preamble: 'Kära vårdnadshavare!I helgen är det avlusningsdagar!', + BannerImageUrl: '123123.jpeg', + BannerImageGuid: '7a8142d9d9d54cf090e8457e4c629227', + BannerImageListId: 'a88c22e8-7094-4a71-b4fd-8792c62a7b4a', + Body: '

Kära vårdnadshavare!

I helgen är det avlusningsdagar! Ta tillfället i akt att luskamma ditt barn

Du finner all info du behöver på 1177 hemsida ​​​​​​​

Trevlig helg!

​​​​​​​

', + BodyNoHtml: null, + AuthorDisplayName: 'Tieto Evry', + altText: null, + OriginalSourceUrl: null, + }, + CurrentChild: null, + 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 details (except body) correctly', () => { + const item = newsItemDetails(response) + + expect(item.id).toEqual('123') + expect(item.header).toEqual('Avlusningsdagarna 5-7 februari 2021') + expect(item.imageUrl).toEqual('123123.jpeg') + expect(item.intro).toEqual( + 'Kära vårdnadshavare! I helgen är det avlusningsdagar!' + ) + expect(item.published).toEqual('2021-02-04T13:31:11.000Z') + expect(item.modified).toEqual('2021-02-04T13:37:32.000Z') + expect(item.author).toEqual('Tieto Evry') + }) + + it(' body correctly', () => { + const item = newsItemDetails(response) + + const expected = + '[1177 hemsida](https://www.1177.se/sjukdomar--besvar/hud-har-och-naglar/harbotten-och-harsackar/huvudloss/)' + expect(item.body).toContain(expected) + expect(item.body).toContain(' **tillfället** ') + }) +}) + +describe('newsItem', () => { + beforeEach(() => { + response = { + Success: true, + Error: null, + Data: { + CurrentNewsItem: { + NewsId: '123', + SiteId: + 'elevstockholm.sharepoint.com,d112c398-71d4-468f-9a59-84d806751b08,3addab10-546a-4551-8076-72c9cd67f961', + NewsListId: '95df7d70-fbf0-470d-9926-e4e633f77f27', + NewsItemId: + 'elevstockholm.sharepoint.com,d112c398-71d4-468f-9a59-84d806751b08,3addab10-546a-4551-8076-72c9cd67f961_40', + Header: 'Avlusningsdagarna 5-7 februari 2021', + PublicationDate: '/Date(1612445471000)/', + PubDateSE: '4 februari 2021 14:31', + ModifiedDate: '/Date(1612445852000)/', + ModDateSE: '14 februari 2021 14:37', + Source: 'Södra Ängby skola', + Preamble: 'Kära vårdnadshavare!I helgen är det avlusningsdagar!', + BannerImageUrl: '123123.jpeg', + BannerImageGuid: '7a8142d9d9d54cf090e8457e4c629227', + BannerImageListId: 'a88c22e8-7094-4a71-b4fd-8792c62a7b4a', + Body: 'italic bold emphasis
strongnbsp ', + BodyNoHtml: null, + AuthorDisplayName: 'Tieto Evry', + altText: null, + OriginalSourceUrl: null, + }, + CurrentChild: null, + 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(' emphasizes correctly', () => { + const item = newsItemDetails(response) + + expect(item.body).toContain('*italic*') + expect(item.body).toContain('**bold**') + expect(item.body).toContain('*emphasis*') + expect(item.body).toContain('**strong**') + expect(item.body).toContain('**nbsp**') + }) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/notifications.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/notifications.test.ts new file mode 100644 index 000000000..567f7b30e --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/notifications.test.ts @@ -0,0 +1,64 @@ +import { EtjanstResponse } from '../' +import { notifications } from '../notifications' + +let response: EtjanstResponse + +beforeEach(() => { + response = { + Success: true, + Error: null, + Data: [ + { + Notification: { + Messageid: 'E2E3A567-307F-4859-91BA-31B1F4522A7B', + Messagecorrelationid: 'BB54DC8E-BB02-49A5-9806-4A2433031AA7', + Message: + '{"messages":{"message":{"messageid":"E2E3A567-307F-4859-91BA-31B1F4522A7B","messagecorrelationid":"BB54DC8E-BB02-49A5-9806-4A2433031AA7","messagetext":"Betygen är publicerade.","messagesubject":"Betyg klara","messagetime":"2020-12-18T15:59:43.195","linkbackurl":"https://elevdokumentation.stockholm.se/loa3/gradesStudent.do","sender":{"name":"Elevdokumentation"},"recipient":{"recipient":"195709227283","role":"Guardian"},"messagetype":{"type":"webnotify"},"system":"Elevdokumentation","participant":"BB7DE89D-D714-4EB2-85CD-36F9991E7C34"}}}', + Readreceipt: false, + Recipient: '195709227283', + Id: 5880387, + DateCreated: '2020-12-18T15:59:46.34', + DateModified: '/Date(1608307186340)/', + Role: 'Guardian', + Participant: 'BB7DE89D-D714-4EB2-85CD-36F9991E7C34', + }, + NotificationMessage: { + Messages: { + Message: { + Messageid: 'E2E3A567-307F-4859-91BA-31B1F4522A7B', + Messagecorrelationid: 'BB54DC8E-BB02-49A5-9806-4A2433031AA7', + Messagetext: 'Betygen är publicerade.', + Messagetime: '/Date(1608303583195)/', + Linkbackurl: + 'https://elevdokumentation.stockholm.se/loa3/gradesStudent.do', + Category: null, + Sender: { Name: 'Elevdokumentation' }, + Recipient: { + RecipientRecipient: '195709227283', + Role: 'Guardian', + Schooltype: null, + }, + Messagetype: { Type: 'webnotify' }, + System: 'Elevdokumentation', + }, + }, + }, + }, + ], + } +}) + +it(' notifications correctly', () => { + expect(notifications(response)).toEqual([ + { + id: 'E2E3A567-307F-4859-91BA-31B1F4522A7B', + message: 'Betygen är publicerade.', + sender: 'Elevdokumentation', + url: 'https://elevdokumentation.stockholm.se/loa3/gradesStudent.do', + dateCreated: '2020-12-18T14:59:46.340Z', + dateModified: '2020-12-18T15:59:46.340Z', + category: null, + type: 'webnotify', + }, + ]) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/schedule.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/schedule.test.ts new file mode 100644 index 000000000..4f5633ac0 --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/schedule.test.ts @@ -0,0 +1,47 @@ +import { EtjanstResponse } from '../' +import { schedule } from '../schedule' + +let response: EtjanstResponse + +beforeEach(() => { + response = { + Success: true, + Error: null, + Data: [ + { + Title: 'Canceled: Julavslutning 8C', + Id: 0, + Description: 'Nåt kul', + Location: 'Lakritskolan', + EventDate: '2020-12-14', + EventDateTime: '14:10', + LongEventDateTime: '2020-12-14 14:10', + EndDate: '2020-12-14', + EndDateTime: '14:40', + LongEndDateTime: '2020-12-14 14:40', + EventDateDayNumber: '14', + EventDateMonthName: 'dec', + EventDateMonthFullName: 'december', + FullDateDescription: '2020-12-14 14:10 - 2020-12-14 14:40', + IsSameDay: true, + AllDayEvent: false, + ListId: null, + Mentor: null, + }, + ], + } +}) + +it('parses schedule correctly', () => { + expect(schedule(response)).toEqual([ + { + title: 'Canceled: Julavslutning 8C', + description: 'Nåt kul', + location: 'Lakritskolan', + startDate: '2020-12-14T13:10:00.000Z', + endDate: '2020-12-14T13:40:00.000Z', + oneDayEvent: true, + allDayEvent: false, + }, + ]) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/schoolContacts.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/schoolContacts.test.ts new file mode 100644 index 000000000..b2d5cdc28 --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/schoolContacts.test.ts @@ -0,0 +1,50 @@ +import { EtjanstResponse } from '../' +import { schoolContacts } from '../schoolContacts' + +let response: EtjanstResponse + +beforeEach(() => { + response = { + Success: true, + Error: null, + Data: [ + { + Title: 'Expedition', + Name: null, + Phone: '508 000 00', + Email: '', + SchoolName: 'Påhittade skolan', + ClassName: null, + }, + { + Title: 'Rektor', + Name: 'Andersson, Anna Bella Cecilia', + Phone: '08-508 000 00', + Email: 'anna.anderssonn@edu.stockholm.se', + SchoolName: null, + ClassName: null, + }, + ], + } +}) + +it('parses teachers correctly', () => { + expect(schoolContacts(response)).toEqual([ + { + title: 'Expedition', + name: null, + phone: '508 000 00', + email: '', + schoolName: 'Påhittade skolan', + className: null, + }, + { + title: 'Rektor', + name: 'Andersson, Anna Bella Cecilia', + phone: '08-508 000 00', + email: 'anna.anderssonn@edu.stockholm.se', + schoolName: null, + className: null, + }, + ]) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/teachers.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/teachers.test.ts new file mode 100644 index 000000000..cda0583b1 --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/teachers.test.ts @@ -0,0 +1,68 @@ +import { EtjanstResponse } from '../' +import { teachers } from '../teachers' + +let response: EtjanstResponse + +beforeEach(() => { + response = { + Success: true, + Error: null, + Data: [ + { + ID: 156735, + BATCH: 'GR', + SIS_ID: 'F154239A-EA4A-4C6C-A112-0B9581132E3D', + USERNAME: 'anna.andersson', + SCHOOL_SIS_ID: 'DE2E1293-0F40-4B91-9D91-1E99355DC257', + EMAILADDRESS: null, + STATUS: ' GR', + ERRORCODE: 0, + FIRSTNAME: 'Anna', + LASTNAME: 'Andersson', + ACTIVE: true, + TELWORK: '08 508 0000000', + }, + { + ID: 156690, + BATCH: 'GR', + SIS_ID: '9EC59FCA-80AD-4774-AABD-427040207E33', + USERNAME: 'gunnar.grymm', + SCHOOL_SIS_ID: 'DE2E1293-0F40-4B91-9D91-1E99355DC257', + EMAILADDRESS: 'gunnar.grymm@edu.stockholm.se', + STATUS: ' F', + ERRORCODE: 0, + FIRSTNAME: 'Gunnar', + LASTNAME: 'Grymm', + ACTIVE: true, + TELWORK: null, + }, + ], + } +}) + +it('parses teachers correctly', () => { + expect(teachers(response)).toEqual([ + { + id: 156735, + sisId: 'F154239A-EA4A-4C6C-A112-0B9581132E3D', + firstname: 'Anna', + lastname: 'Andersson', + email: null, + phoneWork: '08 508 0000000', + active: true, + status: ' GR', + timeTableAbbreviation: 'AAN', + }, + { + id: 156690, + sisId: '9EC59FCA-80AD-4774-AABD-427040207E33', + firstname: 'Gunnar', + lastname: 'Grymm', + email: 'gunnar.grymm@edu.stockholm.se', + phoneWork: null, + active: true, + status: ' F', + timeTableAbbreviation: 'GGR', + }, + ]) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/timetable.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/timetable.test.ts new file mode 100644 index 000000000..4ab1511ff --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/timetable.test.ts @@ -0,0 +1,147 @@ +import { timetable, timetableEntry, TimetableResponse } from '../' + +let response: TimetableResponse + +describe('Timetable', () => { + beforeEach(() => { + response = { + error: null, + data: { + textList: [ + { + x: 11, + y: 64, + fColor: '#000000', + fontsize: 14, + text: '8:30', + bold: false, + italic: false, + id: 9, + parentId: 6, + type: 'ClockAxisBox', + }, + { + x: 11, + y: 125, + fColor: '#000000', + fontsize: 14, + text: '9:00', + bold: false, + italic: false, + id: 12, + parentId: 6, + type: 'ClockAxisBox', + }, + ], + boxList: [ + { + x: 0, + y: 950, + width: 1226, + height: 112, + bColor: '#FFFFFF', + fColor: '#FFFFFF', + id: 0, + parentId: null, + type: 'Footer', + lessonGuids: null, + }, + { + x: 56, + y: 0, + width: 223, + height: 34, + bColor: '#FFFFFF', + fColor: '#000000', + id: 1, + parentId: null, + type: 'HeadingDay', + lessonGuids: null, + }, + ], + lineList: [ + { + p1x: 51, + p1y: 34, + p2x: 56, + p2y: 34, + color: '#000000', + id: 7, + parentId: 6, + type: 'ClockAxisGradiation', + }, + { + p1x: 0, + p1y: 64, + p2x: 56, + p2y: 64, + color: '#000000', + id: 8, + parentId: 6, + type: 'ClockAxisGradiation', + }, + ], + lessonInfo: [ + { + guidId: 'N2FjMDc1NjYtZmM2Yy0wZDQyLTY3M2YtZWI5NGNiZDA3ZGU4', + texts: ['Lunch', '', 'Ö5'], + timeStart: '11:40:00', + timeEnd: '12:05:00', + dayOfWeekNumber: 1, + blockName: '', + }, + { + guidId: 'ZTQ1NWE0N2EtNzAwOS0wZTAzLTQ1ZDYtNTA1NWI4Y2JhNDYw', + texts: ['BL', 'KUr', '221'], + timeStart: '09:40:00', + timeEnd: '11:35:00', + dayOfWeekNumber: 1, + blockName: 'block', + }, + ], + }, + exception: null, + validation: [], + } + }) + describe('timetableEntry', () => { + it('parses basic timeTableEntry data correctly', () => { + const entry = timetableEntry(response.data.lessonInfo[1], 2021, 15, 'sv') + + expect(entry.id).toEqual( + 'ZTQ1NWE0N2EtNzAwOS0wZTAzLTQ1ZDYtNTA1NWI4Y2JhNDYw' + ) + expect(entry.code).toEqual('BL') + expect(entry.name).toEqual('Bild') + expect(entry.teacher).toEqual('KUr') + expect(entry.location).toEqual('221') + expect(entry.timeStart).toEqual('09:40:00') + expect(entry.timeEnd).toEqual('11:35:00') + expect(entry.dayOfWeek).toEqual(1) + expect(entry.blockName).toEqual('block') + }) + it('parses dates correctly', () => { + const entry = timetableEntry(response.data.lessonInfo[1], 2021, 15, 'sv') + + expect(entry.dateStart).toEqual('2021-04-12T09:40:00.000+02:00') + expect(entry.dateEnd).toEqual('2021-04-12T11:35:00.000+02:00') + }) + }) + describe('timetable', () => { + it('throws error', () => { + response.error = 'b0rk' + expect(() => timetable(response, 2021, 15, 'sv')).toThrow('b0rk') + }) + it('parses lessonInfo', () => { + const table = timetable(response, 2021, 15, 'sv') + + expect(table).toHaveLength(2) + expect(table[0].id).toEqual( + 'N2FjMDc1NjYtZmM2Yy0wZDQyLTY3M2YtZWI5NGNiZDA3ZGU4' + ) + expect(table[1].id).toEqual( + 'ZTQ1NWE0N2EtNzAwOS0wZTAzLTQ1ZDYtNTA1NWI4Y2JhNDYw' + ) + }) + }) +}) diff --git a/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/user.test.ts b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/user.test.ts new file mode 100644 index 000000000..a8685f5ce --- /dev/null +++ b/apps/skolplattformen-app-new/libs/api-skolplattformen/lib/parse/__tests__/user.test.ts @@ -0,0 +1,27 @@ +import { user } from '../user' + +let response: any + +beforeEach(() => { + response = { + socialSecurityNumber: '197106171635', + isAuthenticated: true, + userFirstName: 'Per-Ola', + userLastName: 'Assarsson', + userEmail: 'per-ola.assarsson@dodgit.com', + notificationId: + 'B026594053D44299AB64ED81990B49C04D32F635C9A3454A84030439BFDDEF04', + } +}) + +it('parses user correctly', () => { + expect(user(response)).toEqual({ + personalNumber: '197106171635', + firstName: 'Per-Ola', + lastName: 'Assarsson', + email: 'per-ola.assarsson@dodgit.com', + isAuthenticated: true, + notificationId: + 'B026594053D44299AB64ED81990B49C04D32F635C9A3454A84030439BFDDEF04', + }) +})