Commit d462c73f by Andy Armstrong

Use the UI Toolkit's spec helpers.

parent cae69f96
require ["jquery", "backbone", "coffee/src/main", "common/js/spec_helpers/ajax_helpers", "jquery.cookie"], require ["jquery", "backbone", "coffee/src/main", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "jquery.cookie"],
($, Backbone, main, AjaxHelpers) -> ($, Backbone, main, AjaxHelpers) ->
describe "CMS", -> describe "CMS", ->
it "should initialize URL", -> it "should initialize URL", ->
......
define ["js/models/section", "common/js/spec_helpers/ajax_helpers", "js/utils/module"], (Section, AjaxHelpers, ModuleUtils) -> define ["js/models/section", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "js/utils/module"], (Section, AjaxHelpers, ModuleUtils) ->
describe "Section", -> describe "Section", ->
describe "basic", -> describe "basic", ->
beforeEach -> beforeEach ->
......
define ["jquery", "common/js/spec_helpers/ajax_helpers", "squire"], define ["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "squire"],
($, AjaxHelpers, Squire) -> ($, AjaxHelpers, Squire) ->
assetLibraryTpl = readFixtures('asset-library.underscore') assetLibraryTpl = readFixtures('asset-library.underscore')
......
define ["js/views/course_info_handout", "js/views/course_info_update", "js/models/module_info", "js/collections/course_update", "common/js/spec_helpers/ajax_helpers"], define ["js/views/course_info_handout", "js/views/course_info_update", "js/models/module_info",
"js/collections/course_update", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers"],
(CourseInfoHandoutsView, CourseInfoUpdateView, ModuleInfo, CourseUpdateCollection, AjaxHelpers) -> (CourseInfoHandoutsView, CourseInfoUpdateView, ModuleInfo, CourseUpdateCollection, AjaxHelpers) ->
describe "Course Updates and Handouts", -> describe "Course Updates and Handouts", ->
......
define ["js/models/textbook", "js/models/chapter", "js/collections/chapter", "js/models/course", define ["js/models/textbook", "js/models/chapter", "js/collections/chapter", "js/models/course",
"js/collections/textbook", "js/views/show_textbook", "js/views/edit_textbook", "js/views/list_textbooks", "js/collections/textbook", "js/views/show_textbook", "js/views/edit_textbook", "js/views/list_textbooks",
"js/views/edit_chapter", "common/js/components/views/feedback_prompt", "js/views/edit_chapter", "common/js/components/views/feedback_prompt",
"common/js/components/views/feedback_notification", "common/js/components/utils/view_utils","common/js/spec_helpers/ajax_helpers", "common/js/components/views/feedback_notification", "common/js/components/utils/view_utils",
"edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers",
"js/spec_helpers/modal_helpers"], "js/spec_helpers/modal_helpers"],
(Textbook, Chapter, ChapterSet, Course, TextbookSet, ShowTextbook, EditTextbook, ListTextbooks, EditChapter, Prompt, Notification, ViewUtils, AjaxHelpers, modal_helpers) -> (Textbook, Chapter, ChapterSet, Course, TextbookSet, ShowTextbook, EditTextbook, ListTextbooks, EditChapter,
Prompt, Notification, ViewUtils, AjaxHelpers, modal_helpers) ->
describe "ShowTextbook", ->
tpl = readFixtures('show-textbook.underscore')
beforeEach ->
setFixtures($("<script>", {id: "show-textbook-tpl", type: "text/template"}).text(tpl))
appendSetFixtures(sandbox({id: "page-notification"}))
appendSetFixtures(sandbox({id: "page-prompt"}))
@model = new Textbook({name: "Life Sciences", id: "0life-sciences"})
spyOn(@model, "destroy").and.callThrough()
@collection = new TextbookSet([@model])
@view = new ShowTextbook({model: @model})
@promptSpies = jasmine.stealth.spyOnConstructor(Prompt, "Warning", ["show", "hide"])
@promptSpies.show.and.returnValue(@promptSpies)
window.course = new Course({
id: "5",
name: "Course Name",
url_name: "course_name",
org: "course_org",
num: "course_num",
revision: "course_rev"
});
afterEach ->
delete window.course
describe "Basic", ->
it "should render properly", ->
@view.render()
expect(@view.$el).toContainText("Life Sciences")
it "should set the 'editing' property on the model when the edit button is clicked", ->
@view.render().$(".edit").click()
expect(@model.get("editing")).toBeTruthy()
it "should pop a delete confirmation when the delete button is clicked", ->
@view.render().$(".delete").click()
expect(@promptSpies.constructor).toHaveBeenCalled()
ctorOptions = @promptSpies.constructor.calls.mostRecent().args[0]
expect(ctorOptions.title).toMatch(/Life Sciences/)
# hasn't actually been removed
expect(@model.destroy).not.toHaveBeenCalled()
expect(@collection).toContain(@model)
it "should show chapters appropriately", ->
@model.get("chapters").add([{}, {}, {}])
@model.set('showChapters', false)
@view.render().$(".show-chapters").click()
expect(@model.get('showChapters')).toBeTruthy()
it "should hide chapters appropriately", ->
@model.get("chapters").add([{}, {}, {}])
@model.set('showChapters', true)
@view.render().$(".hide-chapters").click()
expect(@model.get('showChapters')).toBeFalsy()
describe "AJAX", ->
beforeEach ->
@savingSpies = jasmine.stealth.spyOnConstructor(Notification, "Mini",
["show", "hide"])
@savingSpies.show.and.returnValue(@savingSpies)
CMS.URL.TEXTBOOKS = "/textbooks"
afterEach -> describe "ShowTextbook", ->
delete CMS.URL.TEXTBOOKS tpl = readFixtures('show-textbook.underscore')
it "should destroy itself on confirmation", ->
requests = AjaxHelpers["requests"](this)
@view.render().$(".delete").click()
ctorOptions = @promptSpies.constructor.calls.mostRecent().args[0]
# run the primary function to indicate confirmation
ctorOptions.actions.primary.click(@promptSpies)
# AJAX request has been sent, but not yet returned
expect(@model.destroy).toHaveBeenCalled()
expect(requests.length).toEqual(1)
expect(@savingSpies.constructor).toHaveBeenCalled()
expect(@savingSpies.show).toHaveBeenCalled()
expect(@savingSpies.hide).not.toHaveBeenCalled()
savingOptions = @savingSpies.constructor.calls.mostRecent().args[0]
expect(savingOptions.title).toMatch(/Deleting/)
# return a success response
requests[0].respond(204)
expect(@savingSpies.hide).toHaveBeenCalled()
expect(@collection.contains(@model)).toBeFalsy()
describe "EditTextbook", ->
describe "Basic", ->
tpl = readFixtures('edit-textbook.underscore')
beforeEach -> beforeEach ->
setFixtures($("<script>", {id: "edit-textbook-tpl", type: "text/template"}).text(tpl)) setFixtures($("<script>", {id: "show-textbook-tpl", type: "text/template"}).text(tpl))
appendSetFixtures(sandbox({id: "page-notification"})) appendSetFixtures(sandbox({id: "page-notification"}))
appendSetFixtures(sandbox({id: "page-prompt"})) appendSetFixtures(sandbox({id: "page-prompt"}))
@model = new Textbook({name: "Life Sciences", editing: true}) @model = new Textbook({name: "Life Sciences", id: "0life-sciences"})
spyOn(@model, 'save') spyOn(@model, "destroy").and.callThrough()
@collection = new TextbookSet() @collection = new TextbookSet([@model])
@collection.add(@model) @view = new ShowTextbook({model: @model})
@view = new EditTextbook({model: @model})
spyOn(@view, 'render').and.callThrough() @promptSpies = jasmine.stealth.spyOnConstructor(Prompt, "Warning", ["show", "hide"])
@promptSpies.show.and.returnValue(@promptSpies)
window.course = new Course({
id: "5",
name: "Course Name",
url_name: "course_name",
org: "course_org",
num: "course_num",
revision: "course_rev"
});
it "should render properly", -> afterEach ->
@view.render() delete window.course
expect(@view.$("input[name=textbook-name]").val()).toEqual("Life Sciences")
describe "Basic", ->
it "should render properly", ->
@view.render()
expect(@view.$el).toContainText("Life Sciences")
it "should set the 'editing' property on the model when the edit button is clicked", ->
@view.render().$(".edit").click()
expect(@model.get("editing")).toBeTruthy()
it "should pop a delete confirmation when the delete button is clicked", ->
@view.render().$(".delete").click()
expect(@promptSpies.constructor).toHaveBeenCalled()
ctorOptions = @promptSpies.constructor.calls.mostRecent().args[0]
expect(ctorOptions.title).toMatch(/Life Sciences/)
# hasn't actually been removed
expect(@model.destroy).not.toHaveBeenCalled()
expect(@collection).toContain(@model)
it "should show chapters appropriately", ->
@model.get("chapters").add([{}, {}, {}])
@model.set('showChapters', false)
@view.render().$(".show-chapters").click()
expect(@model.get('showChapters')).toBeTruthy()
it "should hide chapters appropriately", ->
@model.get("chapters").add([{}, {}, {}])
@model.set('showChapters', true)
@view.render().$(".hide-chapters").click()
expect(@model.get('showChapters')).toBeFalsy()
describe "AJAX", ->
beforeEach ->
@savingSpies = jasmine.stealth.spyOnConstructor(Notification, "Mini",
["show", "hide"])
@savingSpies.show.and.returnValue(@savingSpies)
CMS.URL.TEXTBOOKS = "/textbooks"
afterEach ->
delete CMS.URL.TEXTBOOKS
it "should destroy itself on confirmation", ->
requests = AjaxHelpers["requests"](this)
@view.render().$(".delete").click()
ctorOptions = @promptSpies.constructor.calls.mostRecent().args[0]
# run the primary function to indicate confirmation
ctorOptions.actions.primary.click(@promptSpies)
# AJAX request has been sent, but not yet returned
expect(@model.destroy).toHaveBeenCalled()
expect(requests.length).toEqual(1)
expect(@savingSpies.constructor).toHaveBeenCalled()
expect(@savingSpies.show).toHaveBeenCalled()
expect(@savingSpies.hide).not.toHaveBeenCalled()
savingOptions = @savingSpies.constructor.calls.mostRecent().args[0]
expect(savingOptions.title).toMatch(/Deleting/)
# return a success response
requests[0].respond(204)
expect(@savingSpies.hide).toHaveBeenCalled()
expect(@collection.contains(@model)).toBeFalsy()
describe "EditTextbook", ->
describe "Basic", ->
tpl = readFixtures('edit-textbook.underscore')
beforeEach ->
setFixtures($("<script>", {id: "edit-textbook-tpl", type: "text/template"}).text(tpl))
appendSetFixtures(sandbox({id: "page-notification"}))
appendSetFixtures(sandbox({id: "page-prompt"}))
@model = new Textbook({name: "Life Sciences", editing: true})
spyOn(@model, 'save')
@collection = new TextbookSet()
@collection.add(@model)
@view = new EditTextbook({model: @model})
spyOn(@view, 'render').and.callThrough()
it "should render properly", ->
@view.render()
expect(@view.$("input[name=textbook-name]").val()).toEqual("Life Sciences")
it "should allow you to create new empty chapters", ->
@view.render()
numChapters = @model.get("chapters").length
@view.$(".action-add-chapter").click()
expect(@model.get("chapters").length).toEqual(numChapters+1)
expect(@model.get("chapters").last().isEmpty()).toBeTruthy()
it "should save properly", ->
@view.render()
@view.$("input[name=textbook-name]").val("starfish")
@view.$("input[name=chapter1-name]").val("wallflower")
@view.$("input[name=chapter1-asset-path]").val("foobar")
@view.$("form").submit()
expect(@model.get("name")).toEqual("starfish")
chapter = @model.get("chapters").first()
expect(chapter.get("name")).toEqual("wallflower")
expect(chapter.get("asset_path")).toEqual("foobar")
expect(@model.save).toHaveBeenCalled()
it "should not save on invalid", ->
@view.render()
@view.$("input[name=textbook-name]").val("")
@view.$("input[name=chapter1-asset-path]").val("foobar.pdf")
@view.$("form").submit()
expect(@model.validationError).toBeTruthy()
expect(@model.save).not.toHaveBeenCalled()
it "does not save on cancel", ->
@model.get("chapters").add([{name: "a", asset_path: "b"}])
@view.render()
@view.$("input[name=textbook-name]").val("starfish")
@view.$("input[name=chapter1-asset-path]").val("foobar.pdf")
@view.$(".action-cancel").click()
expect(@model.get("name")).not.toEqual("starfish")
chapter = @model.get("chapters").first()
expect(chapter.get("asset_path")).not.toEqual("foobar")
expect(@model.save).not.toHaveBeenCalled()
it "should be possible to correct validation errors", ->
@view.render()
@view.$("input[name=textbook-name]").val("")
@view.$("input[name=chapter1-asset-path]").val("foobar.pdf")
@view.$("form").submit()
expect(@model.validationError).toBeTruthy()
expect(@model.save).not.toHaveBeenCalled()
@view.$("input[name=textbook-name]").val("starfish")
@view.$("input[name=chapter1-name]").val("foobar")
@view.$("form").submit()
expect(@model.validationError).toBeFalsy()
expect(@model.save).toHaveBeenCalled()
it "removes all empty chapters on cancel if the model has a non-empty chapter", ->
chapters = @model.get("chapters")
chapters.at(0).set("name", "non-empty")
@model.setOriginalAttributes()
@view.render()
chapters.add([{}, {}, {}]) # add three empty chapters
expect(chapters.length).toEqual(4)
@view.$(".action-cancel").click()
expect(chapters.length).toEqual(1)
expect(chapters.first().get('name')).toEqual("non-empty")
it "removes all empty chapters on cancel except one if the model has no non-empty chapters", ->
chapters = @model.get("chapters")
@view.render()
chapters.add([{}, {}, {}]) # add three empty chapters
expect(chapters.length).toEqual(4)
@view.$(".action-cancel").click()
expect(chapters.length).toEqual(1)
describe "ListTextbooks", ->
noTextbooksTpl = readFixtures("no-textbooks.underscore")
editTextbooktpl = readFixtures('edit-textbook.underscore')
it "should allow you to create new empty chapters", -> beforeEach ->
appendSetFixtures($("<script>", {id: "no-textbooks-tpl", type: "text/template"}).text(noTextbooksTpl))
appendSetFixtures($("<script>", {id: "edit-textbook-tpl", type: "text/template"}).text(editTextbooktpl))
@collection = new TextbookSet
@view = new ListTextbooks({collection: @collection})
@view.render() @view.render()
numChapters = @model.get("chapters").length
@view.$(".action-add-chapter").click()
expect(@model.get("chapters").length).toEqual(numChapters+1)
expect(@model.get("chapters").last().isEmpty()).toBeTruthy()
it "should save properly", -> it "should scroll to newly added textbook", ->
@view.render() spyOn(ViewUtils, 'setScrollOffset')
@view.$("input[name=textbook-name]").val("starfish") @view.$(".new-button").click()
@view.$("input[name=chapter1-name]").val("wallflower") $sectionEl = @view.$el.find('section:last')
@view.$("input[name=chapter1-asset-path]").val("foobar") expect($sectionEl.length).toEqual(1)
@view.$("form").submit() expect(ViewUtils.setScrollOffset).toHaveBeenCalledWith($sectionEl, 0)
expect(@model.get("name")).toEqual("starfish")
chapter = @model.get("chapters").first() it "should focus first input element of newly added textbook", ->
expect(chapter.get("name")).toEqual("wallflower") spyOn(jQuery.fn, 'focus').and.callThrough()
expect(chapter.get("asset_path")).toEqual("foobar") jasmine.addMatchers
expect(@model.save).toHaveBeenCalled() toHaveBeenCalledOnJQueryObject: () ->
return {
it "should not save on invalid", -> compare: (actual, expected) ->
@view.render() return {
@view.$("input[name=textbook-name]").val("") pass: actual.calls && actual.calls.mostRecent() &&
@view.$("input[name=chapter1-asset-path]").val("foobar.pdf") actual.calls.mostRecent().object[0] == expected[0]
@view.$("form").submit() }
expect(@model.validationError).toBeTruthy() }
expect(@model.save).not.toHaveBeenCalled() @view.$(".new-button").click()
$inputEl = @view.$el.find('section:last input:first')
it "does not save on cancel", -> expect($inputEl.length).toEqual(1)
@model.get("chapters").add([{name: "a", asset_path: "b"}]) # testing for element focused seems to be tricky
@view.render() # (see http://stackoverflow.com/questions/967096)
@view.$("input[name=textbook-name]").val("starfish") # and the following doesn't seem to work
@view.$("input[name=chapter1-asset-path]").val("foobar.pdf") # expect($inputEl).toBeFocused()
@view.$(".action-cancel").click() # expect($inputEl.find(':focus').length).toEqual(1)
expect(@model.get("name")).not.toEqual("starfish") expect(jQuery.fn.focus).toHaveBeenCalledOnJQueryObject($inputEl)
chapter = @model.get("chapters").first()
expect(chapter.get("asset_path")).not.toEqual("foobar") # describe "ListTextbooks", ->
expect(@model.save).not.toHaveBeenCalled() # noTextbooksTpl = readFixtures("no-textbooks.underscore")
#
it "should be possible to correct validation errors", -> # beforeEach ->
@view.render() # setFixtures($("<script>", {id: "no-textbooks-tpl", type: "text/template"}).text(noTextbooksTpl))
@view.$("input[name=textbook-name]").val("") # @showSpies = spyOnConstructor("ShowTextbook", ["render"])
@view.$("input[name=chapter1-asset-path]").val("foobar.pdf") # @showSpies.render.and.returnValue(@showSpies) # equivalent of `return this`
@view.$("form").submit() # showEl = $("<li>")
expect(@model.validationError).toBeTruthy() # @showSpies.$el = showEl
expect(@model.save).not.toHaveBeenCalled() # @showSpies.el = showEl.get(0)
@view.$("input[name=textbook-name]").val("starfish") # @editSpies = spyOnConstructor("EditTextbook", ["render"])
@view.$("input[name=chapter1-name]").val("foobar") # editEl = $("<li>")
@view.$("form").submit() # @editSpies.render.and.returnValue(@editSpies)
expect(@model.validationError).toBeFalsy() # @editSpies.$el = editEl
expect(@model.save).toHaveBeenCalled() # @editSpies.el= editEl.get(0)
#
it "removes all empty chapters on cancel if the model has a non-empty chapter", -> # @collection = new TextbookSet
chapters = @model.get("chapters") # @view = new ListTextbooks({collection: @collection})
chapters.at(0).set("name", "non-empty") # @view.render()
@model.setOriginalAttributes() #
# it "should render the empty template if there are no textbooks", ->
# expect(@view.$el).toContainText("You haven't added any textbooks to this course yet")
# expect(@view.$el).toContain(".new-button")
# expect(@showSpies.constructor).not.toHaveBeenCalled()
# expect(@editSpies.constructor).not.toHaveBeenCalled()
#
# it "should render ShowTextbook views by default if no textbook is being edited", ->
# # add three empty textbooks to the collection
# @collection.add([{}, {}, {}])
# # reset spies due to re-rendering on collection modification
# @showSpies.constructor.reset()
# @editSpies.constructor.reset()
# # render once and test
# @view.render()
#
# expect(@view.$el).not.toContainText(
# "You haven't added any textbooks to this course yet")
# expect(@showSpies.constructor).toHaveBeenCalled()
# expect(@showSpies.constructor.calls.length).toEqual(3);
# expect(@editSpies.constructor).not.toHaveBeenCalled()
#
# it "should render an EditTextbook view for a textbook being edited", ->
# # add three empty textbooks to the collection: the first and third
# # should be shown, and the second should be edited
# @collection.add([{editing: false}, {editing: true}, {editing: false}])
# editing = @collection.at(1)
# expect(editing.get("editing")).toBeTruthy()
# # reset spies
# @showSpies.constructor.reset()
# @editSpies.constructor.reset()
# # render once and test
# @view.render()
#
# expect(@showSpies.constructor).toHaveBeenCalled()
# expect(@showSpies.constructor.calls.length).toEqual(2)
# expect(@showSpies.constructor).not.toHaveBeenCalledWith({model: editing})
# expect(@editSpies.constructor).toHaveBeenCalled()
# expect(@editSpies.constructor.calls.length).toEqual(1)
# expect(@editSpies.constructor).toHaveBeenCalledWith({model: editing})
#
# it "should add a new textbook when the new-button is clicked", ->
# # reset spies
# @showSpies.constructor.reset()
# @editSpies.constructor.reset()
# # test
# @view.$(".new-button").click()
#
# expect(@collection.length).toEqual(1)
# expect(@view.$el).toContain(@editSpies.$el)
# expect(@view.$el).not.toContain(@showSpies.$el)
describe "EditChapter", ->
beforeEach ->
modal_helpers.installModalTemplates()
@model = new Chapter
name: "Chapter 1"
asset_path: "/ch1.pdf"
@collection = new ChapterSet()
@collection.add(@model)
@view = new EditChapter({model: @model})
spyOn(@view, "remove").and.callThrough()
CMS.URL.UPLOAD_ASSET = "/upload"
window.course = new Course({name: "abcde"})
afterEach ->
delete CMS.URL.UPLOAD_ASSET
delete window.course
it "can render", ->
@view.render() @view.render()
chapters.add([{}, {}, {}]) # add three empty chapters expect(@view.$("input.chapter-name").val()).toEqual("Chapter 1")
expect(chapters.length).toEqual(4) expect(@view.$("input.chapter-asset-path").val()).toEqual("/ch1.pdf")
@view.$(".action-cancel").click()
expect(chapters.length).toEqual(1) it "can delete itself", ->
expect(chapters.first().get('name')).toEqual("non-empty") @view.render().$(".action-close").click()
expect(@collection.length).toEqual(0)
it "removes all empty chapters on cancel except one if the model has no non-empty chapters", -> expect(@view.remove).toHaveBeenCalled()
chapters = @model.get("chapters")
# it "can open an upload dialog", ->
# uploadSpies = spyOnConstructor("UploadDialog", ["show", "el"])
# uploadSpies.show.and.returnValue(uploadSpies)
#
# @view.render().$(".action-upload").click()
# ctorOptions = uploadSpies.constructor.calls.mostRecent().args[0]
# expect(ctorOptions.model.get('title')).toMatch(/abcde/)
# expect(typeof ctorOptions.onSuccess).toBe('function')
# expect(uploadSpies.show).toHaveBeenCalled()
# Disabling because this test does not close the modal dialog. This can cause
# tests that run after it to fail (see STUD-1963).
xit "saves content when opening upload dialog", ->
@view.render() @view.render()
chapters.add([{}, {}, {}]) # add three empty chapters @view.$("input.chapter-name").val("rainbows")
expect(chapters.length).toEqual(4) @view.$("input.chapter-asset-path").val("unicorns")
@view.$(".action-cancel").click() @view.$(".action-upload").click()
expect(chapters.length).toEqual(1) expect(@model.get("name")).toEqual("rainbows")
expect(@model.get("asset_path")).toEqual("unicorns")
describe "ListTextbooks", ->
noTextbooksTpl = readFixtures("no-textbooks.underscore")
editTextbooktpl = readFixtures('edit-textbook.underscore')
beforeEach ->
appendSetFixtures($("<script>", {id: "no-textbooks-tpl", type: "text/template"}).text(noTextbooksTpl))
appendSetFixtures($("<script>", {id: "edit-textbook-tpl", type: "text/template"}).text(editTextbooktpl))
@collection = new TextbookSet
@view = new ListTextbooks({collection: @collection})
@view.render()
it "should scroll to newly added textbook", ->
spyOn(ViewUtils, 'setScrollOffset')
@view.$(".new-button").click()
$sectionEl = @view.$el.find('section:last')
expect($sectionEl.length).toEqual(1)
expect(ViewUtils.setScrollOffset).toHaveBeenCalledWith($sectionEl, 0)
it "should focus first input element of newly added textbook", ->
spyOn(jQuery.fn, 'focus').and.callThrough()
jasmine.addMatchers
toHaveBeenCalledOnJQueryObject: () ->
return {
compare: (actual, expected) ->
return {
pass: actual.calls && actual.calls.mostRecent() &&
actual.calls.mostRecent().object[0] == expected[0]
}
}
@view.$(".new-button").click()
$inputEl = @view.$el.find('section:last input:first')
expect($inputEl.length).toEqual(1)
# testing for element focused seems to be tricky
# (see http://stackoverflow.com/questions/967096)
# and the following doesn't seem to work
# expect($inputEl).toBeFocused()
# expect($inputEl.find(':focus').length).toEqual(1)
expect(jQuery.fn.focus).toHaveBeenCalledOnJQueryObject($inputEl)
# describe "ListTextbooks", ->
# noTextbooksTpl = readFixtures("no-textbooks.underscore")
#
# beforeEach ->
# setFixtures($("<script>", {id: "no-textbooks-tpl", type: "text/template"}).text(noTextbooksTpl))
# @showSpies = spyOnConstructor("ShowTextbook", ["render"])
# @showSpies.render.and.returnValue(@showSpies) # equivalent of `return this`
# showEl = $("<li>")
# @showSpies.$el = showEl
# @showSpies.el = showEl.get(0)
# @editSpies = spyOnConstructor("EditTextbook", ["render"])
# editEl = $("<li>")
# @editSpies.render.and.returnValue(@editSpies)
# @editSpies.$el = editEl
# @editSpies.el= editEl.get(0)
#
# @collection = new TextbookSet
# @view = new ListTextbooks({collection: @collection})
# @view.render()
#
# it "should render the empty template if there are no textbooks", ->
# expect(@view.$el).toContainText("You haven't added any textbooks to this course yet")
# expect(@view.$el).toContain(".new-button")
# expect(@showSpies.constructor).not.toHaveBeenCalled()
# expect(@editSpies.constructor).not.toHaveBeenCalled()
#
# it "should render ShowTextbook views by default if no textbook is being edited", ->
# # add three empty textbooks to the collection
# @collection.add([{}, {}, {}])
# # reset spies due to re-rendering on collection modification
# @showSpies.constructor.reset()
# @editSpies.constructor.reset()
# # render once and test
# @view.render()
#
# expect(@view.$el).not.toContainText(
# "You haven't added any textbooks to this course yet")
# expect(@showSpies.constructor).toHaveBeenCalled()
# expect(@showSpies.constructor.calls.length).toEqual(3);
# expect(@editSpies.constructor).not.toHaveBeenCalled()
#
# it "should render an EditTextbook view for a textbook being edited", ->
# # add three empty textbooks to the collection: the first and third
# # should be shown, and the second should be edited
# @collection.add([{editing: false}, {editing: true}, {editing: false}])
# editing = @collection.at(1)
# expect(editing.get("editing")).toBeTruthy()
# # reset spies
# @showSpies.constructor.reset()
# @editSpies.constructor.reset()
# # render once and test
# @view.render()
#
# expect(@showSpies.constructor).toHaveBeenCalled()
# expect(@showSpies.constructor.calls.length).toEqual(2)
# expect(@showSpies.constructor).not.toHaveBeenCalledWith({model: editing})
# expect(@editSpies.constructor).toHaveBeenCalled()
# expect(@editSpies.constructor.calls.length).toEqual(1)
# expect(@editSpies.constructor).toHaveBeenCalledWith({model: editing})
#
# it "should add a new textbook when the new-button is clicked", ->
# # reset spies
# @showSpies.constructor.reset()
# @editSpies.constructor.reset()
# # test
# @view.$(".new-button").click()
#
# expect(@collection.length).toEqual(1)
# expect(@view.$el).toContain(@editSpies.$el)
# expect(@view.$el).not.toContain(@showSpies.$el)
describe "EditChapter", ->
beforeEach ->
modal_helpers.installModalTemplates()
@model = new Chapter
name: "Chapter 1"
asset_path: "/ch1.pdf"
@collection = new ChapterSet()
@collection.add(@model)
@view = new EditChapter({model: @model})
spyOn(@view, "remove").and.callThrough()
CMS.URL.UPLOAD_ASSET = "/upload"
window.course = new Course({name: "abcde"})
afterEach ->
delete CMS.URL.UPLOAD_ASSET
delete window.course
it "can render", ->
@view.render()
expect(@view.$("input.chapter-name").val()).toEqual("Chapter 1")
expect(@view.$("input.chapter-asset-path").val()).toEqual("/ch1.pdf")
it "can delete itself", ->
@view.render().$(".action-close").click()
expect(@collection.length).toEqual(0)
expect(@view.remove).toHaveBeenCalled()
# it "can open an upload dialog", ->
# uploadSpies = spyOnConstructor("UploadDialog", ["show", "el"])
# uploadSpies.show.and.returnValue(uploadSpies)
#
# @view.render().$(".action-upload").click()
# ctorOptions = uploadSpies.constructor.calls.mostRecent().args[0]
# expect(ctorOptions.model.get('title')).toMatch(/abcde/)
# expect(typeof ctorOptions.onSuccess).toBe('function')
# expect(uploadSpies.show).toHaveBeenCalled()
# Disabling because this test does not close the modal dialog. This can cause
# tests that run after it to fail (see STUD-1963).
xit "saves content when opening upload dialog", ->
@view.render()
@view.$("input.chapter-name").val("rainbows")
@view.$("input.chapter-asset-path").val("unicorns")
@view.$(".action-upload").click()
expect(@model.get("name")).toEqual("rainbows")
expect(@model.get("asset_path")).toEqual("unicorns")
define ["js/models/uploads", "js/views/uploads", "js/models/chapter", "common/js/spec_helpers/ajax_helpers", "js/spec_helpers/modal_helpers"], (FileUpload, UploadDialog, Chapter, AjaxHelpers, modal_helpers) -> define ["js/models/uploads", "js/views/uploads", "js/models/chapter",
"edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "js/spec_helpers/modal_helpers"],
describe "UploadDialog", -> (FileUpload, UploadDialog, Chapter, AjaxHelpers, modal_helpers) ->
tpl = readFixtures("upload-dialog.underscore")
describe "UploadDialog", ->
beforeEach -> tpl = readFixtures("upload-dialog.underscore")
modal_helpers.installModalTemplates()
appendSetFixtures($("<script>", {id: "upload-dialog-tpl", type: "text/template"}).text(tpl))
CMS.URL.UPLOAD_ASSET = "/upload"
@model = new FileUpload(
mimeTypes: ['application/pdf']
)
@dialogResponse = dialogResponse = []
@mockFiles = []
afterEach ->
delete CMS.URL.UPLOAD_ASSET
modal_helpers.cancelModalIfShowing()
createTestView = (test) ->
view = new UploadDialog(
model: test.model,
url: CMS.URL.UPLOAD_ASSET,
onSuccess: (response) =>
test.dialogResponse.push(response.response)
)
spyOn(view, 'remove').and.callThrough()
# create mock file input, so that we aren't subject to browser restrictions
mockFileInput = jasmine.createSpy('mockFileInput')
mockFileInput.files = test.mockFiles
jqMockFileInput = jasmine.createSpyObj('jqMockFileInput', ['get', 'replaceWith'])
jqMockFileInput.get.and.returnValue(mockFileInput)
originalView$ = view.$
spyOn(view, "$").and.callFake (selector) ->
if selector == "input[type=file]"
jqMockFileInput
else
originalView$.apply(this, arguments)
@lastView = view
describe "Basic", ->
it "should render without a file selected", ->
view = createTestView(this)
view.render()
expect(view.$el).toContainElement("input[type=file]")
expect(view.$(".action-upload")).toHaveClass("disabled")
it "should render with a PDF selected", ->
view = createTestView(this)
file = {name: "fake.pdf", "type": "application/pdf"}
@mockFiles.push(file)
@model.set("selectedFile", file)
view.render()
expect(view.$el).toContainElement("input[type=file]")
expect(view.$el).not.toContainElement("#upload_error")
expect(view.$(".action-upload")).not.toHaveClass("disabled")
it "should render an error with an invalid file type selected", ->
view = createTestView(this)
file = {name: "fake.png", "type": "image/png"}
@mockFiles.push(file)
@model.set("selectedFile", file)
view.render()
expect(view.$el).toContainElement("input[type=file]")
expect(view.$el).toContainElement("#upload_error")
expect(view.$(".action-upload")).toHaveClass("disabled")
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"}
inCorrectFile = {name: "fake.png", "type": "image/png"}
event = {}
view.render()
event.target = {"files": [correctFile]}
view.selectFile(event)
expect(view.$el).toContainElement("input[type=file]")
expect(view.$el).not.toContainElement("#upload_error")
expect(view.$(".action-upload")).not.toHaveClass("disabled")
realMethod = @model.set
spyOn(@model, "set").and.callFake (data) ->
if data.selectedFile != undefined
this.attributes.selectedFile = data.selectedFile
this.changed = {}
else
realMethod.apply(this, arguments)
event.target = {"files": [inCorrectFile]}
view.selectFile(event)
expect(view.$el).toContainElement("input[type=file]")
expect(view.$el).toContainElement("#upload_error")
expect(view.$(".action-upload")).toHaveClass("disabled")
describe "Uploads", ->
beforeEach -> beforeEach ->
@clock = sinon.useFakeTimers() modal_helpers.installModalTemplates()
appendSetFixtures($("<script>", {id: "upload-dialog-tpl", type: "text/template"}).text(tpl))
CMS.URL.UPLOAD_ASSET = "/upload"
@model = new FileUpload(
mimeTypes: ['application/pdf']
)
@dialogResponse = dialogResponse = []
@mockFiles = []
afterEach -> afterEach ->
delete CMS.URL.UPLOAD_ASSET
modal_helpers.cancelModalIfShowing() modal_helpers.cancelModalIfShowing()
@clock.restore()
createTestView = (test) ->
it "can upload correctly", -> view = new UploadDialog(
requests = AjaxHelpers.requests(this); model: test.model,
view = createTestView(this) url: CMS.URL.UPLOAD_ASSET,
view.render() onSuccess: (response) =>
view.upload() test.dialogResponse.push(response.response)
expect(@model.get("uploading")).toBeTruthy() )
AjaxHelpers.expectRequest(requests, "POST", "/upload") spyOn(view, 'remove').and.callThrough()
AjaxHelpers.respondWithJson(requests, { response: "dummy_response"})
expect(@model.get("uploading")).toBeFalsy() # create mock file input, so that we aren't subject to browser restrictions
expect(@model.get("finished")).toBeTruthy() mockFileInput = jasmine.createSpy('mockFileInput')
expect(@dialogResponse.pop()).toEqual("dummy_response") mockFileInput.files = test.mockFiles
jqMockFileInput = jasmine.createSpyObj('jqMockFileInput', ['get', 'replaceWith'])
it "can handle upload errors", -> jqMockFileInput.get.and.returnValue(mockFileInput)
requests = AjaxHelpers.requests(this); originalView$ = view.$
view = createTestView(this) spyOn(view, "$").and.callFake (selector) ->
view.render() if selector == "input[type=file]"
view.upload() jqMockFileInput
AjaxHelpers.respondWithError(requests) else
expect(@model.get("title")).toMatch(/error/) originalView$.apply(this, arguments)
expect(view.remove).not.toHaveBeenCalled() @lastView = view
it "removes itself after two seconds on successful upload", -> describe "Basic", ->
requests = AjaxHelpers.requests(this); it "should render without a file selected", ->
view = createTestView(this) view = createTestView(this)
view.render() view.render()
view.upload() expect(view.$el).toContainElement("input[type=file]")
AjaxHelpers.respondWithJson(requests, { response: "dummy_response"}) expect(view.$(".action-upload")).toHaveClass("disabled")
expect(modal_helpers.isShowingModal(view)).toBeTruthy();
@clock.tick(2001) it "should render with a PDF selected", ->
expect(modal_helpers.isShowingModal(view)).toBeFalsy(); view = createTestView(this)
file = {name: "fake.pdf", "type": "application/pdf"}
@mockFiles.push(file)
@model.set("selectedFile", file)
view.render()
expect(view.$el).toContainElement("input[type=file]")
expect(view.$el).not.toContainElement("#upload_error")
expect(view.$(".action-upload")).not.toHaveClass("disabled")
it "should render an error with an invalid file type selected", ->
view = createTestView(this)
file = {name: "fake.png", "type": "image/png"}
@mockFiles.push(file)
@model.set("selectedFile", file)
view.render()
expect(view.$el).toContainElement("input[type=file]")
expect(view.$el).toContainElement("#upload_error")
expect(view.$(".action-upload")).toHaveClass("disabled")
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"}
inCorrectFile = {name: "fake.png", "type": "image/png"}
event = {}
view.render()
event.target = {"files": [correctFile]}
view.selectFile(event)
expect(view.$el).toContainElement("input[type=file]")
expect(view.$el).not.toContainElement("#upload_error")
expect(view.$(".action-upload")).not.toHaveClass("disabled")
realMethod = @model.set
spyOn(@model, "set").and.callFake (data) ->
if data.selectedFile != undefined
this.attributes.selectedFile = data.selectedFile
this.changed = {}
else
realMethod.apply(this, arguments)
event.target = {"files": [inCorrectFile]}
view.selectFile(event)
expect(view.$el).toContainElement("input[type=file]")
expect(view.$el).toContainElement("#upload_error")
expect(view.$(".action-upload")).toHaveClass("disabled")
describe "Uploads", ->
beforeEach ->
@clock = sinon.useFakeTimers()
afterEach ->
modal_helpers.cancelModalIfShowing()
@clock.restore()
it "can upload correctly", ->
requests = AjaxHelpers.requests(this);
view = createTestView(this)
view.render()
view.upload()
expect(@model.get("uploading")).toBeTruthy()
AjaxHelpers.expectRequest(requests, "POST", "/upload")
AjaxHelpers.respondWithJson(requests, { response: "dummy_response"})
expect(@model.get("uploading")).toBeFalsy()
expect(@model.get("finished")).toBeTruthy()
expect(@dialogResponse.pop()).toEqual("dummy_response")
it "can handle upload errors", ->
requests = AjaxHelpers.requests(this);
view = createTestView(this)
view.render()
view.upload()
AjaxHelpers.respondWithError(requests)
expect(@model.get("title")).toMatch(/error/)
expect(view.remove).not.toHaveBeenCalled()
it "removes itself after two seconds on successful upload", ->
requests = AjaxHelpers.requests(this);
view = createTestView(this)
view.render()
view.upload()
AjaxHelpers.respondWithJson(requests, { response: "dummy_response"})
expect(modal_helpers.isShowingModal(view)).toBeTruthy();
@clock.tick(2001)
expect(modal_helpers.isShowingModal(view)).toBeFalsy();
...@@ -8,7 +8,7 @@ define([ // jshint ignore:line ...@@ -8,7 +8,7 @@ define([ // jshint ignore:line
'js/certificates/views/certificate_details', 'js/certificates/views/certificate_details',
'js/certificates/views/certificate_preview', 'js/certificates/views/certificate_preview',
'common/js/components/views/feedback_notification', 'common/js/components/views/feedback_notification',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/view_helpers', 'common/js/spec_helpers/view_helpers',
'js/spec_helpers/validation_helpers', 'js/spec_helpers/validation_helpers',
......
...@@ -8,7 +8,7 @@ define([ // jshint ignore:line ...@@ -8,7 +8,7 @@ define([ // jshint ignore:line
'js/certificates/collections/certificates', 'js/certificates/collections/certificates',
'js/certificates/views/certificate_editor', 'js/certificates/views/certificate_editor',
'common/js/components/views/feedback_notification', 'common/js/components/views/feedback_notification',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/view_helpers', 'common/js/spec_helpers/view_helpers',
'js/spec_helpers/validation_helpers', 'js/spec_helpers/validation_helpers',
......
...@@ -7,7 +7,7 @@ define([ // jshint ignore:line ...@@ -7,7 +7,7 @@ define([ // jshint ignore:line
'js/certificates/views/certificate_preview', 'js/certificates/views/certificate_preview',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/view_helpers', 'common/js/spec_helpers/view_helpers',
'common/js/spec_helpers/ajax_helpers' 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'
], ],
function(_, $, Course, CertificatePreview, TemplateHelpers, ViewHelpers, AjaxHelpers) { function(_, $, Course, CertificatePreview, TemplateHelpers, ViewHelpers, AjaxHelpers) {
'use strict'; 'use strict';
......
...@@ -11,7 +11,7 @@ define([ // jshint ignore:line ...@@ -11,7 +11,7 @@ define([ // jshint ignore:line
'js/certificates/views/certificates_list', 'js/certificates/views/certificates_list',
'js/certificates/views/certificate_preview', 'js/certificates/views/certificate_preview',
'common/js/components/views/feedback_notification', 'common/js/components/views/feedback_notification',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'js/certificates/spec/custom_matchers' 'js/certificates/spec/custom_matchers'
], ],
......
define(["js/utils/drag_and_drop", "common/js/components/views/feedback_notification", "common/js/spec_helpers/ajax_helpers", "jquery", "underscore"], define(["js/utils/drag_and_drop", "common/js/components/views/feedback_notification",
"edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "jquery", "underscore"],
function (ContentDragger, Notification, AjaxHelpers, $, _) { function (ContentDragger, Notification, AjaxHelpers, $, _) {
describe("Overview drag and drop functionality", function () { describe("Overview drag and drop functionality", function () {
beforeEach(function () { beforeEach(function () {
......
define( define(
[ [
'jquery', 'underscore', 'jquery', 'underscore',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/views/video/transcripts/utils', 'js/views/video/transcripts/utils',
'js/views/video/transcripts/metadata_videolist', 'js/models/metadata', 'js/views/video/transcripts/metadata_videolist', 'js/models/metadata',
'js/views/abstract_editor', 'js/views/abstract_editor',
'common/js/spec_helpers/ajax_helpers',
'xmodule' 'xmodule'
], ],
function ($, _, Utils, VideoList, MetadataModel, AbstractEditor, AjaxHelpers) { function ($, _, AjaxHelpers, Utils, VideoList, MetadataModel, AbstractEditor) {
'use strict'; 'use strict';
describe('CMS.Views.Metadata.VideoList', function () { describe('CMS.Views.Metadata.VideoList', function () {
var videoListEntryTemplate = readFixtures( var videoListEntryTemplate = readFixtures(
......
define([ "jquery", "common/js/spec_helpers/ajax_helpers", "URI", "js/views/assets", define([ "jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "URI", "js/views/assets",
"js/collections/asset", "common/js/spec_helpers/view_helpers"], "js/collections/asset", "common/js/spec_helpers/view_helpers"],
function ($, AjaxHelpers, URI, AssetsView, AssetCollection, ViewHelpers) { function ($, AjaxHelpers, URI, AssetsView, AssetCollection, ViewHelpers) {
......
define([ "jquery", "common/js/spec_helpers/ajax_helpers", "js/spec_helpers/edit_helpers", define([ "jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "js/spec_helpers/edit_helpers",
"js/views/container", "js/models/xblock_info", "jquery.simulate", "js/views/container", "js/models/xblock_info", "jquery.simulate",
"xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"],
function ($, AjaxHelpers, EditHelpers, ContainerView, XBlockInfo) { function ($, AjaxHelpers, EditHelpers, ContainerView, XBlockInfo) {
......
define([ define([
'underscore', 'js/models/course', 'js/models/group_configuration', 'js/models/group', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/js/spec_helpers/template_helpers',
'js/collections/group_configuration', 'js/collections/group', 'common/js/spec_helpers/view_helpers', 'js/models/course', 'js/models/group_configuration', 'js/models/group',
'js/views/group_configuration_details', 'js/views/group_configurations_list', 'js/views/group_configuration_editor', 'js/collections/group_configuration', 'js/collections/group', 'js/views/group_configuration_details',
'js/views/group_configuration_item', 'js/views/experiment_group_edit', 'js/views/content_group_list', 'js/views/group_configurations_list', 'js/views/group_configuration_editor', 'js/views/group_configuration_item',
'js/views/content_group_details', 'js/views/content_group_editor', 'js/views/content_group_item', 'js/views/experiment_group_edit', 'js/views/content_group_list', 'js/views/content_group_details',
'common/js/components/views/feedback_notification', 'common/js/spec_helpers/ajax_helpers', 'common/js/spec_helpers/template_helpers', 'js/views/content_group_editor', 'js/views/content_group_item'
'common/js/spec_helpers/view_helpers'
], function( ], function(
_, Course, GroupConfigurationModel, GroupModel, GroupConfigurationCollection, GroupCollection, _, AjaxHelpers, TemplateHelpers, ViewHelpers, Course, GroupConfigurationModel, GroupModel,
GroupConfigurationDetailsView, GroupConfigurationsListView, GroupConfigurationEditorView, GroupConfigurationCollection, GroupCollection, GroupConfigurationDetailsView, GroupConfigurationsListView,
GroupConfigurationItemView, ExperimentGroupEditView, GroupList, ContentGroupDetailsView, GroupConfigurationEditorView, GroupConfigurationItemView, ExperimentGroupEditView, GroupList,
ContentGroupEditorView, ContentGroupItemView, Notification, AjaxHelpers, TemplateHelpers, ViewHelpers ContentGroupDetailsView, ContentGroupEditorView, ContentGroupItemView
) { ) {
'use strict'; 'use strict';
var SELECTORS = { var SELECTORS = {
...@@ -286,7 +285,7 @@ define([ ...@@ -286,7 +285,7 @@ define([
it('should hide empty usage appropriately', function() { it('should hide empty usage appropriately', function() {
this.model.set('showGroups', true); this.model.set('showGroups', true);
this.view.$('.hide-groups').click(); this.view.$('.hide-groups').click();
assertHideEmptyUsages(this.view) assertHideEmptyUsages(this.view);
}); });
it('should show non-empty usage appropriately', function() { it('should show non-empty usage appropriately', function() {
...@@ -298,7 +297,7 @@ define([ ...@@ -298,7 +297,7 @@ define([
this.view, this.view,
'This Group Configuration is used in:', 'This Group Configuration is used in:',
'Cannot delete when in use by an experiment' 'Cannot delete when in use by an experiment'
) );
}); });
it('should hide non-empty usage appropriately', function() { it('should hide non-empty usage appropriately', function() {
...@@ -922,7 +921,7 @@ define([ ...@@ -922,7 +921,7 @@ define([
this.view, this.view,
'This content group is used in:', 'This content group is used in:',
'Cannot delete when in use by a unit' 'Cannot delete when in use by a unit'
) );
}); });
it('should hide non-empty usage appropriately', function() { it('should hide non-empty usage appropriately', function() {
...@@ -988,7 +987,7 @@ define([ ...@@ -988,7 +987,7 @@ define([
notificationSpy = ViewHelpers.createNotificationSpy(); notificationSpy = ViewHelpers.createNotificationSpy();
this.view.$(SELECTORS.inputName).val('New Content Group'); this.view.$(SELECTORS.inputName).val('New Content Group');
ViewHelpers.submitAndVerifyFormError(this.view, requests, notificationSpy) ViewHelpers.submitAndVerifyFormError(this.view, requests, notificationSpy);
}); });
it('does not save on cancel', function() { it('does not save on cancel', function() {
......
define(['jquery', 'js/factories/login', 'common/js/spec_helpers/ajax_helpers', 'common/js/components/utils/view_utils'], define(['jquery', 'js/factories/login', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/components/utils/view_utils'],
function($, LoginFactory, AjaxHelpers, ViewUtils) { function($, LoginFactory, AjaxHelpers, ViewUtils) {
'use strict'; 'use strict';
describe("Studio Login Page", function() { describe("Studio Login Page", function() {
......
define(["jquery", "underscore", "common/js/spec_helpers/ajax_helpers", "js/spec_helpers/edit_helpers", define(["jquery", "underscore", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "js/spec_helpers/edit_helpers",
"js/views/modals/edit_xblock", "js/models/xblock_info"], "js/views/modals/edit_xblock", "js/models/xblock_info"],
function ($, _, AjaxHelpers, EditHelpers, EditXBlockModal, XBlockInfo) { function ($, _, AjaxHelpers, EditHelpers, EditXBlockModal, XBlockInfo) {
......
define(["jquery", "underscore", "common/js/spec_helpers/ajax_helpers", "URI", "js/models/xblock_info", define(["jquery", "underscore", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "URI", "js/models/xblock_info",
"js/views/paged_container", "js/views/paging_header", "js/views/paged_container", "js/views/paging_header",
"common/js/components/views/paging_footer", "js/views/xblock"], "common/js/components/views/paging_footer", "js/views/xblock"],
function ($, _, AjaxHelpers, URI, XBlockInfo, PagedContainer, PagingHeader, PagingFooter, XBlockView) { function ($, _, AjaxHelpers, URI, XBlockInfo, PagedContainer, PagingHeader, PagingFooter, XBlockView) {
......
define(["jquery", "underscore", "underscore.string", "common/js/spec_helpers/ajax_helpers", define(["jquery", "underscore", "underscore.string", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers",
"common/js/spec_helpers/template_helpers", "js/spec_helpers/edit_helpers", "common/js/spec_helpers/template_helpers", "js/spec_helpers/edit_helpers",
"js/views/pages/container", "js/views/pages/paged_container", "js/models/xblock_info", "jquery.simulate"], "js/views/pages/container", "js/views/pages/paged_container", "js/models/xblock_info", "jquery.simulate"],
function ($, _, str, AjaxHelpers, TemplateHelpers, EditHelpers, ContainerPage, PagedContainerPage, XBlockInfo) { function ($, _, str, AjaxHelpers, TemplateHelpers, EditHelpers, ContainerPage, PagedContainerPage, XBlockInfo) {
......
define(["jquery", "underscore", "underscore.string", "common/js/spec_helpers/ajax_helpers", define(["jquery", "underscore", "underscore.string", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers",
"common/js/spec_helpers/template_helpers", "js/spec_helpers/edit_helpers", "common/js/spec_helpers/template_helpers", "js/spec_helpers/edit_helpers",
"common/js/components/views/feedback_prompt", "js/views/pages/container", "common/js/components/views/feedback_prompt", "js/views/pages/container",
"js/views/pages/container_subviews", "js/models/xblock_info", "js/views/utils/xblock_utils", "js/views/pages/container_subviews", "js/models/xblock_info", "js/views/utils/xblock_utils",
......
define(["jquery", "common/js/spec_helpers/ajax_helpers", "common/js/components/utils/view_utils", "js/views/pages/course_outline", define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/components/utils/view_utils",
"js/models/xblock_outline_info", "js/utils/date_utils", "js/spec_helpers/edit_helpers", "js/views/pages/course_outline", "js/models/xblock_outline_info", "js/utils/date_utils",
"common/js/spec_helpers/template_helpers", 'js/models/course',], "js/spec_helpers/edit_helpers", "common/js/spec_helpers/template_helpers", 'js/models/course'],
function($, AjaxHelpers, ViewUtils, CourseOutlinePage, XBlockOutlineInfo, DateUtils, function($, AjaxHelpers, ViewUtils, CourseOutlinePage, XBlockOutlineInfo, DateUtils,
EditHelpers, TemplateHelpers, Course) { EditHelpers, TemplateHelpers, Course) {
......
define(["jquery", "common/js/spec_helpers/ajax_helpers", "common/js/spec_helpers/view_helpers", "js/views/course_rerun", define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/spec_helpers/view_helpers",
"js/views/utils/create_course_utils", "common/js/components/utils/view_utils", "jquery.simulate"], "js/views/course_rerun", "js/views/utils/create_course_utils", "common/js/components/utils/view_utils",
"jquery.simulate"],
function ($, AjaxHelpers, ViewHelpers, CourseRerunUtils, CreateCourseUtilsFactory, ViewUtils) { function ($, AjaxHelpers, ViewHelpers, CourseRerunUtils, CreateCourseUtilsFactory, ViewUtils) {
describe("Create course rerun page", function () { describe("Create course rerun page", function () {
var selectors = { var selectors = {
......
define(["jquery", "common/js/spec_helpers/ajax_helpers", "common/js/spec_helpers/view_helpers", "js/index", define(["jquery",
"edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers",
"common/js/spec_helpers/view_helpers", "js/index",
"common/js/components/utils/view_utils"], "common/js/components/utils/view_utils"],
function ($, AjaxHelpers, ViewHelpers, IndexUtils, ViewUtils) { function ($, AjaxHelpers, ViewHelpers, IndexUtils, ViewUtils) {
describe("Course listing page", function () { describe("Course listing page", function () {
......
define([ define([
"jquery", "common/js/spec_helpers/ajax_helpers", "common/js/spec_helpers/view_helpers", "jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/spec_helpers/view_helpers",
"js/factories/manage_users_lib", "common/js/components/utils/view_utils" "js/factories/manage_users_lib", "common/js/components/utils/view_utils"
], ],
function ($, AjaxHelpers, ViewHelpers, ManageUsersFactory, ViewUtils) { function ($, AjaxHelpers, ViewHelpers, ManageUsersFactory, ViewUtils) {
......
define([ define([
"jquery", "jquery",
"URI", "URI",
"common/js/spec_helpers/ajax_helpers", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers",
"edx-ui-toolkit/js/pagination/paging-collection", "edx-ui-toolkit/js/pagination/paging-collection",
"js/views/paging", "js/views/paging",
"js/views/paging_header" "js/views/paging_header"
], function ($, URI, AjaxHelpers, PagingCollection, PagingView, PagingHeader) { ],
function ($, URI, AjaxHelpers, PagingCollection, PagingView, PagingHeader) {
'use strict';
var createPageableItem = function(index) { var createPageableItem = function(index) {
var id = 'item_' + index; var id = 'item_' + index;
......
define([ define([
'jquery', 'js/models/settings/course_details', 'js/views/settings/main', 'jquery', 'js/models/settings/course_details', 'js/views/settings/main',
'common/js/spec_helpers/ajax_helpers', 'common/js/spec_helpers/template_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'common/js/spec_helpers/template_helpers',
], function($, CourseDetailsModel, MainView, AjaxHelpers, TemplateHelpers) { ], function($, CourseDetailsModel, MainView, AjaxHelpers, TemplateHelpers) {
'use strict'; 'use strict';
...@@ -125,10 +125,9 @@ define([ ...@@ -125,10 +125,9 @@ define([
//input some invalid values. //input some invalid values.
expect(entrance_exam_min_score.val('101').trigger('input')).toHaveClass("error"); expect(entrance_exam_min_score.val('101').trigger('input')).toHaveClass("error");
expect(entrance_exam_min_score.val('invalidVal').trigger('input')).toHaveClass("error"); expect(entrance_exam_min_score.val('invalidVal').trigger('input')).toHaveClass("error");
}); });
it('should provide a default value for the minimum score percentage', function(){ it('should provide a default value for the minimum score percentage', function() {
var entrance_exam_min_score = this.view.$(SELECTORS.entrance_exam_min_score); var entrance_exam_min_score = this.view.$(SELECTORS.entrance_exam_min_score);
...@@ -138,7 +137,7 @@ define([ ...@@ -138,7 +137,7 @@ define([
.toEqual(this.model.defaults.entrance_exam_minimum_score_pct); .toEqual(this.model.defaults.entrance_exam_minimum_score_pct);
}); });
it('show and hide the grade requirement section when the check box is selected and deselected respectively', function(){ it('shows and hide the grade requirement section appropriately', function() {
var entrance_exam_enabled_field = this.view.$(SELECTORS.entrance_exam_enabled_field); var entrance_exam_enabled_field = this.view.$(SELECTORS.entrance_exam_enabled_field);
......
define(["jquery", "common/js/spec_helpers/ajax_helpers", "common/js/spec_helpers/template_helpers", define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/spec_helpers/template_helpers",
"common/js/spec_helpers/view_helpers", "common/js/components/utils/view_utils", "js/models/course", "common/js/spec_helpers/view_helpers", "common/js/components/utils/view_utils", "js/models/course",
"js/views/unit_outline", "js/models/xblock_info"], "js/views/unit_outline", "js/models/xblock_info"],
function ($, AjaxHelpers, TemplateHelpers, ViewHelpers, ViewUtils, function($, AjaxHelpers, TemplateHelpers, ViewHelpers, ViewUtils,
Course, UnitOutlineView, XBlockInfo) { Course, UnitOutlineView, XBlockInfo) {
'use strict';
describe("UnitOutlineView", function() { describe("UnitOutlineView", function() {
var createUnitOutlineView, createMockXBlockInfo, var createUnitOutlineView, createMockXBlockInfo,
......
define([ "jquery", "underscore", "common/js/spec_helpers/ajax_helpers", "js/spec_helpers/edit_helpers", define([ "jquery", "underscore", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "js/spec_helpers/edit_helpers",
"js/views/xblock_editor", "js/models/xblock_info"], "js/views/xblock_editor", "js/models/xblock_info"],
function ($, _, AjaxHelpers, EditHelpers, XBlockEditorView, XBlockInfo) { function ($, _, AjaxHelpers, EditHelpers, XBlockEditorView, XBlockInfo) {
......
define(["jquery", "URI", "common/js/spec_helpers/ajax_helpers", "common/js/components/utils/view_utils", define(["jquery", "URI", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/components/utils/view_utils",
"js/views/xblock", "js/models/xblock_info", "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], "js/views/xblock", "js/models/xblock_info", "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"],
function ($, URI, AjaxHelpers, ViewUtils, XBlockView, XBlockInfo) { function ($, URI, AjaxHelpers, ViewUtils, XBlockView, XBlockInfo) {
"use strict"; "use strict";
......
define(["jquery", "common/js/spec_helpers/ajax_helpers", "common/js/spec_helpers/template_helpers", define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/spec_helpers/template_helpers",
"js/spec_helpers/edit_helpers", "js/models/xblock_info", "js/views/xblock_string_field_editor"], "js/spec_helpers/edit_helpers", "js/models/xblock_info", "js/views/xblock_string_field_editor"],
function ($, AjaxHelpers, TemplateHelpers, EditHelpers, XBlockInfo, XBlockStringFieldEditor) { function ($, AjaxHelpers, TemplateHelpers, EditHelpers, XBlockInfo, XBlockStringFieldEditor) {
describe("XBlockStringFieldEditorView", function () { describe("XBlockStringFieldEditorView", function () {
......
/** /**
* Provides helper methods for invoking Studio editors in Jasmine tests. * Provides helper methods for invoking Studio editors in Jasmine tests.
*/ */
define(["jquery", "underscore", "common/js/spec_helpers/ajax_helpers", "common/js/spec_helpers/template_helpers", define(["jquery", "underscore", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers",
"js/spec_helpers/modal_helpers", "js/views/modals/edit_xblock", "js/collections/component_template", "common/js/spec_helpers/template_helpers", "js/spec_helpers/modal_helpers", "js/views/modals/edit_xblock",
"xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], "js/collections/component_template", "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"],
function($, _, AjaxHelpers, TemplateHelpers, modal_helpers, EditXBlockModal, ComponentTemplates) { function($, _, AjaxHelpers, TemplateHelpers, modal_helpers, EditXBlockModal, ComponentTemplates) {
var installMockXBlock, uninstallMockXBlock, installMockXModule, uninstallMockXModule, var installMockXBlock, uninstallMockXBlock, installMockXModule, uninstallMockXModule,
......
...@@ -3,7 +3,7 @@ define([ ...@@ -3,7 +3,7 @@ define([
'backbone', 'backbone',
'underscore', 'underscore',
'edx-ui-toolkit/js/pagination/paging-collection', 'edx-ui-toolkit/js/pagination/paging-collection',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/components/views/paginated_view' 'common/js/components/views/paginated_view'
], function ($, Backbone, _, PagingCollection, AjaxHelpers, PaginatedView) { ], function ($, Backbone, _, PagingCollection, AjaxHelpers, PaginatedView) {
'use strict'; 'use strict';
......
...@@ -3,7 +3,7 @@ define([ ...@@ -3,7 +3,7 @@ define([
'URI', 'URI',
'underscore', 'underscore',
'edx-ui-toolkit/js/pagination/paging-collection', 'edx-ui-toolkit/js/pagination/paging-collection',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/components/views/paging_footer' 'common/js/components/views/paging_footer'
], function ($, URI, _, PagingCollection, AjaxHelpers, PagingFooter) { ], function ($, URI, _, PagingCollection, AjaxHelpers, PagingFooter) {
'use strict'; 'use strict';
......
define([ define([
'underscore', 'underscore',
'URI', 'URI',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'edx-ui-toolkit/js/pagination/paging-collection', 'edx-ui-toolkit/js/pagination/paging-collection',
'common/js/components/views/search_field', 'common/js/components/views/search_field'
'common/js/spec_helpers/ajax_helpers' ], function(_, URI, AjaxHelpers, PagingCollection, SearchFieldView) {
], function (_, URI, PagingCollection, SearchFieldView, AjaxHelpers) {
'use strict'; 'use strict';
describe('SearchFieldView', function () { describe('SearchFieldView', function() {
var searchFieldView, var searchFieldView,
mockUrl = '/api/mock_collection'; mockUrl = '/api/mock_collection';
var newCollection = function (size, perPage) { var newCollection = function(size, perPage) {
var results = _.map(_.range(size), function (i) { return {foo: i}; }); var results = _.map(_.range(size), function(i) { return {foo: i}; });
var TestPagingCollection = PagingCollection.extend({ var TestPagingCollection = PagingCollection.extend({
state: { state: {
pageSize: 5 pageSize: 5
...@@ -29,7 +29,7 @@ define([ ...@@ -29,7 +29,7 @@ define([
return collection; return collection;
}; };
var createSearchFieldView = function (options) { var createSearchFieldView = function(options) {
options = _.extend( options = _.extend(
{ {
type: 'test', type: 'test',
...@@ -41,14 +41,14 @@ define([ ...@@ -41,14 +41,14 @@ define([
return new SearchFieldView(options); return new SearchFieldView(options);
}; };
var assertQueryParams = function (request, expectedParameters) { var assertQueryParams = function(request, expectedParameters) {
var urlParams = new URI(request.url).query(true); var urlParams = new URI(request.url).query(true);
_.each(expectedParameters, function (value, key) { _.each(expectedParameters, function(value, key) {
expect(urlParams[key]).toBe(value); expect(urlParams[key]).toBe(value);
}); });
}; };
var assertNotInQueryParams = function (request, param) { var assertNotInQueryParams = function(request, param) {
var urlParams = new URI(request.url).query(true); var urlParams = new URI(request.url).query(true);
return !urlParams.hasOwnProperty(param); return !urlParams.hasOwnProperty(param);
}; };
...@@ -57,20 +57,20 @@ define([ ...@@ -57,20 +57,20 @@ define([
setFixtures('<section class="test-search"></section>'); setFixtures('<section class="test-search"></section>');
}); });
it('correctly displays itself', function () { it('correctly displays itself', function() {
searchFieldView = createSearchFieldView().render(); searchFieldView = createSearchFieldView().render();
expect(searchFieldView.$('.search-field').val(), ''); expect(searchFieldView.$('.search-field').val(), '');
expect(searchFieldView.$('.action-clear')).toHaveClass('is-hidden'); expect(searchFieldView.$('.action-clear')).toHaveClass('is-hidden');
}); });
it('can display with an initial search string', function () { it('can display with an initial search string', function() {
searchFieldView = createSearchFieldView({ searchFieldView = createSearchFieldView({
searchString: 'foo' searchString: 'foo'
}).render(); }).render();
expect(searchFieldView.$('.search-field').val(), 'foo'); expect(searchFieldView.$('.search-field').val(), 'foo');
}); });
it('refreshes the collection when performing a search', function () { it('refreshes the collection when performing a search', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
searchFieldView = createSearchFieldView().render(); searchFieldView = createSearchFieldView().render();
searchFieldView.$('.search-field').val('foo'); searchFieldView.$('.search-field').val('foo');
...@@ -80,7 +80,7 @@ define([ ...@@ -80,7 +80,7 @@ define([
page_size: '5', page_size: '5',
text_search: 'foo' text_search: 'foo'
}); });
AjaxHelpers.respondWithJson(requests, { AjaxHelpers.respondWithJson(requests, {
count: 10, count: 10,
page: 1, page: 1,
...@@ -90,7 +90,7 @@ define([ ...@@ -90,7 +90,7 @@ define([
expect(searchFieldView.$('.search-field').val(), 'foo'); expect(searchFieldView.$('.search-field').val(), 'foo');
}); });
it('can clear the search', function () { it('can clear the search', function() {
var requests = AjaxHelpers.requests(this); var requests = AjaxHelpers.requests(this);
searchFieldView = createSearchFieldView({ searchFieldView = createSearchFieldView({
searchString: 'foo' searchString: 'foo'
......
define(['sinon', 'underscore', 'URI'], function(sinon, _, URI) {
'use strict';
var XML_HTTP_READY_STATES, fakeServer, fakeRequests, currentRequest, expectRequest, expectNoRequests,
expectJsonRequest, expectPostRequest, expectRequestURL, skipResetRequest,
respondWithJson, respondWithError, respondWithTextError, respondWithNoContent;
XML_HTTP_READY_STATES = {
UNSENT: 0,
OPENED: 1,
LOADING: 3,
DONE: 4
};
/* These utility methods are used by Jasmine tests to create a mock server or
* get reference to mock requests. In either case, the cleanup (restore) is done with
* an after function.
*
* This pattern is being used instead of the more common beforeEach/afterEach pattern
* because we were seeing sporadic failures in the afterEach restore call. The cause of the
* errors were that one test suite was incorrectly being linked as the parent of an unrelated
* test suite (causing both suites' afterEach methods to be called). No solution for the root
* cause has been found, but initializing sinon and cleaning it up on a method-by-method
* basis seems to work. For more details, see STUD-1264.
*/
/**
* Get a reference to the mocked server, and respond
* to all requests with the specified statusCode.
*/
fakeServer = function (response) {
var server = sinon.fakeServer.create();
afterEach(function() {
if (server) {
server.restore();
}
});
server.respondWith(response);
return server;
};
/**
* Keep track of all requests to a fake server, and
* return a reference to the Array. This allows tests
* to respond for individual requests.
*/
fakeRequests = function () {
var requests = [],
xhr = sinon.useFakeXMLHttpRequest();
requests.currentIndex = 0;
xhr.onCreate = function(request) {
requests.push(request);
};
afterEach(function() {
if (xhr && xhr.hasOwnProperty('restore')) {
xhr.restore();
}
});
return requests;
};
/**
* Returns the request that has not yet been responded to. If no such request
* is available then the current test will fail.
* @param requests The Sinon requests list.
* @returns {*} The current request.
*/
currentRequest = function(requests) {
expect(requests.length).toBeGreaterThan(requests.currentIndex);
return requests[requests.currentIndex];
};
expectRequest = function(requests, method, url, body) {
var request = currentRequest(requests);
expect(request.readyState).toEqual(XML_HTTP_READY_STATES.OPENED);
expect(request.url).toEqual(url);
expect(request.method).toEqual(method);
if (typeof body === 'undefined') {
// The body of the request may not be germane to the current test-- like some call by a library,
// so allow it to be ignored.
return;
}
expect(request.requestBody).toEqual(body);
};
/**
* Verifies the there are no unconsumed requests.
*/
expectNoRequests = function(requests) {
expect(requests.length).toEqual(requests.currentIndex);
};
expectJsonRequest = function(requests, method, url, jsonRequest) {
jsonRequest = jsonRequest || null;
var request = currentRequest(requests);
expect(request.readyState).toEqual(XML_HTTP_READY_STATES.OPENED);
expect(request.url).toEqual(url);
expect(request.method).toEqual(method);
expect(JSON.parse(request.requestBody)).toEqual(jsonRequest === undefined ? null : jsonRequest);
};
/**
* Expect that a JSON request be made with the given URL and parameters.
* @param requests The collected requests
* @param expectedUrl The expected URL excluding the parameters
* @param expectedParameters An object representing the URL parameters
*/
expectRequestURL = function(requests, expectedUrl, expectedParameters) {
var request = currentRequest(requests),
parameters;
expect(new URI(request.url).path()).toEqual(expectedUrl);
parameters = new URI(request.url).query(true);
delete parameters._; // Ignore the cache-busting argument
expect(parameters).toEqual(expectedParameters);
};
/**
* Intended for use with POST requests using application/x-www-form-urlencoded.
*/
expectPostRequest = function(requests, url, body) {
var request = currentRequest(requests);
expect(request.readyState).toEqual(XML_HTTP_READY_STATES.OPENED);
expect(request.url).toEqual(url);
expect(request.method).toEqual("POST");
expect(_.difference(request.requestBody.split('&'), body.split('&'))).toEqual([]);
};
/**
* Verify that the HTTP request was marked as reset, and then skip it.
*
* Note: this is typically used when code has explicitly canceled a request
* after it has been sent. A good example is when a user chooses to cancel
* a slow running search.
*/
skipResetRequest = function(requests) {
var request = currentRequest(requests);
expect(request.readyState).toEqual(XML_HTTP_READY_STATES.UNSENT);
requests.currentIndex++;
};
respondWithJson = function(requests, jsonResponse) {
var request = currentRequest(requests);
request.respond(200,
{ 'Content-Type': 'application/json' },
JSON.stringify(jsonResponse));
requests.currentIndex++;
};
respondWithError = function(requests, statusCode, jsonResponse) {
var request = currentRequest(requests);
if (_.isUndefined(statusCode)) {
statusCode = 500;
}
if (_.isUndefined(jsonResponse)) {
jsonResponse = {};
}
request.respond(
statusCode,
{ 'Content-Type': 'application/json' },
JSON.stringify(jsonResponse)
);
requests.currentIndex++;
};
respondWithTextError = function(requests, statusCode, textResponse) {
var request = currentRequest(requests);
if (_.isUndefined(statusCode)) {
statusCode = 500;
}
if (_.isUndefined(textResponse)) {
textResponse = "";
}
request.respond(
statusCode,
{ 'Content-Type': 'text/plain' },
textResponse
);
requests.currentIndex++;
};
respondWithNoContent = function(requests) {
var request = currentRequest(requests);
request.respond(
204,
{ 'Content-Type': 'application/json' }
);
requests.currentIndex++;
};
return {
server: fakeServer,
requests: fakeRequests,
currentRequest: currentRequest,
expectRequest: expectRequest,
expectNoRequests: expectNoRequests,
expectJsonRequest: expectJsonRequest,
expectPostRequest: expectPostRequest,
expectRequestURL: expectRequestURL,
skipResetRequest: skipResetRequest,
respondWithJson: respondWithJson,
respondWithError: respondWithError,
respondWithTextError: respondWithTextError,
respondWithNoContent: respondWithNoContent
};
});
/**
* Generally useful helper functions for writing Jasmine unit tests.
*/
define([], function () {
'use strict';
/**
* Runs func as a test case multiple times, using entries from data as arguments. Like Python's DDT.
* @param data An object mapping test names to arrays of function parameters. The name is passed to it() as the name
* of the test case, and the list of arguments is applied as arguments to func.
* @param func The function that actually expresses the logic of the test.
*/
var withData = function (data, func) {
for (var name in data) {
if (data.hasOwnProperty(name)) {
(function (name) {
it(name, function () {
func.apply(this, data[name]);
});
})(name);
}
}
};
/**
* Runs test multiple times, wrapping each call in a describe with beforeEach specified by setup and arguments and
* name coming from entries in config.
* @param config An object mapping configuration names to arrays of setup function parameters. The name is passed
* to describe as the name of the group of tests, and the list of arguments is applied as arguments to setup.
* @param setup The function to setup the given configuration before each test case. Runs in beforeEach.
* @param test The function that actually express the logic of the test. May include it() or more describe().
*/
var withConfiguration = function (config, setup, test) {
for (var name in config) {
if (config.hasOwnProperty(name)) {
(function (name) {
describe(name, function () {
beforeEach(function () {
setup.apply(this, config[name]);
});
test();
});
})(name);
}
}
};
return {
withData: withData,
withConfiguration: withConfiguration
};
});
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
;(function (define) { ;(function (define) {
'use strict'; 'use strict';
define(["jquery", "common/js/components/views/feedback_notification", "common/js/components/views/feedback_prompt", define(["jquery", "common/js/components/views/feedback_notification", "common/js/components/views/feedback_prompt",
'common/js/spec_helpers/ajax_helpers'], 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'],
function($, NotificationView, Prompt, AjaxHelpers) { function($, NotificationView, Prompt, AjaxHelpers) {
var installViewTemplates, createFeedbackSpy, verifyFeedbackShowing, var installViewTemplates, createFeedbackSpy, verifyFeedbackShowing,
verifyFeedbackHidden, createNotificationSpy, verifyNotificationShowing, verifyFeedbackHidden, createNotificationSpy, verifyNotificationShowing,
......
define([ define([
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'support/js/spec_helpers/enrollment_helpers', 'support/js/spec_helpers/enrollment_helpers',
'support/js/collections/enrollment', 'support/js/collections/enrollment',
], function (AjaxHelpers, EnrollmentHelpers, EnrollmentCollection) { ], function (AjaxHelpers, EnrollmentHelpers, EnrollmentCollection) {
......
define([ define([
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'support/js/spec_helpers/enrollment_helpers', 'support/js/spec_helpers/enrollment_helpers',
'support/js/models/enrollment' 'support/js/models/enrollment'
], function (AjaxHelpers, EnrollmentHelpers, EnrollmentModel) { ], function (AjaxHelpers, EnrollmentHelpers, EnrollmentModel) {
......
define([ define([
'jquery', 'jquery',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'support/js/views/certificates' 'support/js/views/certificates'
], function($, AjaxHelpers, CertificatesView) { ], function($, AjaxHelpers, CertificatesView) {
'use strict'; 'use strict';
......
define([ define([
'underscore', 'underscore',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'support/js/spec_helpers/enrollment_helpers', 'support/js/spec_helpers/enrollment_helpers',
'support/js/models/enrollment', 'support/js/models/enrollment',
'support/js/views/enrollment_modal' 'support/js/views/enrollment_modal'
......
define([ define([
'underscore', 'underscore',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'support/js/spec_helpers/enrollment_helpers', 'support/js/spec_helpers/enrollment_helpers',
'support/js/views/enrollment' 'support/js/views/enrollment'
], function (_, AjaxHelpers, EnrollmentHelpers, EnrollmentView) { ], function (_, AjaxHelpers, EnrollmentHelpers, EnrollmentView) {
......
define(['backbone', 'URI', 'underscore', 'common/js/spec_helpers/ajax_helpers', define(['backbone', 'URI', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'teams/js/spec_helpers/team_spec_helpers'], 'teams/js/spec_helpers/team_spec_helpers'],
function (Backbone, URI, _, AjaxHelpers, TeamSpecHelpers) { function (Backbone, URI, _, AjaxHelpers, TeamSpecHelpers) {
'use strict'; 'use strict';
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'jquery', 'jquery',
'underscore', 'underscore',
'backbone', 'backbone',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'teams/js/views/edit_team_members', 'teams/js/views/edit_team_members',
'teams/js/models/team', 'teams/js/models/team',
'teams/js/views/team_utils', 'teams/js/views/team_utils',
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'jquery', 'jquery',
'underscore', 'underscore',
'backbone', 'backbone',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/page_helpers', 'common/js/spec_helpers/page_helpers',
'teams/js/views/edit_team', 'teams/js/views/edit_team',
'teams/js/models/team', 'teams/js/models/team',
......
...@@ -6,7 +6,7 @@ define([ ...@@ -6,7 +6,7 @@ define([
'teams/js/views/instructor_tools', 'teams/js/views/instructor_tools',
'teams/js/views/team_utils', 'teams/js/views/team_utils',
'teams/js/spec_helpers/team_spec_helpers', 'teams/js/spec_helpers/team_spec_helpers',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/page_helpers' 'common/js/spec_helpers/page_helpers'
], function ($, Backbone, _, Team, InstructorToolsView, TeamUtils, TeamSpecHelpers, AjaxHelpers, PageHelpers) { ], function ($, Backbone, _, Team, InstructorToolsView, TeamUtils, TeamSpecHelpers, AjaxHelpers, PageHelpers) {
'use strict'; 'use strict';
......
...@@ -3,7 +3,7 @@ define([ ...@@ -3,7 +3,7 @@ define([
'teams/js/collections/my_teams', 'teams/js/collections/my_teams',
'teams/js/views/my_teams', 'teams/js/views/my_teams',
'teams/js/spec_helpers/team_spec_helpers', 'teams/js/spec_helpers/team_spec_helpers',
'common/js/spec_helpers/ajax_helpers' 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'
], function (Backbone, MyTeamsCollection, MyTeamsView, TeamSpecHelpers, AjaxHelpers) { ], function (Backbone, MyTeamsCollection, MyTeamsView, TeamSpecHelpers, AjaxHelpers) {
'use strict'; 'use strict';
describe('My Teams View', function () { describe('My Teams View', function () {
......
define([ define([
'underscore', 'common/js/spec_helpers/ajax_helpers', 'teams/js/views/team_discussion', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'teams/js/views/team_discussion',
'teams/js/spec_helpers/team_spec_helpers', 'teams/js/spec_helpers/team_spec_helpers',
'xmodule_js/common_static/coffee/spec/discussion/discussion_spec_helper' 'xmodule_js/common_static/coffee/spec/discussion/discussion_spec_helper'
], function (_, AjaxHelpers, TeamDiscussionView, TeamSpecHelpers, DiscussionSpecHelper) { ], function (_, AjaxHelpers, TeamDiscussionView, TeamSpecHelpers, DiscussionSpecHelper) {
......
define([ define([
'backbone', 'underscore', 'common/js/spec_helpers/ajax_helpers', 'teams/js/models/team', 'backbone', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'teams/js/models/team',
'teams/js/views/team_profile_header_actions', 'teams/js/spec_helpers/team_spec_helpers' 'teams/js/views/team_profile_header_actions', 'teams/js/spec_helpers/team_spec_helpers'
], function (Backbone, _, AjaxHelpers, TeamModel, TeamProfileHeaderActionsView, TeamSpecHelpers) { ], function (Backbone, _, AjaxHelpers, TeamModel, TeamProfileHeaderActionsView, TeamSpecHelpers) {
'use strict'; 'use strict';
......
define([ define([
'underscore', 'common/js/spec_helpers/ajax_helpers', 'teams/js/models/team', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'teams/js/models/team',
'teams/js/views/team_profile', 'teams/js/spec_helpers/team_spec_helpers', 'teams/js/views/team_profile', 'teams/js/spec_helpers/team_spec_helpers',
'xmodule_js/common_static/coffee/spec/discussion/discussion_spec_helper' 'xmodule_js/common_static/coffee/spec/discussion/discussion_spec_helper'
], function (_, AjaxHelpers, TeamModel, TeamProfileView, TeamSpecHelpers, DiscussionSpecHelper) { ], function (_, AjaxHelpers, TeamModel, TeamProfileView, TeamSpecHelpers, DiscussionSpecHelper) {
......
...@@ -2,22 +2,22 @@ define([ ...@@ -2,22 +2,22 @@ define([
'jquery', 'jquery',
'backbone', 'backbone',
'logger', 'logger',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/spec-helpers',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/page_helpers', 'common/js/spec_helpers/page_helpers',
'common/js/spec_helpers/spec_helpers',
'teams/js/views/teams_tab', 'teams/js/views/teams_tab',
'teams/js/spec_helpers/team_spec_helpers' 'teams/js/spec_helpers/team_spec_helpers'
], function ($, Backbone, Logger, AjaxHelpers, PageHelpers, SpecHelpers, TeamsTabView, TeamSpecHelpers) { ], function($, Backbone, Logger, SpecHelpers, AjaxHelpers, PageHelpers, TeamsTabView, TeamSpecHelpers) {
'use strict'; 'use strict';
describe('TeamsTab', function() { describe('TeamsTab', function() {
var requests; var requests;
var expectError = function (teamsTabView, text) { var expectError = function(teamsTabView, text) {
expect(teamsTabView.$('.warning').text()).toContain(text); expect(teamsTabView.$('.warning').text()).toContain(text);
}; };
var expectFocus = function (element) { var expectFocus = function(element) {
expect(element.focus).toHaveBeenCalled(); expect(element.focus).toHaveBeenCalled();
}; };
...@@ -50,7 +50,7 @@ define([ ...@@ -50,7 +50,7 @@ define([
return teamsTabView; return teamsTabView;
}; };
beforeEach(function () { beforeEach(function() {
setFixtures('<div class="teams-content"></div>'); setFixtures('<div class="teams-content"></div>');
spyOn($.fn, 'focus'); spyOn($.fn, 'focus');
spyOn(Logger, 'log'); spyOn(Logger, 'log');
...@@ -62,7 +62,7 @@ define([ ...@@ -62,7 +62,7 @@ define([
} }
); );
describe('Navigation', function () { describe('Navigation', function() {
it('does not render breadcrumbs for the top level tabs', function() { it('does not render breadcrumbs for the top level tabs', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.router.navigate('#my-teams', {trigger: true}); teamsTabView.router.navigate('#my-teams', {trigger: true});
...@@ -71,20 +71,20 @@ define([ ...@@ -71,20 +71,20 @@ define([
expect(teamsTabView.$('.breadcrumbs').length).toBe(0); expect(teamsTabView.$('.breadcrumbs').length).toBe(0);
}); });
it('does not interfere with anchor links to #content', function () { it('does not interfere with anchor links to #content', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.router.navigate('#content', {trigger: true}); teamsTabView.router.navigate('#content', {trigger: true});
expect(teamsTabView.$('.wrapper-msg')).toHaveClass('is-hidden'); expect(teamsTabView.$('.wrapper-msg')).toHaveClass('is-hidden');
}); });
it('displays and focuses an error message when trying to navigate to a nonexistent page', function () { it('displays and focuses an error message when trying to navigate to a nonexistent page', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.router.navigate('no_such_page', {trigger: true}); teamsTabView.router.navigate('no_such_page', {trigger: true});
expectError(teamsTabView, 'The page "no_such_page" could not be found.'); expectError(teamsTabView, 'The page "no_such_page" could not be found.');
expectFocus(teamsTabView.$('.warning')); expectFocus(teamsTabView.$('.warning'));
}); });
it('displays and focuses an error message when trying to navigate to a nonexistent topic', function () { it('displays and focuses an error message when trying to navigate to a nonexistent topic', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.router.navigate('topics/no_such_topic', {trigger: true}); teamsTabView.router.navigate('topics/no_such_topic', {trigger: true});
AjaxHelpers.expectRequest(requests, 'GET', '/api/team/v0/topics/no_such_topic,course/1', null); AjaxHelpers.expectRequest(requests, 'GET', '/api/team/v0/topics/no_such_topic,course/1', null);
...@@ -93,7 +93,7 @@ define([ ...@@ -93,7 +93,7 @@ define([
expectFocus(teamsTabView.$('.warning')); expectFocus(teamsTabView.$('.warning'));
}); });
it('displays and focuses an error message when trying to navigate to a nonexistent team', function () { it('displays and focuses an error message when trying to navigate to a nonexistent team', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.router.navigate('teams/' + TeamSpecHelpers.testTopicID + '/no_such_team', {trigger: true}); teamsTabView.router.navigate('teams/' + TeamSpecHelpers.testTopicID + '/no_such_team', {trigger: true});
AjaxHelpers.expectRequest(requests, 'GET', '/api/team/v0/teams/no_such_team?expand=user', null); AjaxHelpers.expectRequest(requests, 'GET', '/api/team/v0/teams/no_such_team?expand=user', null);
...@@ -102,23 +102,27 @@ define([ ...@@ -102,23 +102,27 @@ define([
expectFocus(teamsTabView.$('.warning')); expectFocus(teamsTabView.$('.warning'));
}); });
it('displays and focuses an error message when it receives a 401 AJAX response', function () { it('displays and focuses an error message when it receives a 401 AJAX response', function() {
var teamsTabView = createTeamsTabView(this).render(); var teamsTabView = createTeamsTabView(this).render();
teamsTabView.router.navigate('topics/' + TeamSpecHelpers.testTopicID, {trigger: true}); teamsTabView.router.navigate('topics/' + TeamSpecHelpers.testTopicID, {trigger: true});
AjaxHelpers.respondWithError(requests, 401); AjaxHelpers.respondWithError(requests, 401);
expectError(teamsTabView, "Your request could not be completed. Reload the page and try again."); expectError(teamsTabView, 'Your request could not be completed. Reload the page and try again.');
expectFocus(teamsTabView.$('.warning')); expectFocus(teamsTabView.$('.warning'));
}); });
it('displays and focuses an error message when it receives a 500 AJAX response', function () { it('displays and focuses an error message when it receives a 500 AJAX response', function() {
var teamsTabView = createTeamsTabView(this).render(); var teamsTabView = createTeamsTabView(this).render();
teamsTabView.router.navigate('topics/' + TeamSpecHelpers.testTopicID, {trigger: true}); teamsTabView.router.navigate('topics/' + TeamSpecHelpers.testTopicID, {trigger: true});
AjaxHelpers.respondWithError(requests, 500); AjaxHelpers.respondWithError(requests, 500);
expectError(teamsTabView, "Your request could not be completed due to a server problem. Reload the page and try again. If the issue persists, click the Help tab to report the problem."); expectError(
teamsTabView,
'Your request could not be completed due to a server problem. Reload the page and try again. ' +
'If the issue persists, click the Help tab to report the problem.'
);
expectFocus(teamsTabView.$('.warning')); expectFocus(teamsTabView.$('.warning'));
}); });
it('does not navigate to the topics page when syncing its collection if not on the search page', function () { it('does not navigate to the topics page when syncing its collection if not on search page', function() {
var teamsTabView = createTeamsTabView(this), var teamsTabView = createTeamsTabView(this),
collection = TeamSpecHelpers.createMockTeams(); collection = TeamSpecHelpers.createMockTeams();
teamsTabView.createTeamsListView({ teamsTabView.createTeamsListView({
...@@ -131,7 +135,7 @@ define([ ...@@ -131,7 +135,7 @@ define([
}); });
}); });
describe('Analytics Events', function () { describe('Analytics Events', function() {
SpecHelpers.withData({ SpecHelpers.withData({
'fires a page view event for the topic page': [ 'fires a page view event for the topic page': [
'topics/' + TeamSpecHelpers.testTopicID, 'topics/' + TeamSpecHelpers.testTopicID,
...@@ -173,7 +177,7 @@ define([ ...@@ -173,7 +177,7 @@ define([
team_id: 'test_team_id' team_id: 'test_team_id'
} }
] ]
}, function (url, expectedEvent) { }, function(url, expectedEvent) {
var teamsTabView = createTeamsTabView(this, { var teamsTabView = createTeamsTabView(this, {
userInfo: TeamSpecHelpers.createMockUserInfo({staff: true}) userInfo: TeamSpecHelpers.createMockUserInfo({staff: true})
}); });
...@@ -186,8 +190,8 @@ define([ ...@@ -186,8 +190,8 @@ define([
}); });
}); });
describe('Discussion privileges', function () { describe('Discussion privileges', function() {
it('allows privileged access to any team', function () { it('allows privileged access to any team', function() {
var teamsTabView = createTeamsTabView(this, { var teamsTabView = createTeamsTabView(this, {
userInfo: TeamSpecHelpers.createMockUserInfo({privileged: true}) userInfo: TeamSpecHelpers.createMockUserInfo({privileged: true})
}); });
...@@ -197,7 +201,7 @@ define([ ...@@ -197,7 +201,7 @@ define([
expect(teamsTabView.readOnlyDiscussion(undefined)).toBe(false); expect(teamsTabView.readOnlyDiscussion(undefined)).toBe(false);
}); });
it('allows access to a team which an unprivileged user is a member of', function () { it('allows access to a team which an unprivileged user is a member of', function() {
var teamsTabView = createTeamsTabView(this, { var teamsTabView = createTeamsTabView(this, {
userInfo: TeamSpecHelpers.createMockUserInfo({ userInfo: TeamSpecHelpers.createMockUserInfo({
username: TeamSpecHelpers.testUser, username: TeamSpecHelpers.testUser,
...@@ -215,7 +219,7 @@ define([ ...@@ -215,7 +219,7 @@ define([
})).toBe(false); })).toBe(false);
}); });
it('does not allow access if the user is neither privileged nor a team member', function () { it('does not allow access if the user is neither privileged nor a team member', function() {
var teamsTabView = createTeamsTabView(this, { var teamsTabView = createTeamsTabView(this, {
userInfo: TeamSpecHelpers.createMockUserInfo({privileged: false, staff: true}) userInfo: TeamSpecHelpers.createMockUserInfo({privileged: false, staff: true})
}); });
...@@ -225,7 +229,7 @@ define([ ...@@ -225,7 +229,7 @@ define([
}); });
}); });
describe('Search', function () { describe('Search', function() {
var performSearch = function(requests, teamsTabView) { var performSearch = function(requests, teamsTabView) {
teamsTabView.$('.search-field').val('foo'); teamsTabView.$('.search-field').val('foo');
teamsTabView.$('.action-search').click(); teamsTabView.$('.action-search').click();
...@@ -239,7 +243,7 @@ define([ ...@@ -239,7 +243,7 @@ define([
AjaxHelpers.expectNoRequests(requests); AjaxHelpers.expectNoRequests(requests);
}; };
it('can search teams', function () { it('can search teams', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.browseTopic(TeamSpecHelpers.testTopicID); teamsTabView.browseTopic(TeamSpecHelpers.testTopicID);
verifyTeamsRequest({ verifyTeamsRequest({
...@@ -252,7 +256,7 @@ define([ ...@@ -252,7 +256,7 @@ define([
expect(teamsTabView.$('.page-description').text()).toBe('Showing results for "foo"'); expect(teamsTabView.$('.page-description').text()).toBe('Showing results for "foo"');
}); });
it('can clear a search', function () { it('can clear a search', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.browseTopic(TeamSpecHelpers.testTopicID); teamsTabView.browseTopic(TeamSpecHelpers.testTopicID);
AjaxHelpers.respondWithJson(requests, {}); AjaxHelpers.respondWithJson(requests, {});
...@@ -272,7 +276,7 @@ define([ ...@@ -272,7 +276,7 @@ define([
expect(teamsTabView.$('.page-description').text()).toBe('Test description 1'); expect(teamsTabView.$('.page-description').text()).toBe('Test description 1');
}); });
it('can navigate back to all teams from a search', function () { it('can navigate back to all teams from a search', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.browseTopic(TeamSpecHelpers.testTopicID); teamsTabView.browseTopic(TeamSpecHelpers.testTopicID);
AjaxHelpers.respondWithJson(requests, {}); AjaxHelpers.respondWithJson(requests, {});
...@@ -292,7 +296,7 @@ define([ ...@@ -292,7 +296,7 @@ define([
expect(teamsTabView.$('.page-description').text()).toBe('Test description 1'); expect(teamsTabView.$('.page-description').text()).toBe('Test description 1');
}); });
it('does not switch to showing results when the search returns an error', function () { it('does not switch to showing results when the search returns an error', function() {
var teamsTabView = createTeamsTabView(this); var teamsTabView = createTeamsTabView(this);
teamsTabView.browseTopic(TeamSpecHelpers.testTopicID); teamsTabView.browseTopic(TeamSpecHelpers.testTopicID);
AjaxHelpers.respondWithJson(requests, {}); AjaxHelpers.respondWithJson(requests, {});
......
define([ define([
'backbone', 'underscore', 'teams/js/collections/topic', 'teams/js/views/topics', 'backbone', 'underscore', 'teams/js/collections/topic', 'teams/js/views/topics',
'teams/js/spec_helpers/team_spec_helpers', 'common/js/spec_helpers/ajax_helpers' 'teams/js/spec_helpers/team_spec_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'
], function (Backbone, _, TopicCollection, TopicsView, TeamSpecHelpers, AjaxHelpers) { ], function (Backbone, _, TopicCollection, TopicsView, TeamSpecHelpers, AjaxHelpers) {
'use strict'; 'use strict';
describe('TopicsView', function () { describe('TopicsView', function () {
......
define([ define([
'js/api_admin/views/catalog_preview', 'js/api_admin/views/catalog_preview',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'
], function ( ], function (
CatalogPreviewView, AjaxHelpers CatalogPreviewView, AjaxHelpers
) { ) {
......
define(['common/js/spec_helpers/ajax_helpers', 'js/ccx/schedule'], define(['edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/ccx/schedule'],
function(AjaxHelpers) { function(AjaxHelpers) {
describe("edx.ccx.schedule.ScheduleView", function() { describe("edx.ccx.schedule.ScheduleView", function() {
var view = null; var view = null;
......
...@@ -2,9 +2,9 @@ define([ ...@@ -2,9 +2,9 @@ define([
'jquery', 'jquery',
'jquery.ajax-retry', 'jquery.ajax-retry',
'js/commerce/views/receipt_view', 'js/commerce/views/receipt_view',
'common/js/spec_helpers/ajax_helpers' 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'
], ],
function ($, AjaxRetry, ReceiptView, AjaxHelpers){ function ($, AjaxRetry, ReceiptView, AjaxHelpers) {
'use strict'; 'use strict';
describe('edx.commerce.ReceiptView', function() { describe('edx.commerce.ReceiptView', function() {
var data, courseResponseData, providerResponseData, mockRequests, mockRender, createReceiptView, var data, courseResponseData, providerResponseData, mockRequests, mockRender, createReceiptView,
......
define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', define(['backbone', 'jquery', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'js/bookmarks/views/bookmark_button' 'common/js/spec_helpers/template_helpers', 'js/bookmarks/views/bookmark_button'
], ],
function (Backbone, $, _, AjaxHelpers, TemplateHelpers, BookmarkButtonView) { function (Backbone, $, _, AjaxHelpers, TemplateHelpers, BookmarkButtonView) {
......
...@@ -3,7 +3,7 @@ define(['backbone', ...@@ -3,7 +3,7 @@ define(['backbone',
'underscore', 'underscore',
'logger', 'logger',
'URI', 'URI',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'js/bookmarks/views/bookmarks_list_button', 'js/bookmarks/views/bookmarks_list_button',
'js/bookmarks/views/bookmarks_list', 'js/bookmarks/views/bookmarks_list',
......
define(['common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/ajax_helpers', 'js/dashboard/donation'], define(['common/js/spec_helpers/template_helpers',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/dashboard/donation'],
function(TemplateHelpers, AjaxHelpers) { function(TemplateHelpers, AjaxHelpers) {
'use strict'; 'use strict';
......
define([ define([
'jquery', 'common/js/spec_helpers/ajax_helpers','common/js/spec_helpers/template_helpers', 'jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers','common/js/spec_helpers/template_helpers',
'js/discovery/discovery_factory' 'js/discovery/discovery_factory'
], function($, AjaxHelpers, TemplateHelpers, DiscoveryFactory) { ], function($, AjaxHelpers, TemplateHelpers, DiscoveryFactory) {
'use strict'; 'use strict';
......
define([ define([
'common/js/spec_helpers/ajax_helpers', 'js/discovery/models/course_discovery' 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/discovery/models/course_discovery'
], function(AjaxHelpers, CourseDiscovery) { ], function(AjaxHelpers, CourseDiscovery) {
'use strict'; 'use strict';
......
define([ define([
'common/js/spec_helpers/ajax_helpers', 'js/discovery/models/search_state' 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/discovery/models/search_state'
], function(AjaxHelpers, SearchState) { ], function(AjaxHelpers, SearchState) {
'use strict'; 'use strict';
......
define(['underscore', 'URI', 'common/js/spec_helpers/ajax_helpers'], function(_, URI, AjaxHelpers) { define(['underscore', 'URI', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'], function(_, URI, AjaxHelpers) {
'use strict'; 'use strict';
var B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", var B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
LONG_TEXT, PRUNED_TEXT, TRUNCATED_TEXT, SHORT_TEXT, LONG_TEXT, PRUNED_TEXT, TRUNCATED_TEXT, SHORT_TEXT,
......
define([ define([
'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', 'js/spec/edxnotes/helpers', 'jquery', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/spec/edxnotes/helpers',
'annotator_1.2.9', 'logger', 'js/edxnotes/views/notes_factory' 'annotator_1.2.9', 'logger', 'js/edxnotes/views/notes_factory'
], function($, _, AjaxHelpers, Helpers, Annotator, Logger, NotesFactory) { ], function($, _, AjaxHelpers, Helpers, Annotator, Logger, NotesFactory) {
'use strict'; 'use strict';
......
define([ define([
'jquery', 'underscore', 'annotator_1.2.9', 'jquery', 'underscore', 'annotator_1.2.9',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/spec/edxnotes/helpers', 'js/spec/edxnotes/helpers',
'js/edxnotes/views/notes_factory' 'js/edxnotes/views/notes_factory'
], function ($, _, Annotator, AjaxHelpers, Helpers, NotesFactory) { ], function ($, _, Annotator, AjaxHelpers, Helpers, NotesFactory) {
......
define([ define([
'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', 'jquery', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'js/spec/edxnotes/helpers', 'logger', 'common/js/spec_helpers/template_helpers', 'js/spec/edxnotes/helpers', 'logger',
'js/edxnotes/models/note', 'js/edxnotes/views/note_item', 'js/edxnotes/models/note', 'js/edxnotes/views/note_item',
], function( ], function(
......
define([ define([
'annotator_1.2.9', 'js/edxnotes/views/notes_factory', 'common/js/spec_helpers/ajax_helpers', 'annotator_1.2.9', 'js/edxnotes/views/notes_factory', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/spec/edxnotes/helpers' 'js/spec/edxnotes/helpers'
], function(Annotator, NotesFactory, AjaxHelpers, Helpers) { ], function(Annotator, NotesFactory, AjaxHelpers, Helpers) {
'use strict'; 'use strict';
......
define([ define([
'jquery', 'underscore', 'common/js/spec_helpers/template_helpers', 'jquery', 'underscore', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'js/spec/edxnotes/helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/spec/edxnotes/helpers',
'js/edxnotes/views/page_factory' 'js/edxnotes/views/page_factory'
], function($, _, TemplateHelpers, AjaxHelpers, Helpers, NotesFactory) { ], function($, _, TemplateHelpers, AjaxHelpers, Helpers, NotesFactory) {
'use strict'; 'use strict';
...@@ -15,7 +15,6 @@ define([ ...@@ -15,7 +15,6 @@ define([
this.view = new NotesFactory({notes: notes, pageSize: 10}); this.view = new NotesFactory({notes: notes, pageSize: 10});
}); });
it('should be displayed properly', function() { it('should be displayed properly', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
tab; tab;
......
define([ define([
'jquery', 'underscore', 'annotator_1.2.9', 'common/js/spec_helpers/ajax_helpers', 'jquery', 'underscore', 'annotator_1.2.9', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/edxnotes/views/notes_visibility_factory', 'js/spec/edxnotes/helpers' 'js/edxnotes/views/notes_visibility_factory', 'js/spec/edxnotes/helpers'
], function( ], function(
$, _, Annotator, AjaxHelpers, NotesVisibilityFactory, Helpers $, _, Annotator, AjaxHelpers, NotesVisibilityFactory, Helpers
...@@ -9,7 +9,7 @@ define([ ...@@ -9,7 +9,7 @@ define([
var params = { var params = {
endpoint: '/test_endpoint', endpoint: '/test_endpoint',
user: 'a user', user: 'a user',
usageId : 'an usage', usageId: 'an usage',
courseId: 'a course', courseId: 'a course',
token: Helpers.makeToken(), token: Helpers.makeToken(),
tokenUrl: '/test_token_url' tokenUrl: '/test_token_url'
...@@ -88,16 +88,17 @@ define([ ...@@ -88,16 +88,17 @@ define([
it('can handle errors', function() { it('can handle errors', function() {
var requests = AjaxHelpers.requests(this), var requests = AjaxHelpers.requests(this),
errorContainer = $('.annotator-notice'); $errorContainer = $('.annotator-notice');
this.button.click(); this.button.click();
AjaxHelpers.respondWithError(requests); AjaxHelpers.respondWithError(requests);
expect(errorContainer).toContainText( expect($errorContainer).toContainText(
"An error has occurred. Make sure that you are connected to the Internet, and then try refreshing the page." 'An error has occurred. Make sure that you are connected to the Internet, ' +
'and then try refreshing the page.'
); );
expect(errorContainer).toBeVisible(); expect($errorContainer).toBeVisible();
expect(errorContainer).toHaveClass('annotator-notice-show'); expect($errorContainer).toHaveClass('annotator-notice-show');
expect(errorContainer).toHaveClass('annotator-notice-error'); expect($errorContainer).toHaveClass('annotator-notice-error');
this.button.click(); this.button.click();
...@@ -112,10 +113,10 @@ define([ ...@@ -112,10 +113,10 @@ define([
AjaxHelpers.respondWithJson(requests, {}); AjaxHelpers.respondWithJson(requests, {});
AjaxHelpers.respondWithJson(requests, {}); AjaxHelpers.respondWithJson(requests, {});
expect(errorContainer).not.toHaveClass('annotator-notice-show'); expect($errorContainer).not.toHaveClass('annotator-notice-show');
}); });
it('toggles notes when CTRL + SHIFT + [ keydown on document', function () { it('toggles notes when CTRL + SHIFT + [ keydown on document', function() {
// Character '[' has keyCode 219 // Character '[' has keyCode 219
$(document).trigger($.Event('keydown', {keyCode: 219, ctrlKey: true, shiftKey: true})); $(document).trigger($.Event('keydown', {keyCode: 219, ctrlKey: true, shiftKey: true}));
expect(this.toggleNotes.toggleHandler).toHaveBeenCalled(); expect(this.toggleNotes.toggleHandler).toHaveBeenCalled();
......
define([ define([
'jquery', 'jquery',
'underscore', 'underscore',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'edx-ui-toolkit/js/utils/html-utils', 'edx-ui-toolkit/js/utils/html-utils',
'js/edxnotes/views/search_box', 'js/edxnotes/views/search_box',
'js/edxnotes/collections/notes', 'js/edxnotes/collections/notes',
......
define([ define([
'jquery', 'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/ajax_helpers', 'jquery', 'common/js/spec_helpers/template_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/edxnotes/collections/notes', 'js/edxnotes/collections/tabs', 'js/edxnotes/views/tabs/recent_activity', 'js/edxnotes/collections/notes', 'js/edxnotes/collections/tabs', 'js/edxnotes/views/tabs/recent_activity',
'js/spec/edxnotes/helpers' 'js/spec/edxnotes/helpers'
], function( ], function(
......
define([ define([
'jquery', 'underscore', 'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/ajax_helpers', 'jquery', 'underscore', 'common/js/spec_helpers/template_helpers',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'logger', 'js/edxnotes/collections/tabs', 'js/edxnotes/views/tabs/search_results', 'logger', 'js/edxnotes/collections/tabs', 'js/edxnotes/views/tabs/search_results',
'js/spec/edxnotes/helpers' 'js/spec/edxnotes/helpers'
], function( ], function(
......
define(['backbone', 'jquery', 'common/js/spec_helpers/ajax_helpers', 'common/js/spec_helpers/template_helpers', define(['backbone', 'jquery', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers',
'js/groups/views/cohorts', 'js/groups/collections/cohort', 'js/groups/models/content_group', 'js/groups/views/cohorts', 'js/groups/collections/cohort', 'js/groups/models/content_group',
'js/groups/models/course_cohort_settings', 'js/utils/animation', 'js/vendor/jquery.qubit', 'js/groups/models/course_cohort_settings', 'js/utils/animation', 'js/vendor/jquery.qubit',
'js/groups/views/course_cohort_settings_notification', 'js/groups/models/cohort_discussions', 'js/groups/views/course_cohort_settings_notification', 'js/groups/models/cohort_discussions',
......
/*global define, sinon */ /*global define, sinon */
define([ define([
'jquery', 'jquery',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/certificates/models/certificate_exception', 'js/certificates/models/certificate_exception',
'js/certificates/views/certificate_whitelist', 'js/certificates/views/certificate_whitelist',
'js/certificates/views/certificate_whitelist_editor', 'js/certificates/views/certificate_whitelist_editor',
......
/*global define */ /*global define */
define([ define([
'jquery', 'jquery',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/certificates/models/certificate_invalidation', 'js/certificates/models/certificate_invalidation',
'js/certificates/views/certificate_invalidation_view', 'js/certificates/views/certificate_invalidation_view',
'js/certificates/collections/certificate_invalidation_collection' 'js/certificates/collections/certificate_invalidation_collection'
......
/*global define, onCertificatesReady */ /*global define, onCertificatesReady */
define([ define([
'jquery', 'jquery',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/instructor_dashboard/certificates' 'js/instructor_dashboard/certificates'
], ],
function($, AjaxHelpers) { function($, AjaxHelpers) {
......
/*global define */ /*global define */
define(['jquery', 'coffee/src/instructor_dashboard/data_download', 'common/js/spec_helpers/ajax_helpers', 'slick.grid'], define(['jquery',
'coffee/src/instructor_dashboard/data_download',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'slick.grid'],
function ($, DataDownload, AjaxHelpers) { function ($, DataDownload, AjaxHelpers) {
'use strict'; 'use strict';
describe("edx.instructor_dashboard.data_download.DataDownload_Certificate", function() { describe("edx.instructor_dashboard.data_download.DataDownload_Certificate", function() {
......
define(['jquery', 'coffee/src/instructor_dashboard/student_admin', 'common/js/spec_helpers/ajax_helpers'], define(['jquery', 'coffee/src/instructor_dashboard/student_admin', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'],
function ($, StudentAdmin, AjaxHelpers) { function ($, StudentAdmin, AjaxHelpers) {
//'coffee/src/instructor_dashboard/student_admin' //'coffee/src/instructor_dashboard/student_admin'
'use strict'; 'use strict';
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'jquery', 'jquery',
'backbone', 'backbone',
'logger', 'logger',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/page_helpers', 'common/js/spec_helpers/page_helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'js/search/base/models/search_result', 'js/search/base/models/search_result',
......
define(['common/js/spec_helpers/ajax_helpers', 'js/shoppingcart/shoppingcart'], define(['edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/shoppingcart/shoppingcart'],
function(AjaxHelpers) { function(AjaxHelpers) {
'use strict'; 'use strict';
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'backbone', 'backbone',
'jquery', 'jquery',
'js/staff_debug_actions', 'js/staff_debug_actions',
'common/js/spec_helpers/ajax_helpers' 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'
], ],
function (Backbone, $, tmp, AjaxHelpers) { function (Backbone, $, tmp, AjaxHelpers) {
'use strict'; 'use strict';
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
'underscore', 'underscore',
'backbone', 'backbone',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/student_account/views/AccessView', 'js/student_account/views/AccessView',
'js/student_account/views/FormView', 'js/student_account/views/FormView',
'js/student_account/enrollment', 'js/student_account/enrollment',
......
define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', 'common/js/spec_helpers/template_helpers', define(['backbone',
'jquery',
'underscore',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers',
'js/spec/views/fields_helpers', 'js/spec/views/fields_helpers',
'js/spec/student_account/helpers', 'js/spec/student_account/helpers',
'js/spec/student_account/account_settings_fields_helpers', 'js/spec/student_account/account_settings_fields_helpers',
......
define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', 'common/js/spec_helpers/template_helpers', define(['backbone',
'jquery',
'underscore',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers',
'js/spec/views/fields_helpers', 'js/spec/views/fields_helpers',
'string_utils'], 'string_utils'],
function (Backbone, $, _, AjaxHelpers, TemplateHelpers, FieldViewsSpecHelpers) { function (Backbone, $, _, AjaxHelpers, TemplateHelpers, FieldViewsSpecHelpers) {
......
define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', 'common/js/spec_helpers/template_helpers', define(['backbone',
'jquery',
'underscore',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers',
'js/views/fields', 'js/views/fields',
'js/spec/views/fields_helpers', 'js/spec/views/fields_helpers',
'js/spec/student_account/account_settings_fields_helpers', 'js/spec/student_account/account_settings_fields_helpers',
......
define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', 'common/js/spec_helpers/template_helpers', define(['backbone',
'jquery',
'underscore',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers',
'js/spec/student_account/helpers', 'js/spec/student_account/helpers',
'js/views/fields', 'js/views/fields',
'js/student_account/models/user_account_model', 'js/student_account/models/user_account_model',
......
define(['common/js/spec_helpers/ajax_helpers', 'js/student_account/emailoptin'], define(['edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/student_account/emailoptin'],
function( AjaxHelpers, EmailOptInInterface ) { function( AjaxHelpers, EmailOptInInterface ) {
'use strict'; 'use strict';
......
define(['common/js/spec_helpers/ajax_helpers', 'js/student_account/enrollment'], define(['edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/student_account/enrollment'],
function( AjaxHelpers, EnrollmentInterface ) { function( AjaxHelpers, EnrollmentInterface ) {
'use strict'; 'use strict';
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
'jquery', 'jquery',
'jquery.url', 'jquery.url',
'utility', 'utility',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/student_account/views/FinishAuthView', 'js/student_account/views/FinishAuthView',
'js/student_account/enrollment', 'js/student_account/enrollment',
'js/student_account/shoppingcart', 'js/student_account/shoppingcart',
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
'jquery', 'jquery',
'underscore', 'underscore',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/student_account/views/HintedLoginView' 'js/student_account/views/HintedLoginView'
], ],
function($, _, TemplateHelpers, AjaxHelpers, HintedLoginView) { function($, _, TemplateHelpers, AjaxHelpers, HintedLoginView) {
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
'underscore', 'underscore',
'sinon', 'sinon',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/student_account/models/LoginModel', 'js/student_account/models/LoginModel',
'js/student_account/views/LoginView', 'js/student_account/views/LoginView',
'js/student_account/models/PasswordResetModel' 'js/student_account/models/PasswordResetModel'
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
'underscore', 'underscore',
'backbone', 'backbone',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/student_account/logistration_factory' 'js/student_account/logistration_factory'
], ],
function($, _, Backbone, TemplateHelpers, AjaxHelpers, LogistrationFactory) { function($, _, Backbone, TemplateHelpers, AjaxHelpers, LogistrationFactory) {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
'jquery', 'jquery',
'underscore', 'underscore',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/student_account/models/PasswordResetModel', 'js/student_account/models/PasswordResetModel',
'js/student_account/views/PasswordResetView' 'js/student_account/views/PasswordResetView'
], ],
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
'jquery', 'jquery',
'underscore', 'underscore',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/student_account/models/RegisterModel', 'js/student_account/models/RegisterModel',
'js/student_account/views/RegisterView' 'js/student_account/views/RegisterView'
], ],
......
define(['common/js/spec_helpers/ajax_helpers', 'js/student_account/shoppingcart'], define(['edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/student_account/shoppingcart'],
function(AjaxHelpers, ShoppingCartInterface) { function(AjaxHelpers, ShoppingCartInterface) {
'use strict'; 'use strict';
......
...@@ -3,18 +3,18 @@ define([ ...@@ -3,18 +3,18 @@ define([
'jquery', 'jquery',
'underscore', 'underscore',
'URI', 'URI',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'edx-ui-toolkit/js/pagination/paging-collection', 'edx-ui-toolkit/js/pagination/paging-collection',
'common/js/spec_helpers/ajax_helpers',
'js/spec/student_profile/helpers', 'js/spec/student_profile/helpers',
'js/student_profile/views/badge_list_container' 'js/student_profile/views/badge_list_container'
], ],
function (Backbone, $, _, URI, PagingCollection, AjaxHelpers, LearnerProfileHelpers, BadgeListContainer) { function(Backbone, $, _, URI, AjaxHelpers, PagingCollection, LearnerProfileHelpers, BadgeListContainer) {
'use strict'; 'use strict';
describe('edx.user.BadgeListContainer', function () { describe('edx.user.BadgeListContainer', function () {
var view, requests; var view, requests;
var createView = function (requests, pageNum, badge_list_object) { var createView = function(requests, pageNum, badgeListObject) {
var BadgeCollection = PagingCollection.extend({ var BadgeCollection = PagingCollection.extend({
queryParams: { queryParams: {
currentPage: 'current_page' currentPage: 'current_page'
...@@ -23,15 +23,15 @@ define([ ...@@ -23,15 +23,15 @@ define([
var badgeCollection = new BadgeCollection(); var badgeCollection = new BadgeCollection();
badgeCollection.url = '/api/badges/v1/assertions/user/staff/'; badgeCollection.url = '/api/badges/v1/assertions/user/staff/';
var models = []; var models = [];
_.each(_.range(badge_list_object.count), function (idx) { _.each(_.range(badgeListObject.count), function (idx) {
models.push(LearnerProfileHelpers.makeBadge(idx)); models.push(LearnerProfileHelpers.makeBadge(idx));
}); });
badge_list_object.results = models; badgeListObject.results = models;
badgeCollection.setPage(pageNum); badgeCollection.setPage(pageNum);
var request = AjaxHelpers.currentRequest(requests); var request = AjaxHelpers.currentRequest(requests);
var path = new URI(request.url).path(); var path = new URI(request.url).path();
expect(path).toBe('/api/badges/v1/assertions/user/staff/'); expect(path).toBe('/api/badges/v1/assertions/user/staff/');
AjaxHelpers.respondWithJson(requests, badge_list_object); AjaxHelpers.respondWithJson(requests, badgeListObject);
var badgeListContainer = new BadgeListContainer({ var badgeListContainer = new BadgeListContainer({
'collection': badgeCollection 'collection': badgeCollection
...@@ -92,4 +92,3 @@ define([ ...@@ -92,4 +92,3 @@ define([
}); });
} }
); );
define(['underscore', 'URI', 'common/js/spec_helpers/ajax_helpers'], function(_, URI, AjaxHelpers) { define(['underscore', 'URI', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers'], function(_, URI, AjaxHelpers) {
'use strict'; 'use strict';
var expectProfileElementContainsField = function(element, view) { var expectProfileElementContainsField = function(element, view) {
......
define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', define(['backbone', 'jquery', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'js/spec/student_account/helpers', 'js/spec/student_account/helpers',
'js/spec/student_profile/helpers', 'js/spec/student_profile/helpers',
......
define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', 'common/js/spec_helpers/template_helpers', define(['backbone',
'jquery',
'underscore',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers',
'js/spec/student_account/helpers', 'js/spec/student_account/helpers',
'js/student_account/models/user_account_model', 'js/student_account/models/user_account_model',
'js/student_profile/views/learner_profile_fields', 'js/student_profile/views/learner_profile_fields',
......
...@@ -2,7 +2,7 @@ define(['backbone', ...@@ -2,7 +2,7 @@ define(['backbone',
'jquery', 'jquery',
'underscore', 'underscore',
'edx-ui-toolkit/js/pagination/paging-collection', 'edx-ui-toolkit/js/pagination/paging-collection',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'js/spec/student_account/helpers', 'js/spec/student_account/helpers',
'js/spec/student_profile/helpers', 'js/spec/student_profile/helpers',
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'jquery', 'jquery',
'backbone', 'backbone',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/verify_student/views/image_input_view', 'js/verify_student/views/image_input_view',
'js/verify_student/models/verification_model' 'js/verify_student/models/verification_model'
], function( $, Backbone, TemplateHelpers, AjaxHelpers, ImageInputView, VerificationModel ) { ], function( $, Backbone, TemplateHelpers, AjaxHelpers, ImageInputView, VerificationModel ) {
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'jquery', 'jquery',
'underscore', 'underscore',
'backbone', 'backbone',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'js/verify_student/views/make_payment_step_view' 'js/verify_student/views/make_payment_step_view'
], ],
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'jquery', 'jquery',
'underscore', 'underscore',
'backbone', 'backbone',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'js/verify_student/views/make_payment_step_view' 'js/verify_student/views/make_payment_step_view'
], ],
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'jquery', 'jquery',
'underscore', 'underscore',
'backbone', 'backbone',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'js/verify_student/views/review_photos_step_view', 'js/verify_student/views/review_photos_step_view',
'js/verify_student/models/verification_model' 'js/verify_student/models/verification_model'
......
...@@ -2,7 +2,7 @@ define([ ...@@ -2,7 +2,7 @@ define([
'jquery', 'jquery',
'backbone', 'backbone',
'common/js/spec_helpers/template_helpers', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'js/verify_student/views/webcam_photo_view', 'js/verify_student/views/webcam_photo_view',
'js/verify_student/models/verification_model' 'js/verify_student/models/verification_model'
], ],
......
define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', 'common/js/spec_helpers/template_helpers', define(['backbone',
'jquery',
'underscore',
'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers',
'js/views/fields', 'js/views/fields',
'string_utils'], 'string_utils'],
function (Backbone, $, _, AjaxHelpers, TemplateHelpers, FieldViews) { function (Backbone, $, _, AjaxHelpers, TemplateHelpers, FieldViews) {
......
define(['backbone', 'jquery', 'underscore', 'common/js/spec_helpers/ajax_helpers', define(['backbone', 'jquery', 'underscore', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/spec_helpers/template_helpers', 'js/views/fields', 'js/spec/views/fields_helpers', 'common/js/spec_helpers/template_helpers', 'js/views/fields', 'js/spec/views/fields_helpers',
'string_utils'], 'string_utils'],
function (Backbone, $, _, AjaxHelpers, TemplateHelpers, FieldViews, FieldViewsSpecHelpers) { function (Backbone, $, _, AjaxHelpers, TemplateHelpers, FieldViews, FieldViewsSpecHelpers) {
......
define(['backbone', 'jquery', 'js/views/file_uploader', 'common/js/spec_helpers/template_helpers', define(['backbone', 'jquery', 'js/views/file_uploader', 'common/js/spec_helpers/template_helpers',
'common/js/spec_helpers/ajax_helpers', 'js/models/notification', 'string_utils'], 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers', 'js/models/notification', 'string_utils'],
function (Backbone, $, FileUploaderView, TemplateHelpers, AjaxHelpers, NotificationModel) { function (Backbone, $, FileUploaderView, TemplateHelpers, AjaxHelpers, NotificationModel) {
describe("FileUploaderView", function () { describe("FileUploaderView", function () {
var verifyTitle, verifyInputLabel, verifyInputTip, verifySubmitButton, verifyExtensions, verifyText, var verifyTitle, verifyInputLabel, verifyInputTip, verifySubmitButton, verifyExtensions, verifyText,
......
define( define(
[ [
'common/js/spec_helpers/ajax_helpers', 'edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers',
'common/js/components/utils/view_utils', 'common/js/components/utils/view_utils',
'lms/js/preview/preview_factory' 'lms/js/preview/preview_factory'
], ],
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
"backbone": "~1.3.2", "backbone": "~1.3.2",
"coffee-script": "1.6.1", "coffee-script": "1.6.1",
"edx-pattern-library": "0.13.0", "edx-pattern-library": "0.13.0",
"edx-ui-toolkit": "~1.1.0", "edx-ui-toolkit": "1.3.0",
"jquery": "~2.2.0", "jquery": "~2.2.0",
"jquery-migrate": "^1.4.1", "jquery-migrate": "^1.4.1",
"jquery.scrollto": "~2.1.2", "jquery.scrollto": "~2.1.2",
......
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