fix(pack): emit one gacha-point entry per emblem cosmetic + clean stale docstring
This commit is contained in:
@@ -144,6 +144,49 @@ public class GachaPointServiceTests
|
||||
Assert.That(leaderEntry.RewardList[2].RewardDetailId, Is.EqualTo(704141010));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetRewards_emits_one_entry_per_emblem_for_cards_with_multiple_emblems()
|
||||
{
|
||||
using var factory = new SVSimTestFactory();
|
||||
long viewerId = await factory.SeedViewerAsync();
|
||||
using var scope = factory.Services.CreateScope();
|
||||
var db = scope.ServiceProvider.GetRequiredService<SVSimDbContext>();
|
||||
|
||||
var set = new ShadowverseCardSetEntry { Id = 10008, IsInRotation = true };
|
||||
db.CardSets.Add(set);
|
||||
var leg = new ShadowverseCardEntry
|
||||
{
|
||||
Id = 108044010, Name = "leg-multi-emblem", Rarity = Rarity.Legendary,
|
||||
Class = null, IsFoil = false,
|
||||
};
|
||||
set.Cards.Add(leg);
|
||||
|
||||
// Two emblems for one card — matches prod capture pack 10008 card 108044010.
|
||||
db.CardCosmeticRewards.AddRange(
|
||||
new CardCosmeticReward { CardId = 108044010, Type = CosmeticType.Emblem, CosmeticId = 900041040 },
|
||||
new CardCosmeticReward { CardId = 108044010, Type = CosmeticType.Emblem, CosmeticId = 900041050 });
|
||||
|
||||
db.Packs.Add(new PackConfigEntry
|
||||
{
|
||||
Id = 10008, BasePackId = 10008, PackCategory = PackCategory.LegendCardPack,
|
||||
CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30),
|
||||
GachaPointConfig = new PackGachaPointConfig { ExchangeablePoint = 400, IncreaseGachaPoint = 1 },
|
||||
});
|
||||
await db.SaveChangesAsync();
|
||||
|
||||
var svc = scope.ServiceProvider.GetRequiredService<IGachaPointService>();
|
||||
var result = await svc.GetRewardsAsync(10008, viewerId);
|
||||
|
||||
Assert.That(result, Has.Count.EqualTo(1));
|
||||
var entry = result[0];
|
||||
Assert.That(entry.CardId, Is.EqualTo(108044010));
|
||||
Assert.That(entry.RewardList, Has.Count.EqualTo(2),
|
||||
"cards with multiple emblems must emit one reward_list entry per emblem");
|
||||
var detailIds = entry.RewardList.Select(r => r.RewardDetailId).OrderBy(x => x).ToList();
|
||||
Assert.That(detailIds, Is.EqualTo(new[] { 900041040L, 900041050L }));
|
||||
Assert.That(entry.RewardList.All(r => r.RewardType == 7), Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetRewards_marks_already_received_cards()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user