2014-08-07 18:27:47 -07:00
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 ' } } }
2014-08-15 12:41:29 -07:00
sessionWithAnyaWithGloves = { heroConfig: { thangType: ' anya ' , inventory: { ' head ' : ' gloves ' } } }
2014-08-07 18:27:47 -07:00
# 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
} ]
}
2014-08-15 12:41:29 -07:00
thangTypeAnyaWithJumpsComponent = {
name: ' Anya '
original: ' anya '
components: [ {
original: ' jumps '
majorVersion: 0
} ]
}
2014-08-07 18:27:47 -07:00
2014-08-15 12:41:29 -07:00
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 ' } )
2015-08-16 17:00:46 -07:00
levelLoader.sessionDependenciesRegistered = { }
2014-08-15 12:41:29 -07:00
session = new LevelSession ( sessionWithAnyaWithGloves )
levelLoader . loadDependenciesForSession ( session )
requests = jasmine . Ajax . requests . all ( )
urls = ( r . url for r in requests )
2014-10-19 21:56:26 -07:00
expect ( ' /db/thang.type/gloves/version?project=name,components,original,rasterIcon,kind ' in urls ) . toBeTruthy ( )
2014-09-28 10:47:01 -07:00
expect ( ' /db/thang.type/anya/version ' in urls ) . toBeTruthy ( )
2014-08-15 12:41:29 -07:00
it ' loads components for the hero in the heroConfig in the given session ' , ->
levelLoader = new LevelLoader ( { supermodel : new SuperModel ( ) , sessionID: ' id ' , levelID: ' id ' } )
2015-08-16 17:00:46 -07:00
levelLoader.sessionDependenciesRegistered = { }
2014-08-15 12:41:29 -07:00
session = new LevelSession ( sessionWithAnyaWithGloves )
levelLoader . loadDependenciesForSession ( session )
responses = {
2014-09-28 10:47:01 -07:00
' /db/thang.type/anya/version ' : thangTypeAnyaWithJumpsComponent
2014-08-15 12:41:29 -07:00
}
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 ( )
2014-09-01 20:53:53 -07:00
2014-08-15 12:41:29 -07:00
it ' is idempotent ' , ->
levelLoader = new LevelLoader ( { supermodel : new SuperModel ( ) , sessionID: ' id ' , levelID: ' id ' } )
# first load Tharin by the 'normal' session load
2014-09-01 20:53:53 -07:00
responses = ' /db/level/id ' : levelWithOgreWithMace
jasmine . Ajax . requests . sendResponses ( responses )
2014-12-08 14:21:40 -08:00
responses = ' /db/level.session/id ' : sessionWithTharinWithHelmet
2014-08-15 12:41:29 -07:00
jasmine . Ajax . requests . sendResponses ( responses )
# then try to load Tharin some more
session = new LevelSession ( sessionWithTharinWithHelmet )
levelLoader . loadDependenciesForSession ( session )
2014-09-28 10:47:01 -07:00
numRequestsBefore = jasmine . Ajax . requests . count ( )
2014-08-15 12:41:29 -07:00
levelLoader . loadDependenciesForSession ( session )
levelLoader . loadDependenciesForSession ( session )
2014-09-01 20:53:53 -07:00
numRequestsAfter = jasmine . Ajax . requests . count ( )
expect ( numRequestsAfter ) . toBe ( numRequestsBefore )
2014-08-07 18:27:47 -07:00
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 ' } )
2014-09-01 20:53:53 -07:00
responses = {
' /db/level/id ' : levelWithOgreWithMace
2014-08-07 18:27:47 -07:00
}
jasmine . Ajax . requests . sendResponses ( responses )
requests = jasmine . Ajax . requests . all ( )
urls = ( r . url for r in requests )
2014-10-19 21:56:26 -07:00
expect ( ' /db/thang.type/mace/version?project=name,components,original,rasterIcon,kind ' in urls ) . toBeTruthy ( )
2014-09-01 20:53:53 -07:00
2014-08-07 18:27:47 -07:00
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 ( )
2014-09-01 20:53:53 -07:00
2014-08-07 18:27:47 -07:00
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 )
2014-10-19 21:56:26 -07:00
expect ( ' /db/thang.type/wand/version?project=name,components,original,rasterIcon,kind ' in urls ) . toBeTruthy ( )
2014-09-01 20:53:53 -07:00
2014-08-07 18:27:47 -07:00
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 ]
2014-10-19 21:56:26 -07:00
' /db/thang.type/wand/version?project=name,components,original,rasterIcon,kind ' : thangTypeWand
2014-08-07 18:27:47 -07:00
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 ( )