Example #1
0
        /// <summary>
        /// This action takes in the passed upgrade id,  buys the ship upgrade via the SystemShieldUpgrade.Buy method,
        /// and then redirects to the Index action.
        /// </summary>
        /// <param name="shieldId">The shield id.</param>
        /// <returns>A redirect to the ViewShip action on success, the BuyShieldUpgrade view on error</returns>
        public ActionResult BuyShieldUpgrade(int shieldId)
        {
            Ship currentShip = this.ControllerGame.CurrentPlayer.Ship;

            SystemShieldUpgrade upgrade = currentShip.CosmoSystem.GetShieldUpgrade(shieldId);

            if (upgrade != null)
            {
                try
                {
                    // Buy the upgrade
                    upgrade.Buy(currentShip);

                    // Success, redirect to display the newly upgrade on their ship
                    return(RedirectToAction("ViewShip"));
                }
                catch (InvalidOperationException ex)
                {
                    // Log this exception
                    ExceptionPolicy.HandleException(ex, "Controller Policy");

                    ModelState.AddModelError("_FORM", ex.Message);
                }
            }
            else
            {
                ModelState.AddModelError("shieldId", "Invalid Shield Upgrade", shieldId);
            }

            return(View());
        }
        public void BuyNotEnoughCargoSpace()
        {
            // Arrange
            SystemShieldUpgrade upgrade  = this.CreateSystemShieldUpgrade();
            Mock <User>         userMock = new Mock <User>();
            Mock <Ship>         shipMock = new Mock <Ship>();

            shipMock.Expect(s => s.BaseShip.Level)
            .Returns(1).Verifiable();

            Shield currentUpgrade = new Shield();

            // Trade value will be 80
            currentUpgrade.BasePrice = 100;
            currentUpgrade.CargoCost = 1;

            shipMock.Expect(s => s.Shield)
            .Returns(currentUpgrade).Verifiable();

            // Cargo space free is 1
            shipMock.Expect(s => s.CargoSpaceFree)
            .Returns(1).AtMostOnce().Verifiable();

            // Cash on hand is 5000
            shipMock.Expect(s => s.Credits)
            .Returns(5000).AtMostOnce().Verifiable();

            // Act, should throw an exception
            upgrade.Buy(shipMock.Object);
        }
        public void PricePerLevel()
        {
            // Arrange
            SystemShieldUpgrade upgrade = this.CreateSystemShieldUpgrade();

            // Act
            int price = upgrade.PricePerLevel;

            // Assert
            Assert.That(price, Is.EqualTo(750), "PricePerLevel should be 75% of 1000 credits");
        }
        public void GetPrice()
        {
            // Arrange
            SystemShieldUpgrade upgrade = this.CreateSystemShieldUpgrade();
            Player testPlayer           = this.CreateTestPlayer();

            // Act
            int price = upgrade.GetPrice(testPlayer.Ship);

            // Assert
            Assert.That(testPlayer.Ship.BaseShip.Level, Is.EqualTo(1), "Test player should have base level 1 ship");
            Assert.That(price, Is.EqualTo(750), "Price should be 750 credits for a level 1 ship");
        }
        private SystemShieldUpgrade CreateSystemShieldUpgrade()
        {
            SystemShieldUpgrade upgrade = new SystemShieldUpgrade();

            upgrade.CosmoSystem      = new CosmoSystem();
            upgrade.Shield           = new Shield();
            upgrade.Shield.ShieldId  = 1;
            upgrade.Shield.BasePrice = 1000;
            upgrade.Shield.CargoCost = 5;
            upgrade.PriceMultiplier  = 0.75;
            upgrade.Quantity         = 1;

            return(upgrade);
        }
        public void BuyPlayerUpgradeAddedToSystem2()
        {
            // Arrange
            SystemShieldUpgrade upgrade = this.CreateSystemShieldUpgrade();

            BaseShip playerBaseShip = new BaseShip();

            playerBaseShip.Level = 1;

            Shield currentUpgrade = new Shield();

            // Trade value will be 160
            currentUpgrade.BasePrice = 200;
            currentUpgrade.CargoCost = 1;

            SystemShieldUpgrade playerSystemUpgrade = new SystemShieldUpgrade();

            playerSystemUpgrade.Shield      = currentUpgrade;
            playerSystemUpgrade.CosmoSystem = upgrade.CosmoSystem;
            playerSystemUpgrade.Quantity    = 2;

            Mock <Ship> shipMock = new Mock <Ship>();

            // Setup player base upgrade model
            shipMock.Expect(s => s.BaseShip)
            .Returns(playerBaseShip).Verifiable();

            // Setup player base upgrade
            shipMock.Expect(s => s.Shield)
            .Returns(currentUpgrade).Verifiable();

            shipMock.Expect(s => s.CargoSpaceFree)
            .Returns(25).Verifiable();

            // Cash on hand is 5000
            shipMock.Expect(s => s.Credits)
            .Returns(5000).Verifiable();

            // Act
            upgrade.Buy(shipMock.Object);

            // Assert
            shipMock.Verify();
            // Cost of the upgrade should be (750 - 160) credits
            shipMock.VerifySet(m => m.Credits, 5000 - (750 - 160));
            Assert.That(upgrade.Quantity, Is.EqualTo(0), "Should be no ships left in the system of this model");
            Assert.That(upgrade.CosmoSystem.SystemShieldUpgrades.Where(m => m.Shield == playerSystemUpgrade.Shield && m.Quantity == 3).Any(), Is.True, "The players base ship should have been added to the system for sale");
        }
        public void BuyPlayerUpgradeAddedToSystem()
        {
            // Arrange
            SystemShieldUpgrade upgrade = this.CreateSystemShieldUpgrade();

            Mock <Ship> shipMock = new Mock <Ship>();

            shipMock.Expect(s => s.BaseShip.Level)
            .Returns(1).Verifiable();

            Shield currentUpgrade = new Shield();

            // Trade value will be 80
            currentUpgrade.BasePrice = 100;
            currentUpgrade.CargoCost = 1;

            shipMock.Expect(s => s.Shield)
            .Returns(currentUpgrade).Verifiable();

            // Cargo space free is 10
            shipMock.Expect(s => s.CargoSpaceFree)
            .Returns(10).AtMostOnce().Verifiable();

            // Cash on hand is 5000
            shipMock.Expect(s => s.Credits)
            .Returns(5000).Verifiable();


            // Act
            upgrade.Buy(shipMock.Object);

            // Assert
            shipMock.Verify();
            // Cost of the upgrade should be (750 - 80) credits
            shipMock.VerifySet(m => m.Credits, 5000 - (750 - 80));
            Assert.That(upgrade.Quantity, Is.EqualTo(0), "Should be no upgrades left in the system of this model");
            Assert.That(upgrade.CosmoSystem.SystemShieldUpgrades.Where(m => m.Shield == currentUpgrade && m.Quantity == 1).Any(), Is.True, "The players upgrade should have been added to the system for sale");
        }
        public void BuyWithLevel2Ship()
        {
            // Arrange
            SystemShieldUpgrade upgrade = this.CreateSystemShieldUpgrade();

            Mock <Ship> shipMock = new Mock <Ship>();

            shipMock.Expect(s => s.BaseShip.Level)
            .Returns(2).Verifiable();

            Shield currentUpgrade = new Shield();

            currentUpgrade.ShieldId = 2;
            // Trade value will be 80
            currentUpgrade.BasePrice = 100;
            currentUpgrade.CargoCost = 1;

            shipMock.Expect(s => s.Shield)
            .Returns(currentUpgrade).Verifiable();

            // Cargo space free is 10
            shipMock.Expect(s => s.CargoSpaceFree)
            .Returns(10).Verifiable();

            // Cash on hand is 5000
            shipMock.Expect(s => s.Credits)
            .Returns(5000).Verifiable();

            // Act
            upgrade.Buy(shipMock.Object);

            // Assert
            shipMock.Verify();
            // Cost of the upgrade should be (750*2 - 80*2) credits
            shipMock.VerifySet(s => s.Credits, 5000 - (750 * 2 - (80 * 2)));
            Assert.That(upgrade.Quantity, Is.EqualTo(0), "Should be no upgrades left in the system of this model");
        }