2017-02-09 00:00:35 +00:00
module TS.SpaceTac.Specs {
2015-02-06 00:00:00 +00:00
describe ( "Equipment" , ( ) = > {
2017-04-18 22:55:59 +00:00
it ( "generates a full name" , function ( ) {
let equipment = new Equipment ( SlotType . Weapon , "rayofdeath" ) ;
2017-05-28 22:24:41 +00:00
expect ( equipment . getFullName ( ) ) . toEqual ( "rayofdeath Mk1" ) ;
2017-04-18 22:55:59 +00:00
equipment . name = "Ray of Death" ;
2017-05-28 22:24:41 +00:00
expect ( equipment . getFullName ( ) ) . toEqual ( "Ray of Death Mk1" ) ;
2017-04-18 22:55:59 +00:00
equipment . quality = EquipmentQuality . LEGENDARY ;
2017-05-28 22:24:41 +00:00
expect ( equipment . getFullName ( ) ) . toEqual ( "Legendary Ray of Death Mk1" ) ;
2017-04-18 22:55:59 +00:00
} ) ;
2017-01-17 00:02:38 +00:00
it ( "checks capabilities requirements" , function ( ) {
2015-02-06 00:00:00 +00:00
var equipment = new Equipment ( ) ;
var ship = new Ship ( ) ;
2017-04-25 23:27:42 +00:00
expect ( equipment . canBeEquipped ( ship . attributes ) ) . toBe ( true ) ;
2015-02-06 00:00:00 +00:00
2017-02-07 19:15:21 +00:00
equipment . requirements [ "skill_time" ] = 2 ;
2015-02-06 00:00:00 +00:00
2017-04-25 23:27:42 +00:00
expect ( equipment . canBeEquipped ( ship . attributes ) ) . toBe ( false ) ;
2015-02-06 00:00:00 +00:00
2017-02-07 19:15:21 +00:00
ship . attributes . skill_time . set ( 1 ) ;
2015-02-06 00:00:00 +00:00
2017-04-25 23:27:42 +00:00
expect ( equipment . canBeEquipped ( ship . attributes ) ) . toBe ( false ) ;
2015-02-06 00:00:00 +00:00
2017-02-07 19:15:21 +00:00
ship . attributes . skill_time . set ( 2 ) ;
2015-02-06 00:00:00 +00:00
2017-04-25 23:27:42 +00:00
expect ( equipment . canBeEquipped ( ship . attributes ) ) . toBe ( true ) ;
2015-02-06 00:00:00 +00:00
2017-02-07 19:15:21 +00:00
ship . attributes . skill_time . set ( 3 ) ;
2015-02-06 00:00:00 +00:00
2017-04-25 23:27:42 +00:00
expect ( equipment . canBeEquipped ( ship . attributes ) ) . toBe ( true ) ;
2015-02-06 00:00:00 +00:00
// Second requirement
2017-02-07 19:15:21 +00:00
equipment . requirements [ "skill_material" ] = 3 ;
2015-02-06 00:00:00 +00:00
2017-04-25 23:27:42 +00:00
expect ( equipment . canBeEquipped ( ship . attributes ) ) . toBe ( false ) ;
2015-02-06 00:00:00 +00:00
2017-02-07 19:15:21 +00:00
ship . attributes . skill_material . set ( 4 ) ;
2015-02-06 00:00:00 +00:00
2017-04-25 23:27:42 +00:00
expect ( equipment . canBeEquipped ( ship . attributes ) ) . toBe ( true ) ;
2015-02-06 00:00:00 +00:00
} ) ;
2017-01-17 00:02:38 +00:00
it ( "generates a description of the effects" , function ( ) {
2017-04-18 19:51:23 +00:00
let equipment = new Equipment ( ) ;
2017-04-18 22:55:59 +00:00
expect ( equipment . getEffectsDescription ( ) ) . toEqual ( "does nothing" ) ;
2017-01-17 00:02:38 +00:00
2017-04-18 19:51:23 +00:00
let action = new FireWeaponAction ( equipment , 1 , 200 , 0 , [
new DamageEffect ( 50 )
] ) ;
equipment . action = action ;
2017-05-10 17:48:28 +00:00
expect ( equipment . getEffectsDescription ( ) ) . toEqual ( "Fire (power usage 1, max range 200km):\n• do 50 damage on target" ) ;
2017-04-18 19:51:23 +00:00
action . blast = 20 ;
2017-05-10 17:48:28 +00:00
expect ( equipment . getEffectsDescription ( ) ) . toEqual ( "Fire (power usage 1, max range 200km):\n• do 50 damage in 20km radius" ) ;
2017-04-18 19:51:23 +00:00
action . blast = 0 ;
action . effects . push ( new StickyEffect ( new AttributeLimitEffect ( "shield_capacity" , 200 ) , 3 ) ) ;
2017-05-10 17:48:28 +00:00
expect ( equipment . getEffectsDescription ( ) ) . toEqual ( "Fire (power usage 1, max range 200km):\n• do 50 damage on target\n• limit shield capacity to 200 for 3 turns on target" ) ;
2017-04-18 19:51:23 +00:00
} ) ;
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 ) ;
2017-01-17 00:02:38 +00:00
2017-04-18 19:51:23 +00:00
equipment . requirements [ "skill_gravity" ] = 2 ;
expect ( equipment . getMinimumLevel ( ) ) . toBe ( 2 ) ;
2017-01-17 00:02:38 +00:00
2017-04-18 19:51:23 +00:00
equipment . requirements [ "skill_electronics" ] = 4 ;
expect ( equipment . getMinimumLevel ( ) ) . toBe ( 3 ) ;
2017-01-17 00:02:38 +00:00
} ) ;
2017-04-24 17:59:16 +00:00
it ( "weighs the price, taking wear into account" , function ( ) {
let equipment = new Equipment ( ) ;
expect ( equipment . getPrice ( ) ) . toBe ( 0 ) ;
equipment . price = 100 ;
expect ( equipment . getPrice ( ) ) . toBe ( 100 ) ;
equipment . addWear ( 1 ) ;
expect ( equipment . getPrice ( ) ) . toBe ( 99 ) ;
equipment . addWear ( 10 ) ;
expect ( equipment . getPrice ( ) ) . toBe ( 90 ) ;
equipment . addWear ( 89 ) ;
expect ( equipment . getPrice ( ) ) . toBe ( 50 ) ;
equipment . addWear ( 400 ) ;
expect ( equipment . getPrice ( ) ) . toBe ( 16 ) ;
} ) ;
it ( "builds a full textual description" , function ( ) {
let equipment = new Equipment ( ) ;
equipment . name = "Super Equipment" ;
equipment . requirements [ "skill_gravity" ] = 2 ;
equipment . effects . push ( new AttributeEffect ( "skill_time" , 3 ) ) ;
equipment . wear = 50 ;
let result = equipment . getFullDescription ( ) ;
2017-05-10 17:48:28 +00:00
expect ( result ) . toEqual ( "Second hand\n\nRequires:\n• gravity skill 2\n\nWhen equipped:\n• time skill +3" ) ;
2017-04-24 17:59:16 +00:00
} ) ;
2015-02-06 00:00:00 +00:00
} ) ;
}