Skip to content

Commit

Permalink
Merge pull request #999 from Particular/add_select_all_to_archived_view
Browse files Browse the repository at this point in the history
Add a `Select-all` button to archive view
  • Loading branch information
WilliamBZA committed Mar 19, 2021
2 parents bf47f55 + c0be7d2 commit 73f9b0a
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 6 deletions.
@@ -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

0 comments on commit 73f9b0a

Please sign in to comment.