module TS.SpaceTac.Specs { describe("Equipment", () => { it("checks capabilities requirements", function () { var equipment = new Equipment(); var ship = new Ship(); expect(equipment.canBeEquipped(ship)).toBe(true); equipment.requirements["skill_time"] = 2; expect(equipment.canBeEquipped(ship)).toBe(false); ship.attributes.skill_time.set(1); expect(equipment.canBeEquipped(ship)).toBe(false); ship.attributes.skill_time.set(2); expect(equipment.canBeEquipped(ship)).toBe(true); ship.attributes.skill_time.set(3); expect(equipment.canBeEquipped(ship)).toBe(true); // Second requirement equipment.requirements["skill_material"] = 3; expect(equipment.canBeEquipped(ship)).toBe(false); ship.attributes.skill_material.set(4); expect(equipment.canBeEquipped(ship)).toBe(true); }); it("generates a description of the effects", function () { let equipment = new Equipment(); expect(equipment.getActionDescription()).toEqual("does nothing"); let action = new FireWeaponAction(equipment, 1, 200, 0, [ new DamageEffect(50) ]); equipment.action = action; expect(equipment.getActionDescription()).toEqual("- Fire: 50 damage on target"); action.blast = 20; expect(equipment.getActionDescription()).toEqual("- Fire: 50 damage in 20km radius"); action.blast = 0; action.effects.push(new StickyEffect(new AttributeLimitEffect("shield_capacity", 200), 3)); expect(equipment.getActionDescription()).toEqual("- Fire: 50 damage on target\n- Fire: limit shield capacity to 200 for 3 turns on target"); }); it("gets a minimal level, based on skills requirements", function () { let equipment = new Equipment(); expect(equipment.getMinimumLevel()).toBe(1); equipment.requirements["skill_human"] = 10; expect(equipment.getMinimumLevel()).toBe(1); equipment.requirements["skill_time"] = 1; expect(equipment.getMinimumLevel()).toBe(2); equipment.requirements["skill_gravity"] = 2; expect(equipment.getMinimumLevel()).toBe(2); equipment.requirements["skill_electronics"] = 4; expect(equipment.getMinimumLevel()).toBe(3); }); }); }