예제 #1
0
        public void TestCommodityDrones()
        {
            CommodityDefinition trinket = CommodityDefinition.FromEDName("Drones");

            Assert.AreEqual("Drones", trinket.edname);
            Assert.AreEqual("Limpet", trinket.invariantName);
            Assert.AreEqual("Non-marketable", trinket.Category.invariantName);
        }
예제 #2
0
        public void TestCommodityMarketQuoteFromMarketJson()
        {
            var info = DeserializeJsonResource <MarketInfo>(Resources.market);
            var expectedMarketInfoItems = new List <MarketInfoItem>()
            {
                new MarketInfoItem(128668550, "$painite_name;", "$MARKET_category_minerals;", 0, 500096, 0, CommodityBracket.None, CommodityBracket.Medium, 0, 200),
                new MarketInfoItem(128673846, "$bromellite_name;", "$MARKET_category_minerals;", 0, 10009, 0, CommodityBracket.None, CommodityBracket.Medium, 0, 100),
                new MarketInfoItem(128673848, "$lowtemperaturediamond_name;", "$MARKET_category_minerals;", 0, 500553, 0, CommodityBracket.None, CommodityBracket.Medium, 0, 150),
                new MarketInfoItem(128924330, "$grandidierite_name;", "$MARKET_category_minerals;", 0, 424204, 0, CommodityBracket.None, CommodityBracket.Medium, 0, 100),
                new MarketInfoItem(128924331, "$alexandrite_name;", "$MARKET_category_minerals;", 0, 348192, 0, CommodityBracket.None, CommodityBracket.Medium, 0, 97),
                new MarketInfoItem(128924332, "$opal_name;", "$MARKET_category_minerals;", 0, 1014218, 0, CommodityBracket.None, CommodityBracket.Medium, 0, 300)
            };

            Assert.AreEqual(3702012928, info.MarketID);
            Assert.AreEqual("X9K-WTW", info.StationName);
            Assert.AreEqual("Gateway", info.StarSystem);
            Assert.AreEqual(expectedMarketInfoItems.Count, info.Items.Count);

            foreach (var item in info.Items)
            {
                // Test that all items match expected definitions
                if (!expectedMarketInfoItems.Exists(i => i.DeepEquals(item)))
                {
                    Assert.Fail();
                }
            }

            // Test that the MarketInfoItem can be sucessfully converted to a definition based CommodityMarketQuote
            var quote = info.Items[0].ToCommodityMarketQuote();

            Assert.AreEqual(128668550, quote.definition.EliteID);
            Assert.AreEqual("Painite", quote.definition.edname);
            Assert.AreEqual("Minerals", quote.definition.Category.invariantName);
            Assert.AreEqual(0, quote.buyprice);
            Assert.AreEqual(500096, quote.sellprice);
            Assert.AreEqual(CommodityDefinition.FromEDName("painite")?.avgprice, quote.avgprice); // Carriers always return an average price of zero. Verify this marches our commodity definition instead.
            Assert.AreEqual(CommodityBracket.None, quote.stockbracket);
            Assert.AreEqual(CommodityBracket.Medium, quote.demandbracket);
            Assert.AreEqual(0, quote.stock);
            Assert.AreEqual(200, quote.demand);
            Assert.AreEqual("Consumer", quote.StatusFlags.First());
        }
