77 lines
2.4 KiB
Go
77 lines
2.4 KiB
Go
package ical
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
"unicode/utf8"
|
|
|
|
"usoscal/internal/store"
|
|
)
|
|
|
|
func TestWrite(t *testing.T) {
|
|
warsaw, err := time.LoadLocation("Europe/Warsaw")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
event := store.Event{
|
|
UID: "sm-90917229",
|
|
Start: time.Date(2026, 10, 9, 11, 45, 0, 0, warsaw),
|
|
End: time.Date(2026, 10, 9, 13, 15, 0, 0, warsaw),
|
|
Title: "Algebra liniowa z elementami matematyki dyskretnej",
|
|
Kind: "Laboratorium",
|
|
Group: "2",
|
|
Room: "602",
|
|
Building: "A1 - BM - Budowa Maszyn, budynek z zegarem",
|
|
Address: "ul. Piotrowo 3, 61-138 Poznań, Polska",
|
|
Lecturers: "dr inż. Zażółć Gęślą-Jaźń",
|
|
URL: "https://usosweb.put.poznan.pl/kontroler.php?_action=x&gr_nr=2",
|
|
UpdatedAt: time.Date(2026, 10, 1, 8, 0, 0, 0, time.UTC),
|
|
}
|
|
var out strings.Builder
|
|
if err := Write(&out, "USOS", "usos.example", []store.Event{event}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
text := out.String()
|
|
|
|
for _, rawLine := range strings.Split(strings.TrimSuffix(text, "\r\n"), "\r\n") {
|
|
if len(rawLine) > lineLimit+1 {
|
|
t.Errorf("line longer than the fold limit: %q", rawLine)
|
|
}
|
|
if !utf8.ValidString(rawLine) {
|
|
t.Errorf("fold split a character: %q", rawLine)
|
|
}
|
|
}
|
|
if strings.Contains(strings.ReplaceAll(text, "\r\n", ""), "\n") {
|
|
t.Error("bare line feed in the output")
|
|
}
|
|
|
|
unfolded := strings.ReplaceAll(text, "\r\n ", "")
|
|
for _, want := range []string{
|
|
"UID:sm-90917229@usos.example\r\n",
|
|
"DTSTART:20261009T094500Z\r\n",
|
|
"DTEND:20261009T111500Z\r\n",
|
|
"SUMMARY:Algebra liniowa z elementami matematyki dyskretnej (Laboratorium)\r\n",
|
|
`LOCATION:602 (A1 - BM - Budowa Maszyn\, budynek z zegarem)\, ul. Piotrowo 3\, 61-138 Poznań\, Polska` + "\r\n",
|
|
`DESCRIPTION:Laboratorium\, group 2\nLecturer: dr inż. Zażółć Gęślą-Jaźń\nhttps://usosweb.put.poznan.pl/kontroler.php?_action=x&gr_nr=2` + "\r\n",
|
|
"END:VCALENDAR\r\n",
|
|
} {
|
|
if !strings.Contains(unfolded, want) {
|
|
t.Errorf("missing %q in\n%s", want, unfolded)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSparseEvent(t *testing.T) {
|
|
event := store.Event{UID: "x", Title: "Spotkanie", Kind: "Spotkanie", Start: time.Unix(0, 0), End: time.Unix(60, 0)}
|
|
if got := Summary(event); got != "Spotkanie" {
|
|
t.Errorf("Summary = %q", got)
|
|
}
|
|
if got := Location(event); got != "" {
|
|
t.Errorf("Location = %q", got)
|
|
}
|
|
if got := Description(event); got != "Spotkanie" {
|
|
t.Errorf("Description = %q", got)
|
|
}
|
|
}
|