diaspora/spec/javascripts/app/pages/admin_dashboard_spec.js
2015-07-21 14:36:41 +02:00

179 lines
6.5 KiB
JavaScript

describe("app.pages.AdminDashboard", function(){
beforeEach(function() {
spec.loadFixture("admin_dashboard");
this.view = new app.pages.AdminDashboard();
gon.podVersion = "0.5.1.2";
// disable jshint camelcase for i18n
/* jshint camelcase: false */
Diaspora.I18n.load({
admins: {
dashboard: {
up_to_date: "Your pod is up to date!",
outdated: "Your pod is outdated.",
compare_versions: "Latest d* release is <%= latestVersion%>, your pod is running <%= podVersion %>.",
error: "Error fetching the latest diaspora* version."
}
}
});
/* jshint camelcase: true */
});
describe("initialize" , function() {
it("calls updatePodStatus", function() {
spyOn(this.view, "updatePodStatus");
this.view.initialize();
expect(this.view.updatePodStatus).toHaveBeenCalled();
});
});
describe("updatePodStatus" , function() {
it("sends an ajax request to the github API", function() {
this.view.updatePodStatus();
expect(jasmine.Ajax.requests.mostRecent().url).toBe(
"https://api.github.com/repos/diaspora/diaspora/releases/latest"
);
});
it("calls updatePodStatusFail on a failed request", function() {
spyOn(this.view, "updatePodStatusFail");
this.view.updatePodStatus();
jasmine.Ajax.requests.mostRecent().respondWith({status: 400});
expect(this.view.updatePodStatusFail).toHaveBeenCalled();
});
it("calls updatePodStatusFail on a malformed response", function() {
spyOn(this.view, "updatePodStatusFail");
spyOn(this.view, "podUpToDate").and.returnValue(true);
var responses = [
// no object
"text",
// object without tag_name
"{\"tag\": 0}",
// tag_name not a string
"{\"tag_name\": 0}",
"{\"tag_name\": {\"id\": 0}}",
// tag_name doesn't start with "v"
"{\"tag_name\": \"0.5.1.2\"}"
];
for(var i = 0; i < responses.length; i++) {
this.view.updatePodStatus();
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
responseText: responses[i]
});
expect(this.view.updatePodStatusFail.calls.count()).toEqual(i+1);
}
});
it("sets latestVersion on a correct response", function() {
this.view.updatePodStatus();
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
responseText: "{\"tag_name\": \"v0.5.1.2\"}"
});
expect(this.view.latestVersion).toEqual([0,5,1,2]);
});
it("calls podUpToDate on a correct response", function() {
spyOn(this.view, "podUpToDate");
this.view.updatePodStatus();
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
responseText: "{\"tag_name\": \"v0.5.1.2\"}"
});
expect(this.view.podUpToDate).toHaveBeenCalled();
});
it("calls updatePodStatusFail if podUpToDate returns null", function() {
spyOn(this.view, "updatePodStatusFail");
spyOn(this.view, "podUpToDate").and.returnValue(null);
this.view.updatePodStatus();
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
responseText: "{\"tag_name\": \"v0.5.1.2\"}"
});
expect(this.view.updatePodStatusFail).toHaveBeenCalled();
});
it("calls updatePodStatusSuccess if podUpToDate returns a Boolean", function() {
spyOn(this.view, "updatePodStatusSuccess");
spyOn(this.view, "podUpToDate").and.returnValue(false);
this.view.updatePodStatus();
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
responseText: "{\"tag_name\": \"v0.5.1.2\"}"
});
expect(this.view.updatePodStatusSuccess).toHaveBeenCalled();
});
});
describe("podUpToDate" , function() {
it("returns null if latestVersion is not long enough", function() {
this.view.latestVersion = [0, 5, 1];
expect(this.view.podUpToDate()).toBeNull();
});
it("returns true if the pod is up to date", function() {
var self = this;
[
{latest: "0.5.1.2", pod: "0.5.1.2"},
{latest: "0.5.1.2", pod: "0.5.1.2-abcdefg"},
{latest: "0.5.1.2", pod: "0.5.1.2-2"},
{latest: "0.5.1.2", pod: "0.5.1.3"},
{latest: "0.5.1.2", pod: "0.5.2.1"},
{latest: "0.5.1.2", pod: "0.6.0.0"},
{latest: "0.5.1.2", pod: "2.0.0.0"}
].forEach(function(version) {
gon.podVersion = version.pod;
self.view.latestVersion = version.latest.split(".").map(Number);
expect(self.view.podUpToDate()).toBeTruthy();
});
});
it("returns false if the pod is outdated", function() {
var self = this;
[
{latest: "0.5.1.2", pod: "0.5.1.1"},
{latest: "0.5.1.2", pod: "0.5.1.1-abcdefg"},
{latest: "0.5.1.2", pod: "0.5.1.1-2"},
{latest: "0.5.1.2", pod: "0.4.99.4"},
{latest: "2.0.3.5", pod: "1.99.2.1"}
].forEach(function(version) {
gon.podVersion = version.pod;
self.view.latestVersion = version.latest.split(".").map(Number);
expect(self.view.podUpToDate()).toBeFalsy();
});
});
});
describe("updatePodStatusSuccess", function() {
it("adds a 'success' alert if the pod is up to date", function() {
spyOn(this.view, "podUpToDate").and.returnValue(true);
this.view.latestVersion = [0, 5, 1, 1];
this.view.updatePodStatusSuccess();
expect($("#pod-status .alert")).toHaveClass("alert-success");
expect($("#pod-status .alert").text()).toContain("up to date");
expect($("#pod-status .alert").text()).toContain("release is v0.5.1.1");
expect($("#pod-status .alert").text()).toContain("pod is running v0.5.1.2");
});
it("adds a 'danger' alert if the pod is up to date", function() {
spyOn(this.view, "podUpToDate").and.returnValue(false);
this.view.latestVersion = [0, 5, 1, 3];
this.view.updatePodStatusSuccess();
expect($("#pod-status .alert")).toHaveClass("alert-danger");
expect($("#pod-status .alert").text()).toContain("outdated");
expect($("#pod-status .alert").text()).toContain("release is v0.5.1.3");
expect($("#pod-status .alert").text()).toContain("pod is running v0.5.1.2");
});
});
describe("updatePodStatusFail", function() {
it("adds a 'warning' alert", function() {
this.view.updatePodStatusFail();
expect($("#pod-status .alert")).toHaveClass("alert-warning");
expect($("#pod-status .alert").text()).toContain("Error");
});
});
});