This repository has been archived on 2023-04-18. You can view files and clone it, but cannot push or open issues or pull requests.
notificationarr/internal/service/sonarr_test.go

76 lines
1.9 KiB
Go

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,
}
}