public void ThrowInvalidTeleportationLocationExceptionWhenUnitsLocationsOverlap()
        {
            //Arrange
            string planetName = "Earth";
            string galaxyName = "MilkyWay";
            double latitude   = 15d;
            double longitude  = 15d;
            var    ownerMock  = Mock.Create <IBusinessOwner>();

            var teleportlocationMock = Mock.Create <ILocation>();

            Mock.Arrange(() => teleportlocationMock.Planet.Name).Returns(planetName);
            Mock.Arrange(() => teleportlocationMock.Planet.Galaxy.Name).Returns(galaxyName);

            var planetUnitMock = Mock.Create <IUnit>();

            Mock.Arrange(() => planetUnitMock.CurrentLocation.Planet.Name).Returns(planetName);
            Mock.Arrange(() => planetUnitMock.CurrentLocation.Planet.Galaxy.Name).Returns(galaxyName);
            Mock.Arrange(() => planetUnitMock.CurrentLocation.Coordinates.Latitude).Returns(latitude);
            Mock.Arrange(() => planetUnitMock.CurrentLocation.Coordinates.Longtitude).Returns(longitude);

            var unitToTeleportMock = Mock.Create <IUnit>();

            Mock.Arrange(() => unitToTeleportMock.CurrentLocation.Planet.Name).Returns(planetName);
            Mock.Arrange(() => unitToTeleportMock.CurrentLocation.Planet.Galaxy.Name).Returns(galaxyName);
            Mock.Arrange(() => unitToTeleportMock.CurrentLocation.Coordinates.Latitude).Returns(latitude);
            Mock.Arrange(() => unitToTeleportMock.CurrentLocation.Coordinates.Longtitude).Returns(longitude);

            var planetUnitsList = new List <IUnit>()
            {
                planetUnitMock
            };

            var pathMock = Mock.Create <IPath>();

            Mock.Arrange(() => pathMock.TargetLocation.Planet.Name).Returns(planetName);
            Mock.Arrange(() => pathMock.TargetLocation.Planet.Galaxy.Name).Returns(galaxyName);
            Mock.Arrange(() => pathMock.Cost.GoldCoins).Returns(10);
            Mock.Arrange(() => pathMock.Cost.SilverCoins).Returns(10);
            Mock.Arrange(() => pathMock.Cost.BronzeCoins).Returns(10);
            Mock.Arrange(() => pathMock.TargetLocation.Planet.Units).Returns(planetUnitsList);

            var map = new List <IPath>()
            {
                pathMock
            };

            var sut = new TeleportationStationFake(ownerMock, map, teleportlocationMock);

            var targetLocationMock = Mock.Create <ILocation>();

            Mock.Arrange(() => targetLocationMock.Coordinates.Latitude).Returns(latitude);
            Mock.Arrange(() => targetLocationMock.Coordinates.Longtitude).Returns(longitude);
            Mock.Arrange(() => targetLocationMock.Planet.Name).Returns(planetName);
            Mock.Arrange(() => targetLocationMock.Planet.Galaxy.Name).Returns(galaxyName);

            //Act & Assert
            Assert.ThrowsException <InvalidTeleportationLocationException>(() => sut.TeleportUnit(unitToTeleportMock, targetLocationMock));
        }
        public void AssignLocationProperlyWhenPassedParametersAreCorrect()
        {
            //Arrange
            var ownerMock    = Mock.Create <IBusinessOwner>();
            var locationMock = Mock.Create <ILocation>();
            var mapMock      = Mock.Create <IEnumerable <IPath> >();
            var sut          = new TeleportationStationFake(ownerMock, mapMock, locationMock);

            //Act & Assert
            Assert.AreSame(locationMock, sut.Location);
        }
        public void ThrowLocationNotFoundExceptionWhenTargetGalaxyisNotFoundInTeleportStationLocationsList()
        {
            //Arrange
            string planetName = "Earth";
            string galaxyName = "MilkyWay";

            var ownerMock = Mock.Create <IBusinessOwner>();

            var teleportlocationMock = Mock.Create <ILocation>();

            Mock.Arrange(() => teleportlocationMock.Planet.Name).Returns(planetName);
            Mock.Arrange(() => teleportlocationMock.Planet.Galaxy.Name).Returns(galaxyName);

            var unitToTeleportMock = Mock.Create <IUnit>();

            Mock.Arrange(() => unitToTeleportMock.CurrentLocation.Planet.Name).Returns(planetName);
            Mock.Arrange(() => unitToTeleportMock.CurrentLocation.Planet.Galaxy.Name).Returns(galaxyName);

            var pathMock = Mock.Create <IPath>();

            Mock.Arrange(() => pathMock.TargetLocation.Planet.Name).Returns(planetName);
            Mock.Arrange(() => pathMock.TargetLocation.Planet.Galaxy.Name).Returns(galaxyName);
            Mock.Arrange(() => pathMock.Cost.GoldCoins).Returns(10);
            Mock.Arrange(() => pathMock.Cost.SilverCoins).Returns(10);
            Mock.Arrange(() => pathMock.Cost.BronzeCoins).Returns(10);
            Mock.Arrange(() => pathMock.TargetLocation.Planet.Galaxy.Name).Returns("");

            var map = new List <IPath>()
            {
                pathMock
            };

            var sut = new TeleportationStationFake(ownerMock, map, teleportlocationMock);

            var targetLocationMock = Mock.Create <ILocation>();

            Mock.Arrange(() => targetLocationMock.Planet.Name).Returns(planetName);
            Mock.Arrange(() => targetLocationMock.Planet.Galaxy.Name).Returns(galaxyName);
        }