Skip to content

Commit cbc700e

Browse files
committed
transformation: add transformer to keep original event link
Closes #56
1 parent 8b2c5a3 commit cbc700e

File tree

7 files changed

+117
-0
lines changed

7 files changed

+117
-0
lines changed

example.sync.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ transformations:
5252
config:
5353
NewTitle: "[Synchronisierter Termin]"
5454
- name: KeepMeetingLink
55+
- name: AddOriginalLink
5556
# Do not use KeepAttendees when the Outlook Adapter is used as a sink. There is no way to suppress mail invitations
5657
- name: KeepAttendees
5758
config:

internal/adapter/google/event.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func calendarEventToEvent(e *calendar.Event, adapterSourceID string) models.Even
5252
Reminders: reminders,
5353
MeetingLink: e.HangoutLink,
5454
Accepted: hasEventAccepted,
55+
HTMLLink: e.HtmlLink,
5556
}
5657
}
5758

internal/adapter/outlook_http/client.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ func (o OutlookClient) outlookEventToEvent(oe Event, adapterSourceID string) (e
287287
Reminders: reminders,
288288
MeetingLink: oe.OnlineMeetingUrl,
289289
Accepted: hasEventAccepted,
290+
HTMLLink: oe.HtmlLink,
290291
}
291292

292293
if oe.IsAllDay {

internal/models/event.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type Event struct {
2828
Reminders Reminders
2929
MeetingLink string
3030
Accepted bool
31+
HTMLLink string
3132
}
3233

3334
type Reminders []Reminder

internal/sync/transformer.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ var (
3535
"PrefixTitle": &transformation.PrefixTitle{Prefix: ""},
3636
"KeepTitle": &transformation.KeepTitle{},
3737
"KeepMeetingLink": &transformation.KeepMeetingLink{},
38+
"AddOriginalLink": &transformation.AddOriginalLink{},
3839
"KeepDescription": &transformation.KeepDescription{},
3940
"KeepLocation": &transformation.KeepLocation{},
4041
"KeepAttendees": &transformation.KeepAttendees{UseEmailAsDisplayName: false},
@@ -49,6 +50,7 @@ var (
4950
"KeepReminders",
5051
"KeepDescription",
5152
"KeepMeetingLink",
53+
"AddOriginalLink",
5254
"KeepTitle",
5355
"PrefixTitle",
5456
"ReplaceTitle",
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package transformation
2+
3+
import (
4+
"fmt"
5+
"github.com/inovex/CalendarSync/internal/models"
6+
)
7+
8+
type AddOriginalLink struct{}
9+
10+
func (t *AddOriginalLink) Name() string {
11+
return "AddOriginalLink"
12+
}
13+
14+
func (t *AddOriginalLink) Transform(source models.Event, sink models.Event) (models.Event, error) {
15+
if len(source.HTMLLink) > 0 {
16+
sink.Description = fmt.Sprintf("original event link: %s\n\n############\n%s", source.HTMLLink, sink.Description)
17+
}
18+
return sink, nil
19+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package transformation
2+
3+
import (
4+
"testing"
5+
6+
"github.com/inovex/CalendarSync/internal/models"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
// verify keep attendees
11+
func TestAddOriginalLink_Transform(t *testing.T) {
12+
source := models.Event{
13+
ICalUID: "testId",
14+
ID: "testUid",
15+
Title: "foo",
16+
Description: "bar",
17+
HTMLLink: "https://foo.com/bar?calendarId=testId",
18+
}
19+
sink := models.NewSyncEvent(source)
20+
21+
addOriginalLink := AddOriginalLink{}
22+
23+
event, err := addOriginalLink.Transform(source, sink)
24+
25+
assert.Nil(t, err)
26+
expectedEvent := models.Event{
27+
ICalUID: "testId",
28+
ID: "testUid",
29+
Title: "CalendarSync Event",
30+
Description: "original event link: https://foo.com/bar?calendarId=testId\n\n############\n",
31+
}
32+
33+
assert.Equal(t, expectedEvent, event)
34+
}
35+
36+
func TestAddOriginalLink_Transform_WithKeepDescription(t *testing.T) {
37+
source := models.Event{
38+
ICalUID: "testId",
39+
ID: "testUid",
40+
Title: "foo",
41+
Description: "bar",
42+
HTMLLink: "https://foo.com/bar?calendarId=testId",
43+
}
44+
sink := models.NewSyncEvent(source)
45+
46+
keepDescription := KeepDescription{}
47+
addOriginalLink := AddOriginalLink{}
48+
49+
sink, _ := keepDescription.Transform(source, sink)
50+
event, err := addOriginalLink.Transform(source, sink)
51+
52+
assert.Nil(t, err)
53+
expectedEvent := models.Event{
54+
ICalUID: "testId",
55+
ID: "testUid",
56+
Title: "CalendarSync Event",
57+
Description: "original event link: https://foo.com/bar?calendarId=testId\n\n############\nbar",
58+
}
59+
60+
assert.Equal(t, expectedEvent, event)
61+
}
62+
63+
func TestAddOriginalLink_Transform_WithKeepDescriptionAndKeepMeetingLink(t *testing.T) {
64+
source := models.Event{
65+
ICalUID: "testId",
66+
ID: "testUid",
67+
Title: "foo",
68+
Description: "bar",
69+
MeetingLink: "https://meetinglink.de",
70+
HTMLLink: "https://foo.com/bar?calendarId=testId",
71+
}
72+
sink := models.NewSyncEvent(source)
73+
74+
keepDescription := KeepDescription{}
75+
keepMeetingLink := KeepMeetingLink{}
76+
addOriginalLink := AddOriginalLink{}
77+
78+
sink, _ = keepDescription.Transform(source, sink)
79+
sink, _ = keepMeetingLink.Transform(source, sink)
80+
event, err := addOriginalLink.Transform(source, sink)
81+
82+
assert.Nil(t, err)
83+
expectedEvent := models.Event{
84+
ICalUID: "testId",
85+
ID: "testUid",
86+
Title: "CalendarSync Event",
87+
Description: "original event link: https://foo.com/bar?calendarId=testId\n\n############\n" +
88+
"original meeting link: https://meetinglink.de\n\n############\nbar",
89+
}
90+
91+
assert.Equal(t, expectedEvent, event)
92+
}

0 commit comments

Comments
 (0)