Clicking on conflicting option box unchecks all conflicts LMS: Clicking license text should bring to new window updated styles to reflect html reuse inside of xblock edit modal area. Add ARIA attributes to license for a11y Gracefully handle re-selecting of selected license
144 lines
6.7 KiB
JavaScript
144 lines
6.7 KiB
JavaScript
define(["js/views/license", "js/models/license", "js/common_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");
|
|
});
|
|
|
|
})
|
|
})
|