167 lines
6.1 KiB
CoffeeScript
167 lines
6.1 KiB
CoffeeScript
|
require '../helpers'
|
||
|
|
||
|
restify = require('restify')
|
||
|
{Factory} = require("../factory")
|
||
|
|
||
|
before (done) ->
|
||
|
@PORT = 8083
|
||
|
require('../../api').createServer(@PORT, done)
|
||
|
|
||
|
describe 'XY API:', ->
|
||
|
beforeEach ->
|
||
|
@client = restify.createJsonClient
|
||
|
version: '*'
|
||
|
url: "http://127.0.0.1:#{@PORT}"
|
||
|
|
||
|
describe '/xy/items', ->
|
||
|
it 'should get an array of items back', (done) ->
|
||
|
@client.get '/xy/items', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("items")
|
||
|
data.items.length.should.be.greaterThan(0)
|
||
|
done()
|
||
|
|
||
|
describe '/xy/moves', ->
|
||
|
it 'should get a hash of moves back', (done) ->
|
||
|
@client.get '/xy/moves', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("Tackle")
|
||
|
done()
|
||
|
|
||
|
describe '/xy/moves/:name', ->
|
||
|
it 'should get an array of pokemon that can learn that move', (done) ->
|
||
|
@client.get '/xy/moves/sketch', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("pokemon")
|
||
|
data.pokemon.should.eql([["Smeargle", "default"]])
|
||
|
done()
|
||
|
|
||
|
it 'takes into account event pokemon', (done) ->
|
||
|
@client.get '/xy/moves/extremespeed', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("pokemon")
|
||
|
data.pokemon.should.containEql(["Genesect", "default"])
|
||
|
done()
|
||
|
|
||
|
it 'takes into account pre-evolution moves', (done) ->
|
||
|
@client.get '/xy/moves/pursuit', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("pokemon")
|
||
|
data.pokemon.should.containEql(["Tyranitar", "default"])
|
||
|
done()
|
||
|
|
||
|
describe '/xy/abilities', ->
|
||
|
it 'should get an array of abilities back', (done) ->
|
||
|
@client.get '/xy/abilities', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("abilities")
|
||
|
data.abilities.length.should.be.greaterThan(0)
|
||
|
done()
|
||
|
|
||
|
describe '/xy/abilities/:name', ->
|
||
|
it 'should get an array of pokemon that have that ability', (done) ->
|
||
|
@client.get '/xy/abilities/air-lock', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("pokemon")
|
||
|
data.pokemon.should.eql([["Rayquaza", "default"]])
|
||
|
done()
|
||
|
|
||
|
it "encodes pokemon names properly", (done) ->
|
||
|
@client.get '/xy/abilities/poison-point', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("pokemon")
|
||
|
res.headers['content-type'].should.containEql("charset=utf8")
|
||
|
data.pokemon.should.containEql(["Nidoran♀", "default"])
|
||
|
data.pokemon.should.containEql(["Nidoran♂", "default"])
|
||
|
done()
|
||
|
|
||
|
describe '/xy/types', ->
|
||
|
it 'should get an array of all available types', (done) ->
|
||
|
@client.get '/xy/types', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("types")
|
||
|
data.types.should.containEql("Fairy")
|
||
|
done()
|
||
|
|
||
|
describe '/xy/types/:name', ->
|
||
|
it 'should get an array of pokemon that have that type', (done) ->
|
||
|
@client.get '/xy/types/water', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("pokemon")
|
||
|
data.pokemon.should.containEql(["Greninja", "default"])
|
||
|
done()
|
||
|
|
||
|
describe '/xy/pokemon', ->
|
||
|
it 'should get forme data for all pokemon', (done) ->
|
||
|
@client.get '/xy/pokemon', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("Charizard")
|
||
|
data.should.have.property("Mandibuzz")
|
||
|
data.should.have.property("Trevenant")
|
||
|
done()
|
||
|
|
||
|
describe '/xy/pokemon/:name', ->
|
||
|
it 'should get species data for that pokemon', (done) ->
|
||
|
@client.get '/xy/pokemon/charizard', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("default")
|
||
|
data.should.have.property("mega-x")
|
||
|
data.should.have.property("mega-y")
|
||
|
done()
|
||
|
|
||
|
describe '/xy/pokemon/:name/moves', ->
|
||
|
it 'should get all moves that pokemon can learn', (done) ->
|
||
|
@client.get '/xy/pokemon/charizard/moves', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("moves")
|
||
|
data.moves.should.be.an.instanceOf(Array)
|
||
|
data.moves.should.containEql("Fire Blast")
|
||
|
done()
|
||
|
|
||
|
describe '/xy/pokemon/:name/:forme/moves', ->
|
||
|
it 'should get all moves that pokemon in that forme can learn', (done) ->
|
||
|
@client.get '/xy/pokemon/rotom/wash/moves', (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.should.be.an.instanceOf(Object)
|
||
|
data.should.have.property("moves")
|
||
|
data.moves.should.be.an.instanceOf(Array)
|
||
|
data.moves.should.containEql("Hydro Pump")
|
||
|
data.moves.should.not.containEql("Overheat")
|
||
|
done()
|
||
|
|
||
|
describe '/xy/damagecalc', ->
|
||
|
createParams = ->
|
||
|
params =
|
||
|
move: "Fire Punch"
|
||
|
attacker: Factory("Hitmonchan", {
|
||
|
nature: "Adamant"
|
||
|
ability: "Iron Fist"
|
||
|
evs: {attack: 252}
|
||
|
item: "Life Orb"
|
||
|
})
|
||
|
defender: Factory("Hitmonlee")
|
||
|
|
||
|
it 'works for an existing move', (done) ->
|
||
|
params = createParams()
|
||
|
@client.put '/xy/damagecalc', params, (err, req, res, data) ->
|
||
|
throw new Error(err) if err
|
||
|
data.minDamage.should.equal(200)
|
||
|
data.maxDamage.should.equal(236)
|
||
|
data.basePower.should.equal(75)
|
||
|
data.moveType.should.equal("Fire")
|
||
|
data.defenderMaxHP.should.equal(241)
|
||
|
done()
|