BattleSim/test/server/scheduler_spec.coffee

58 lines
1.7 KiB
CoffeeScript

sinon = require('sinon')
async = require('async')
ratings = require('../../server/ratings')
scheduler = require('../../server/schedule')
require '../helpers'
describe 'Scheduler', ->
beforeEach ->
date = new Date()
date.setHours(23)
date.setMinutes(59)
date.setSeconds(59)
# Get rid of existing clock
@clock.restore()
@clock = sinon.useFakeTimers(date.getTime())
@jobs = scheduler.createScheduler()
@callbacks = @jobs.map (job) ->
(callback) -> job.on('finished', callback)
it 'decays elo ratings', (done) ->
players = ['guy', 'lady']
oldRatings = [ 2000, 4000 ]
oldGuyRating = 2000
oldLadyRating = 4000
ratings.setRatings players, oldRatings, =>
async.parallel @callbacks, =>
ratings.getRatings players, (err, newRatings) =>
throw err if err
newRatings.should.eql(oldRatings.map((r) -> r - ratings.DECAY_AMOUNT))
done()
@clock.tick(2000)
it 'does not decay the minimum rating possible', (done) ->
minRating = ratings.algorithm.createPlayer().rating
ratings.setRating 'sonic', minRating, =>
async.parallel @callbacks, =>
ratings.getRating 'sonic', (err, rating) =>
throw err if err
rating.should.equal(minRating)
done()
@clock.tick(2000)
it 'does not decay active players', (done) ->
players = ['guy', 'lady']
oldRatings = [ 2000, 4000 ]
oldGuyRating = 2000
oldLadyRating = 4000
ratings.setActive players, =>
ratings.setRatings players, oldRatings, =>
async.parallel @callbacks, =>
ratings.getRatings players, (err, newRatings) =>
throw err if err
newRatings.should.eql(oldRatings)
done()
@clock.tick(2000)