package service_test import ( "context" "fmt" "math/rand" "testing" "time" "github.com/stretchr/testify/require" "github.com/stretchr/testify/assert" "github.com/google/uuid" "gitea.dwysokinski.me/Kichiyaki/notificationarr/internal/domain" "gitea.dwysokinski.me/Kichiyaki/notificationarr/internal/service" "gitea.dwysokinski.me/Kichiyaki/notificationarr/internal/service/internal/mock" ) func TestSonarr_Process(t *testing.T) { t.Parallel() t.Run("OK", func(t *testing.T) { t.Parallel() for _, evType := range [...]domain.SonarrEventType{ domain.SonarrEventTypeDownload, domain.SonarrEventTypeTest, } { t.Run("event type="+evType.String(), func(t *testing.T) { t.Parallel() publisher := &mock.FakePublisher{} publisher.PublishReturns(nil) payload := generateSonarrWebhookPayload(evType) err := service.NewSonaar(publisher).Process(context.Background(), payload) assert.NoError(t, err) require.Equal(t, len(payload.Episodes), publisher.PublishCallCount()) for i, ep := range payload.Episodes { _, title, msg := publisher.PublishArgsForCall(i) assert.Equal(t, payload.Series.Title+" - New episode (Sonarr)", title) assert.Equal(t, fmt.Sprintf("S%d.E%d %s", ep.SeasonNumber, ep.EpisodeNumber, ep.Title), msg) } }) } }) } func generateSonarrWebhookPayload(ev domain.SonarrEventType) domain.SonarrWebhookPayload { s := rand.NewSource(time.Now().UnixNano()) r := rand.New(s) numEps := r.Int31n(19) + 1 eps := make([]domain.SonarrEpisode, 0, numEps) for i := int32(0); i < numEps; i++ { eps = append(eps, domain.SonarrEpisode{ ID: r.Int63(), EpisodeNumber: int16(r.Int31n(100)), SeasonNumber: int16(r.Int31n(100)), Title: uuid.NewString(), }) } return domain.SonarrWebhookPayload{ EventType: ev, Series: domain.SonarrSeries{ ID: r.Int63(), Title: uuid.NewString(), }, Episodes: eps, } }