package domain_test import ( "strconv" "testing" "gitea.dwysokinski.me/twhelp/dcbot/internal/domain" "github.com/google/uuid" "github.com/stretchr/testify/assert" ) func TestNewEnnoblementNotifications(t *testing.T) { t.Parallel() tests := []struct { group domain.GroupWithMonitors ennoblements []domain.Ennoblement gainIndexes []int lossIndexes []int }{ { group: domain.GroupWithMonitors{ Group: domain.Group{ ChannelGains: uuid.NewString(), ChannelLosses: uuid.NewString(), }, Monitors: []domain.Monitor{ { TribeID: 125, }, { TribeID: 150, }, }, }, ennoblements: []domain.Ennoblement{ { NewOwner: domain.PlayerMeta{ ID: 125, Tribe: domain.NullTribeMeta{ Tribe: domain.TribeMeta{ ID: 150, }, Valid: true, }, }, Village: domain.VillageMeta{ Player: domain.NullPlayerMeta{ Player: domain.PlayerMeta{ ID: 130, Tribe: domain.NullTribeMeta{ Tribe: domain.TribeMeta{ ID: 151, }, Valid: true, }, }, Valid: true, }, }, }, { // Barbarians == false NewOwner: domain.PlayerMeta{ ID: 125, Tribe: domain.NullTribeMeta{ Tribe: domain.TribeMeta{ ID: 150, }, Valid: true, }, }, }, { // Internals == false NewOwner: domain.PlayerMeta{ ID: 125, Tribe: domain.NullTribeMeta{ Tribe: domain.TribeMeta{ ID: 150, }, Valid: true, }, }, Village: domain.VillageMeta{ Player: domain.NullPlayerMeta{ Player: domain.PlayerMeta{ ID: 130, Tribe: domain.NullTribeMeta{ Tribe: domain.TribeMeta{ ID: 125, }, Valid: true, }, }, Valid: true, }, }, }, { NewOwner: domain.PlayerMeta{ ID: 125, Tribe: domain.NullTribeMeta{ Tribe: domain.TribeMeta{ ID: 153, }, Valid: true, }, }, Village: domain.VillageMeta{ Player: domain.NullPlayerMeta{ Player: domain.PlayerMeta{ ID: 130, Tribe: domain.NullTribeMeta{ Tribe: domain.TribeMeta{ ID: 150, }, Valid: true, }, }, Valid: true, }, }, }, }, gainIndexes: []int{0}, lossIndexes: []int{3}, }, } for i := range tests { tt := tests[i] t.Run(strconv.Itoa(i), func(t *testing.T) { t.Parallel() notifications := domain.NewEnnoblementNotifications(tt.group, tt.ennoblements) assert.Len(t, notifications, len(tt.gainIndexes)+len(tt.lossIndexes)) for _, idx := range tt.gainIndexes { assert.Contains(t, notifications, domain.EnnoblementNotification{ Type: domain.EnnoblementNotificationTypeGain, ServerID: tt.group.ServerID, ChannelID: tt.group.ChannelGains, LanguageTag: tt.group.LanguageTag, Ennoblement: tt.ennoblements[idx], }) } for _, idx := range tt.lossIndexes { assert.Contains(t, notifications, domain.EnnoblementNotification{ Type: domain.EnnoblementNotificationTypeLoss, ServerID: tt.group.ServerID, ChannelID: tt.group.ChannelLosses, LanguageTag: tt.group.LanguageTag, Ennoblement: tt.ennoblements[idx], }) } }) } }