diff --git a/app/js/shipyard/factory-ship.js b/app/js/shipyard/factory-ship.js index a4d2a90e..c75f004e 100755 --- a/app/js/shipyard/factory-ship.js +++ b/app/js/shipyard/factory-ship.js @@ -164,11 +164,11 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength', Ship.prototype.use = function(slot, id, component, preventUpdate) { if (slot.id != id) { // Selecting a different component // Slot is an internal slot, is not being emptied, and the selected component group/type must be of unique - if (slot.cat != 2 && component && _.includes(['sg', 'rf', 'fs'], component.grp)) { + if (slot.cat == 2 && component && _.includes(['sg', 'rf', 'fs'], component.grp)) { // Find another internal slot that already has this type/group installed var similarSlot = this.findInternalByGroup(component.grp); // If another slot has an installed component with of the same type - if (similarSlot && similarSlot !== slot) { + if (!preventUpdate && similarSlot && similarSlot !== slot) { this.updateStats(similarSlot, null, similarSlot.c, true); // Update stats but don't trigger a global update similarSlot.id = similarSlot.c = null; // Empty the slot } diff --git a/package.json b/package.json index 5bfde49a..6ee650a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "coriolis_shipyard", - "version": "0.13.2", + "version": "0.13.3", "repository": { "type": "git", "url": "https://github.com/cmmcleod/coriolis" diff --git a/test/tests/test-factory-ship.js b/test/tests/test-factory-ship.js index f4242270..03280c9a 100644 --- a/test/tests/test-factory-ship.js +++ b/test/tests/test-factory-ship.js @@ -1,10 +1,12 @@ describe("Ship Factory", function() { var Ship; + var Components; beforeEach(module('shipyard')); - beforeEach(inject(['Ship', function (_Ship_) { + beforeEach(inject(['Ship', 'Components', function (_Ship_, _Components_) { Ship = _Ship_; + Components = _Components_; }])); it("can build all ships", function() { @@ -32,39 +34,89 @@ describe("Ship Factory", function() { }); it("resets and rebuilds properly", function() { - var id = 'cobra_mk_iii'; - var cobra = DB.ships[id]; - var shipA = new Ship(id, cobra.properties, cobra.slots); - var shipB = new Ship(id, cobra.properties, cobra.slots); - var testShip = new Ship(id, cobra.properties, cobra.slots); + var id = 'cobra_mk_iii'; + var cobra = DB.ships[id]; + var shipA = new Ship(id, cobra.properties, cobra.slots); + var shipB = new Ship(id, cobra.properties, cobra.slots); + var testShip = new Ship(id, cobra.properties, cobra.slots); - var buildA = cobra.defaults; - var buildB = { - common:['4A', '4A', '4A', '3D', '3A', '3A', '4C'], - hardpoints: ['0s', '0s', '2d', '2d', 0, '04'], - internal: ['45', '03', '2b', '2o', '27', '53'] - }; + var buildA = cobra.defaults; + var buildB = { + common:['4A', '4A', '4A', '3D', '3A', '3A', '4C'], + hardpoints: ['0s', '0s', '2d', '2d', 0, '04'], + internal: ['45', '03', '2b', '2o', '27', '53'] + }; - shipA.buildWith(buildA); // Build A - shipB.buildWith(buildB);// Build B - testShip.buildWith(buildA); + shipA.buildWith(buildA); // Build A + shipB.buildWith(buildB);// Build B + testShip.buildWith(buildA); - for(var p in testShip) { - expect(testShip[p]).toEqual(shipA[p], p + ' does not match'); - } + for(var p in testShip) { + expect(testShip[p]).toEqual(shipA[p], p + ' does not match'); + } - testShip.buildWith(buildB); + testShip.buildWith(buildB); - for(var p in testShip) { - expect(testShip[p]).toEqual(shipB[p], p + ' does not match'); - } + for(var p in testShip) { + expect(testShip[p]).toEqual(shipB[p], p + ' does not match'); + } - testShip.buildWith(buildA); + testShip.buildWith(buildA); - for(var p in testShip) { - expect(testShip[p]).toEqual(shipA[p], p + ' does not match'); - } + for(var p in testShip) { + expect(testShip[p]).toEqual(shipA[p], p + ' does not match'); + } + }); + + it("enforces a single shield generator", function() { + var id = 'anaconda'; + var anacondaData = DB.ships[id]; + var anaconda = new Ship(id, anacondaData.properties, anacondaData.slots); + anaconda.buildWith(anacondaData.defaults); + + expect(anaconda.internal[2].c.grp).toEqual('sg', 'Anaconda default shield generator slot'); + + anaconda.use(anaconda.internal[1], '4j', Components.internal('4j')); // 6E Shield Generator + + expect(anaconda.internal[2].c).toEqual(null, 'Anaconda default shield generator slot is empty'); + expect(anaconda.internal[2].id).toEqual(null, 'Anaconda default shield generator slot id is null'); + expect(anaconda.internal[1].id).toEqual('4j', 'Slot 1 should have SG 4j in it'); + expect(anaconda.internal[1].c.grp).toEqual('sg','Slot 1 should have SG 4j in it'); }); -}); \ No newline at end of file + it("enforces a single shield fuel scoop", function() { + var id = 'anaconda'; + var anacondaData = DB.ships[id]; + var anaconda = new Ship(id, anacondaData.properties, anacondaData.slots); + anaconda.buildWith(anacondaData.defaults); + + anaconda.use(anaconda.internal[4], '32', Components.internal('32')); // 4A Fuel Scoop + expect(anaconda.internal[4].c.grp).toEqual('fs', 'Anaconda fuel scoop slot'); + + anaconda.use(anaconda.internal[3], '32', Components.internal('32')); + + expect(anaconda.internal[4].c).toEqual(null, 'Anaconda original fuel scoop slot is empty'); + expect(anaconda.internal[4].id).toEqual(null, 'Anaconda original fuel scoop slot id is null'); + expect(anaconda.internal[3].id).toEqual('32', 'Slot 1 should have FS 32 in it'); + expect(anaconda.internal[3].c.grp).toEqual('fs','Slot 1 should have FS 32 in it'); + }); + + it("enforces a single refinery", function() { + var id = 'anaconda'; + var anacondaData = DB.ships[id]; + var anaconda = new Ship(id, anacondaData.properties, anacondaData.slots); + anaconda.buildWith(anacondaData.defaults); + + anaconda.use(anaconda.internal[4], '23', Components.internal('23')); // 4E Refinery + expect(anaconda.internal[4].c.grp).toEqual('rf', 'Anaconda refinery slot'); + + anaconda.use(anaconda.internal[3], '23', Components.internal('23')); + + expect(anaconda.internal[4].c).toEqual(null, 'Anaconda original refinery slot is empty'); + expect(anaconda.internal[4].id).toEqual(null, 'Anaconda original refinery slot id is null'); + expect(anaconda.internal[3].id).toEqual('23', 'Slot 1 should have RF 23 in it'); + expect(anaconda.internal[3].c.grp).toEqual('rf','Slot 1 should have RF 23 in it'); + }); + +});