137 lines
5.7 KiB
CoffeeScript
137 lines
5.7 KiB
CoffeeScript
|
require '../../helpers'
|
||
|
|
||
|
shared = require '../../shared'
|
||
|
{Conditions} = require '../../../shared/conditions'
|
||
|
{Protocol} = require '../../../shared/protocol'
|
||
|
{Factory} = require '../../factory'
|
||
|
|
||
|
describe "Team preview", ->
|
||
|
it "starts the battle by passing team info and requesting team order", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp") ]
|
||
|
team2 = [ Factory("Magikarp") ]
|
||
|
shared.build(this, {conditions, team1, team2})
|
||
|
mock = @sandbox.mock(@battle).expects('startBattle').never()
|
||
|
spy = @sandbox.spy(@battle, 'tell')
|
||
|
@controller.beginBattle()
|
||
|
mock.verify()
|
||
|
spy.calledWith(Protocol.TEAM_PREVIEW).should.be.true
|
||
|
|
||
|
it "waits until all players have arranged their teams before starting", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp") ]
|
||
|
team2 = [ Factory("Magikarp") ]
|
||
|
shared.build(this, {conditions, team1, team2})
|
||
|
mock = @sandbox.mock(@battle).expects('startBattle').never()
|
||
|
@controller.beginBattle()
|
||
|
@controller.arrangeTeam(@id1, [ 0 ])
|
||
|
mock.verify()
|
||
|
@battle.startBattle.restore()
|
||
|
|
||
|
mock = @sandbox.mock(@battle).expects('startBattle').once()
|
||
|
@controller.arrangeTeam(@id2, [ 0 ])
|
||
|
mock.verify()
|
||
|
|
||
|
it "rejects team arrangements that aren't arrays", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp") ]
|
||
|
team2 = [ Factory("Magikarp") ]
|
||
|
shared.create.call(this, {conditions, team1, team2})
|
||
|
arrangement = true
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.false
|
||
|
|
||
|
it "accepts arrays of integers (arrangements) matching team length", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp") ]
|
||
|
team2 = [ Factory("Magikarp") ]
|
||
|
shared.create.call(this, {conditions, team1, team2})
|
||
|
arrangement = [ 0 ]
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.true
|
||
|
|
||
|
it "rejects team arrangements that are smaller than the team length", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp") ]
|
||
|
team2 = [ Factory("Magikarp") ]
|
||
|
shared.create.call(this, {conditions, team1, team2})
|
||
|
arrangement = []
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.false
|
||
|
|
||
|
it "rejects team arrangements that are larger than the team length", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp") ]
|
||
|
team2 = [ Factory("Magikarp") ]
|
||
|
shared.create.call(this, {conditions, team1, team2})
|
||
|
arrangement = [ 0, 1 ]
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.false
|
||
|
|
||
|
it "rejects team arrangements containing negative indices", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp") ]
|
||
|
team2 = [ Factory("Magikarp") ]
|
||
|
shared.create.call(this, {conditions, team1, team2})
|
||
|
arrangement = [ -1 ]
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.false
|
||
|
|
||
|
it "rejects team arrangements containing indices out of bounds", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp") ]
|
||
|
team2 = [ Factory("Magikarp") ]
|
||
|
shared.create.call(this, {conditions, team1, team2})
|
||
|
arrangement = [ 1 ]
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.false
|
||
|
|
||
|
it "rejects team arrangements containing non-unique indices", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = (Factory("Magikarp") for x in [0..1])
|
||
|
shared.create.call(this, {conditions, team1})
|
||
|
arrangement = [ 1, 1 ]
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.false
|
||
|
|
||
|
it "rejects team arrangements that have some non-numbers", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = (Factory("Magikarp") for x in [0..1])
|
||
|
shared.create.call(this, {conditions, team1})
|
||
|
arrangement = [ 1, "a" ]
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.false
|
||
|
|
||
|
it "rejects team arrangements that don't point to a correct index", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = (Factory("Magikarp") for x in [0..1])
|
||
|
shared.create.call(this, {conditions, team1})
|
||
|
arrangement = [ 1, .5 ]
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.false
|
||
|
|
||
|
it "rejects team arrangements if the battle has already begun", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = (Factory("Magikarp") for x in [0..1])
|
||
|
shared.create.call(this, {conditions, team1})
|
||
|
arrangement = [ 1, 0 ]
|
||
|
@controller.arrangeTeam(@id1, arrangement)
|
||
|
@controller.arrangeTeam(@id2, arrangement)
|
||
|
@controller.arrangeTeam(@id1, arrangement).should.be.false
|
||
|
|
||
|
it "rearranges team when given a valid array of indices", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp"), Factory("Gyarados"), Factory("Celebi") ]
|
||
|
team2 = [ Factory("Magikarp"), Factory("Gyarados"), Factory("Celebi") ]
|
||
|
shared.create.call(this, {conditions, team1, team2})
|
||
|
@controller.arrangeTeam(@id1, [ 0, 2, 1 ])
|
||
|
@controller.arrangeTeam(@id2, [ 2, 0, 1 ])
|
||
|
@team1.at(0).species.should.equal("Magikarp")
|
||
|
@team1.at(1).species.should.equal("Celebi")
|
||
|
@team1.at(2).species.should.equal("Gyarados")
|
||
|
@team2.at(0).species.should.equal("Celebi")
|
||
|
@team2.at(1).species.should.equal("Magikarp")
|
||
|
@team2.at(2).species.should.equal("Gyarados")
|
||
|
|
||
|
it "is isomorphic", ->
|
||
|
conditions = [ Conditions.TEAM_PREVIEW ]
|
||
|
team1 = [ Factory("Magikarp"), Factory("Gyarados"), Factory("Celebi") ]
|
||
|
team2 = [ Factory("Magikarp"), Factory("Gyarados"), Factory("Celebi") ]
|
||
|
arrangedTeamNames = [ "Celebi", "Magikarp", "Gyarados" ]
|
||
|
shared.create.call(this, {conditions, team1, team2})
|
||
|
@controller.arrangeTeam(@id1, [ 2, 0, 1 ])
|
||
|
@controller.arrangeTeam(@id1, [ 2, 0, 1 ])
|
||
|
@controller.arrangeTeam(@id2, [ 2, 0, 1 ])
|
||
|
@team1.pokemon.map((p) -> p.species).should.eql(arrangedTeamNames)
|