1
0
Fork 0
arangodb/js/apps/system/aardvark/test/specs/views/applicationsViewSpec.js

193 lines
5.5 KiB
JavaScript

/*jshint browser: true */
/*jshint unused: false */
/*global describe, beforeEach, afterEach, it, spyOn, expect*/
/*global runs, waitsFor, jasmine*/
/*global $, arangoHelper */
(function() {
"use strict";
describe("Applications View", function() {
var view,
collection,
model,
div,
specificFetch,
modalDiv;
beforeEach(function() {
specificFetch = undefined;
modalDiv = document.createElement("div");
modalDiv.id = "modalPlaceholder";
document.body.appendChild(modalDiv);
window.modalView = new window.ModalView();
div = document.createElement("div");
div.id = "content";
document.body.appendChild(div);
collection = new window.FoxxCollection();
spyOn(collection, "fetch").andCallFake(function(opts) {
if (specificFetch) {
specificFetch(opts);
return;
}
// Fake model already included
if (collection.length > 0) {
if (opts.success) {
opts.success();
}
return;
}
model = new window.Foxx({
_key: "1234",
_id: "aal/1234",
title: "TestFoxx",
version: 1.2,
mount: "/testfoxx",
description: "Test application",
manifest: {
git: "gitpath"
},
app: "app:TestFoxx:1.2",
type: "mount",
isSystem: false,
options: {
collectionPrefix: "testfoxx"
},
development: false
});
collection.add(model);
if (opts.success) {
opts.success();
}
});
view = new window.ApplicationsView({collection: collection});
view.reload();
});
afterEach(function() {
delete window.modalView;
document.body.removeChild(div);
document.body.removeChild(modalDiv);
});
describe("edit a foxx", function() {
var modalButtons, ajaxFunction;
beforeEach(function() {
runs(function() {
// Check if exactly on application is available
var button = $(".iconSet .icon_arangodb_settings2");
expect(button.length).toEqual(1);
button.click();
});
waitsFor(function() {
return $("#modal-dialog").css("display") === "block";
}, "show the modal dialog");
runs(function() {
ajaxFunction = function() {
return undefined;
};
modalButtons = {};
modalButtons.uninstall = function() {
return $("#modal-dialog .button-danger");
};
modalButtons.cancel = function() {
return $("#modal-dialog .button-close");
};
modalButtons.change = function() {
return $("#modal-dialog .button-success");
};
spyOn($, "ajax").andCallFake(function() {
ajaxFunction.apply(window, arguments);
});
});
});
it("should be able to switch mount point", function() {
var calledBack,
newMount;
runs(function() {
newMount = "/newMount";
ajaxFunction = function() {
calledBack = true;
};
$("#change-mount-point").val(newMount);
modalButtons.change().click();
});
waitsFor(function() {
return calledBack;
}, 1000);
runs(function() {
expect($.ajax).toHaveBeenCalledWith(
"foxx/move/" + model.get("_key"),{
dataType: "json",
data: JSON.stringify({
mount: newMount,
app: model.get("app"),
prefix: model.get("options").collectionPrefix
}),
async: false,
type: "PUT",
error: jasmine.any(Function)
});
});
});
it("should not hide the modal view if mountpoint change has failed", function() {
var calledBack,
newMount,
resText;
runs(function() {
newMount = "/newMount";
resText = "Mount-Point already in use";
ajaxFunction = function(url, options) {
expect(options.error).toEqual(jasmine.any(Function));
options.error(
{
status: 409,
statusText: "Conflict",
responseText: resText
}
);
calledBack = true;
};
spyOn(window.modalView, "hide");
spyOn(arangoHelper, "arangoError");
$("#change-mount-point").val(newMount);
modalButtons.change().click();
});
waitsFor(function() {
return calledBack;
}, 1000);
runs(function() {
expect(arangoHelper.arangoError).toHaveBeenCalledWith(resText);
expect(window.modalView.hide).not.toHaveBeenCalled();
});
});
it("should not trigger a remount if mountpoint has not been changed", function() {
spyOn(window, "alert");
modalButtons.change().click();
expect(window.alert).not.toHaveBeenCalled();
});
it("should prevent an illegal mountpoint", function() {
spyOn(arangoHelper, "arangoError");
$("#change-mount-point").val("illegal");
modalButtons.change().click();
expect(arangoHelper.arangoError).toHaveBeenCalled();
});
});
});
}());