announcement_service_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package service
  2. import (
  3. "context"
  4. "testing"
  5. "time"
  6. "github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
  7. "github.com/stretchr/testify/require"
  8. )
  9. type announcementRepoStub struct {
  10. item *Announcement
  11. }
  12. func (s *announcementRepoStub) Create(_ context.Context, a *Announcement) error {
  13. s.item = a
  14. return nil
  15. }
  16. func (s *announcementRepoStub) GetByID(_ context.Context, _ int64) (*Announcement, error) {
  17. if s.item == nil {
  18. return nil, ErrAnnouncementNotFound
  19. }
  20. return s.item, nil
  21. }
  22. func (s *announcementRepoStub) Update(_ context.Context, a *Announcement) error {
  23. s.item = a
  24. return nil
  25. }
  26. func (*announcementRepoStub) Delete(context.Context, int64) error {
  27. return nil
  28. }
  29. func (*announcementRepoStub) List(context.Context, pagination.PaginationParams, AnnouncementListFilters) ([]Announcement, *pagination.PaginationResult, error) {
  30. return nil, nil, nil
  31. }
  32. func (*announcementRepoStub) ListActive(context.Context, time.Time) ([]Announcement, error) {
  33. return nil, nil
  34. }
  35. func TestAnnouncementServiceCreateRejectsEqualStartEndTimes(t *testing.T) {
  36. repo := &announcementRepoStub{}
  37. svc := NewAnnouncementService(repo, nil, nil, nil)
  38. now := time.Unix(1776790020, 0)
  39. _, err := svc.Create(context.Background(), &CreateAnnouncementInput{
  40. Title: "公告",
  41. Content: "内容",
  42. Status: AnnouncementStatusActive,
  43. NotifyMode: AnnouncementNotifyModePopup,
  44. StartsAt: &now,
  45. EndsAt: &now,
  46. })
  47. require.ErrorIs(t, err, ErrAnnouncementInvalidSchedule)
  48. }
  49. func TestAnnouncementServiceUpdateRejectsEqualStartEndTimes(t *testing.T) {
  50. repo := &announcementRepoStub{
  51. item: &Announcement{
  52. ID: 1,
  53. Title: "公告",
  54. Content: "内容",
  55. Status: AnnouncementStatusActive,
  56. NotifyMode: AnnouncementNotifyModePopup,
  57. },
  58. }
  59. svc := NewAnnouncementService(repo, nil, nil, nil)
  60. now := time.Unix(1776790020, 0)
  61. startsAt := &now
  62. endsAt := &now
  63. _, err := svc.Update(context.Background(), 1, &UpdateAnnouncementInput{
  64. StartsAt: &startsAt,
  65. EndsAt: &endsAt,
  66. })
  67. require.ErrorIs(t, err, ErrAnnouncementInvalidSchedule)
  68. }