diff --git a/SVSim.Bootstrap/Importers/PackImporter.cs b/SVSim.Bootstrap/Importers/PackImporter.cs index a59aec1..7620316 100644 --- a/SVSim.Bootstrap/Importers/PackImporter.cs +++ b/SVSim.Bootstrap/Importers/PackImporter.cs @@ -70,7 +70,7 @@ public class PackImporter pack.ChildGachas.Add(new PackChildGachaEntry { GachaId = c.GachaId, - TypeDetail = c.TypeDetail, + TypeDetail = (CardPackType)c.TypeDetail, Cost = c.Cost, CardCount = c.CardCount, ItemId = c.ItemId, @@ -145,7 +145,7 @@ public class PackImporter pack.ChildGachas.Add(new PackChildGachaEntry { GachaId = c.GachaId, - TypeDetail = c.TypeDetail, + TypeDetail = (CardPackType)c.TypeDetail, Cost = c.Cost, CardCount = c.CardCount, ItemId = c.ItemId, diff --git a/SVSim.Database/Enums/CardPackType.cs b/SVSim.Database/Enums/CardPackType.cs new file mode 100644 index 0000000..19adf95 --- /dev/null +++ b/SVSim.Database/Enums/CardPackType.cs @@ -0,0 +1,24 @@ +namespace SVSim.Database.Enums; + +/// +/// Mirrors GachaUI.CardPackType in the decompiled client +/// (Shadowverse_Code/GachaUI.cs line 11). Wire value = (int)enum, carried on +/// /pack/info as child_gacha_info[].type_detail. +/// +public enum CardPackType +{ + None = 0, + Crystal = 1, + CrystalMulti = 2, + Daily = 3, + Ticket = 4, + TicketMulti = 5, + Rupy = 6, + RupyMulti = 7, + CrystalSpecial = 8, + CrystalSelectSkin = 9, + FreePacks = 10, + FreePackWithSkin = 11, + RotationStarterPack = 12, + CrystalAcquireSkinCardPack = 13, +} diff --git a/SVSim.Database/Models/PackChildGachaEntry.cs b/SVSim.Database/Models/PackChildGachaEntry.cs index cc4bed3..121145a 100644 --- a/SVSim.Database/Models/PackChildGachaEntry.cs +++ b/SVSim.Database/Models/PackChildGachaEntry.cs @@ -1,20 +1,17 @@ using Microsoft.EntityFrameworkCore; +using SVSim.Database.Enums; namespace SVSim.Database.Models; /// /// One sub-option inside a pack (single-open / 10-open / ticket / daily-free). /// Wire shape: one entry of child_gacha_info in /pack/info. Owned by PackConfigEntry. -/// TypeDetail corresponds to GachaUI.CardPackType: -/// 1=CRYSTAL, 2=CRYSTAL_MULTI, 3=DAILY, 4=TICKET, 5=TICKET_MULTI, 6=RUPY, 7=RUPY_MULTI, -/// 8=CRYSTAL_SPECIAL, 9=CRYSTAL_SELECT_SKIN, 10=FREE_PACKS, 11=FREE_PACK_WITH_SKIN, -/// 12=ROTATION_STARTER_PACK, 13=CRYSTAL_ACQUIRE_SKIN_CARD_PACK. /// [Owned] public class PackChildGachaEntry { public int GachaId { get; set; } - public int TypeDetail { get; set; } + public CardPackType TypeDetail { get; set; } public int Cost { get; set; } public int CardCount { get; set; } public long? ItemId { get; set; } diff --git a/SVSim.EmulatedEntrypoint/Controllers/PackController.cs b/SVSim.EmulatedEntrypoint/Controllers/PackController.cs index ca6dd23..50bf9dd 100644 --- a/SVSim.EmulatedEntrypoint/Controllers/PackController.cs +++ b/SVSim.EmulatedEntrypoint/Controllers/PackController.cs @@ -125,7 +125,7 @@ public class PackController : SVSimController var today = DateTime.UtcNow.Date; bool ChildAvailable(PackChildGachaEntry c) { - if (c.TypeDetail != 10) return true; + if (c.TypeDetail != CardPackType.FreePacks) return true; if (c.FreeGachaCampaignId is not int campaignId) return true; if (!freeClaimsByCampaignId.TryGetValue(campaignId, out var claim)) return true; if (claim.LastClaimedAt.Date != today) return true; @@ -137,7 +137,8 @@ public class PackController : SVSimController // Ticket-only pack: every child is TICKET (4) or TICKET_MULTI (5). These are // gifted-currency packs (tutorial starter, throwback) that don't participate in // gacha-point accrual or exchange, even if GachaPointConfig is set in seed. - bool isTicketOnly = visibleChildren.All(c => c.TypeDetail == 4 || c.TypeDetail == 5); + bool isTicketOnly = visibleChildren.All(c => + c.TypeDetail == CardPackType.Ticket || c.TypeDetail == CardPackType.TicketMulti); PackGachaPointDto? gachaPointDto = null; if (p.GachaPointConfig is not null && !isTicketOnly) @@ -174,7 +175,7 @@ public class PackController : SVSimController ChildGachaInfo = visibleChildren.Select(c => new PackChildGachaDto { GachaId = c.GachaId, - TypeDetail = c.TypeDetail, + TypeDetail = (int)c.TypeDetail, Cost = c.Cost, Count = c.CardCount, ItemId = c.ItemId?.ToString(CultureInfo.InvariantCulture), @@ -298,14 +299,17 @@ public class PackController : SVSimController // when buying a RUPY_MULTI (type_detail=7) child. The gacha_id alone disambiguates the // child; gacha_type validation against child.TypeDetail would falsely reject every buy. - // Supported type_details on the normal path: - // 1 CRYSTAL / 2 CRYSTAL_MULTI -> spend crystals - // 6 RUPY / 7 RUPY_MULTI -> spend rupees - // 3 DAILY -> spend rupees, once per UTC day - // 4 TICKET / 5 TICKET_MULTI -> consume child.ItemId from OwnedItemEntry - // Skin-overload types (8/9/13) and free-pack overlays (10/11/12) need extra - // selection / banner plumbing — kept 501 until the relevant flows land. - if (!isTutorialPath && child.TypeDetail is not (1 or 2 or 3 or 4 or 5 or 6 or 7 or 10)) + // Supported on the normal path: Crystal / CrystalMulti -> spend crystals; Rupy / + // RupyMulti -> spend rupees; Daily -> spend rupees, once per UTC day; Ticket / + // TicketMulti -> consume child.ItemId from OwnedItemEntry; FreePacks -> no debit, + // gated by per-campaign daily quota. + // CrystalSpecial / CrystalSelectSkin / CrystalAcquireSkinCardPack and the + // FreePackWithSkin / RotationStarterPack overlays need extra selection / banner + // plumbing — kept 501 until the relevant flows land. + if (!isTutorialPath && child.TypeDetail is not ( + CardPackType.Crystal or CardPackType.CrystalMulti or CardPackType.Daily or + CardPackType.Ticket or CardPackType.TicketMulti or CardPackType.Rupy or + CardPackType.RupyMulti or CardPackType.FreePacks)) return StatusCode(StatusCodes.Status501NotImplemented, new { error = "currency_path_not_implemented" }); // Load viewer via InventoryService transaction with extra includes for pack-open needs. @@ -331,23 +335,23 @@ public class PackController : SVSimController { switch (child.TypeDetail) { - case 1: // CRYSTAL (single) - case 2: // CRYSTAL_MULTI (10-pack) + case CardPackType.Crystal: + case CardPackType.CrystalMulti: { long cost = (long)child.Cost * packNumber; var r = await tx.TrySpendAsync(SpendCurrency.Crystal, cost); if (!r.Success) return BadRequest(new { error = "insufficient_crystals" }); break; } - case 6: // RUPY (single) - case 7: // RUPY_MULTI (10-pack) + case CardPackType.Rupy: + case CardPackType.RupyMulti: { long cost = (long)child.Cost * packNumber; var r = await tx.TrySpendAsync(SpendCurrency.Rupee, cost); if (!r.Success) return BadRequest(new { error = "insufficient_rupees" }); break; } - case 3: // DAILY single — once per UTC day + case CardPackType.Daily: { // TODO(daily-reset): no project-wide daily-reset convention exists yet. Using UTC // midnight; revisit when the global reset boundary is settled. @@ -361,8 +365,8 @@ public class PackController : SVSimController if (!r.Success) return BadRequest(new { error = "insufficient_rupees" }); break; } - case 4: // TICKET (single) - case 5: // TICKET_MULTI (10-pack) + case CardPackType.Ticket: + case CardPackType.TicketMulti: { if (child.ItemId is not long ticketItemId) return StatusCode(StatusCodes.Status501NotImplemented, new { error = "ticket_pack_missing_item_id" }); @@ -372,7 +376,7 @@ public class PackController : SVSimController if (!debit.Success) return BadRequest(new { error = "insufficient_tickets" }); break; } - case 10: // FREE_PACKS — no currency, no ticket; gated by daily quota per campaign + case CardPackType.FreePacks: { if (child.FreeGachaCampaignId is not int campaignId) return StatusCode(StatusCodes.Status501NotImplemented, new { error = "free_pack_missing_campaign_id" }); @@ -417,7 +421,7 @@ public class PackController : SVSimController if (!isTutorialPath) { await _packs.IncrementOpenCount(viewerId, pack.Id, packNumber); - if (child.TypeDetail == 3) + if (child.TypeDetail == CardPackType.Daily) { await _packs.MarkDailyFreeUsed(viewerId, pack.Id, DateTime.UtcNow); } diff --git a/SVSim.UnitTests/Controllers/FreeplayInvariantTests.cs b/SVSim.UnitTests/Controllers/FreeplayInvariantTests.cs index 0e97276..4ca5bbb 100644 --- a/SVSim.UnitTests/Controllers/FreeplayInvariantTests.cs +++ b/SVSim.UnitTests/Controllers/FreeplayInvariantTests.cs @@ -48,7 +48,7 @@ public class FreeplayInvariantTests } /// - /// Seeds a crystal pack (parent gacha 10001, child gacha_id 100002, TypeDetail=2, cost=100) + /// Seeds a crystal pack (parent gacha 10001, child gacha_id 100002, TypeDetail = CardPackType.CrystalMulti, cost=100) /// with the viewer broke (0 crystals). Mirrors the pack shape from /// PackControllerOpenTests.Open_with_crystals_deducts_crystals — the only difference is /// Crystals=0 instead of 250, so without freeplay this open would be refused. @@ -63,7 +63,7 @@ public class FreeplayInvariantTests Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None, CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "test", - ChildGachas = { new PackChildGachaEntry { GachaId = 100002, TypeDetail = 2, Cost = 100, CardCount = 8 } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 100002, TypeDetail = CardPackType.CrystalMulti, Cost = 100, CardCount = 8 } }, }); var v = await db.Viewers.FirstAsync(x => x.Id == viewerId); v.Currency.Crystals = 0; diff --git a/SVSim.UnitTests/Controllers/PackControllerInfoTests.cs b/SVSim.UnitTests/Controllers/PackControllerInfoTests.cs index 86a0638..21b1cda 100644 --- a/SVSim.UnitTests/Controllers/PackControllerInfoTests.cs +++ b/SVSim.UnitTests/Controllers/PackControllerInfoTests.cs @@ -25,7 +25,7 @@ public class PackControllerInfoTests Id = parentId, BasePackId = baseId, PackCategory = cat, CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "test", - ChildGachas = { new PackChildGachaEntry { GachaId = parentId * 10 + 7, TypeDetail = 7, Cost = 100, CardCount = 8 } }, + ChildGachas = { new PackChildGachaEntry { GachaId = parentId * 10 + 7, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 } }, }); await db.SaveChangesAsync(); } @@ -112,7 +112,7 @@ public class PackControllerInfoTests CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "legendary special", SleeveId = 5090001, GachaPointConfig = null, - ChildGachas = { new PackChildGachaEntry { GachaId = 920002, TypeDetail = 5, Cost = 1, CardCount = 8, ItemId = 92001 } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 920002, TypeDetail = CardPackType.TicketMulti, Cost = 1, CardCount = 8, ItemId = 92001 } }, }); await db.SaveChangesAsync(); } @@ -149,7 +149,7 @@ public class PackControllerInfoTests { // Must include at least one non-ticket child so this pack is NOT ticket-only // and remains visible with a gacha_point block. - new PackChildGachaEntry { GachaId = 100087, TypeDetail = 7, Cost = 100, CardCount = 8 }, + new PackChildGachaEntry { GachaId = 100087, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 }, }, }); var viewer = await db.Viewers @@ -190,7 +190,7 @@ public class PackControllerInfoTests GachaPointConfig = new PackGachaPointConfig { ExchangeablePoint = 400, IncreaseGachaPoint = 1 }, ChildGachas = { - new PackChildGachaEntry { GachaId = 990475, TypeDetail = 5, Cost = 0, CardCount = 8 }, + new PackChildGachaEntry { GachaId = 990475, TypeDetail = CardPackType.TicketMulti, Cost = 0, CardCount = 8 }, }, }); await db.SaveChangesAsync(); @@ -227,10 +227,10 @@ public class PackControllerInfoTests GachaType = 1, GachaDetail = "throwback test", SleeveId = 5090001, ChildGachas = { - new PackChildGachaEntry { GachaId = 800032, TypeDetail = 5, Cost = 1, CardCount = 8, ItemId = 80001 }, + new PackChildGachaEntry { GachaId = 800032, TypeDetail = CardPackType.TicketMulti, Cost = 1, CardCount = 8, ItemId = 80001 }, new PackChildGachaEntry { - GachaId = 780032, TypeDetail = 10, Cost = 1, CardCount = 8, + GachaId = 780032, TypeDetail = CardPackType.FreePacks, Cost = 1, CardCount = 8, PurchaseLimitCount = 1, DailyFreeGachaCount = 1, FreeGachaCampaignId = 49, CampaignName = "Test Campaign", }, @@ -272,10 +272,10 @@ public class PackControllerInfoTests GachaType = 1, GachaDetail = "throwback test", SleeveId = 5090001, ChildGachas = { - new PackChildGachaEntry { GachaId = 800033, TypeDetail = 5, Cost = 1, CardCount = 8, ItemId = 80001 }, + new PackChildGachaEntry { GachaId = 800033, TypeDetail = CardPackType.TicketMulti, Cost = 1, CardCount = 8, ItemId = 80001 }, new PackChildGachaEntry { - GachaId = 780033, TypeDetail = 10, Cost = 1, CardCount = 8, + GachaId = 780033, TypeDetail = CardPackType.FreePacks, Cost = 1, CardCount = 8, DailyFreeGachaCount = 1, FreeGachaCampaignId = 50, CampaignName = "X", }, }, diff --git a/SVSim.UnitTests/Controllers/PackControllerOpenTests.cs b/SVSim.UnitTests/Controllers/PackControllerOpenTests.cs index d116b55..8e20183 100644 --- a/SVSim.UnitTests/Controllers/PackControllerOpenTests.cs +++ b/SVSim.UnitTests/Controllers/PackControllerOpenTests.cs @@ -32,7 +32,7 @@ public class PackControllerOpenTests CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "test", SleeveId = 3000011, ChildGachas = { - new PackChildGachaEntry { GachaId = 400002, TypeDetail = 7, Cost = 100, CardCount = 8 }, + new PackChildGachaEntry { GachaId = 400002, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 }, }, }); var v = await db.Viewers.FirstAsync(x => x.Id == viewerId); @@ -142,7 +142,7 @@ public class PackControllerOpenTests Id = 70001, BasePackId = 70001, PackCategory = PackCategory.LeaderSkinPack, CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "skin pack", - ChildGachas = { new PackChildGachaEntry { GachaId = 700017, TypeDetail = 7, Cost = 100, CardCount = 8 } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 700017, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 } }, }); await db.SaveChangesAsync(); } @@ -186,7 +186,7 @@ public class PackControllerOpenTests Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None, CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "test", - ChildGachas = { new PackChildGachaEntry { GachaId = 100002, TypeDetail = 2, Cost = 100, CardCount = 8 } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 100002, TypeDetail = CardPackType.CrystalMulti, Cost = 100, CardCount = 8 } }, }); var v = await db.Viewers.FirstAsync(x => x.Id == viewerId); v.Currency.Crystals = 250; @@ -223,7 +223,7 @@ public class PackControllerOpenTests CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "crystal single", // type_detail=1 (CRYSTAL single-pack) — new path added 2026-05-31. - ChildGachas = { new PackChildGachaEntry { GachaId = 100012, TypeDetail = 1, Cost = 120, CardCount = 8 } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 100012, TypeDetail = CardPackType.Crystal, Cost = 120, CardCount = 8 } }, }); var v = await db.Viewers.FirstAsync(x => x.Id == viewerId); v.Currency.Crystals = 200; @@ -254,7 +254,7 @@ public class PackControllerOpenTests Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None, CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "rupy single", - ChildGachas = { new PackChildGachaEntry { GachaId = 600006, TypeDetail = 6, Cost = 100, CardCount = 8 } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 600006, TypeDetail = CardPackType.Rupy, Cost = 100, CardCount = 8 } }, }); var v = await db.Viewers.FirstAsync(x => x.Id == viewerId); v.Currency.Rupees = 250; @@ -289,7 +289,7 @@ public class PackControllerOpenTests CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "ticket pack", // type_detail=4 (TICKET single) — 1 ticket per pack. - ChildGachas = { new PackChildGachaEntry { GachaId = 100014, TypeDetail = 4, Cost = 1, CardCount = 8, ItemId = TicketItemId } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 100014, TypeDetail = CardPackType.Ticket, Cost = 1, CardCount = 8, ItemId = TicketItemId } }, }); await db.SaveChangesAsync(); } @@ -344,7 +344,7 @@ public class PackControllerOpenTests GachaType = 1, GachaDetail = "10-pack ticket", // type_detail=5 (TICKET_MULTI 10-pack) — cost=1 ticket per pack, packNumber=10 // => 10 tickets consumed total. - ChildGachas = { new PackChildGachaEntry { GachaId = 100015, TypeDetail = 5, Cost = 1, CardCount = 8, ItemId = TicketItemId } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 100015, TypeDetail = CardPackType.TicketMulti, Cost = 1, CardCount = 8, ItemId = TicketItemId } }, }); await db.SaveChangesAsync(); } @@ -383,7 +383,7 @@ public class PackControllerOpenTests Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None, CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "ticket pack", - ChildGachas = { new PackChildGachaEntry { GachaId = 100014, TypeDetail = 4, Cost = 1, CardCount = 8, ItemId = TicketItemId } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 100014, TypeDetail = CardPackType.Ticket, Cost = 1, CardCount = 8, ItemId = TicketItemId } }, }); await db.SaveChangesAsync(); } @@ -411,7 +411,7 @@ public class PackControllerOpenTests Id = 10001, BasePackId = baseId, PackCategory = PackCategory.None, CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "daily test", - ChildGachas = { new PackChildGachaEntry { GachaId = 200001, TypeDetail = 3, Cost = 0, CardCount = 1, IsDailySingle = true } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 200001, TypeDetail = CardPackType.Daily, Cost = 0, CardCount = 1, IsDailySingle = true } }, }); await db.SaveChangesAsync(); } @@ -604,7 +604,7 @@ public class PackControllerOpenTests CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaType = 1, GachaDetail = "single-leader test", SleeveId = 3000099, ChildGachas = { - new PackChildGachaEntry { GachaId = ParentGachaId * 100 + 2, TypeDetail = 7, Cost = 100, CardCount = 8 }, + new PackChildGachaEntry { GachaId = ParentGachaId * 100 + 2, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 }, }, }); await db.SaveChangesAsync(); @@ -664,7 +664,7 @@ public class PackControllerOpenTests { new PackChildGachaEntry { - GachaId = 100087, TypeDetail = 7, Cost = 100, CardCount = 8, + GachaId = 100087, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8, OverrideIncreaseGachaPoint = 0, }, }, @@ -746,7 +746,7 @@ public class PackControllerOpenTests { new PackChildGachaEntry { - GachaId = 990475, TypeDetail = 5, Cost = 0, CardCount = 8, + GachaId = 990475, TypeDetail = CardPackType.TicketMulti, Cost = 0, CardCount = 8, ItemId = 90001, }, }, @@ -802,7 +802,7 @@ public class PackControllerOpenTests { new PackChildGachaEntry { - GachaId = 780032, TypeDetail = 10, Cost = 1, CardCount = 8, + GachaId = 780032, TypeDetail = CardPackType.FreePacks, Cost = 1, CardCount = 8, DailyFreeGachaCount = 1, PurchaseLimitCount = 1, FreeGachaCampaignId = 49, CampaignName = "Season Bonus", }, diff --git a/SVSim.UnitTests/Importers/PackSeedingPipelineTests.cs b/SVSim.UnitTests/Importers/PackSeedingPipelineTests.cs index 2ee7176..5c2c2c4 100644 --- a/SVSim.UnitTests/Importers/PackSeedingPipelineTests.cs +++ b/SVSim.UnitTests/Importers/PackSeedingPipelineTests.cs @@ -40,9 +40,10 @@ public class PackSeedingPipelineTests var children = pack.ChildGachas.OrderBy(c => c.GachaId).ToList(); Assert.That(children.Count, Is.EqualTo(3)); - Assert.That(children.Select(c => c.TypeDetail), Is.EqualTo(new[] { 2, 3, 7 })); + Assert.That(children.Select(c => c.TypeDetail), + Is.EqualTo(new[] { CardPackType.CrystalMulti, CardPackType.Daily, CardPackType.RupyMulti })); Assert.That(children.Select(c => c.Cost), Is.EqualTo(new[] { 100, 50, 100 })); - Assert.That(children.Single(c => c.TypeDetail == 3).IsDailySingle, Is.True); + Assert.That(children.Single(c => c.TypeDetail == CardPackType.Daily).IsDailySingle, Is.True); } [Test] @@ -68,7 +69,7 @@ public class PackSeedingPipelineTests using var scope = factory.Services.CreateScope(); var db = scope.ServiceProvider.GetRequiredService(); var pack = await db.Packs.AsNoTracking().FirstAsync(p => p.Id == 80032); - var freeChild = pack.ChildGachas.Single(c => c.TypeDetail == 10); + var freeChild = pack.ChildGachas.Single(c => c.TypeDetail == CardPackType.FreePacks); Assert.That(freeChild.DailyFreeGachaCount, Is.EqualTo(1)); Assert.That(freeChild.PurchaseLimitCount, Is.EqualTo(1)); diff --git a/SVSim.UnitTests/Repositories/PackRepositoryTests.cs b/SVSim.UnitTests/Repositories/PackRepositoryTests.cs index 9166e8c..a53236c 100644 --- a/SVSim.UnitTests/Repositories/PackRepositoryTests.cs +++ b/SVSim.UnitTests/Repositories/PackRepositoryTests.cs @@ -20,7 +20,7 @@ public class PackRepositoryTests Id = parentId, BasePackId = baseId, PackCategory = cat, CommenceDate = commence, CompleteDate = complete, GachaType = 1, GachaDetail = "test", - ChildGachas = { new PackChildGachaEntry { GachaId = parentId * 10, TypeDetail = 7, Cost = 100, CardCount = 8 } }, + ChildGachas = { new PackChildGachaEntry { GachaId = parentId * 10, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 } }, }); await db.SaveChangesAsync(); } diff --git a/SVSim.UnitTests/Services/GachaPointServiceTests.cs b/SVSim.UnitTests/Services/GachaPointServiceTests.cs index 51d81a1..d4b8307 100644 --- a/SVSim.UnitTests/Services/GachaPointServiceTests.cs +++ b/SVSim.UnitTests/Services/GachaPointServiceTests.cs @@ -249,7 +249,7 @@ public class GachaPointServiceTests { new PackChildGachaEntry { - GachaId = 100081, TypeDetail = 2, Cost = 100, CardCount = 8, + GachaId = 100081, TypeDetail = CardPackType.CrystalMulti, Cost = 100, CardCount = 8, OverrideIncreaseGachaPoint = 0, }, }, @@ -287,7 +287,7 @@ public class GachaPointServiceTests { new PackChildGachaEntry { - GachaId = 100085, TypeDetail = 5, Cost = 0, CardCount = 8, + GachaId = 100085, TypeDetail = CardPackType.TicketMulti, Cost = 0, CardCount = 8, OverrideIncreaseGachaPoint = 3, }, }, @@ -318,7 +318,7 @@ public class GachaPointServiceTests Id = 99047, BasePackId = 99047, PackCategory = PackCategory.LegendCardPack, CommenceDate = DateTime.UtcNow.AddDays(-1), CompleteDate = DateTime.UtcNow.AddDays(30), GachaPointConfig = null, - ChildGachas = { new PackChildGachaEntry { GachaId = 990475, TypeDetail = 5, Cost = 0, CardCount = 8 } }, + ChildGachas = { new PackChildGachaEntry { GachaId = 990475, TypeDetail = CardPackType.TicketMulti, Cost = 0, CardCount = 8 } }, }); await db.SaveChangesAsync(); @@ -347,7 +347,7 @@ public class GachaPointServiceTests GachaPointConfig = new PackGachaPointConfig { ExchangeablePoint = 400, IncreaseGachaPoint = 1 }, ChildGachas = { - new PackChildGachaEntry { GachaId = 100087, TypeDetail = 7, Cost = 100, CardCount = 8 }, + new PackChildGachaEntry { GachaId = 100087, TypeDetail = CardPackType.RupyMulti, Cost = 100, CardCount = 8 }, }, }); await db.SaveChangesAsync();