public async Task GetGrailCostInfo() { _wiremockFixture.CheckIfMockServerInUse(); // build mock response GrailCostNiceJson mockResponse = new GrailCostNiceJson { ZeroRarity = new ZeroRarity(), OneRarity = new OneRarity(), TwoRarity = new TwoRarity(), ThreeRarity = new ThreeRarity(), FourRarity = new FourRarity(), FiveRarity = new FiveRarity() }; _wiremockFixture.MockServer .Given(Request.Create().WithPath($"/export/{REGION}/NiceSvtGrailCost.json").UsingGet()) .RespondWith(Response.Create().WithStatusCode(200).WithHeader(CONTENT_TYPE_HEADER, CONTENT_TYPE_APPLICATION_JSON).WithBodyAsJson(mockResponse)); using (var scope = _container.BeginLifetimeScope()) { ScopedClasses resolvedClasses = AutofacUtility.ResolveScope(scope); GrailCostNiceJson response = await resolvedClasses.AtlasAcademyClient.GetGrailCostInfo(); response.Should().BeEquivalentTo(mockResponse); } }
/// <summary> /// Create constant game data endpoints as WireMock stubs /// </summary> private void AddExportStubs(WireMockFixture wiremockFixture) { const string CONSTANT_RATE_JSON = "NiceConstant.json"; const string CLASS_ATTACK_RATE_JSON = "NiceClassAttackRate.json"; const string CLASS_RELATION_JSON = "NiceClassRelation.json"; const string ATTRIBUTE_RELATION_JSON = "NiceAttributeRelation.json"; const string BASIC_SERVANT_JSON = "basic_servant.json"; const string BASIC_EQUIP_JSON = "basic_equip.json"; const string SVT_GRAIL_COST_NICE_JSON = "NiceSvtGrailCost.json"; // build necessary export mock responses ConstantNiceJson mockConstantRateResponse = LoadTestData.DeserializeExportJson <ConstantNiceJson>(_region, CONSTANT_RATE_JSON); LoadTestData.CreateExportWireMockStub(wiremockFixture, _region, CONSTANT_RATE_JSON, mockConstantRateResponse); ClassAttackRateNiceJson mockClassAttackRateResponse = LoadTestData.DeserializeExportJson <ClassAttackRateNiceJson>(_region, CLASS_ATTACK_RATE_JSON); LoadTestData.CreateExportWireMockStub(wiremockFixture, _region, CLASS_ATTACK_RATE_JSON, mockClassAttackRateResponse); ClassRelationNiceJson mockClassRelationResponse = LoadTestData.DeserializeExportJson <ClassRelationNiceJson>(_region, CLASS_RELATION_JSON); LoadTestData.CreateExportWireMockStub(wiremockFixture, _region, CLASS_RELATION_JSON, mockClassRelationResponse); AttributeRelationNiceJson mockAttributeRelationResponse = LoadTestData.DeserializeExportJson <AttributeRelationNiceJson>(_region, ATTRIBUTE_RELATION_JSON); LoadTestData.CreateExportWireMockStub(wiremockFixture, _region, ATTRIBUTE_RELATION_JSON, mockAttributeRelationResponse); ServantBasicJsonCollection mockServantBasicJsonResponse = LoadTestData.DeserializeExportJson <ServantBasicJsonCollection>(_region, BASIC_SERVANT_JSON); LoadTestData.CreateExportWireMockStub(wiremockFixture, _region, BASIC_SERVANT_JSON, mockServantBasicJsonResponse); EquipBasicJsonCollection mockEquipBasicJsonResponse = LoadTestData.DeserializeExportJson <EquipBasicJsonCollection>(_region, BASIC_EQUIP_JSON); LoadTestData.CreateExportWireMockStub(wiremockFixture, _region, BASIC_EQUIP_JSON, mockEquipBasicJsonResponse); GrailCostNiceJson mockSvtGrailCostNiceResponse = LoadTestData.DeserializeExportJson <GrailCostNiceJson>(_region, SVT_GRAIL_COST_NICE_JSON); LoadTestData.CreateExportWireMockStub(wiremockFixture, _region, SVT_GRAIL_COST_NICE_JSON, mockSvtGrailCostNiceResponse); }
private List <GrailInfo> GetGrailRarityInfo(int rarity, GrailCostNiceJson grailCost) { List <GrailInfo> grailInfoList = new List <GrailInfo>(); if (rarity == 0) { grailInfoList.Add(grailCost.ZeroRarity.FirstGrail); grailInfoList.Add(grailCost.ZeroRarity.SecondGrail); grailInfoList.Add(grailCost.ZeroRarity.ThirdGrail); grailInfoList.Add(grailCost.ZeroRarity.FourthGrail); grailInfoList.Add(grailCost.ZeroRarity.FifthGrail); grailInfoList.Add(grailCost.ZeroRarity.SixthGrail); grailInfoList.Add(grailCost.ZeroRarity.SeventhGrail); grailInfoList.Add(grailCost.ZeroRarity.EighthGrail); grailInfoList.Add(grailCost.ZeroRarity.NinthGrail); grailInfoList.Add(grailCost.ZeroRarity.TenthGrail); } else if (rarity == 1) { grailInfoList.Add(grailCost.OneRarity.FirstGrail); grailInfoList.Add(grailCost.OneRarity.SecondGrail); grailInfoList.Add(grailCost.OneRarity.ThirdGrail); grailInfoList.Add(grailCost.OneRarity.FourthGrail); grailInfoList.Add(grailCost.OneRarity.FifthGrail); grailInfoList.Add(grailCost.OneRarity.SixthGrail); grailInfoList.Add(grailCost.OneRarity.SeventhGrail); grailInfoList.Add(grailCost.OneRarity.EighthGrail); grailInfoList.Add(grailCost.OneRarity.NinthGrail); grailInfoList.Add(grailCost.OneRarity.TenthGrail); } else if (rarity == 2) { grailInfoList.Add(grailCost.TwoRarity.FirstGrail); grailInfoList.Add(grailCost.TwoRarity.SecondGrail); grailInfoList.Add(grailCost.TwoRarity.ThirdGrail); grailInfoList.Add(grailCost.TwoRarity.FourthGrail); grailInfoList.Add(grailCost.TwoRarity.FifthGrail); grailInfoList.Add(grailCost.TwoRarity.SixthGrail); grailInfoList.Add(grailCost.TwoRarity.SeventhGrail); grailInfoList.Add(grailCost.TwoRarity.EighthGrail); grailInfoList.Add(grailCost.TwoRarity.NinthGrail); grailInfoList.Add(grailCost.TwoRarity.TenthGrail); } else if (rarity == 3) { grailInfoList.Add(grailCost.ThreeRarity.FirstGrail); grailInfoList.Add(grailCost.ThreeRarity.SecondGrail); grailInfoList.Add(grailCost.ThreeRarity.ThirdGrail); grailInfoList.Add(grailCost.ThreeRarity.FourthGrail); grailInfoList.Add(grailCost.ThreeRarity.FifthGrail); grailInfoList.Add(grailCost.ThreeRarity.SixthGrail); grailInfoList.Add(grailCost.ThreeRarity.SeventhGrail); grailInfoList.Add(grailCost.ThreeRarity.EighthGrail); grailInfoList.Add(grailCost.ThreeRarity.NinthGrail); } else if (rarity == 4) { grailInfoList.Add(grailCost.FourRarity.FirstGrail); grailInfoList.Add(grailCost.FourRarity.SecondGrail); grailInfoList.Add(grailCost.FourRarity.ThirdGrail); grailInfoList.Add(grailCost.FourRarity.FourthGrail); grailInfoList.Add(grailCost.FourRarity.FifthGrail); grailInfoList.Add(grailCost.FourRarity.SixthGrail); grailInfoList.Add(grailCost.FourRarity.SeventhGrail); } else if (rarity == 5) { grailInfoList.Add(grailCost.FiveRarity.FirstGrail); grailInfoList.Add(grailCost.FiveRarity.SecondGrail); grailInfoList.Add(grailCost.FiveRarity.ThirdGrail); grailInfoList.Add(grailCost.FiveRarity.FourthGrail); grailInfoList.Add(grailCost.FiveRarity.FifthGrail); } return(grailInfoList); }
public RequiredItemMaterials HowMuchIsNeeded(ChaldeaServant currentServant, ChaldeaServant goalServant, GrailCostNiceJson grailCostNiceJson, ServantNiceJson currentServantNiceJson) { // Validate the two servant objects are the same servant if (currentServant.ServantBasicInfo != goalServant.ServantBasicInfo) { return(null); } // Set up _requiredItemMaterials = new RequiredItemMaterials(); // Allows nice JSON info to be saved prior, if provided if (currentServantNiceJson != null && currentServantNiceJson.Id == currentServant.ServantBasicInfo.Id) { _currentServantNiceJson = currentServantNiceJson; } else { return(_requiredItemMaterials); } /* Calculate ascension materials, QP, and/or grails */ if (currentServant.ServantLevel < goalServant.ServantLevel) { AscensionLevel[] allAscensionLevels = AscensionLevels(currentServant.ServantBasicInfo.Rarity); // Find the required ascension levels with removing ascensions above the goal List <AscensionLevel> requiredAscensionLevels = allAscensionLevels .Where(i => currentServant.ServantLevel < i.LevelCap) .ToList(); requiredAscensionLevels.RemoveAll(c => goalServant.ServantLevel < c.LevelCap); // Ascension materials if (requiredAscensionLevels.Count > 0) { foreach (AscensionLevel ascensionLevel in requiredAscensionLevels) { ItemMaterials ascensionItemMaterials = AscensionItemMaterials(ascensionLevel); if (ascensionItemMaterials == null) { continue; } _requiredItemMaterials.Qp += ascensionItemMaterials.Qp; AddItemMaterials(ascensionItemMaterials.Items); } } // Grails if (goalServant.ServantLevel > allAscensionLevels[^ 1].LevelCap) { IEnumerable <GrailInfo> grailInfoList = GetGrailRarityInfo(goalServant.ServantBasicInfo.Rarity, grailCostNiceJson) .Where(g => g.AddLevelMax + currentServant.ServantLevel <= goalServant.ServantLevel); foreach (GrailInfo grailInfo in grailInfoList) { _requiredItemMaterials.Qp += grailInfo.Qp; _requiredItemMaterials.GrailCount++; } } // Overall ember count CalculateEmbersNeeded(currentServant, goalServant, _currentServantNiceJson.ExpGrowth); } /* Calculate skill materials and QP */ for (int i = 0; i < 3; i++) { int currentSkillLevel = currentServant.SkillLevels[i]; int goalSkillLevel = goalServant.SkillLevels[i]; if (currentSkillLevel < goalSkillLevel) { for (int j = currentSkillLevel; j < goalSkillLevel; j++) { switch (j) { case 1: AddItemMaterials(_currentServantNiceJson.SkillMaterials.FirstSkill.Items); _requiredItemMaterials.Qp += _currentServantNiceJson.SkillMaterials.FirstSkill.Qp; break; case 2: AddItemMaterials(_currentServantNiceJson.SkillMaterials.SecondSkill.Items); _requiredItemMaterials.Qp += _currentServantNiceJson.SkillMaterials.SecondSkill.Qp; break; case 3: AddItemMaterials(_currentServantNiceJson.SkillMaterials.ThirdSkill.Items); _requiredItemMaterials.Qp += _currentServantNiceJson.SkillMaterials.ThirdSkill.Qp; break; case 4: AddItemMaterials(_currentServantNiceJson.SkillMaterials.FourthSkill.Items); _requiredItemMaterials.Qp += _currentServantNiceJson.SkillMaterials.FourthSkill.Qp; break; case 5: AddItemMaterials(_currentServantNiceJson.SkillMaterials.FifthSkill.Items); _requiredItemMaterials.Qp += _currentServantNiceJson.SkillMaterials.FifthSkill.Qp; break; case 6: AddItemMaterials(_currentServantNiceJson.SkillMaterials.SixthSkill.Items); _requiredItemMaterials.Qp += _currentServantNiceJson.SkillMaterials.SixthSkill.Qp; break; case 7: AddItemMaterials(_currentServantNiceJson.SkillMaterials.SeventhSkill.Items); _requiredItemMaterials.Qp += _currentServantNiceJson.SkillMaterials.SeventhSkill.Qp; break; case 8: AddItemMaterials(_currentServantNiceJson.SkillMaterials.EighthSkill.Items); _requiredItemMaterials.Qp += _currentServantNiceJson.SkillMaterials.EighthSkill.Qp; break; case 9: AddItemMaterials(_currentServantNiceJson.SkillMaterials.NinthSkill.Items); _requiredItemMaterials.Qp += _currentServantNiceJson.SkillMaterials.NinthSkill.Qp; break; } } } } return(_requiredItemMaterials); }