mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-04 21:01:06 -05:00
92 lines
3.2 KiB
CoffeeScript
92 lines
3.2 KiB
CoffeeScript
|
Problem = require 'views/play/level/tome/Problem'
|
|||
|
|
|||
|
describe 'Problem', ->
|
|||
|
# boilerplate problem params
|
|||
|
ace = {
|
|||
|
getSession: -> {
|
|||
|
getDocument: -> {
|
|||
|
createAnchor: ->
|
|||
|
}
|
|||
|
addMarker: ->
|
|||
|
}
|
|||
|
}
|
|||
|
aether = {
|
|||
|
raw: "this.say('hi');\nthis.sad('bye');"
|
|||
|
language: { id: 'javascript' }
|
|||
|
}
|
|||
|
aetherProblem = {
|
|||
|
hint: 'did you mean say instead of sad?'
|
|||
|
id: 'unknown_ReferenceError'
|
|||
|
level: 'error'
|
|||
|
message: 'Line 1: tmp2[tmp3] is not a function'
|
|||
|
range: [
|
|||
|
{ row: 1 }
|
|||
|
{ row: 1 }
|
|||
|
]
|
|||
|
type: 'runtime'
|
|||
|
}
|
|||
|
levelID = 'awesome'
|
|||
|
|
|||
|
it 'save user code problem', ->
|
|||
|
new Problem aether, aetherProblem, ace, false, true, levelID
|
|||
|
expect(jasmine.Ajax.requests.count()).toBe(1)
|
|||
|
|
|||
|
request = jasmine.Ajax.requests.mostRecent()
|
|||
|
expect(request.url).toEqual("/db/user.code.problem")
|
|||
|
|
|||
|
params = JSON.parse(request.params)
|
|||
|
expect(params.code).toEqual(aether.raw)
|
|||
|
expect(params.codeSnippet).toEqual("this.sad('bye');")
|
|||
|
expect(params.errHint).toEqual(aetherProblem.hint)
|
|||
|
expect(params.errId).toEqual(aetherProblem.id)
|
|||
|
expect(params.errLevel).toEqual(aetherProblem.level)
|
|||
|
expect(params.errMessage).toEqual(aetherProblem.message)
|
|||
|
expect(params.errRange).toEqual(aetherProblem.range)
|
|||
|
expect(params.errType).toEqual(aetherProblem.type)
|
|||
|
expect(params.language).toEqual(aether.language.id)
|
|||
|
expect(params.levelID).toEqual(levelID)
|
|||
|
|
|||
|
it 'save user code problem no range', ->
|
|||
|
aetherProblem.range = null
|
|||
|
new Problem aether, aetherProblem, ace, false, true, levelID
|
|||
|
expect(jasmine.Ajax.requests.count()).toBe(1)
|
|||
|
|
|||
|
request = jasmine.Ajax.requests.mostRecent()
|
|||
|
expect(request.url).toEqual("/db/user.code.problem")
|
|||
|
|
|||
|
params = JSON.parse(request.params)
|
|||
|
expect(params.code).toEqual(aether.raw)
|
|||
|
expect(params.errHint).toEqual(aetherProblem.hint)
|
|||
|
expect(params.errId).toEqual(aetherProblem.id)
|
|||
|
expect(params.errLevel).toEqual(aetherProblem.level)
|
|||
|
expect(params.errMessage).toEqual(aetherProblem.message)
|
|||
|
expect(params.errType).toEqual(aetherProblem.type)
|
|||
|
expect(params.language).toEqual(aether.language.id)
|
|||
|
expect(params.levelID).toEqual(levelID)
|
|||
|
|
|||
|
# Difference when no range
|
|||
|
expect(params.codeSnippet).toBeUndefined()
|
|||
|
expect(params.errRange).toBeUndefined()
|
|||
|
|
|||
|
it 'save user code problem multi-line snippet', ->
|
|||
|
aether.raw = "this.say('hi');\nthis.sad\n('bye');"
|
|||
|
aetherProblem.range = [ { row: 1 }, { row: 2 } ]
|
|||
|
|
|||
|
new Problem aether, aetherProblem, ace, false, true, levelID
|
|||
|
expect(jasmine.Ajax.requests.count()).toBe(1)
|
|||
|
|
|||
|
request = jasmine.Ajax.requests.mostRecent()
|
|||
|
expect(request.url).toEqual("/db/user.code.problem")
|
|||
|
|
|||
|
params = JSON.parse(request.params)
|
|||
|
expect(params.code).toEqual(aether.raw)
|
|||
|
expect(params.codeSnippet).toEqual("this.sad\n('bye');")
|
|||
|
expect(params.errHint).toEqual(aetherProblem.hint)
|
|||
|
expect(params.errId).toEqual(aetherProblem.id)
|
|||
|
expect(params.errLevel).toEqual(aetherProblem.level)
|
|||
|
expect(params.errMessage).toEqual(aetherProblem.message)
|
|||
|
expect(params.errRange).toEqual(aetherProblem.range)
|
|||
|
expect(params.errType).toEqual(aetherProblem.type)
|
|||
|
expect(params.language).toEqual(aether.language.id)
|
|||
|
expect(params.levelID).toEqual(levelID)
|