예제 #3
0
        public Station UpdateStation(DateTime profileTimeStamp, Station station)
        {
            if (station.updatedat > Dates.fromDateTimeToSeconds(profileTimeStamp))
            {
                // The current station is already more up to date
                return(station);
            }
            if (station.marketId != marketId)
            {
                // The market IDs do not match, the stations are not the same
                return(station);
            }

            try
            {
                station.economyShares   = economyShares.Select(e => e.ToEconomyShare()).ToList();
                station.stationServices = stationServices.Select(s => StationService.FromEDName(s.Key)).ToList();
            }
            catch (Exception e)
            {
                var data = new Dictionary <string, object>()
                {
                    { "Exception", e },
                    { "Profile economy shares", economyShares },
                    { "Profile station services", stationServices },
                    { "Station", station }
                };
                Logging.Error("Failed to update station economy and services from profile.", data);
            }

            if (commoditiesupdatedat != null && (station.commoditiesupdatedat ?? 0) < commoditiesupdatedat)
            {
                try
                {
                    station.commodities          = eddnCommodityMarketQuotes.Select(c => c.ToCommodityMarketQuote()).ToList();
                    station.prohibited           = prohibitedCommodities.Select(p => CommodityDefinition.CommodityDefinitionFromEliteID(p.Key) ?? CommodityDefinition.FromEDName(p.Value)).ToList();
                    station.commoditiesupdatedat = commoditiesupdatedat;
                }
                catch (Exception e)
                {
                    var data = new Dictionary <string, object>()
                    {
                        { "Exception", e },
                        { "Profile commodity quotes", eddnCommodityMarketQuotes },
                        { "Profile prohibited commodities", prohibitedCommodities },
                        { "Station", station }
                    };
                    Logging.Error("Failed to update station market from profile.", data);
                }
            }
            if (outfittingupdatedat != null && (station.outfittingupdatedat ?? 0) < outfittingupdatedat)
            {
                try
                {
                    station.outfitting          = outfitting.Select(m => m.ToModule()).ToList();
                    station.outfittingupdatedat = outfittingupdatedat;
                }
                catch (Exception e)
                {
                    var data = new Dictionary <string, object>()
                    {
                        { "Exception", e },
                        { "Profile outiftting", outfitting },
                        { "Station", station }
                    };
                    Logging.Error("Failed to update station outfitting from profile.", data);
                }
            }
            if (shipyardupdatedat != null && (station.shipyardupdatedat ?? 0) < shipyardupdatedat)
            {
                try
                {
                    station.shipyard          = ships.Select(s => s.ToShip()).ToList();
                    station.shipyardupdatedat = shipyardupdatedat;
                }
                catch (Exception e)
                {
                    var data = new Dictionary <string, object>()
                    {
                        { "Exception", e },
                        { "Profile ships", ships },
                        { "Station", station }
                    };
                    Logging.Error("Failed to update station shipyard from profile.", data);
                }
            }
            station.updatedat = Dates.fromDateTimeToSeconds(profileTimeStamp);
            return(station);
        }
예제 #4
0
파일: CapiTests.cs 프로젝트: rodan123/EDDI
        public void TestProfileUpdateStation()
        {
            // Set up our original station
            var originalStation = new Station()
            {
                name      = "Libby Horizons",
                marketId  = 3228854528,
                updatedat = 0
            };

            // Set up our profile station
            var     profile         = new Profile();
            var     marketTimestamp = DateTime.UtcNow;
            JObject marketJson      = DeserializeJsonResource <JObject>(Resources.Libby_Horizons);

            profile.LastStation = CompanionAppService.ProfileStation(marketTimestamp, marketJson);

            var updatedStation = profile.LastStation.UpdateStation(DateTime.UtcNow, originalStation);

            Assert.IsTrue(updatedStation.economyShares.DeepEquals(new List <EconomyShare>()
            {
                new EconomyShare("Refinery", 0.88M),
                new EconomyShare("Industrial", 0.12M)
            }));
            Assert.IsTrue(updatedStation.stationServices.DeepEquals(new List <StationService>()
            {
                StationService.FromEDName("dock"),
                StationService.FromEDName("contacts"),
                StationService.FromEDName("exploration"),
                StationService.FromEDName("commodities"),
                StationService.FromEDName("refuel"),
                StationService.FromEDName("repair"),
                StationService.FromEDName("rearm"),
                StationService.FromEDName("outfitting"),
                StationService.FromEDName("shipyard"),
                StationService.FromEDName("crewlounge"),
                StationService.FromEDName("powerplay"),
                StationService.FromEDName("searchrescue"),
                StationService.FromEDName("materialtrader"),
                StationService.FromEDName("stationmenu"),
                StationService.FromEDName("shop"),
                StationService.FromEDName("engineer"),
            }));
            Assert.AreEqual(116, updatedStation.commodities.Count);
            Assert.IsTrue(new CommodityMarketQuote(CommodityDefinition.FromEDName("Tritium"))
            {
                buyprice      = 41179,
                sellprice     = 40693,
                demand        = 1,
                demandbracket = CommodityBracket.None,
                stock         = 10464,
                stockbracket  = CommodityBracket.Medium,
                StatusFlags   = new HashSet <string>()
                {
                    "Producer"
                }
            }.DeepEquals(updatedStation.commodities.FirstOrDefault(c => c.EliteID == 128961249)));
            Assert.AreEqual(42558, CommodityDefinition.FromEDName("Tritium").avgprice);
            Assert.AreEqual(6, updatedStation.prohibited.Count);
            Assert.IsTrue(CommodityDefinition.FromEDName("Tobacco").DeepEquals(updatedStation.prohibited.FirstOrDefault(p => p.EliteID == 128049213)));
            Assert.AreEqual(Dates.fromDateTimeToSeconds(marketTimestamp), updatedStation.commoditiesupdatedat);
        }