Skip to content

Commit

Permalink
Add fakes for most endpoint calls
Browse files Browse the repository at this point in the history
  • Loading branch information
Emil Lindqvist authored and viktorlarsson committed Nov 9, 2021
1 parent 894adbd commit 2a70fa0
Show file tree
Hide file tree
Showing 13 changed files with 2,079 additions and 15 deletions.
46 changes: 40 additions & 6 deletions libs/api-hjarntorget/lib/apiHjarntorget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import {
calendarsUrl,
calendarEventUrl
} from './routes'
import { fakeFetcher } from './fake/fakeFetcher'


function getDateOfISOWeek(week: number, year: number,) {
Expand All @@ -61,20 +62,36 @@ function getDateOfISOWeek(week: number, year: number,) {

export class ApiHjarntorget extends EventEmitter implements Api {
private fetch: Fetcher
private realFetcher: Fetcher

private personalNumber?: string

private cookieManager: CookieManager

public isLoggedIn: boolean = false

private _isFake: boolean = false;

public set isFake(fake: boolean) {
this._isFake = fake
if(this._isFake) {
this.fetch = fakeFetcher
} else {
this.fetch = this.realFetcher
}
}

public get isFake() {
return this._isFake
}

constructor(
fetch: Fetch,
cookieManager: CookieManager,
options?: FetcherOptions
) {
super()
this.fetch = wrap(fetch, options)
this.realFetcher = this.fetch = wrap(fetch, options)
this.cookieManager = cookieManager
}

Expand All @@ -89,7 +106,7 @@ export class ApiHjarntorget extends EventEmitter implements Api {
startDateIso: from.toISODate(),
endDateIso: to.toISODate(),
}
const lessonsResponse = await this.fetch('lessons', lessonsUrl(lessonParams))
const lessonsResponse = await this.fetch(`lessons-${lessonParams.forUser}`, lessonsUrl(lessonParams))
const lessonsResponseJson: any[] = await lessonsResponse.json()

return lessonsResponseJson.map(l => {
Expand Down Expand Up @@ -220,7 +237,6 @@ export class ApiHjarntorget extends EventEmitter implements Api {
throw new Error('Not logged in...')
}


const infoResponse = await this.fetch('info', infoUrl)
const infoResponseJson: any[] = await infoResponse.json()
// TODO: Filter out read messages?
Expand All @@ -246,7 +262,7 @@ export class ApiHjarntorget extends EventEmitter implements Api {

async getNewsDetails(_child: EtjanstChild, item: NewsItem): Promise<any> {

this.fetch('infoSetReadUrl', infoSetReadUrl(item), {
await this.fetch('infoSetReadUrl', infoSetReadUrl(item), {
method: 'POST',
})

Expand Down Expand Up @@ -274,7 +290,7 @@ export class ApiHjarntorget extends EventEmitter implements Api {

const eventMembers = await Promise.all(rolesInEvenResponseJson.map(async r => {
const roleId = r.id
const membersWithRoleResponse = await this.fetch(`event-role-members-${eventId}`, membersWithRoleUrl(eventId, roleId))
const membersWithRoleResponse = await this.fetch(`event-role-members-${eventId}-${roleId}`, membersWithRoleUrl(eventId, roleId))
const membersWithRoleResponseJson: any[] = await membersWithRoleResponse.json()
return membersWithRoleResponseJson
}))
Expand Down Expand Up @@ -326,7 +342,7 @@ export class ApiHjarntorget extends EventEmitter implements Api {
startDateIso: startDate.toISODate(),
endDateIso: endDate.toISODate(),
}
const lessonsResponse = await this.fetch('lessons', lessonsUrl(lessonParams))
const lessonsResponse = await this.fetch(`lessons-${lessonParams.forUser}`, lessonsUrl(lessonParams))
const lessonsResponseJson: any[] = await lessonsResponse.json()

return lessonsResponseJson.map(l => {
Expand Down Expand Up @@ -359,6 +375,11 @@ export class ApiHjarntorget extends EventEmitter implements Api {
}

public async login(personalNumber?: string): Promise<LoginStatusChecker> {
// short circut the bank-id login if in fake mode
if (personalNumber !== undefined && personalNumber.endsWith('1212121212')) return this.fakeMode()

this.isFake = false

console.log("initiating login to hjarntorget")
const beginLoginRedirectResponse = await this.fetch('begin-login', beginLoginUrl, {
redirect: 'follow'
Expand Down Expand Up @@ -424,4 +445,17 @@ export class ApiHjarntorget extends EventEmitter implements Api {

return statusChecker
}

private async fakeMode(): Promise<LoginStatusChecker> {
this.isFake = true

setTimeout(() => {
this.isLoggedIn = true
this.emit('login')
}, 50)

const emitter: any = new EventEmitter()
emitter.token = 'fake'
return emitter
}
}
21 changes: 21 additions & 0 deletions libs/api-hjarntorget/lib/fake/calendars.ts

Large diffs are not rendered by default.

18 changes: 18 additions & 0 deletions libs/api-hjarntorget/lib/fake/current-user.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
export const currentUser = () => ({
"url": "https://hjarntorget.goteborg.se/api/core/current-user",
"headers": {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
"cookie": "REMOVED"
},
"status": 200,
"statusText": "200",
"json": () => Promise.resolve({
"id": "889911_goteborgsstad",
"firstName": "TOLV",
"lastName": "TOLVAN",
"email": null,
"online": true,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
})
}) as any as Response
213 changes: 213 additions & 0 deletions libs/api-hjarntorget/lib/fake/event-role-members.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
export const eventRoleMembers21 = () => ({
"url": "https://hjarntorget.goteborg.se/api/event-members/members-having-role?eventId=21&roleId=821",
"headers": {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
"cookie": "REMOVED"
},
"status": 200,
"statusText": "200",
"json": () => Promise.resolve([
{
"id": "__system$virtual$calendar__",
"firstName": "Kalendern",
"lastName": "i PING PONG",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/default/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
// Klass: 8B
"id": "133700_goteborgsstad",
"firstName": "Azra",
"lastName": "Göransson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
])
}) as any as Response

export const eventRoleMembers14 = () => ({
"url": "https://hjarntorget.goteborg.se/api/event-members/members-having-role?eventId=14&roleId=821",
"headers": {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
"cookie": "REMOVED"
},
"status": 200,
"statusText": "200",
"json": () => Promise.resolve([
{
// Klass: 8B
"id": "133700_goteborgsstad",
"firstName": "Azra",
"lastName": "Göransson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "362119_goteborgsstad",
"firstName": "Elina",
"lastName": "Cocolis",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "999999_goteborgsstad",
"firstName": "Sanne",
"lastName": "Berggren",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "168925_goteborgsstad",
"firstName": "Teddy",
"lastName": "Karlsson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "494949_goteborgsstad",
"firstName": "Fideli",
"lastName": "Sundström",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
])
}) as any as Response

export const eventRoleMembers18 = () => ({
"url": "https://hjarntorget.goteborg.se/api/event-members/members-having-role?eventId=18&roleId=821",
"headers": {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
"cookie": "REMOVED"
},
"status": 200,
"statusText": "200",
"json": () => Promise.resolve([
{
"id": "776655_goteborgsstad",
"firstName": "Walid",
"lastName": "Söderström",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "388601_goteborgsstad",
"firstName": "Rosa",
"lastName": "Fredriksson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "654654_goteborgsstad",
"firstName": "Moses",
"lastName": "Johansson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "1313131_goteborgsstad",
"firstName": "Haris",
"lastName": "Jonsson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "887766_goteborgsstad",
"firstName": "Neo",
"lastName": "Lundström",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
// Klass: 5A
"id": "123456_goteborgsstad",
"firstName": "Jon",
"lastName": "Göransson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
])
}) as any as Response

export const eventRoleMembers24 = () => ({
"url": "https://hjarntorget.goteborg.se/api/event-members/members-having-role?eventId=24&roleId=821",
"headers": {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
"cookie": "REMOVED"
},
"status": 200,
"statusText": "200",
"json": () => Promise.resolve([
{
"id": "393939_goteborgsstad",
"firstName": "Malik Maria",
"lastName": "Henriksson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "444444_goteborgsstad",
"firstName": "Idas",
"lastName": "Svensson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "818181_goteborgsstad",
"firstName": "Nadja",
"lastName": "Ekström",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
"id": "919191_goteborgsstad",
"firstName": "Karim",
"lastName": "Fakir",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
{
// Klass: Förskola
"id": "133737_goteborgsstad",
"firstName": "Havin",
"lastName": "Göransson",
"email": null,
"online": false,
"imagePath": "/pp/lookAndFeel/skins/hjarntorget/icons/monalisa_large.png",
"extraInfoInCatalog": ""
},
])
}) as any as Response
35 changes: 35 additions & 0 deletions libs/api-hjarntorget/lib/fake/events.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
export const events = () => ({
"url": "https://hjarntorget.goteborg.se/api/events/events-sorted-by-name?offset=0&limit=100",
"headers": {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
"cookie": "REMOVED"
},
"status": 200,
"statusText": "200",
"json": () => Promise.resolve([
{
"id": 18,
"name": "138JÄTS 21/22 5A",
"url": "https://hjarntorget.goteborg.se/o/apiAccessWithKey.do?forwardUrl=%2FlaunchCourse.do%3Fid%3D12",
"state": "ONGOING"
},
{
"id": 14,
"name": "138JÄTS 21/22 8B",
"url": "https://hjarntorget.goteborg.se/o/apiAccessWithKey.do?forwardUrl=%2FlaunchCourse.do%3Fid%3D14",
"state": "ONGOING"
},
{
"id": 21,
"name": "138JÄTS Provschema år 8",
"url": "https://hjarntorget.goteborg.se/o/apiAccessWithKey.do?forwardUrl=%2FlaunchCourse.do%3Fid%3D21",
"state": "ONGOING"
},
{
"id": 24,
"name": "139SS27F Södra Bangatan förskola",
"url": "https://hjarntorget.goteborg.se/o/apiAccessWithKey.do?forwardUrl=%2FlaunchCourse.do%3Fid%3D24",
"state": "ONGOING"
}
])
}) as any as Response
Loading

0 comments on commit 2a70fa0

Please sign in to comment.