/// <summary> /// This action takes in the passed upgrade id, buys the ship upgrade via the SystemWeaponUpgrade.Buy method, /// and then redirects to the Index action. /// </summary> /// <param name="weaponId">The weapon id.</param> /// <returns> /// A redirect to the ViewShip action on success, the BuyWeaponUpgrade view on error /// </returns> public ActionResult BuyWeaponUpgrade(int weaponId) { Ship currentShip = this.ControllerGame.CurrentPlayer.Ship; SystemWeaponUpgrade upgrade = currentShip.CosmoSystem.GetWeaponUpgrade(weaponId); 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("weaponId", "Invalid Weapon Upgrade", weaponId); } return(View()); }
public void BuyNotEnoughCargoSpace() { // Arrange SystemWeaponUpgrade upgrade = this.CreateSystemWeaponUpgrade(); Mock <User> userMock = new Mock <User>(); Mock <Ship> shipMock = new Mock <Ship>(); shipMock.Expect(s => s.BaseShip.Level) .Returns(1).Verifiable(); Weapon currentUpgrade = new Weapon(); // Trade value will be 80 currentUpgrade.BasePrice = 100; currentUpgrade.CargoCost = 1; shipMock.Expect(s => s.Weapon) .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 BuyPlayerUpgradeAddedToSystem2() { // Arrange SystemWeaponUpgrade upgrade = this.CreateSystemWeaponUpgrade(); BaseShip playerBaseShip = new BaseShip(); playerBaseShip.Level = 1; Weapon currentUpgrade = new Weapon(); // Trade value will be 160 currentUpgrade.BasePrice = 200; currentUpgrade.CargoCost = 1; SystemWeaponUpgrade playerSystemUpgrade = new SystemWeaponUpgrade(); playerSystemUpgrade.Weapon = 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.Weapon) .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.SystemWeaponUpgrades.Where(m => m.Weapon == playerSystemUpgrade.Weapon && m.Quantity == 3).Any(), Is.True, "The players base ship should have been added to the system for sale"); }
public void BuyPlayerUpgradeAddedToSystem() { // Arrange SystemWeaponUpgrade upgrade = this.CreateSystemWeaponUpgrade(); Mock <Ship> shipMock = new Mock <Ship>(); shipMock.Expect(s => s.BaseShip.Level) .Returns(1).Verifiable(); Weapon currentUpgrade = new Weapon(); // Trade value will be 80 currentUpgrade.BasePrice = 100; currentUpgrade.CargoCost = 1; shipMock.Expect(s => s.Weapon) .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.SystemWeaponUpgrades.Where(m => m.Weapon == currentUpgrade && m.Quantity == 1).Any(), Is.True, "The players upgrade should have been added to the system for sale"); }
public void BuyWithLevel2Ship() { // Arrange SystemWeaponUpgrade upgrade = this.CreateSystemWeaponUpgrade(); Mock <Ship> shipMock = new Mock <Ship>(); shipMock.Expect(s => s.BaseShip.Level) .Returns(2).Verifiable(); Weapon currentUpgrade = new Weapon(); currentUpgrade.WeaponId = 2; // Trade value will be 80 currentUpgrade.BasePrice = 100; currentUpgrade.CargoCost = 1; shipMock.Expect(s => s.Weapon) .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"); }