Commit 66b53926 by Andy Armstrong Committed by Usman Khalid

Fix spec initialization ordering

parent fefc88b0
...@@ -7,72 +7,78 @@ define ["js/models/uploads", "js/views/uploads", "js/models/chapter", "common/js ...@@ -7,72 +7,78 @@ define ["js/models/uploads", "js/views/uploads", "js/models/chapter", "common/js
modal_helpers.installModalTemplates() modal_helpers.installModalTemplates()
appendSetFixtures($("<script>", {id: "upload-dialog-tpl", type: "text/template"}).text(tpl)) appendSetFixtures($("<script>", {id: "upload-dialog-tpl", type: "text/template"}).text(tpl))
CMS.URL.UPLOAD_ASSET = "/upload" CMS.URL.UPLOAD_ASSET = "/upload"
@model = new FileUpload( @model = new FileUpload(
mimeTypes: ['application/pdf'] mimeTypes: ['application/pdf']
) )
@dialogResponse = dialogResponse = [] @dialogResponse = dialogResponse = []
@view = new UploadDialog( @mockFiles = []
model: @model,
afterEach ->
delete CMS.URL.UPLOAD_ASSET
if (@lastView && modal_helpers.isShowingModal(@lastView))
@lastView.hide()
createTestView = (test) ->
view = new UploadDialog(
model: test.model,
url: CMS.URL.UPLOAD_ASSET, url: CMS.URL.UPLOAD_ASSET,
onSuccess: (response) => onSuccess: (response) =>
dialogResponse.push(response.response) test.dialogResponse.push(response.response)
) )
spyOn(@view, 'remove').and.callThrough() spyOn(view, 'remove').and.callThrough()
# create mock file input, so that we aren't subject to browser restrictions # create mock file input, so that we aren't subject to browser restrictions
@mockFiles = []
mockFileInput = jasmine.createSpy('mockFileInput') mockFileInput = jasmine.createSpy('mockFileInput')
mockFileInput.files = @mockFiles mockFileInput.files = test.mockFiles
jqMockFileInput = jasmine.createSpyObj('jqMockFileInput', ['get', 'replaceWith']) jqMockFileInput = jasmine.createSpyObj('jqMockFileInput', ['get', 'replaceWith'])
jqMockFileInput.get.and.returnValue(mockFileInput) jqMockFileInput.get.and.returnValue(mockFileInput)
realMethod = @view.$ originalView$ = view.$
spyOn(@view, "$").and.callFake (selector) -> spyOn(view, "$").and.callFake (selector) ->
if selector == "input[type=file]" if selector == "input[type=file]"
jqMockFileInput jqMockFileInput
else else
realMethod.apply(this, arguments) originalView$.apply(this, arguments)
@lastView = view
afterEach ->
delete CMS.URL.UPLOAD_ASSET
if (@view && modal_helpers.isShowingModal(@view))
@view.hide()
describe "Basic", -> describe "Basic", ->
it "should render without a file selected", -> it "should render without a file selected", ->
@view.render() view = createTestView(this)
expect(@view.$el).toContainElement("input[type=file]") view.render()
expect(@view.$(".action-upload")).toHaveClass("disabled") expect(view.$el).toContainElement("input[type=file]")
expect(view.$(".action-upload")).toHaveClass("disabled")
it "should render with a PDF selected", -> it "should render with a PDF selected", ->
view = createTestView(this)
file = {name: "fake.pdf", "type": "application/pdf"} file = {name: "fake.pdf", "type": "application/pdf"}
@mockFiles.push(file) @mockFiles.push(file)
@model.set("selectedFile", file) @model.set("selectedFile", file)
@view.render() view.render()
expect(@view.$el).toContainElement("input[type=file]") expect(view.$el).toContainElement("input[type=file]")
expect(@view.$el).not.toContainElement("#upload_error") expect(view.$el).not.toContainElement("#upload_error")
expect(@view.$(".action-upload")).not.toHaveClass("disabled") expect(view.$(".action-upload")).not.toHaveClass("disabled")
it "should render an error with an invalid file type selected", -> it "should render an error with an invalid file type selected", ->
view = createTestView(this)
file = {name: "fake.png", "type": "image/png"} file = {name: "fake.png", "type": "image/png"}
@mockFiles.push(file) @mockFiles.push(file)
@model.set("selectedFile", file) @model.set("selectedFile", file)
@view.render() view.render()
expect(@view.$el).toContainElement("input[type=file]") expect(view.$el).toContainElement("input[type=file]")
expect(@view.$el).toContainElement("#upload_error") expect(view.$el).toContainElement("#upload_error")
expect(@view.$(".action-upload")).toHaveClass("disabled") expect(view.$(".action-upload")).toHaveClass("disabled")
it "should render an error with an invalid file type after a correct file type selected", -> it "should render an error with an invalid file type after a correct file type selected", ->
view = createTestView(this)
correctFile = {name: "fake.pdf", "type": "application/pdf"} correctFile = {name: "fake.pdf", "type": "application/pdf"}
inCorrectFile = {name: "fake.png", "type": "image/png"} inCorrectFile = {name: "fake.png", "type": "image/png"}
event = {} event = {}
@view.render() view.render()
event.target = {"files": [correctFile]} event.target = {"files": [correctFile]}
@view.selectFile(event) view.selectFile(event)
expect(@view.$el).toContainElement("input[type=file]") expect(view.$el).toContainElement("input[type=file]")
expect(@view.$el).not.toContainElement("#upload_error") expect(view.$el).not.toContainElement("#upload_error")
expect(@view.$(".action-upload")).not.toHaveClass("disabled") expect(view.$(".action-upload")).not.toHaveClass("disabled")
realMethod = @model.set realMethod = @model.set
spyOn(@model, "set").and.callFake (data) -> spyOn(@model, "set").and.callFake (data) ->
...@@ -83,10 +89,10 @@ define ["js/models/uploads", "js/views/uploads", "js/models/chapter", "common/js ...@@ -83,10 +89,10 @@ define ["js/models/uploads", "js/views/uploads", "js/models/chapter", "common/js
realMethod.apply(this, arguments) realMethod.apply(this, arguments)
event.target = {"files": [inCorrectFile]} event.target = {"files": [inCorrectFile]}
@view.selectFile(event) view.selectFile(event)
expect(@view.$el).toContainElement("input[type=file]") expect(view.$el).toContainElement("input[type=file]")
expect(@view.$el).toContainElement("#upload_error") expect(view.$el).toContainElement("#upload_error")
expect(@view.$(".action-upload")).toHaveClass("disabled") expect(view.$(".action-upload")).toHaveClass("disabled")
describe "Uploads", -> describe "Uploads", ->
beforeEach -> beforeEach ->
...@@ -96,38 +102,32 @@ define ["js/models/uploads", "js/views/uploads", "js/models/chapter", "common/js ...@@ -96,38 +102,32 @@ define ["js/models/uploads", "js/views/uploads", "js/models/chapter", "common/js
@clock.restore() @clock.restore()
it "can upload correctly", -> it "can upload correctly", ->
requests = AjaxHelpers["requests"](this) requests = AjaxHelpers.requests(this);
view = createTestView(this)
@view.render() view.render()
@view.upload() view.upload()
expect(@model.get("uploading")).toBeTruthy() expect(@model.get("uploading")).toBeTruthy()
expect(requests.length).toEqual(1) AjaxHelpers.expectRequest(requests, "POST", "/upload")
request = requests[0] AjaxHelpers.respondWithJson(requests, { response: "dummy_response"})
expect(request.url).toEqual("/upload")
expect(request.method).toEqual("POST")
request.respond(200, {"Content-Type": "application/json"},
'{"response": "dummy_response"}')
expect(@model.get("uploading")).toBeFalsy() expect(@model.get("uploading")).toBeFalsy()
expect(@model.get("finished")).toBeTruthy() expect(@model.get("finished")).toBeTruthy()
expect(@dialogResponse.pop()).toEqual("dummy_response") expect(@dialogResponse.pop()).toEqual("dummy_response")
it "can handle upload errors", -> it "can handle upload errors", ->
requests = AjaxHelpers["requests"](this) requests = AjaxHelpers.requests(this);
view = createTestView(this)
@view.render() view.render()
@view.upload() view.upload()
requests[0].respond(500) AjaxHelpers.respondWithError(requests)
expect(@model.get("title")).toMatch(/error/) expect(@model.get("title")).toMatch(/error/)
expect(@view.remove).not.toHaveBeenCalled() expect(view.remove).not.toHaveBeenCalled()
it "removes itself after two seconds on successful upload", -> it "removes itself after two seconds on successful upload", ->
requests = AjaxHelpers["requests"](this) requests = AjaxHelpers.requests(this);
view = createTestView(this)
@view.render() view.render()
@view.upload() view.upload()
requests[0].respond(200, {"Content-Type": "application/json"}, AjaxHelpers.respondWithJson(requests, { response: "dummy_response"})
'{"response": "dummy_response"}') expect(modal_helpers.isShowingModal(view)).toBeTruthy();
expect(modal_helpers.isShowingModal(@view)).toBeTruthy();
@clock.tick(2001) @clock.tick(2001)
expect(modal_helpers.isShowingModal(@view)).toBeFalsy(); expect(modal_helpers.isShowingModal(view)).toBeFalsy();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment