Files
sub2api/backend/internal/service/announcement_service_test.go
2026-04-21 09:53:15 -07:00

82 lines
2.0 KiB
Go

package service
import (
"context"
"testing"
"time"
"github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
"github.com/stretchr/testify/require"
)
type announcementRepoStub struct {
item *Announcement
}
func (s *announcementRepoStub) Create(_ context.Context, a *Announcement) error {
s.item = a
return nil
}
func (s *announcementRepoStub) GetByID(_ context.Context, _ int64) (*Announcement, error) {
if s.item == nil {
return nil, ErrAnnouncementNotFound
}
return s.item, nil
}
func (s *announcementRepoStub) Update(_ context.Context, a *Announcement) error {
s.item = a
return nil
}
func (*announcementRepoStub) Delete(context.Context, int64) error {
return nil
}
func (*announcementRepoStub) List(context.Context, pagination.PaginationParams, AnnouncementListFilters) ([]Announcement, *pagination.PaginationResult, error) {
return nil, nil, nil
}
func (*announcementRepoStub) ListActive(context.Context, time.Time) ([]Announcement, error) {
return nil, nil
}
func TestAnnouncementServiceCreateRejectsEqualStartEndTimes(t *testing.T) {
repo := &announcementRepoStub{}
svc := NewAnnouncementService(repo, nil, nil, nil)
now := time.Unix(1776790020, 0)
_, err := svc.Create(context.Background(), &CreateAnnouncementInput{
Title: "公告",
Content: "内容",
Status: AnnouncementStatusActive,
NotifyMode: AnnouncementNotifyModePopup,
StartsAt: &now,
EndsAt: &now,
})
require.ErrorIs(t, err, ErrAnnouncementInvalidSchedule)
}
func TestAnnouncementServiceUpdateRejectsEqualStartEndTimes(t *testing.T) {
repo := &announcementRepoStub{
item: &Announcement{
ID: 1,
Title: "公告",
Content: "内容",
Status: AnnouncementStatusActive,
NotifyMode: AnnouncementNotifyModePopup,
},
}
svc := NewAnnouncementService(repo, nil, nil, nil)
now := time.Unix(1776790020, 0)
startsAt := &now
endsAt := &now
_, err := svc.Update(context.Background(), 1, &UpdateAnnouncementInput{
StartsAt: &startsAt,
EndsAt: &endsAt,
})
require.ErrorIs(t, err, ErrAnnouncementInvalidSchedule)
}