From 8945fc4971fca477f444c21af773c027d4bef91d Mon Sep 17 00:00:00 2001 From: Mira Date: Sat, 19 Oct 2024 19:16:45 +0200 Subject: [PATCH] Doh/DoL: add tests and optimize for maintainability --- NetStone.Test/Tests.cs | 12 +++++++++ .../Character/CharacterAttributes.cs | 25 +++++++++++-------- NetStone/NetStone.xml | 2 +- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/NetStone.Test/Tests.cs b/NetStone.Test/Tests.cs index ec35f4b..cbd236b 100644 --- a/NetStone.Test/Tests.cs +++ b/NetStone.Test/Tests.cs @@ -20,6 +20,7 @@ public class Tests private const string TestCharacterIdEureka = "14556736"; private const string TestCharacterIdEureka2 = "6787158"; private const string TestCharacterIdBare = "9426169"; + private const string TestCharacterIdDoH = "42256897"; private const string TestFreeCompany = "9232379236109629819"; private const string TestFreeCompanyRecruiting = "9232660711086374997"; @@ -289,6 +290,17 @@ public async Task TestFreeCompanySearch() } while (page != null); } + [Test] + public async Task CheckCharacterDoH() + { + var chara = await this.lodestone.GetCharacter(TestCharacterIdDoH); + Assert.NotNull(chara); + var attribs = chara.Attributes; + Assert.AreEqual(39, attribs.Craftsmanship); + Assert.AreEqual(7, attribs.Control); + Assert.AreEqual(180, attribs.MpGpCp); + } + [Test] public async Task CheckCharacterBare() { diff --git a/NetStone/Model/Parseables/Character/CharacterAttributes.cs b/NetStone/Model/Parseables/Character/CharacterAttributes.cs index a65c407..3ecb985 100644 --- a/NetStone/Model/Parseables/Character/CharacterAttributes.cs +++ b/NetStone/Model/Parseables/Character/CharacterAttributes.cs @@ -1,4 +1,5 @@ -using HtmlAgilityPack; +using System; +using HtmlAgilityPack; using NetStone.Definitions.Model.Character; namespace NetStone.Model.Parseables.Character; @@ -84,13 +85,13 @@ public CharacterAttributes(HtmlNode rootNode, CharacterAttributesDefinition defi /// This characters' Attack Magic Potency value. /// /// This value is only set for disciples of war/magic. - public int? AttackMagicPotency => MpGpCpParameterName == "MP" ? int.Parse(Parse(this.definition.AttackMagicPotency)) : null; + public int? AttackMagicPotency => IsDoWOrDoM() ? this.AttackMagicPotencyInternal : null; /// /// This characters' Healing Magic Potency value. /// /// This value is only set for disciples of war/magic. - public int? HealingMagicPotency => MpGpCpParameterName == "MP" ? int.Parse(Parse(this.definition.HealingMagicPotency)) : null; + public int? HealingMagicPotency => IsDoWOrDoM() ? this.HealingMagicPotencyInternal : null; /// /// This characters' Spell Speed value. @@ -112,25 +113,25 @@ public CharacterAttributes(HtmlNode rootNode, CharacterAttributesDefinition defi /// This characters' Craftmanship value. /// /// This value is only set for disciples of the hand. - public int? Craftmanship => MpGpCpParameterName == "CP" ? AttackMagicPotencyValue : null; + public int? Craftsmanship => IsDoH() ? this.AttackMagicPotencyInternal : null; /// /// This characters' Control value. /// /// This value is only set for disciples of the hand. - public int? Control => MpGpCpParameterName == "CP" ? HealingMagicPotencyValue : null; + public int? Control => IsDoH() ? this.HealingMagicPotencyInternal : null; /// /// This characters' Gathering value. /// /// This value is only set for disciples of the land. - public int? Gathering => MpGpCpParameterName == "GP" ? AttackMagicPotencyValue : null; + public int? Gathering => IsDoL() ? this.AttackMagicPotencyInternal : null; /// /// This characters' Perception value. /// /// This value is only set for disciples of the land. - public int? Perception => MpGpCpParameterName == "GP" ? HealingMagicPotencyValue : null; + public int? Perception => IsDoL() ? this.HealingMagicPotencyInternal : null; /// /// This characters' HP value. @@ -146,8 +147,12 @@ public CharacterAttributes(HtmlNode rootNode, CharacterAttributesDefinition defi /// Value indicating which of MP, GP, or CP is indicated by . /// public string MpGpCpParameterName => Parse(this.definition.MpGpCpParameterName); + + internal bool IsDoL() => this.MpGpCpParameterName.Equals("GP", StringComparison.InvariantCultureIgnoreCase); + internal bool IsDoWOrDoM() => this.MpGpCpParameterName.Equals("MP", StringComparison.InvariantCultureIgnoreCase); + internal bool IsDoH() => this.MpGpCpParameterName.Equals("CP", StringComparison.InvariantCultureIgnoreCase); - private int AttackMagicPotencyValue => int.Parse(Parse(this.definition.AttackMagicPotency)); - - private int HealingMagicPotencyValue => int.Parse(Parse(this.definition.HealingMagicPotency)); + internal int AttackMagicPotencyInternal => int.TryParse(Parse(this.definition.AttackMagicPotency), out var val) ? val : 0; + + internal int HealingMagicPotencyInternal => int.TryParse(Parse(this.definition.HealingMagicPotency), out var val) ? val : 0; } \ No newline at end of file diff --git a/NetStone/NetStone.xml b/NetStone/NetStone.xml index 83d3b7c..09cc189 100644 --- a/NetStone/NetStone.xml +++ b/NetStone/NetStone.xml @@ -2035,7 +2035,7 @@ This characters' Piety value. - + This characters' Craftmanship value.