76 lines
1.9 KiB
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,
|
|
}
|
|
}
|