fix:#32 added test and mockable clock for tests

This commit is contained in:
Elmar Kresse
2024-02-07 20:47:58 +01:00
parent 239ff40e0b
commit acce4be19e
2 changed files with 134 additions and 4 deletions

View File

@@ -3,6 +3,7 @@ package ical
import (
"htwkalender/model"
"htwkalender/service/functions"
clock "htwkalender/service/functions/time"
"htwkalender/service/names"
"time"
@@ -18,6 +19,12 @@ type IcalModel struct {
// EmitICal implements the interface for goics
func (icalModel IcalModel) EmitICal() goics.Componenter {
internalClock := clock.RealClock{}
c := generateIcalEmit(icalModel, internalClock)
return c
}
func generateIcalEmit(icalModel IcalModel, internalClock clock.Clock) *goics.Component {
europeTime, _ := time.LoadLocation("Europe/Berlin")
c := goics.NewComponent()
c.SetType("VCALENDAR")
@@ -38,7 +45,7 @@ func (icalModel IcalModel) EmitICal() goics.Componenter {
s := goics.NewComponent()
s.SetType("VEVENT")
s.AddProperty(goics.FormatDateTime("DTSTAMP", time.Now().Local().In(europeTime)))
s.AddProperty(goics.FormatDateTime("DTSTAMP", internalClock.Now().Local().In(europeTime)))
// create a unique id for the event by hashing the event start, end, course and name
var eventHash = functions.HashString(event.Start.String() + event.End.String() + event.Course + event.Name + event.Rooms)
@@ -49,7 +56,7 @@ func (icalModel IcalModel) EmitICal() goics.Componenter {
if mappingFound {
addPropertyIfNotEmpty(s, "SUMMARY", replaceNameIfUserDefined(&event, mapEntry))
addAlarmIfSpecified(s, event, mapEntry)
addAlarmIfSpecified(s, event, mapEntry, internalClock)
} else {
addPropertyIfNotEmpty(s, "SUMMARY", event.Name)
}
@@ -99,10 +106,10 @@ func (icalModel IcalModel) daylight(tz *goics.Component) {
}
// if reminder is specified in the configuration for this event, an alarm will be added to the event
func addAlarmIfSpecified(s *goics.Component, event model.Event, mapping model.FeedCollection) {
func addAlarmIfSpecified(s *goics.Component, event model.Event, mapping model.FeedCollection, clock clock.Clock) {
// if event.Start > now
// then add alarm
if event.Start.Time().Local().After(time.Now().Local()) && mapping.Reminder {
if event.Start.Time().Local().After(clock.Now().Local()) && mapping.Reminder {
a := goics.NewComponent()
a.SetType("VALARM")
a.AddProperty("TRIGGER", "-P0DT0H15M0S")