diff --git a/backend/service/fetch/v2/fetcher.go b/backend/service/fetch/v2/fetcher.go index 27363d6..57a9aef 100644 --- a/backend/service/fetch/v2/fetcher.go +++ b/backend/service/fetch/v2/fetcher.go @@ -69,17 +69,15 @@ func FetchAllEventsAndSave(app *pocketbase.PocketBase, clock localTime.Clock) ([ "%0A?&template=sws_modul&weeks=1-65&combined=yes", } - if isSummerSemester(clock) { - savedRecordsSs, errSs := fetchAndSaveAllEventsForSemester(app, "ss", stubUrl) - if errSs == nil { - savedRecords = append(savedRecords, savedRecordsSs...) - } - } else { - savedRecordsWs, errWs := fetchAndSaveAllEventsForSemester(app, "ws", stubUrl) - if errWs == nil { - savedRecords = append(savedRecords, savedRecordsWs...) + // Fetch and save events for all semesters + for _, semester := range calculateSemesterList(clock) { + events, fetchErr := fetchAndSaveAllEventsForSemester(app, semester, stubUrl) + if fetchErr != nil { + return nil, fmt.Errorf("failed to fetch and save events for "+semester+": %w", err) } + savedRecords = append(savedRecords, events...) } + return savedRecords, err } @@ -106,12 +104,23 @@ func fetchAndSaveAllEventsForSemester( return savedRecords, err } -func isSummerSemester(clock localTime.Clock) bool { - if clock.Now().Month() >= time.April && clock.Now().Month() <= time.September { - return true - } else { - return false +func calculateSemesterList(clock localTime.Clock) []string { + summerSemester := clock.Now().Month() >= time.March && clock.Now().Month() <= time.September + winterSemester := clock.Now().Month() <= time.March || clock.Now().Month() >= time.September + + if summerSemester && winterSemester { + return []string{"ss", "ws"} } + + if summerSemester { + return []string{"ss"} + } + + if winterSemester { + return []string{"ws"} + } + + return []string{"ss", "ws"} } func parseEventForOneSemester(url string) ([]model.Event, error) { @@ -131,7 +140,6 @@ func parseEventForOneSemester(url string) ([]model.Event, error) { // Get all event tables and all day labels eventTables := getEventTables(doc) allDayLabels := getAllDayLabels(doc) - eventsWithCombinedWeeks := toEvents(eventTables, allDayLabels) splitEventsByWeekVal := splitEventsByWeek(eventsWithCombinedWeeks) diff --git a/backend/service/fetch/v2/fetcher_test.go b/backend/service/fetch/v2/fetcher_test.go index 28eb103..2223549 100644 --- a/backend/service/fetch/v2/fetcher_test.go +++ b/backend/service/fetch/v2/fetcher_test.go @@ -100,14 +100,14 @@ func Test_switchNameAndNotesForExam(t *testing.T) { } } -func Test_isSummerSemester(t *testing.T) { +func Test_calculateSemesterList(t *testing.T) { type args struct { - clock mockTime.MockClock + clock mockTime.Clock } tests := []struct { name string args args - want bool + want []string }{ { name: "is summer semester", @@ -116,22 +116,31 @@ func Test_isSummerSemester(t *testing.T) { NowTime: time.Date(2024, 6, 1, 0, 0, 0, 0, time.UTC), }, }, - want: true, + want: []string{"ss"}, }, { - name: "is not summer semester", + name: "is winter semester", args: args{ clock: mockTime.MockClock{ NowTime: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - want: false, + want: []string{"ws"}, + }, + { + name: "is in both", + args: args{ + clock: mockTime.MockClock{ + NowTime: time.Date(2024, 3, 22, 0, 0, 0, 0, time.UTC), + }, + }, + want: []string{"ss", "ws"}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := isSummerSemester(tt.args.clock); got != tt.want { - t.Errorf("isSummerSemester() = %v, want %v", got, tt.want) + if got := calculateSemesterList(tt.args.clock); !reflect.DeepEqual(got, tt.want) { + t.Errorf("calculateSemesterList() = %v, want %v", got, tt.want) } }) }