public void ReturnTheTotalAmountOfProfits_WhenTheArgumentPassedIsTheActualOwnerOfTheStation()
        {
            // arrange
            int id        = 1;
            var ownerStub = new Mock <IBusinessOwner>();

            ownerStub.Setup(x => x.IdentificationNumber).Returns(id);

            var locationStub = new Mock <ILocation>();
            var map          = new List <IPath>();

            var station = new FakeTeleportStation(
                ownerStub.Object,
                map,
                locationStub.Object
                );

            var resourcesBeforeCollecting = station.Resources;

            // act
            var returnedObj = station.PayProfits(ownerStub.Object);

            // assert
            Assert.AreEqual(returnedObj.BronzeCoins, resourcesBeforeCollecting.BronzeCoins);
            Assert.AreEqual(returnedObj.GoldCoins, resourcesBeforeCollecting.GoldCoins);
            Assert.AreEqual(returnedObj.SilverCoins, resourcesBeforeCollecting.SilverCoins);
        }
        public void SetUpResourcesToNewResourcesInstanceCorrectly_WhenObjectIsConstructed()
        {
            // arrange
            var ownerStub       = new Mock <IBusinessOwner>();
            var galacticMapStub = new List <IPath>();
            var locationStub    = new Mock <ILocation>();

            // act
            var station = new FakeTeleportStation(ownerStub.Object, galacticMapStub, locationStub.Object);

            // assert
            Assert.IsInstanceOf <Resources>(station.Resources);
        }
        public void SetUpLocationCorrectly_WhenObjectIsConstructed()
        {
            // arrange
            var ownerStub       = new Mock <IBusinessOwner>();
            var galacticMapStub = new List <IPath>();
            var locationStub    = new Mock <ILocation>();

            // act
            var station = new FakeTeleportStation(ownerStub.Object, galacticMapStub, locationStub.Object);

            // assert
            Assert.AreSame(locationStub.Object, station.Location);
        }
        public void RemoveUnitToTeleportFromCurrentLocationUnits_WhenUnitIsTeleportedSuccesfully()
        {
            // arrange
            var ownerStub = new Mock <IBusinessOwner>();

            // setting up stations current location
            var    stationLocationStub       = new Mock <ILocation>();
            string stationLocationPlanetName = "Mars";
            string stationLocationGalaxyName = "Milky Way";

            stationLocationStub.Setup(x => x.Planet.Name)
            .Returns(stationLocationPlanetName);
            stationLocationStub.Setup(x => x.Planet.Galaxy.Name)
            .Returns(stationLocationGalaxyName);

            // setting up unit to teleport
            var unitToTeleportStub = new Mock <IUnit>();

            unitToTeleportStub.Setup(x => x.CurrentLocation)
            .Returns(stationLocationStub.Object);
            unitToTeleportStub.Setup(x => x.CanPay(It.IsAny <IResources>()))
            .Returns(true);
            var  payResources = new Mock <IResources>();
            uint coinsValues  = 10;

            payResources.Setup(x => x.BronzeCoins).Returns(coinsValues);
            payResources.Setup(x => x.SilverCoins).Returns(coinsValues);
            payResources.Setup(x => x.GoldCoins).Returns(coinsValues);
            unitToTeleportStub.Setup(x => x.Pay(It.IsAny <IResources>()))
            .Returns(payResources.Object);

            var currentLocationUnits = new List <IUnit>()
            {
                unitToTeleportStub.Object
            };

            stationLocationStub.Setup(x => x.Planet.Units)
            .Returns(currentLocationUnits);

            // setting up target location
            string targetLocationPlanetName = "Earth";
            string targetLocationGalaxyName = "SomeGalaxy";
            var    targetLocationStub       = new Mock <ILocation>();

            targetLocationStub.Setup(x => x.Planet.Name)
            .Returns(targetLocationPlanetName);
            targetLocationStub.Setup(x => x.Planet.Galaxy.Name)
            .Returns(targetLocationGalaxyName);
            // You were up to here brat ;)

            var pathTargetLocation = new Mock <ILocation>();

            pathTargetLocation.Setup(x => x.Planet.Name)
            .Returns(targetLocationPlanetName);
            pathTargetLocation.Setup(x => x.Planet.Galaxy.Name)
            .Returns(targetLocationGalaxyName);

            var planetUnits = new List <IUnit>();

            pathTargetLocation.Setup(x => x.Planet.Units)
            .Returns(planetUnits);

            // setting up target path
            var pathStub = new Mock <IPath>();

            pathStub.Setup(x => x.TargetLocation)
            .Returns(pathTargetLocation.Object);

            var pathCostStub = new Mock <IResources>();

            pathStub.Setup(x => x.Cost).Returns(pathCostStub.Object);

            // setting up galactic map
            var galacticMapStub = new List <IPath>()
            {
                pathStub.Object
            };

            var station = new FakeTeleportStation(
                ownerStub.Object,
                galacticMapStub,
                stationLocationStub.Object);

            // act
            station.TeleportUnit(unitToTeleportStub.Object, targetLocationStub.Object);

            // assert
            Assert.AreEqual(0, station.Location.Planet.Units.Count);
        }