mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-24 08:08:15 -05:00
181 lines
5.8 KiB
CoffeeScript
181 lines
5.8 KiB
CoffeeScript
Level = require 'models/Level'
|
|
LevelSession = require 'models/LevelSession'
|
|
SuperModel = require 'models/SuperModel'
|
|
LevelComponent = require 'models/LevelComponent'
|
|
LevelLoader = require 'lib/LevelLoader'
|
|
|
|
# LEVELS
|
|
|
|
levelWithOgreWithMace = {
|
|
thangs: [{
|
|
thangType: 'ogre'
|
|
components: [{
|
|
original: LevelComponent.EquipsID
|
|
majorVersion: 0
|
|
config: { inventory: { 'left-hand': 'mace' } }
|
|
}]
|
|
}]
|
|
}
|
|
|
|
levelWithShaman = {
|
|
thangs: [{
|
|
thangType: 'shaman'
|
|
}]
|
|
}
|
|
|
|
levelWithShamanWithSuperWand = {
|
|
thangs: [{
|
|
thangType: 'shaman'
|
|
components: [{
|
|
original: LevelComponent.EquipsID
|
|
majorVersion: 0
|
|
config: { inventory: { 'left-hand': 'super-wand' } }
|
|
}]
|
|
}]
|
|
}
|
|
|
|
# SESSIONS
|
|
|
|
sessionWithTharinWithHelmet = { heroConfig: { thangType: 'tharin', inventory: { 'head': 'helmet' }}}
|
|
|
|
sessionWithAnyaWithGloves = { heroConfig: { thangType: 'anya', inventory: { 'head': 'gloves' }}}
|
|
|
|
# THANG TYPES
|
|
|
|
thangTypeOgreWithPhysicalComponent = {
|
|
name: 'Ogre'
|
|
original: 'ogre'
|
|
components: [{
|
|
original: 'physical'
|
|
majorVersion: 0
|
|
}]
|
|
}
|
|
|
|
thangTypeShamanWithWandEquipped = {
|
|
name: 'Shaman'
|
|
original: 'shaman'
|
|
components: [{
|
|
original: LevelComponent.EquipsID
|
|
majorVersion: 0
|
|
config: { inventory: { 'left-hand': 'wand' }}
|
|
}]
|
|
}
|
|
|
|
thangTypeTharinWithHealsComponent = {
|
|
name: 'Tharin'
|
|
original: 'tharin'
|
|
components: [{
|
|
original: 'heals'
|
|
majorVersion: 0
|
|
}]
|
|
}
|
|
|
|
thangTypeWand = {
|
|
name: 'Wand'
|
|
original: 'wand'
|
|
components: [{
|
|
original: 'poisons'
|
|
majorVersion: 0
|
|
}]
|
|
}
|
|
|
|
thangTypeAnyaWithJumpsComponent = {
|
|
name: 'Anya'
|
|
original: 'anya'
|
|
components: [{
|
|
original: 'jumps'
|
|
majorVersion: 0
|
|
}]
|
|
}
|
|
|
|
|
|
|
|
describe 'LevelLoader', ->
|
|
describe 'loadDependenciesForSession', ->
|
|
it 'loads hero and item thang types from heroConfig in the given session', ->
|
|
levelLoader = new LevelLoader({supermodel:new SuperModel(), sessionID: 'id', levelID: 'id'})
|
|
session = new LevelSession(sessionWithAnyaWithGloves)
|
|
levelLoader.loadDependenciesForSession(session)
|
|
requests = jasmine.Ajax.requests.all()
|
|
urls = (r.url for r in requests)
|
|
expect('/db/thang.type/gloves/version?project=name,components,original' in urls).toBeTruthy()
|
|
expect('/db/thang.type/anya/version' in urls).toBeTruthy()
|
|
|
|
it 'loads components for the hero in the heroConfig in the given session', ->
|
|
levelLoader = new LevelLoader({supermodel:new SuperModel(), sessionID: 'id', levelID: 'id'})
|
|
session = new LevelSession(sessionWithAnyaWithGloves)
|
|
levelLoader.loadDependenciesForSession(session)
|
|
responses = {
|
|
'/db/thang.type/anya/version': thangTypeAnyaWithJumpsComponent
|
|
}
|
|
jasmine.Ajax.requests.sendResponses(responses)
|
|
requests = jasmine.Ajax.requests.all()
|
|
urls = (r.url for r in requests)
|
|
expect('/db/level.component/jumps/version/0' in urls).toBeTruthy()
|
|
|
|
it 'is idempotent', ->
|
|
levelLoader = new LevelLoader({supermodel:new SuperModel(), sessionID: 'id', levelID: 'id'})
|
|
|
|
# first load Tharin by the 'normal' session load
|
|
responses = '/db/level/id': levelWithOgreWithMace
|
|
jasmine.Ajax.requests.sendResponses(responses)
|
|
responses = '/db/level_session/id': sessionWithTharinWithHelmet
|
|
jasmine.Ajax.requests.sendResponses(responses)
|
|
|
|
# then try to load Tharin some more
|
|
session = new LevelSession(sessionWithTharinWithHelmet)
|
|
levelLoader.loadDependenciesForSession(session)
|
|
numRequestsBefore = jasmine.Ajax.requests.count()
|
|
levelLoader.loadDependenciesForSession(session)
|
|
levelLoader.loadDependenciesForSession(session)
|
|
numRequestsAfter = jasmine.Ajax.requests.count()
|
|
expect(numRequestsAfter).toBe(numRequestsBefore)
|
|
|
|
it 'loads thangs for items that the level thangs have in their Equips component configs', ->
|
|
new LevelLoader({supermodel:supermodel = new SuperModel(), sessionID: 'id', levelID: 'id'})
|
|
|
|
responses = {
|
|
'/db/level/id': levelWithOgreWithMace
|
|
}
|
|
|
|
jasmine.Ajax.requests.sendResponses(responses)
|
|
requests = jasmine.Ajax.requests.all()
|
|
urls = (r.url for r in requests)
|
|
expect('/db/thang.type/mace/version?project=name,components,original' in urls).toBeTruthy()
|
|
|
|
it 'loads components which are inherited by level thangs from thang type default components', ->
|
|
new LevelLoader({supermodel:new SuperModel(), sessionID: 'id', levelID: 'id'})
|
|
|
|
responses =
|
|
'/db/level/id': levelWithOgreWithMace
|
|
'/db/thang.type/names': [thangTypeOgreWithPhysicalComponent]
|
|
|
|
jasmine.Ajax.requests.sendResponses(responses)
|
|
requests = jasmine.Ajax.requests.all()
|
|
urls = (r.url for r in requests)
|
|
expect('/db/level.component/physical/version/0' in urls).toBeTruthy()
|
|
|
|
it 'loads item thang types which are inherited by level thangs from thang type default equips component configs', ->
|
|
new LevelLoader({supermodel:new SuperModel(), sessionID: 'id', levelID: 'id'})
|
|
|
|
responses =
|
|
'/db/level/id': levelWithShaman
|
|
'/db/thang.type/names': [thangTypeShamanWithWandEquipped]
|
|
|
|
jasmine.Ajax.requests.sendResponses(responses)
|
|
requests = jasmine.Ajax.requests.all()
|
|
urls = (r.url for r in requests)
|
|
expect('/db/thang.type/wand/version?project=name,components,original' in urls).toBeTruthy()
|
|
|
|
it 'loads components for item thang types which are inherited by level thangs from thang type default equips component configs', ->
|
|
new LevelLoader({supermodel:new SuperModel(), sessionID: 'id', levelID: 'id'})
|
|
|
|
responses =
|
|
'/db/level/id': levelWithShaman
|
|
'/db/thang.type/names': [thangTypeShamanWithWandEquipped]
|
|
'/db/thang.type/wand/version?project=name,components,original': thangTypeWand
|
|
|
|
jasmine.Ajax.requests.sendResponses(responses)
|
|
requests = jasmine.Ajax.requests.all()
|
|
urls = (r.url for r in requests)
|
|
expect('/db/level.component/poisons/version/0' in urls).toBeTruthy()
|