Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a Select-all button to archive view #999

Merged
merged 2 commits into from Mar 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,67 @@
describe('archivedMessageController',
function() {
beforeEach(module('sc'));

var $controller;

beforeEach(inject(function(_$controller_) {
$controller = _$controller_;
}));

describe('when calling selectAllMessages',
function() {
var controller, serviceControlService, root, deferred, getFailedMessageSpy;

beforeEach(inject(function ($rootScope, notifyService, $q) {
root = $rootScope;
this.notifyService = notifyService;
serviceControlService = { getExceptionGroups: function () { }, getFailedMessages: function(){ } };
deferred = $q.defer();
spyOn(serviceControlService, 'getExceptionGroups').and.callFake(function () {

return deferred.promise;
});

getFailedMessageSpy = spyOn(serviceControlService, 'getFailedMessages').and.callFake(function () {
return deferred.promise;
});

controller = $controller('archivedMessageController',
{
$scope: root,
$interval: function(){},
sharedDataService: { getstats: function() { return { number_of_pending_retries: 0 }; }, getConfiguration: function() {return {data_retention: {error_retention_period: "00:00:00"}};} },
notifyService: notifyService,
serviceControlService: serviceControlService,
failedMessageGroupsService: null
});
}));

it('all messages should be selected',
function () {

controller.archives = [{id: 0, selected: false}, {id: 1, selected: false}, {id:2, selected: false}];

controller.selectAllMessages();

expect(controller.archives[0].selected).toEqual(true);
expect(controller.archives[1].selected).toEqual(true);
expect(controller.archives[2].selected).toEqual(true);
expect(controller.selectedIds.length).toEqual(3);
});

it('if any message was selected, all should be unselected',
function () {

controller.archives = [{id: 0, selected: false}, {id: 1, selected: true}, {id:2, selected: false}];
controller.selectedIds = [1];

controller.selectAllMessages();

expect(controller.archives[0].selected).toEqual(false);
expect(controller.archives[1].selected).toEqual(false);
expect(controller.archives[2].selected).toEqual(false);
expect(controller.selectedIds.length).toEqual(0);
});
});
});
Expand Up @@ -8,6 +8,65 @@
$controller = _$controller_;
}));

describe('when calling selectAllMessages',
function() {
var controller, serviceControlService, root, deferred, getFailedMessageSpy;

beforeEach(inject(function ($rootScope, notifyService, $q) {
root = $rootScope;
this.notifyService = notifyService;
serviceControlService = { getExceptionGroups: function () { }, getFailedMessages: function(){ } };
deferred = $q.defer();
spyOn(serviceControlService, 'getExceptionGroups').and.callFake(function () {

return deferred.promise;
});

getFailedMessageSpy = spyOn(serviceControlService, 'getFailedMessages').and.callFake(function () {
return deferred.promise;
});

controller = $controller('failedMessagesController',
{
$scope: root,
$timeout: null,
$interval: function(){},
$location: null,
sharedDataService: { getstats: function() { return { number_of_pending_retries: 0 }; } },
notifyService: notifyService,
serviceControlService: serviceControlService,
failedMessageGroupsService: null
});
}));

it('all messages should be selected',
function () {

controller.failedMessages = [{id: 0, selected: false}, {id: 1, selected: false}, {id:2, selected: false}];

controller.selectAllMessages();

expect(controller.failedMessages[0].selected).toEqual(true);
expect(controller.failedMessages[1].selected).toEqual(true);
expect(controller.failedMessages[2].selected).toEqual(true);
expect(controller.selectedIds.length).toEqual(3);
});

it('if any message was selected, all should be unselected',
function () {

controller.failedMessages = [{id: 0, selected: false}, {id: 1, selected: true}, {id:2, selected: false}];
controller.selectedIds = [1];

controller.selectAllMessages();

expect(controller.failedMessages[0].selected).toEqual(false);
expect(controller.failedMessages[1].selected).toEqual(false);
expect(controller.failedMessages[2].selected).toEqual(false);
expect(controller.selectedIds.length).toEqual(0);
});
});

describe('when loading the data with infinite scroll',
function() {
var controller, serviceControlService, root, deferred, getFailedMessageSpy;
Expand All @@ -18,10 +77,10 @@
serviceControlService = { getExceptionGroups: function () { }, getFailedMessages: function(){ } };
deferred = $q.defer();
spyOn(serviceControlService, 'getExceptionGroups').and.callFake(function () {

return deferred.promise;
});

getFailedMessageSpy = spyOn(serviceControlService, 'getFailedMessages').and.callFake(function () {
return deferred.promise;
});
Expand All @@ -42,10 +101,10 @@
it('no load happens when initial load is in progress',
function () {
expect(getFailedMessageSpy).toHaveBeenCalledTimes(1);

controller.loadMoreResults(controller.selectedExceptionGroup, true);

expect(getFailedMessageSpy).toHaveBeenCalledTimes(1);
expect(getFailedMessageSpy).toHaveBeenCalledTimes(1);
});

it('load happens when initial load is done',
Expand All @@ -58,5 +117,5 @@
expect(getFailedMessageSpy).toHaveBeenCalledTimes(2);
});

});
});
});
3 changes: 2 additions & 1 deletion src/ServicePulse.Host/app/js/views/archive/archive-view.html
Expand Up @@ -13,7 +13,7 @@
<failed-message-tabs></failed-message-tabs>
</div>


<div class="row" ng-show="vm.selectedArchiveGroup.id && vm.archives.length > 0">
<div class="col-sm-12">
<div ng-show="!vm.selectedArchiveGroup.id" class="active">All deleted messages ({{vm.archives.length}} / {{vm.selectedExceptionGroup.count}} | number)</div>
Expand All @@ -27,6 +27,7 @@ <h3 class="active group-title group-message-count">{{vm.total | number}} message
<div class="row" ng-show="!vm.loadingData">
<div class="col-sm-12">
<div class="btn-toolbar">
<button type="button" class="btn btn-default select-all" ng-click="vm.selectAllMessages()"><span ng-show="vm.selectedIds.length == 0">Select all</span><span ng-hide="vm.selectedIds.length == 0">Clear selection</span></button>
<button type="button" class="btn btn-default" confirm-title="Are you sure you want to restore the selected messages?" confirm-message="Restored messages will be moved back to the list of failed messages." confirm-click="vm.unarchiveSelected()" ng-disabled="vm.selectedIds.length == 0"><i class="fa fa-undo"></i> Restore {{vm.selectedIds.length | number}} selected</button>

<div class="msg-group-menu dropdown msg-list-dropdown">
Expand Down
16 changes: 16 additions & 0 deletions src/ServicePulse.Host/app/js/views/archive/controller.js
Expand Up @@ -127,6 +127,22 @@
}
};

vm.selectAllMessages = function() {
var selectAll = true;
if(vm.selectedIds.length > 0) {
selectAll = false;
}
vm.selectedIds = [];
vm.archives.forEach(function(item) {
if (selectAll) {
item.selected = true;
vm.selectedIds.push(item.id);
} else {
item.selected = false;
}
});
};

vm.unarchiveSelected = function () {
archivedMessageService.restoreMessagesFromArchive(vm.selectedIds, 'Request to restore message accepted', 'Request to restore message rejected')
.then(function (message) {
Expand Down