From 9c048c40dfff1c6ec9266edc3f7adfb4c1cf518f Mon Sep 17 00:00:00 2001 From: masterelmar <18119527+masterElmar@users.noreply.github.com> Date: Mon, 23 Oct 2023 16:58:28 +0200 Subject: [PATCH] refactored and extracted new functions --- backend/model/eventModel.go | 23 +++- backend/model/eventModel_test.go | 126 +++++++++++++++++++++ backend/service/db/dbEvents.go | 24 +--- backend/service/ical/icalFileGeneration.go | 2 +- 4 files changed, 152 insertions(+), 23 deletions(-) create mode 100644 backend/model/eventModel_test.go diff --git a/backend/model/eventModel.go b/backend/model/eventModel.go index b35f231..baf1f7d 100644 --- a/backend/model/eventModel.go +++ b/backend/model/eventModel.go @@ -2,7 +2,16 @@ package model import "github.com/pocketbase/pocketbase/models" -type Events []*Event +type Events []Event + +func (m Events) Contains(event Event) bool { + for _, e := range m { + if e.Equals(event) { + return true + } + } + return false +} type Event struct { UUID string `db:"uuid" json:"uuid"` @@ -21,6 +30,18 @@ type Event struct { models.BaseModel } +func (m *Event) Equals(event Event) bool { + return m.Day == event.Day && + m.Week == event.Week && + m.Start == event.Start && + m.End == event.End && + m.Name == event.Name && + m.Course == event.Course && + m.Prof == event.Prof && + m.Rooms == event.Rooms && + m.EventType == event.EventType +} + func (m *Event) TableName() string { return "events" } diff --git a/backend/model/eventModel_test.go b/backend/model/eventModel_test.go new file mode 100644 index 0000000..40b7ae4 --- /dev/null +++ b/backend/model/eventModel_test.go @@ -0,0 +1,126 @@ +package model + +import ( + "github.com/pocketbase/pocketbase/models" + "testing" +) + +func TestEvents_Contains(t *testing.T) { + type args struct { + event Event + } + tests := []struct { + name string + m Events + args args + want bool + }{ + { + name: "empty events", + m: Events{}, + args: args{event: Event{}}, + want: false, + }, + { + name: "one event", + m: Events{{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}}, + args: args{event: Event{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}}, + want: true, + }, + { + name: "two events", + m: Events{{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}, {Day: "test2", Week: "test2", Start: "test2", End: "test2", Name: "test2", Course: "test2", Prof: "test2", Rooms: "test2", EventType: "test2"}}, + args: args{event: Event{Day: "test2", Week: "test2", Start: "test2", End: "test2", Name: "test2", Course: "test2", Prof: "test2", Rooms: "test2", EventType: "test2"}}, + want: true, + }, + { + name: "two events with different values", + m: Events{{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}, {Day: "test2", Week: "test2", Start: "test2", End: "test2", Name: "test2", Course: "test2", Prof: "test2", Rooms: "test2", EventType: "test2"}}, + args: args{event: Event{Day: "test3", Week: "test3", Start: "test3", End: "test3", Name: "test3", Course: "test3", Prof: "test3", Rooms: "test3", EventType: "test3"}}, + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.m.Contains(tt.args.event); got != tt.want { + t.Errorf("Contains() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestEvent_Equals(t *testing.T) { + type fields struct { + UUID string + Day string + Week string + Start string + End string + Name string + EventType string + Prof string + Rooms string + Notes string + BookedAt string + Course string + Semester string + BaseModel models.BaseModel + } + type args struct { + event Event + } + tests := []struct { + name string + fields fields + args args + want bool + }{ + { + name: "empty events", + fields: fields{}, + args: args{event: Event{}}, + want: true, + }, + { + name: "one empty one not", + fields: fields{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}, + args: args{event: Event{}}, + want: false, + }, + { + name: "one event", + fields: fields{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}, + args: args{event: Event{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}}, + want: true, + }, + { + name: "two events", + fields: fields{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}, + args: args{event: Event{Day: "test2", Week: "test2", Start: "test2", End: "test2", Name: "test2", Course: "test2", Prof: "test2", Rooms: "test2", EventType: "test2"}}, + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + m := &Event{ + UUID: tt.fields.UUID, + Day: tt.fields.Day, + Week: tt.fields.Week, + Start: tt.fields.Start, + End: tt.fields.End, + Name: tt.fields.Name, + EventType: tt.fields.EventType, + Prof: tt.fields.Prof, + Rooms: tt.fields.Rooms, + Notes: tt.fields.Notes, + BookedAt: tt.fields.BookedAt, + Course: tt.fields.Course, + Semester: tt.fields.Semester, + BaseModel: tt.fields.BaseModel, + } + if got := m.Equals(tt.args.event); got != tt.want { + t.Errorf("Equals() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/backend/service/db/dbEvents.go b/backend/service/db/dbEvents.go index 278b8cb..d39fbd8 100644 --- a/backend/service/db/dbEvents.go +++ b/backend/service/db/dbEvents.go @@ -7,15 +7,15 @@ import ( ) func SaveEvents(seminarGroup []model.SeminarGroup, app *pocketbase.PocketBase) ([]model.Event, error) { - var toBeSavedEvents []model.Event - var savedRecords []model.Event + var toBeSavedEvents model.Events + var savedRecords model.Events // check if event is already in database and add to toBeSavedEvents if not for _, seminarGroup := range seminarGroup { for _, event := range seminarGroup.Events { event = event.SetCourse(seminarGroup.Course) dbGroup, err := findEventByDayWeekStartEndNameCourse(event, seminarGroup.Course, app) - if dbGroup.UUID != "" && err.Error() == "sql: no rows in result set" && !containsEvent(toBeSavedEvents, event) { + if dbGroup.UUID != "" && err.Error() == "sql: no rows in result set" && toBeSavedEvents.Contains(event) == false { toBeSavedEvents = append(toBeSavedEvents, event) } } @@ -36,24 +36,6 @@ func SaveEvents(seminarGroup []model.SeminarGroup, app *pocketbase.PocketBase) ( return savedRecords, nil } -func containsEvent(events []model.Event, event model.Event) bool { - for _, e := range events { - if e.Day == event.Day && - e.Week == event.Week && - e.Start == event.Start && - e.End == event.End && - e.Name == event.Name && - e.Course == event.Course && - e.Prof == event.Prof && - e.Rooms == event.Rooms && - e.EventType == event.EventType { - return true - } - } - return false - -} - func findEventByDayWeekStartEndNameCourse(event model.Event, course string, app *pocketbase.PocketBase) (*model.Event, error) { err := app.Dao().DB().Select("*").From("events").Where( dbx.NewExp("Day = {:day} AND Week = {:week} AND Start = {:start} AND End = {:end} AND Name = {:name} AND course = {:course} AND Prof = {:prof} AND Rooms = {:rooms} AND EventType = {:eventType}", diff --git a/backend/service/ical/icalFileGeneration.go b/backend/service/ical/icalFileGeneration.go index 14d64ba..2b77c3a 100644 --- a/backend/service/ical/icalFileGeneration.go +++ b/backend/service/ical/icalFileGeneration.go @@ -50,7 +50,7 @@ func replaceNameIfUserDefined(name string, mapping []model.FeedCollection) strin return name } -func generateDescription(event *model.Event) string { +func generateDescription(event model.Event) string { var description string if !functions.OnlyWhitespace(event.Notes) {