-
Notifications
You must be signed in to change notification settings - Fork 3
/
towerspec.coffee
75 lines (54 loc) · 1.96 KB
/
towerspec.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
### Tower Tests ###
basedir = '../../'
App = require basedir + 'app.js'
Tower = (require basedir + 'controllers/towers.js').Tower
TowerModel = require basedir + 'models/tower-model.js'
Mob = (require basedir + 'controllers/mobs.js').Mob
MobModel = require basedir + 'models/mob-model.js'
Obj = (require basedir + 'controllers/utils/object.js').Obj
# Unit Tests
describe 'Towers towers.js', ->
beforeEach ->
world = new Obj # Required because maps relies on 'world' for some events
# Stub data
@name = 'Cannon Tower'
@id = 'cannon'
@active = 1
@symbol = 'C'
@damage = 1
@range = 2
@fakeMob = new Obj # Load a fake mob to emit events
@fakeMob.symbol = 'm'
@tower = new Tower @id, world
it 'Loads a new tower called Cannon Tower', ->
expect(@tower.id).toEqual(@id)
expect(@tower.name).toEqual(@name)
expect(@tower.active).toEqual(@active)
expect(@tower.damage).toEqual(@damage)
expect(@tower.range).toEqual(@range)
it 'Saves itself to the DB once loaded', ->
TowerModel.find { id: @id }, (err, res) =>
expect(res[0].name).toEqual @name
it 'Spawns itself on the map at 5, 4', ->
@tower.on 'spawn', (type, x, y, callback) =>
expect(@tower.x).toEqual(5)
expect(@tower.y).toEqual(4)
@tower.spawn 5, 4, (callback) ->
it 'Finds no targets when none are in range', ->
fakeWorld = new Obj
# Spawn the tower
@tower.spawn 5, 4, (callback) ->
# Spawn a fake mob
fakeMob = new Mob 'warrior', fakeWorld
fakeMob.spawn 0, 0, (callback) ->
@tower.checkTarget fakeMob, (res) ->
expect(res).toEqual []
it 'Fires on a target when one is in range', ->
fakeWorld = new Obj
# Spawn the tower
@tower.spawn 5, 4, (callback) ->
# Spawn a fake mob
fakeMob = new Mob 'warrior', fakeWorld
fakeMob.spawn 5, 5, (callback) ->
@tower.checkTarget fakeMob, (res) ->
expect(res.id).toEqual 'warrior'