codecombat/test/app/models/SuperModel.spec.coffee

52 lines
No EOL
1.6 KiB
CoffeeScript

SuperModel = require 'models/SuperModel'
User = require 'models/User'
ComponentsCollection = require 'collections/ComponentsCollection'
describe 'SuperModel', ->
describe 'progress (property)', ->
it 'is finished by default', ->
s = new SuperModel()
expect(s.finished()).toBeTruthy()
it 'is based on resource completion and value', (done) ->
s = new SuperModel()
r1 = s.addSomethingResource('???', 2)
r2 = s.addSomethingResource('???', 3)
expect(s.progress).toBe(0)
r1.markLoaded()
# progress updates are deferred so defer more
_.defer ->
expect(s.progress).toBe(0.4)
r2.markLoaded()
_.defer ->
expect(s.progress).toBe(1)
done()
describe 'loadModel (function)', ->
it 'starts loading the model if it isn\'t already loading', ->
s = new SuperModel()
m = new User({_id:'12345'})
s.loadModel(m, 'user')
request = jasmine.Ajax.requests.mostRecent()
expect(request).toBeDefined()
it 'also loads collections', ->
s = new SuperModel()
c = new ComponentsCollection()
s.loadModel(c, 'collection')
request = jasmine.Ajax.requests.mostRecent()
expect(request).toBeDefined()
describe 'events', ->
it 'triggers "loaded-all" when finished', (done) ->
s = new SuperModel()
m = new User({_id:'12345'})
triggered = false
s.once 'loaded-all', -> triggered = true
s.loadModel(m, 'user')
request = jasmine.Ajax.requests.mostRecent()
request.response({status: 200, responseText: '{}'})
_.defer ->
expect(triggered).toBe(true)
done()