public void Simple_downgrade_trade(int rank, int expected, int missing, bool sameGroup)
        {
            var group  = Group.Alloys;
            var alloys = entries.Where(e => e.Group == group)
                         .OrderBy(e => e.Rarity)
                         .ToList();

            var   firstGrade = alloys[rank];
            Entry secondGrade;

            if (sameGroup)
            {
                secondGrade = new Entry(alloys[0]);
            }
            else
            {
                secondGrade = new Entry(entries.First(e => e.Group != group && e.Rarity.Rank() == 1 && e.Subkind == firstGrade.Subkind && e.Kind == firstGrade.Kind));
            }

            cargo.IncrementCargo(firstGrade.Name, expected * 2);

            var missingIngredients = new Dictionary <Entry, int>
            {
                [secondGrade] = missing
            };

            var trades = MaterialTrader.FindPossibleTrades(cargo, missingIngredients, new Dictionary <EntryData, int>()).ToList();

            Check.That(trades.Count).IsEqualTo(1);

            var trade = trades[0];

            Check.That(trade.Traded.Data).IsEqualTo(firstGrade);
            Check.That(trade.TradedNeeded).IsEqualTo(expected);
        }
        public void Simple_upgrade_trade(int rank, int expected)
        {
            var group  = Group.Alloys;
            var alloys = entries.Where(e => e.Group == group)
                         .OrderBy(e => e.Rarity)
                         .ToList();

            var firstGrade  = alloys[0];
            var secondGrade = new Entry(alloys[rank]);

            cargo.IncrementCargo(firstGrade.Name, expected * 2);

            var missingIngredients = new Dictionary <Entry, int>
            {
                [secondGrade] = 1
            };

            var trades = MaterialTrader.FindPossibleTrades(cargo, missingIngredients, new Dictionary <EntryData, int>()).ToList();

            Check.That(trades.Count).IsEqualTo(1);

            var trade = trades[0];

            Check.That(trade.Traded.Data).IsEqualTo(firstGrade);
            Check.That(trade.TradedNeeded).IsEqualTo(expected);
        }