public void PerformAction_DoesNotBuildACity_BecauseTheTileIsNotVacant(ICity<City> city, IUnit<Settler> unit)
        {
            // :::: ARRANGE ::::
            var stubCities = StubWorld.Cities(new[] { city });
            var stubUnits = StubWorld.Units(new[] { unit });
            var stubCityFactory = StubFactories.SimpleCityFactory;
            var cityBuildingUnit = new CityBuildingAction<Settler>(unit, stubUnits, stubCities, stubCityFactory);

            // :::: ACT ::::
            cityBuildingUnit.PerformAction();

            // :::: ASSERT ::::
            var existingCity = stubCities.Single();
            existingCity.Should().BeSameAs(city);
        }
        public void PerformAction_BuildsAFriendlyCity_BecauseTheTileIsVacant(IUnit<Settler> unit)
        {
            // :::: ARRANGE ::::
            var stubCities = StubWorld.NoCities;
            var stubUnits = StubWorld.Units(new[] { unit });
            var stubCityFactory = StubFactories.SimpleCityFactory;
            var cityBuildingUnit = new CityBuildingAction<Settler>(unit, stubUnits, stubCities, stubCityFactory);

            // :::: ACT ::::
            cityBuildingUnit.PerformAction();

            // :::: ASSERT ::::
            var newlyBuiltCity = stubCities.Single();

            newlyBuiltCity.Location.Should().Be(unit.Location);
            newlyBuiltCity.Owner.Should().Be(unit.Owner);
        }
        public void PerformAction_RemovesTheCityBuildingUnit_BecauseTheTileIsVacant(IUnit<Settler> unit,
                                                                                    IUnit[] otherUnits)
        {
            // :::: ARRANGE ::::
            var stubCities = StubWorld.NoCities;
            var stubUnits = StubWorld.Units(new[] { unit }.Concat(otherUnits));
            var stubCityFactory = StubFactories.SimpleCityFactory;
            var cityBuildingUnit = new CityBuildingAction<Settler>(unit, stubUnits, stubCities, stubCityFactory);

            // :::: ACT ::::
            cityBuildingUnit.PerformAction();

            // :::: ASSERT ::::
            stubUnits.Should().NotContain(unit).And.Contain(otherUnits);
        }