diff --git a/app/controllers/projectController.js b/app/controllers/projectController.js
index 581321bd..d61a84ba 100644
--- a/app/controllers/projectController.js
+++ b/app/controllers/projectController.js
@@ -19,8 +19,6 @@ metadataTool.controller('ProjectController', function ($controller, $scope, Aler
$scope.isEditing = false;
$scope.isSyncing = false;
- $scope.displayResponse = {"status":null,"message":null};
-
$scope.setFieldProfileForm = function(profile) {
if (profile) {
$scope.fieldProfileFormTitle = "Editing "+profile.gloss;
@@ -38,11 +36,9 @@ metadataTool.controller('ProjectController', function ($controller, $scope, Aler
}
};
- $scope.setFieldProfileForm();
-
UserService.userReady().then(function() {
- if($scope.isAdmin() || $scope.isManager()) {
+ if ($scope.isAdmin() || $scope.isManager()) {
$scope.projectServices.repositories = ProjectRepositoryRepo.getAll();
$scope.projectServices.authorities = ProjectAuthorityRepo.getAll();
$scope.projectServices.suggestors = ProjectSuggestorRepo.getAll();
@@ -92,7 +88,35 @@ metadataTool.controller('ProjectController', function ($controller, $scope, Aler
});
};
- $scope.projectHasService = function(project, serviceType, index) {
+ $scope.resetFieldProfileForm = function () {
+ $scope.closeModal();
+ $scope.setFieldProfileForm();
+
+ if ($scope.project) {
+ var facets = [
+ "project/" + $scope.project.id + "/add-field-profile",
+ "project/" + $scope.project.id + "/update-field-profile"
+ ];
+
+ var alerts;
+ var j;
+ for (var i in facets) {
+ alerts = AlertService.get(facets[i]);
+
+ if (alerts) {
+ for (j in alerts.list) {
+ AlertService.remove(alerts.list[j]);
+ }
+ }
+ }
+ }
+ };
+
+ $scope.onCancelFieldProfileForm = function () {
+ $scope.resetFieldProfileForm();
+ };
+
+ $scope.projectHasService = function (project, serviceType, index) {
var hasService = false;
angular.forEach(project[serviceType], function (projectService) {
@@ -106,7 +130,7 @@ metadataTool.controller('ProjectController', function ($controller, $scope, Aler
var manageProject = function(method,project) {
return ProjectRepo[method](project).then(function() {
- $scope.closeModal();
+ $scope.resetFieldProfileForm();
});
};
@@ -118,25 +142,19 @@ metadataTool.controller('ProjectController', function ($controller, $scope, Aler
var success = false;
if ($scope.isEditing) {
ProjectRepo.updateFieldProfile(projectId, profile, labels).then(function(data) {
- var response = processRestResponse(data, 'displayResponse');
- if (response) {
+ if (processRestResponse(data)) {
$scope.setFieldProfileForm();
}
});
} else {
ProjectRepo.addFieldProfile(projectId, profile, labels).then(function(data) {
- var response = processRestResponse(data, 'displayResponse');
- if (response) {
+ if (processRestResponse(data)) {
$scope.setFieldProfileForm();
}
});
}
};
- $scope.clearDisplayResponse = function() {
- $scope.displayResponse = {"status":null,"message":null};
- };
-
/*
* Processes Rest response for modal context
* Writes error message to provided model
@@ -145,21 +163,12 @@ metadataTool.controller('ProjectController', function ($controller, $scope, Aler
*
*/
- var processRestResponse = function(data, displayModelName) {
+ var processRestResponse = function (data) {
var response = angular.fromJson(data.body);
- var result = null;
- if (response.status == 500) {
- $scope[displayModelName].status = false;
- $scope[displayModelName].message = response.error;
- } else if (response.meta.status == "ERROR") {
- $scope[displayModelName].status = false;
- $scope[displayModelName].message = response.meta.message;
- } else {
- $scope[displayModelName].status = true;
- $scope[displayModelName].message = response.meta.message;
- result = response;
+ if (response.status === 500 || response.meta.status === "ERROR") {
+ return false;
}
- return result;
+ return true;
};
$scope.syncDocuments = function (project) {
@@ -169,11 +178,13 @@ metadataTool.controller('ProjectController', function ($controller, $scope, Aler
if (response.meta.status === "SUCCESS") {
AlertService.add(response.meta, "app/projects");
}
- $scope.closeModal();
+ $scope.resetFieldProfileForm();
$scope.isSyncing = false;
});
};
- }
- });
+
+ $scope.resetFieldProfileForm();
+ }
+ });
});
diff --git a/app/views/modals/projectFieldProfiles.html b/app/views/modals/projectFieldProfiles.html
index c955e31a..9956946a 100644
--- a/app/views/modals/projectFieldProfiles.html
+++ b/app/views/modals/projectFieldProfiles.html
@@ -1,5 +1,5 @@
@@ -16,7 +16,7 @@
Current Field Profiles
{{fieldProfileFormTitle}}
-
{{displayResponse.message}}
+
@@ -87,6 +87,7 @@
{{fieldProfileFormTitle}}
+
diff --git a/tests/mocks/models/mockAlert.js b/tests/mocks/models/mockAlert.js
new file mode 100644
index 00000000..128e989e
--- /dev/null
+++ b/tests/mocks/models/mockAlert.js
@@ -0,0 +1,43 @@
+var dataAlert1 = {
+ id: 1,
+ channel: "unassigned",
+ class: "info",
+ fade: false,
+ fixed: false,
+ message: "Generic Alert",
+ remove: false,
+ time: 1576249725726,
+ type: "UNKNOWN"
+};
+
+var dataAlert2 = {
+ id: 2,
+ channel: "project/1/add-field-profile",
+ class: "danger",
+ fade: true,
+ fixed: false,
+ message: "(500) No message available",
+ remove: true,
+ time: 1576249725746,
+ type: "ERROR"
+};
+
+var dataAlert3 = {
+ id: 3,
+ channel: "project/1/update-field-profile",
+ class: "success",
+ fade: false,
+ fixed: true,
+ message: "Field Profile updated",
+ remove: true,
+ time: 1576249914577,
+ type: "SUCCESS"
+};
+
+var mockAlert = function($q) {
+ var model = mockModel("Alert", $q, dataAlert1);
+
+ return model;
+};
+
+angular.module('mock.alert', []).service('Alert', mockAlert);
diff --git a/tests/unit/controllers/projectController.js b/tests/unit/controllers/projectController.js
index dac4753e..c99b48a2 100644
--- a/tests/unit/controllers/projectController.js
+++ b/tests/unit/controllers/projectController.js
@@ -1,17 +1,20 @@
describe('controller: ProjectController', function () {
- var controller, q, scope;
+ var controller, q, scope, AlertService;
var initializeController = function(settings) {
- inject(function ($controller, $q, $rootScope, $window, _MetadataRepo_, _ModalService_, _RestApi_, _ProjectAuthorityRepo_, _ProjectRepo_, _ProjectRepositoryRepo_, _StorageService_, _ProjectSuggestorRepo_, _UserService_, _WsApi_) {
+ inject(function ($controller, $q, $rootScope, $window, _AlertService_, _MetadataRepo_, _ModalService_, _RestApi_, _ProjectAuthorityRepo_, _ProjectRepo_, _ProjectRepositoryRepo_, _StorageService_, _ProjectSuggestorRepo_, _UserService_, _WsApi_) {
q = $q;
scope = $rootScope.$new();
+ AlertService = _AlertService_;
+
sessionStorage.role = settings && settings.role ? settings.role : "ROLE_ADMIN";
controller = $controller('ProjectController', {
$scope: scope,
$window: $window,
+ AlertService: AlertService,
MetadataRepo: _MetadataRepo_,
ModalService: _ModalService_,
ProjectAuthorityRepo: _ProjectAuthorityRepo_,
@@ -34,6 +37,7 @@ describe('controller: ProjectController', function () {
beforeEach(function() {
module('core');
module('metadataTool');
+ module('mock.alert');
module('mock.metadataRepo');
module('mock.modalService');
module('mock.projectAuthorityRepo');
@@ -65,10 +69,6 @@ describe('controller: ProjectController', function () {
});
describe('Are the scope methods defined', function () {
- it('clearDisplayResponse should be defined', function () {
- expect(scope.clearDisplayResponse).toBeDefined();
- expect(typeof scope.clearDisplayResponse).toEqual("function");
- });
it('create should be defined', function () {
expect(scope.create).toBeDefined();
expect(typeof scope.create).toEqual("function");
@@ -77,10 +77,18 @@ describe('controller: ProjectController', function () {
expect(scope.delete).toBeDefined();
expect(typeof scope.delete).toEqual("function");
});
+ it('onCancelFieldProfileForm should be defined', function () {
+ expect(scope.onCancelFieldProfileForm).toBeDefined();
+ expect(typeof scope.onCancelFieldProfileForm).toEqual("function");
+ });
it('projectHasService should be defined', function () {
expect(scope.projectHasService).toBeDefined();
expect(typeof scope.projectHasService).toEqual("function");
});
+ it('resetFieldProfileForm should be defined', function () {
+ expect(scope.resetFieldProfileForm).toBeDefined();
+ expect(typeof scope.resetFieldProfileForm).toEqual("function");
+ });
it('setFieldProfileForm should be defined', function () {
expect(scope.setFieldProfileForm).toBeDefined();
expect(typeof scope.setFieldProfileForm).toEqual("function");
@@ -100,14 +108,6 @@ describe('controller: ProjectController', function () {
});
describe('Do the scope methods work as expected', function () {
- it('clearDisplayResponse should clear the response', function () {
- delete scope.displayResponse;
-
- scope.clearDisplayResponse();
-
- expect(scope.displayResponse.status).toBe(null);
- expect(scope.displayResponse.message).toBe(null);
- });
it('create should create a new project', function () {
var services = {};
@@ -132,12 +132,19 @@ describe('controller: ProjectController', function () {
expect(scope.newProjectServices).toBeDefined();
});
it('delete should delete an existing project', function () {
- spyOn(scope, 'closeModal');
+ spyOn(scope, 'resetFieldProfileForm');
scope.delete(dataProject1);
scope.$digest();
- expect(scope.closeModal).toHaveBeenCalled();
+ expect(scope.resetFieldProfileForm).toHaveBeenCalled();
+ });
+ it('onCancelFieldProfileForm should clear the response', function () {
+ spyOn(scope, 'resetFieldProfileForm');
+
+ scope.onCancelFieldProfileForm();
+
+ expect(scope.resetFieldProfileForm).toHaveBeenCalled();
});
it('projectHasService should return a boolean', function () {
var response;
@@ -154,6 +161,35 @@ describe('controller: ProjectController', function () {
expect(response).toBe(true);
});
+ it('resetFieldProfileForm should clear the response', function () {
+ var mockedAlerts;
+
+ AlertService.get = function() {
+ return mockedAlerts;
+ };
+
+ scope.project = new mockProject(q);
+
+ spyOn(scope, 'closeModal');
+ spyOn(scope, 'setFieldProfileForm');
+
+ scope.resetFieldProfileForm();
+ expect(scope.closeModal).toHaveBeenCalled();
+ expect(scope.setFieldProfileForm).toHaveBeenCalled();
+
+
+ spyOn(AlertService, 'remove');
+
+ mockedAlerts = {
+ list: [
+ dataAlert2,
+ dataAlert3
+ ]
+ };
+
+ scope.resetFieldProfileForm();
+ expect(AlertService.remove).toHaveBeenCalled();
+ });
it('setFieldProfileForm should setup the profile', function () {
var profile = {
gloss: "Test Profile",
@@ -174,13 +210,13 @@ describe('controller: ProjectController', function () {
it('syncDocuments should sync documents', function () {
delete scope.isSyncing;
- spyOn(scope, 'closeModal');
+ spyOn(scope, 'resetFieldProfileForm');
scope.syncDocuments(scope.projects[0]);
scope.$digest();
expect(scope.isSyncing).toBe(false);
- expect(scope.closeModal).toHaveBeenCalled();
+ expect(scope.resetFieldProfileForm).toHaveBeenCalled();
delete scope.isSyncing;
@@ -196,13 +232,13 @@ describe('controller: ProjectController', function () {
project.name += " updated";
project.dirty = function() {};
- spyOn(scope, 'closeModal');
+ spyOn(scope, 'resetFieldProfileForm');
spyOn(project, 'dirty');
scope.update(project);
scope.$digest();
- expect(scope.closeModal).toHaveBeenCalled();
+ expect(scope.resetFieldProfileForm).toHaveBeenCalled();
expect(project.dirty).toHaveBeenCalled();
project.dirty = function() {};