| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package service
- import (
- "context"
- "encoding/json"
- "testing"
- "time"
- "github.com/stretchr/testify/require"
- )
- func TestAnnouncementServiceRejectsOutOfRangeDates(t *testing.T) {
- for _, year := range []int{-1, 10000} {
- date := time.Date(year, 1, 1, 0, 0, 0, 0, time.UTC)
- for _, field := range []string{"start", "end"} {
- t.Run(date.String()+field, func(t *testing.T) {
- repo := &announcementRepoStub{}
- svc := NewAnnouncementService(repo, nil, nil, nil)
- input := &CreateAnnouncementInput{Title: "test", Content: "test"}
- if field == "start" {
- input.StartsAt = &date
- } else {
- input.EndsAt = &date
- }
- _, err := svc.Create(context.Background(), input)
- require.ErrorIs(t, err, ErrAnnouncementInvalidSchedule)
- require.Nil(t, repo.item, "invalid dates must never reach persistence")
- repo.item = &Announcement{ID: 1, Title: "test", Content: "test"}
- update := &UpdateAnnouncementInput{}
- ptr := &date
- if field == "start" {
- update.StartsAt = &ptr
- } else {
- update.EndsAt = &ptr
- }
- _, err = svc.Update(context.Background(), 1, update)
- require.ErrorIs(t, err, ErrAnnouncementInvalidSchedule)
- require.Nil(t, repo.item.StartsAt)
- require.Nil(t, repo.item.EndsAt)
- })
- }
- }
- }
- func TestAnnouncementServiceAcceptsJSONDateBoundariesAndClear(t *testing.T) {
- start := time.Date(0, 1, 1, 0, 0, 0, 0, time.UTC)
- end := time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC)
- repo := &announcementRepoStub{}
- svc := NewAnnouncementService(repo, nil, nil, nil)
- a, err := svc.Create(context.Background(), &CreateAnnouncementInput{Title: "test", Content: "test", StartsAt: &start, EndsAt: &end})
- require.NoError(t, err)
- _, err = json.Marshal(a)
- require.NoError(t, err)
- var clear *time.Time
- a, err = svc.Update(context.Background(), 1, &UpdateAnnouncementInput{StartsAt: &clear, EndsAt: &clear})
- require.NoError(t, err)
- require.Nil(t, a.StartsAt)
- require.Nil(t, a.EndsAt)
- }
|