public void TestFaction() { string dateTimeStringFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'"; // Test factions data string jsonString = System.IO.File.ReadAllText("bgsFaction.json"); JObject response = JsonConvert.DeserializeObject <JObject>(jsonString); PrivateType bgsService = new PrivateType(typeof(BgsService)); Faction faction = (Faction)bgsService.InvokeStatic("ParseFaction", new object[] { response }); Assert.IsNotNull(faction); // Test The Dark Wheel core data Assert.AreEqual(41917, faction.EDDBID); Assert.AreEqual("Independent", faction.Allegiance.invariantName); Assert.AreEqual("Democracy", faction.Government.invariantName); Assert.IsNull(faction.isplayer); Assert.AreEqual("2019-04-13T03:37:17.000Z", faction.updatedAt.ToString(dateTimeStringFormat)); // Test The Dark Wheel faction presence data string systemName = "Shinrarta Dezhra"; FactionPresence factionPresence = faction.presences.FirstOrDefault(p => p.systemName == systemName); Assert.AreEqual(28.9M, factionPresence?.influence); Assert.AreEqual("Boom", factionPresence?.FactionState?.invariantName); Assert.AreEqual("Happy", factionPresence?.Happiness.invariantName); Assert.AreEqual(1, factionPresence.ActiveStates.Count()); Assert.AreEqual("Boom", factionPresence.ActiveStates[0].invariantName); Assert.AreEqual(0, factionPresence.PendingStates.Count()); Assert.AreEqual(0, factionPresence.RecoveringStates.Count()); Assert.AreEqual("2019-04-13T03:37:17.000Z", factionPresence.updatedAt.ToString(dateTimeStringFormat)); systemName = "LFT 926"; factionPresence = faction.presences.FirstOrDefault(p => p.systemName == systemName); Assert.AreEqual(11.2983M, factionPresence?.influence); Assert.AreEqual("Boom", factionPresence?.FactionState?.invariantName); Assert.AreEqual("Happy", factionPresence?.Happiness.invariantName); Assert.AreEqual(0, factionPresence.ActiveStates.Count()); Assert.AreEqual(0, factionPresence.PendingStates.Count()); Assert.AreEqual(1, factionPresence.RecoveringStates.Count()); Assert.AreEqual("War", factionPresence.RecoveringStates[0].factionState.invariantName); Assert.AreEqual(0, factionPresence.RecoveringStates[0].trend); Assert.AreEqual("2019-04-13T03:27:28.000Z", factionPresence.updatedAt.ToString(dateTimeStringFormat)); }
public void TestFaction() { string dateTimeStringFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'"; // Test faction data JObject response = DeserializeJsonResource <JObject>(Resources.bgsFaction); Faction faction = fakeBgsService.ParseFaction(response); Assert.IsNotNull(faction); // Test The Dark Wheel core data Assert.AreEqual(41917, faction.EDDBID); Assert.AreEqual("Independent", faction.Allegiance.invariantName); Assert.AreEqual("Democracy", faction.Government.invariantName); Assert.IsNull(faction.isplayer); Assert.AreEqual("2019-04-13T03:37:17.000Z", faction.updatedAt.ToString(dateTimeStringFormat)); // Test The Dark Wheel faction presence data string systemName = "Shinrarta Dezhra"; FactionPresence factionPresence = faction.presences.FirstOrDefault(p => p.systemName == systemName); Assert.AreEqual(28.9M, factionPresence?.influence); Assert.AreEqual("Boom", factionPresence?.FactionState?.invariantName); Assert.AreEqual("Happy", factionPresence?.Happiness.invariantName); Assert.AreEqual(1, factionPresence.ActiveStates.Count()); Assert.AreEqual("Boom", factionPresence.ActiveStates[0].invariantName); Assert.AreEqual(0, factionPresence.PendingStates.Count()); Assert.AreEqual(0, factionPresence.RecoveringStates.Count()); Assert.AreEqual("2019-04-13T03:37:17.000Z", factionPresence.updatedAt.ToString(dateTimeStringFormat)); systemName = "LFT 926"; factionPresence = faction.presences.FirstOrDefault(p => p.systemName == systemName); Assert.AreEqual(11.2983M, factionPresence?.influence); Assert.AreEqual("Boom", factionPresence?.FactionState?.invariantName); Assert.AreEqual("Happy", factionPresence?.Happiness.invariantName); Assert.AreEqual(0, factionPresence.ActiveStates.Count()); Assert.AreEqual(0, factionPresence.PendingStates.Count()); Assert.AreEqual(1, factionPresence.RecoveringStates.Count()); Assert.AreEqual("War", factionPresence.RecoveringStates[0].factionState.invariantName); Assert.AreEqual(0, factionPresence.RecoveringStates[0].trend); Assert.AreEqual("2019-04-13T03:27:28.000Z", factionPresence.updatedAt.ToString(dateTimeStringFormat)); }
public Faction ParseFaction(object response) { try { IDictionary <string, object> factionJson = Deserializtion.DeserializeData(response.ToString()); Faction faction = new Faction { EDDBID = (long)factionJson["eddb_id"], name = (string)factionJson["name"], updatedAt = (DateTime)factionJson["updated_at"], Government = Government.FromName((string)factionJson["government"]), Allegiance = Superpower.FromName((string)factionJson["allegiance"]), }; foreach (object presence in (List <object>)factionJson["faction_presence"]) { IDictionary <string, object> presenceJson = (IDictionary <string, object>)presence; FactionPresence factionPresence = new FactionPresence() { systemName = JsonParsing.getString(presenceJson, "system_name"), influence = (JsonParsing.getOptionalDecimal(presenceJson, "influence") ?? 0) * 100, // Convert from a 0-1 range to a percentage FactionState = FactionState.FromEDName(JsonParsing.getString(presenceJson, "state")) ?? FactionState.None, }; // These properties may not be present in the json, so we pass them after initializing our FactionPresence object. factionPresence.Happiness = Happiness.FromEDName(JsonParsing.getString(presenceJson, "happiness")) ?? Happiness.None; presenceJson.TryGetValue("updated_at", out object updatedVal); factionPresence.updatedAt = (DateTime?)updatedVal ?? DateTime.MinValue; // Active states presenceJson.TryGetValue("active_states", out object activeStatesVal); if (activeStatesVal != null) { var activeStatesList = (List <object>)activeStatesVal; foreach (IDictionary <string, object> activeState in activeStatesList) { factionPresence.ActiveStates.Add(FactionState.FromEDName(JsonParsing.getString(activeState, "state")) ?? FactionState.None); } } // Pending states presenceJson.TryGetValue("pending_states", out object pendingStatesVal); if (pendingStatesVal != null) { var pendingStatesList = (List <object>)pendingStatesVal; foreach (IDictionary <string, object> pendingState in pendingStatesList) { FactionTrendingState pTrendingState = new FactionTrendingState( FactionState.FromEDName(JsonParsing.getString(pendingState, "state")) ?? FactionState.None, JsonParsing.getInt(pendingState, "trend") ); factionPresence.PendingStates.Add(pTrendingState); } } // Recovering states presenceJson.TryGetValue("recovering_states", out object recoveringStatesVal); if (recoveringStatesVal != null) { var recoveringStatesList = (List <object>)recoveringStatesVal; foreach (IDictionary <string, object> recoveringState in recoveringStatesList) { FactionTrendingState rTrendingState = new FactionTrendingState( FactionState.FromEDName(JsonParsing.getString(recoveringState, "state")) ?? FactionState.None, JsonParsing.getInt(recoveringState, "trend") ); factionPresence.RecoveringStates.Add(rTrendingState); } } faction.presences.Add(factionPresence); } return(faction); } catch (Exception ex) { Dictionary <string, object> data = new Dictionary <string, object>() { { "input", response }, { "exception", ex } }; Logging.Error("Failed to parse BGS faction data.", data); return(null); } }
private static Faction ParseFaction(object response) { IDictionary <string, object> factionJson = Deserializtion.DeserializeData(response.ToString()); Faction faction = new Faction { EDDBID = (long)factionJson["eddb_id"], name = (string)factionJson["name"], updatedAt = (DateTime)factionJson["updated_at"], Government = Government.FromName((string)factionJson["government"]), Allegiance = Superpower.FromName((string)factionJson["allegiance"]), }; foreach (object presence in (List <object>)factionJson["faction_presence"]) { IDictionary <string, object> presenceJson = (IDictionary <string, object>)presence; FactionPresence factionPresence = new FactionPresence() { systemName = (string)presenceJson["system_name"], influence = (decimal?)(double?)presenceJson["influence"] * 100, // Convert from a 0-1 range to a percentage FactionState = FactionState.FromEDName((string)presenceJson["state"]) ?? FactionState.None, Happiness = Happiness.FromEDName((string)presenceJson["happiness"]) ?? Happiness.None, updatedAt = (DateTime)presenceJson["updated_at"], }; // Active states presenceJson.TryGetValue("active_states", out object activeStatesVal); if (activeStatesVal != null) { var activeStatesList = (List <object>)activeStatesVal; foreach (IDictionary <string, object> activeState in activeStatesList) { factionPresence.ActiveStates.Add(FactionState.FromEDName(JsonParsing.getString(activeState, "state") ?? "None")); } } // Pending states presenceJson.TryGetValue("pending_states", out object pendingStatesVal); if (pendingStatesVal != null) { var pendingStatesList = (List <object>)pendingStatesVal; foreach (IDictionary <string, object> pendingState in pendingStatesList) { FactionTrendingState pTrendingState = new FactionTrendingState( FactionState.FromEDName(JsonParsing.getString(pendingState, "state") ?? "None"), JsonParsing.getInt(pendingState, "trend") ); factionPresence.PendingStates.Add(pTrendingState); } } // Recovering states presenceJson.TryGetValue("recovering_states", out object recoveringStatesVal); if (recoveringStatesVal != null) { var recoveringStatesList = (List <object>)recoveringStatesVal; foreach (IDictionary <string, object> recoveringState in recoveringStatesList) { FactionTrendingState rTrendingState = new FactionTrendingState( FactionState.FromEDName(JsonParsing.getString(recoveringState, "state") ?? "None"), JsonParsing.getInt(recoveringState, "trend") ); factionPresence.RecoveringStates.Add(rTrendingState); } } faction.presences.Add(factionPresence); } return(faction); }