Skip to content

Commit

Permalink
Merge pull request #4951 from ZitaNemeckova/fix_error_message_god_button
Browse files Browse the repository at this point in the history
Catch 400 error and display it in flash message in GOD
  • Loading branch information
himdel committed Dec 11, 2018
2 parents 8615b74 + 2035006 commit 6565204
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 18 deletions.
Expand Up @@ -124,13 +124,34 @@ function mainCustomButtonFormController(API, miqService, $q, $http) {
};

vm.saveClicked = function() {
miqService.sparkleOn();
miqService.miqFlashClear(); // remove previous messages
var saveMsg = sprintf(__('%s "%s" has been successfully saved.'), vm.entity, vm.customButtonModel.name);
vm.saveWithAPI('put', '/api/custom_buttons/' + vm.customButtonRecordId, vm.prepSaveObject(), saveMsg);
return API.put('/api/custom_buttons/' + vm.customButtonRecordId, vm.prepSaveObject(), {skipErrors: [400]})
.then(function() {
miqService.redirectBack(saveMsg, 'success', vm.redirectUrl);
})
.catch(handleErrorMessages);
};

vm.addClicked = function() {
miqService.sparkleOn();
miqService.miqFlashClear(); // remove previous messages
var saveMsg = sprintf(__('%s "%s" has been successfully added.'), vm.entity, vm.customButtonModel.name);
vm.saveWithAPI('post', '/api/custom_buttons/', vm.prepSaveObject(), saveMsg);
return API.post('/api/custom_buttons/', vm.prepSaveObject(), {skipErrors: [400]})
.then(function(response) {
if (vm.customButtonGroupRecordId) {
var saveMsgBtnInGrp = sprintf(__('%s "%s" has been successfully added under the selected button group.'), vm.entity, vm.customButtonModel.name);
return $http.post('/generic_object_definition/add_button_in_group/' + vm.customButtonGroupRecordId + '?button_id=' + response.results[0].id)
.then(function() {
miqService.redirectBack(saveMsgBtnInGrp, 'success', vm.redirectUrl);
})
.catch(miqService.handleFailure);
} else {
miqService.redirectBack(saveMsg, 'success', vm.redirectUrl);
}
})
.catch(handleErrorMessages);
};

vm.prepSaveObject = function() {
Expand Down Expand Up @@ -182,26 +203,27 @@ function mainCustomButtonFormController(API, miqService, $q, $http) {
};
};

vm.saveWithAPI = function(method, url, saveObject, saveMsg) {
miqService.sparkleOn();

if (vm.customButtonGroupRecordId) {
var saveCustomButtonPromise = API[method](url, saveObject);
var saveMsgBtnInGrp = sprintf(__('%s "%s" has been successfully added under the selected button group.'), vm.entity, vm.customButtonModel.name);

saveCustomButtonPromise.then(function(response) {
$http.post('/generic_object_definition/add_button_in_group/' + vm.customButtonGroupRecordId + '?button_id=' + response.results[0].id)
.then(miqService.redirectBack.bind(vm, saveMsgBtnInGrp, 'success', vm.redirectUrl))
.catch(miqService.handleFailure);
// private functions
function handleErrorMessages(error) {
miqSparkleOff();
if (error.status === 400) {
var errorMessages = error.data.error.message.split(',');
errorMessages.forEach(function(message) {
if (message.includes("Name has already been taken")) {
add_flash(__("Name has already been taken"), "error");
return Promise.reject();
} else if (message.includes("Description has already been taken")) {
add_flash(__("Description has already been taken"), "error");
return Promise.reject();
} else {
return miqService.handleFailure();
}
});
} else {
API[method](url, saveObject)
.then(miqService.redirectBack.bind(vm, saveMsg, 'success', vm.redirectUrl))
.catch(miqService.handleFailure);
return miqService.handleFailure();
}
};
}

// private functions
function getCustomButtonFormData(response) {
Object.assign(vm.customButtonModel, response);

Expand Down
@@ -0,0 +1,70 @@
describe('main-custom-button-form-component', function() {
var $componentController, vm, miqService, API, $scope;
beforeEach(module('ManageIQ'));
beforeEach(inject(function (_$componentController_, _API_, _$httpBackend_, _miqService_, $rootScope, $q) {
$componentController = _$componentController_;
API = _API_;
miqService = _miqService_;
$scope = $rootScope.$new();
$httpBackend = _$httpBackend_;

var bindings = {genericObjectDefinitionRecordId: '1', customButtonGroupRecordId: '2', customButtonRecordId: '3', redirectUrl: '/redirect/url'};
vm = $componentController("mainCustomButtonFormComponent", null, bindings);
var deferred = $q.defer();
spyOn(API, 'get').and.callFake(function() {return deferred.promise;});
var domainsResponse = {
data:{
distinct_instances_across_domains: ["Automation", "Event", "GenericObject", "MiqEvent", "Request", "parse_automation_request", "parse_event_stream", "parse_provider_category"]
}
};
$httpBackend.whenGET('/generic_object_definition/retrieve_distinct_instances_across_domains').respond(domainsResponse);
vm.$onInit();
$httpBackend.flush();
}));

describe('#saveClick', function() {
beforeEach(function(){
spyOn(window, 'add_flash');
});

it('catch 400 and call add_flash if error is name/description taken', function(done) {
var rejectionData = {status: 400, data: {error: {message: "Name has already been taken, Description has already been taken"}}};
spyOn(API, 'put').and.returnValue(Promise.reject(rejectionData));
vm.saveClicked()
.then( function() {
expect(add_flash).toHaveBeenCalledWith("Name has already been taken", "error");
expect(add_flash).toHaveBeenCalledWith("Description has already been taken", "error");
done();
})
.catch(function() {
expect(add_flash).toHaveBeenCalledWith("Name has already been taken", "error");
expect(add_flash).toHaveBeenCalledWith("Description has already been taken", "error");

done();
});
});
});

describe('#addClick', function() {
beforeEach(function(){
spyOn(window, 'add_flash');
spyOn(miqService, 'handleFailure').and.callFake(function() {debugger;return Promise.reject()});
});

it('catch 400 and call add_flash', function(done) {
var rejectionData = {status: 400, data: {error: {message: "Name has already been taken, Description has already been taken"}}};
spyOn(API, 'post').and.returnValue(Promise.reject(rejectionData));
vm.addClicked()
.then( function() {
expect(add_flash).toHaveBeenCalledWith("Name has already been taken", "error");
expect(add_flash).toHaveBeenCalledWith("Description has already been taken", "error");
done();
})
.catch(function () {
expect(add_flash).toHaveBeenCalledWith("Name has already been taken", "error");
expect(add_flash).toHaveBeenCalledWith("Description has already been taken", "error");
done();
});
});
});
});

0 comments on commit 6565204

Please sign in to comment.