TNL-2384 Refactored Studio's PagingView to use RequireJS Text and moved it to common so that it can also be used by LMS.
144 lines
6.7 KiB
JavaScript
144 lines
6.7 KiB
JavaScript
define(["js/views/license", "js/models/license", "common/js/spec_helpers/template_helpers"],
|
|
function(LicenseView, LicenseModel, TemplateHelpers) {
|
|
describe("License view", function() {
|
|
|
|
beforeEach(function() {
|
|
TemplateHelpers.installTemplate("license-selector", true);
|
|
this.model = new LicenseModel();
|
|
this.view = new LicenseView({model: this.model});
|
|
});
|
|
|
|
it("renders with no license", function() {
|
|
this.view.render();
|
|
expect(this.view.$("li[data-license=all-rights-reserved] button"))
|
|
.toHaveText("All Rights Reserved");
|
|
expect(this.view.$("li[data-license=all-rights-reserved] button"))
|
|
.not.toHaveClass("is-selected");
|
|
expect(this.view.$("li[data-license=creative-commons] button"))
|
|
.toHaveText("Creative Commons");
|
|
expect(this.view.$("li[data-license=creative-commons] button"))
|
|
.not.toHaveClass("is-selected");
|
|
});
|
|
|
|
it("renders with the right license selected", function() {
|
|
this.model.set("type", "all-rights-reserved");
|
|
expect(this.view.$("li[data-license=all-rights-reserved] button"))
|
|
.toHaveClass("is-selected");
|
|
expect(this.view.$("li[data-license=creative-commons] button"))
|
|
.not.toHaveClass("is-selected");
|
|
});
|
|
|
|
it("switches license type on click", function() {
|
|
var arrBtn = this.view.$("li[data-license=all-rights-reserved] button");
|
|
expect(this.model.get("type")).toBeNull();
|
|
arrBtn.click();
|
|
expect(this.model.get("type")).toEqual("all-rights-reserved");
|
|
// view has re-rendered, so get a new reference to the button
|
|
arrBtn = this.view.$("li[data-license=all-rights-reserved] button");
|
|
expect(arrBtn).toHaveClass("is-selected");
|
|
// now switch to creative commons
|
|
var ccBtn = this.view.$("li[data-license=creative-commons] button");
|
|
ccBtn.click();
|
|
expect(this.model.get("type")).toEqual("creative-commons");
|
|
// update references again
|
|
arrBtn = this.view.$("li[data-license=all-rights-reserved] button");
|
|
ccBtn = this.view.$("li[data-license=creative-commons] button");
|
|
expect(arrBtn).not.toHaveClass("is-selected");
|
|
expect(ccBtn).toHaveClass("is-selected");
|
|
});
|
|
|
|
it("sets default license options when switching license types", function() {
|
|
expect(this.model.get("options")).toEqual({});
|
|
var ccBtn = this.view.$("li[data-license=creative-commons] button");
|
|
ccBtn.click()
|
|
expect(this.model.get("options")).toEqual(
|
|
{"ver": "4.0", "BY": true, "NC": true, "ND": true, "SA": false}
|
|
);
|
|
var arrBtn = this.view.$("li[data-license=all-rights-reserved] button");
|
|
arrBtn.click()
|
|
expect(this.model.get("options")).toEqual({});
|
|
});
|
|
|
|
it("renders license options", function() {
|
|
this.model.set({"type": "creative-commons"})
|
|
expect(this.view.$("ul.license-options li[data-option=BY]"))
|
|
.toContainText("Attribution");
|
|
expect(this.view.$("ul.license-options li[data-option=NC]"))
|
|
.toContainText("Noncommercial");
|
|
expect(this.view.$("ul.license-options li[data-option=ND]"))
|
|
.toContainText("No Derivatives");
|
|
expect(this.view.$("ul.license-options li[data-option=SA]"))
|
|
.toContainText("Share Alike");
|
|
expect(this.view.$("ul.license-options li").length).toEqual(4);
|
|
});
|
|
|
|
it("toggles boolean options on click", function() {
|
|
this.view.$("li[data-license=creative-commons] button").click();
|
|
expect(this.model.get("options")).toEqual(
|
|
{"ver": "4.0", "BY": true, "NC": true, "ND": true, "SA": false}
|
|
);
|
|
// toggle NC option
|
|
this.view.$("li[data-option=NC]").click();
|
|
expect(this.model.get("options")).toEqual(
|
|
{"ver": "4.0", "BY": true, "NC": false, "ND": true, "SA": false}
|
|
);
|
|
});
|
|
|
|
it("doesn't toggle disabled options", function() {
|
|
this.view.$("li[data-license=creative-commons] button").click();
|
|
expect(this.model.get("options")).toEqual(
|
|
{"ver": "4.0", "BY": true, "NC": true, "ND": true, "SA": false}
|
|
);
|
|
var BY = this.view.$("li[data-option=BY]");
|
|
expect(BY).toHaveClass("is-disabled");
|
|
// try to toggle BY option
|
|
BY.click()
|
|
// no change
|
|
expect(this.model.get("options")).toEqual(
|
|
{"ver": "4.0", "BY": true, "NC": true, "ND": true, "SA": false}
|
|
);
|
|
});
|
|
|
|
it("doesn't allow simultaneous conflicting options", function() {
|
|
this.view.$("li[data-license=creative-commons] button").click();
|
|
expect(this.model.get("options")).toEqual(
|
|
{"ver": "4.0", "BY": true, "NC": true, "ND": true, "SA": false}
|
|
);
|
|
// SA and ND conflict
|
|
var SA = this.view.$("li[data-option=SA]");
|
|
// try to turn on SA option
|
|
SA.click()
|
|
// ND should no longer be selected
|
|
expect(this.model.get("options")).toEqual(
|
|
{"ver": "4.0", "BY": true, "NC": true, "ND": false, "SA": true}
|
|
);
|
|
|
|
// try to turn on ND option
|
|
ND = this.view.$("li[data-option=ND]");
|
|
ND.click();
|
|
expect(this.model.get("options")).toEqual(
|
|
{"ver": "4.0", "BY": true, "NC": true, "ND": true, "SA": false}
|
|
);
|
|
});
|
|
|
|
it("has no preview by default", function () {
|
|
this.view.render();
|
|
expect(this.view.$(".license-preview").length).toEqual(0)
|
|
this.view.$("li[data-license=creative-commons] button").click();
|
|
expect(this.view.$(".license-preview").length).toEqual(0)
|
|
});
|
|
|
|
it("displays a preview if showPreview is true", function() {
|
|
this.view = new LicenseView({model: this.model, showPreview: true});
|
|
this.view.render()
|
|
expect(this.view.$(".license-preview").length).toEqual(1)
|
|
// Expect default text to be "All Rights Reserved"
|
|
expect(this.view.$(".license-preview")).toContainText("All Rights Reserved");
|
|
this.view.$("li[data-license=creative-commons] button").click();
|
|
expect(this.view.$(".license-preview").length).toEqual(1)
|
|
expect(this.view.$(".license-preview")).toContainText("Some Rights Reserved");
|
|
});
|
|
|
|
})
|
|
})
|