Skip to content

Commit fda682b

Browse files
committed
feat: add study grade calculation tests
1 parent 751a618 commit fda682b

File tree

1 file changed

+72
-13
lines changed

1 file changed

+72
-13
lines changed

apps/rpc/src/modules/user/membership.e2e-spec.ts

Lines changed: 72 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,95 @@ import { getMembershipService } from "./membership-service"
22
import type { NTNUGroup } from "../feide/feide-groups-repository"
33
import { describe, expect, it } from "vitest"
44
import { subYears } from "date-fns"
5-
import { getAcademicStart } from "@dotkomonline/types"
5+
import { getAcademicStart, getMembershipGrade, getNextAcademicStart, type Membership } from "@dotkomonline/types"
66
import { getCurrentUTC } from "@dotkomonline/utils"
7+
import { TZDate } from "@date-fns/tz"
8+
9+
// This test data was gathered in 2026, so to be able to test membership we need a static date, since these dates are
10+
// relative to current date and would change with time. This only concerns the membership grade calculations. The year
11+
// calculations should remain constant throughout the years.
12+
const NOW = new TZDate(2026, 1, 23, 12, 0, 0, 0)
713

814
const getYearFromDelta = (delta: number) => subYears(getAcademicStart(getCurrentUTC()), delta).getFullYear()
915

16+
const getMockMembershipFromDelta = (type: Membership["type"], delta: number): Membership => {
17+
const start = subYears(getAcademicStart(NOW), delta)
18+
19+
return {
20+
end: getNextAcademicStart(),
21+
id: "123",
22+
specialization: "UNKNOWN",
23+
start,
24+
type,
25+
userId: "123",
26+
}
27+
}
28+
1029
describe("Membership integration tests", () => {
1130
const membershipService = getMembershipService()
1231

1332
it("bachelor example 1", async () => {
1433
const { goal, courses } = BACHELOR.EXAMPLE_1
1534
const delta = membershipService.findBachelorStartYearDelta(courses)
16-
expect(getYearFromDelta(delta)).toBe(goal)
35+
36+
const year = getYearFromDelta(delta)
37+
const membership = getMockMembershipFromDelta("BACHELOR_STUDENT", delta)
38+
39+
expect(year).toBe(goal.year)
40+
expect(getMembershipGrade(membership)).toBe(goal.grade)
1741
})
1842

1943
it("bachelor example 2", async () => {
2044
const { goal, courses } = BACHELOR.EXAMPLE_2
2145
const delta = membershipService.findBachelorStartYearDelta(courses)
22-
expect(getYearFromDelta(delta)).toBe(goal)
46+
47+
const year = getYearFromDelta(delta)
48+
const membership = getMockMembershipFromDelta("BACHELOR_STUDENT", delta)
49+
50+
expect(year).toBe(goal.year)
51+
expect(getMembershipGrade(membership)).toBe(goal.grade)
2352
})
2453

2554
it("bachelor example 3", async () => {
2655
const { goal, courses } = BACHELOR.EXAMPLE_3
2756
const delta = membershipService.findBachelorStartYearDelta(courses)
28-
expect(getYearFromDelta(delta)).toBe(goal)
57+
58+
const year = getYearFromDelta(delta)
59+
const membership = getMockMembershipFromDelta("BACHELOR_STUDENT", delta)
60+
61+
expect(year).toBe(goal.year)
62+
expect(getMembershipGrade(membership)).toBe(goal.grade)
2963
})
3064

3165
it("master example 1", async () => {
3266
const { goal, courses } = MASTER.EXAMPLE_1
3367
const delta = membershipService.findMasterStartYearDelta(courses)
34-
expect(getYearFromDelta(delta)).toBe(goal)
68+
69+
const year = getYearFromDelta(delta)
70+
const membership = getMockMembershipFromDelta("MASTER_STUDENT", delta)
71+
72+
expect(year).toBe(goal.year)
73+
expect(getMembershipGrade(membership)).toBe(goal.grade)
3574
})
3675

3776
it("master example 2", async () => {
3877
const { goal, courses } = MASTER.EXAMPLE_2
3978
const delta = membershipService.findMasterStartYearDelta(courses)
40-
expect(getYearFromDelta(delta)).toBe(goal)
79+
80+
const year = getYearFromDelta(delta)
81+
const membership = getMockMembershipFromDelta("MASTER_STUDENT", delta)
82+
83+
expect(year).toBe(goal.year)
84+
expect(getMembershipGrade(membership)).toBe(goal.grade)
4185
})
4286
})
4387

4488
const MASTER = {
4589
EXAMPLE_1: {
46-
goal: 2024,
90+
goal: {
91+
year: 2024,
92+
grade: 5,
93+
},
4794
courses: [
4895
{
4996
code: "IT1901",
@@ -218,7 +265,10 @@ const MASTER = {
218265
],
219266
},
220267
EXAMPLE_2: {
221-
goal: 2025,
268+
goal: {
269+
year: 2025,
270+
grade: 4,
271+
},
222272
courses: [
223273
{
224274
code: "HMS0009",
@@ -372,11 +422,14 @@ const MASTER = {
372422
},
373423
],
374424
},
375-
} as const satisfies Record<string, { goal: number; courses: NTNUGroup[] }>
425+
} as const satisfies Record<string, { goal: { year: number; grade: number }; courses: NTNUGroup[] }>
376426

377427
const BACHELOR = {
378428
EXAMPLE_1: {
379-
goal: 2023,
429+
goal: {
430+
year: 2023,
431+
grade: 3,
432+
},
380433
courses: [
381434
{
382435
code: "IT1901",
@@ -536,7 +589,10 @@ const BACHELOR = {
536589
],
537590
},
538591
EXAMPLE_2: {
539-
goal: 2023,
592+
goal: {
593+
year: 2023,
594+
grade: 3,
595+
},
540596
courses: [
541597
{
542598
code: "TDT4109",
@@ -646,7 +702,10 @@ const BACHELOR = {
646702
],
647703
},
648704
EXAMPLE_3: {
649-
goal: 2023,
705+
goal: {
706+
year: 2023,
707+
grade: 3,
708+
},
650709
courses: [
651710
{
652711
code: "IT1901",
@@ -847,4 +906,4 @@ const BACHELOR = {
847906
},
848907
],
849908
},
850-
} as const satisfies Record<string, { goal: number; courses: NTNUGroup[] }>
909+
} as const satisfies Record<string, { goal: { year: number; grade: number }; courses: NTNUGroup[] }>

0 commit comments

Comments
 (0)