From 92ea45070ce79122d2d3ddc80c868e5ad20f6656 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 12 Nov 2014 15:58:22 +0000 Subject: Add recentsService unit tests. --- syweb/webclient/test/unit/recents-service.spec.js | 114 ++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 syweb/webclient/test/unit/recents-service.spec.js (limited to 'syweb/webclient/test') diff --git a/syweb/webclient/test/unit/recents-service.spec.js b/syweb/webclient/test/unit/recents-service.spec.js new file mode 100644 index 0000000000..6aba140ef5 --- /dev/null +++ b/syweb/webclient/test/unit/recents-service.spec.js @@ -0,0 +1,114 @@ +describe('RecentsService', function() { + var scope; + var MSG_EVENT = "__test__"; + + var testEventContainsBingWord, testIsLive, testEvent; + + var eventHandlerService = { + MSG_EVENT: MSG_EVENT, + eventContainsBingWord: function(event) { + return testEventContainsBingWord; + } + }; + + // setup the service and mocked dependencies + beforeEach(function() { + + // set default mock values + testEventContainsBingWord = false; + testIsLive = true; + testEvent = { + content: { + body: "Hello world", + msgtype: "m.text" + }, + user_id: "@alfred:localhost", + room_id: "!fl1bb13:localhost", + event_id: "fwuegfw@localhost" + } + + // mocked dependencies + module(function ($provide) { + $provide.value('eventHandlerService', eventHandlerService); + }); + + // tested service + module('recentsService'); + }); + + beforeEach(inject(function($rootScope) { + scope = $rootScope; + })); + + it('should start with no unread messages.', inject( + function(recentsService) { + expect(recentsService.getUnreadMessages()).toEqual({}); + expect(recentsService.getUnreadBingMessages()).toEqual({}); + })); + + it('should NOT add an unread message to the room currently selected.', inject( + function(recentsService) { + recentsService.setSelectedRoomId(testEvent.room_id); + scope.$broadcast(MSG_EVENT, testEvent, testIsLive); + expect(recentsService.getUnreadMessages()).toEqual({}); + expect(recentsService.getUnreadBingMessages()).toEqual({}); + })); + + it('should add an unread message to the room NOT currently selected.', inject( + function(recentsService) { + recentsService.setSelectedRoomId("!someotherroomid:localhost"); + scope.$broadcast(MSG_EVENT, testEvent, testIsLive); + + var unread = {}; + unread[testEvent.room_id] = 1; + expect(recentsService.getUnreadMessages()).toEqual(unread); + })); + + it('should add an unread message and an unread bing message if a message contains a bing word.', inject( + function(recentsService) { + recentsService.setSelectedRoomId("!someotherroomid:localhost"); + testEventContainsBingWord = true; + scope.$broadcast(MSG_EVENT, testEvent, testIsLive); + + var unread = {}; + unread[testEvent.room_id] = 1; + expect(recentsService.getUnreadMessages()).toEqual(unread); + + var bing = {}; + bing[testEvent.room_id] = testEvent; + expect(recentsService.getUnreadBingMessages()).toEqual(bing); + })); + + it('should clear both unread and unread bing messages when markAsRead is called.', inject( + function(recentsService) { + recentsService.setSelectedRoomId("!someotherroomid:localhost"); + testEventContainsBingWord = true; + scope.$broadcast(MSG_EVENT, testEvent, testIsLive); + + var unread = {}; + unread[testEvent.room_id] = 1; + expect(recentsService.getUnreadMessages()).toEqual(unread); + + var bing = {}; + bing[testEvent.room_id] = testEvent; + expect(recentsService.getUnreadBingMessages()).toEqual(bing); + + recentsService.markAsRead(testEvent.room_id); + + unread[testEvent.room_id] = 0; + expect(recentsService.getUnreadMessages()).toEqual(unread); + expect(recentsService.getUnreadBingMessages()).toEqual({}); + })); + + it('should not add messages as unread if they are not live.', inject( + function(recentsService) { + testIsLive = false; + + recentsService.setSelectedRoomId("!someotherroomid:localhost"); + testEventContainsBingWord = true; + scope.$broadcast(MSG_EVENT, testEvent, testIsLive); + + expect(recentsService.getUnreadMessages()).toEqual({}); + expect(recentsService.getUnreadBingMessages()).toEqual({}); + })); +}); -- cgit 1.5.1 From 813125e122d395fb199fc6fd52aca5b252b960c0 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 12 Nov 2014 16:01:01 +0000 Subject: Make earlier versions of jasmine happy by doing explicit object comparisons --- syweb/webclient/test/unit/recents-service.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'syweb/webclient/test') diff --git a/syweb/webclient/test/unit/recents-service.spec.js b/syweb/webclient/test/unit/recents-service.spec.js index 6aba140ef5..93d351d45f 100644 --- a/syweb/webclient/test/unit/recents-service.spec.js +++ b/syweb/webclient/test/unit/recents-service.spec.js @@ -96,8 +96,9 @@ describe('RecentsService', function() { recentsService.markAsRead(testEvent.room_id); unread[testEvent.room_id] = 0; + bing[testEvent.room_id] = undefined; expect(recentsService.getUnreadMessages()).toEqual(unread); - expect(recentsService.getUnreadBingMessages()).toEqual({}); + expect(recentsService.getUnreadBingMessages()).toEqual(bing); })); it('should not add messages as unread if they are not live.', inject( -- cgit 1.5.1 From 3d3f692fd8a3fe07daf2f5b8811ebc00846b60c1 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 12 Nov 2014 16:22:14 +0000 Subject: Add test coverage to the webclient. Update .gitignore --- .gitignore | 3 ++- syweb/webclient/components/matrix/matrix-service.js | 2 +- syweb/webclient/test/karma.conf.js | 16 +++++++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) (limited to 'syweb/webclient/test') diff --git a/.gitignore b/.gitignore index 3d14ac8c03..339a99e0d6 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ graph/*.png graph/*.dot **/webclient/config.js -webclient/test/environment-protractor.js +**/webclient/test/coverage/ +**/webclient/test/environment-protractor.js uploads diff --git a/syweb/webclient/components/matrix/matrix-service.js b/syweb/webclient/components/matrix/matrix-service.js index c1264887c8..cfe8691f85 100644 --- a/syweb/webclient/components/matrix/matrix-service.js +++ b/syweb/webclient/components/matrix/matrix-service.js @@ -23,7 +23,7 @@ This serves to isolate the caller from changes to the underlying url paths, as well as attach common params (e.g. access_token) to requests. */ angular.module('matrixService', []) -.factory('matrixService', ['$http', '$q', '$rootScope', function($http, $q, $rootScope) { +.factory('matrixService', ['$http', '$q', function($http, $q) { /* * Permanent storage of user information diff --git a/syweb/webclient/test/karma.conf.js b/syweb/webclient/test/karma.conf.js index 5f0642ca33..37a9eaf1c1 100644 --- a/syweb/webclient/test/karma.conf.js +++ b/syweb/webclient/test/karma.conf.js @@ -52,18 +52,32 @@ module.exports = function(config) { // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { + '../login/**/*.js': 'coverage', + '../room/**/*.js': 'coverage', + '../components/**/*.js': 'coverage', + '../user/**/*.js': 'coverage', + '../home/**/*.js': 'coverage', + '../recents/**/*.js': 'coverage', + '../settings/**/*.js': 'coverage', + '../app.js': 'coverage' }, // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress', 'junit'], + reporters: ['progress', 'junit', 'coverage'], junitReporter: { outputFile: 'test-results.xml', suite: '' }, + coverageReporter: { + type: 'cobertura', + dir: 'coverage/', + file: 'coverage.xml' + }, + // web server port port: 9876, -- cgit 1.5.1 From 59cf6f5ec90ab0beac74739934b93c2c3163147e Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 12 Nov 2014 16:32:17 +0000 Subject: Add more recents service unit tests. --- syweb/webclient/test/unit/recents-service.spec.js | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'syweb/webclient/test') diff --git a/syweb/webclient/test/unit/recents-service.spec.js b/syweb/webclient/test/unit/recents-service.spec.js index 93d351d45f..a2f9ecbaf8 100644 --- a/syweb/webclient/test/unit/recents-service.spec.js +++ b/syweb/webclient/test/unit/recents-service.spec.js @@ -112,4 +112,42 @@ describe('RecentsService', function() { expect(recentsService.getUnreadMessages()).toEqual({}); expect(recentsService.getUnreadBingMessages()).toEqual({}); })); + + it('should increment the unread message count.', inject( + function(recentsService) { + recentsService.setSelectedRoomId("!someotherroomid:localhost"); + scope.$broadcast(MSG_EVENT, testEvent, testIsLive); + + var unread = {}; + unread[testEvent.room_id] = 1; + expect(recentsService.getUnreadMessages()).toEqual(unread); + + scope.$broadcast(MSG_EVENT, testEvent, testIsLive); + + unread[testEvent.room_id] = 2; + expect(recentsService.getUnreadMessages()).toEqual(unread); + })); + + it('should set the bing event to the latest message to contain a bing word.', inject( + function(recentsService) { + recentsService.setSelectedRoomId("!someotherroomid:localhost"); + testEventContainsBingWord = true; + scope.$broadcast(MSG_EVENT, testEvent, testIsLive); + + var nextEvent = angular.copy(testEvent); + nextEvent.content.body = "Goodbye cruel world."; + nextEvent.event_id = "erfuerhfeaaaa@localhost"; + scope.$broadcast(MSG_EVENT, nextEvent, testIsLive); + + var bing = {}; + bing[testEvent.room_id] = nextEvent; + expect(recentsService.getUnreadBingMessages()).toEqual(bing); + })); + + it('should do nothing when marking an unknown room ID as read.', inject( + function(recentsService) { + recentsService.markAsRead("!someotherroomid:localhost"); + expect(recentsService.getUnreadMessages()).toEqual({}); + expect(recentsService.getUnreadBingMessages()).toEqual({}); + })); }); -- cgit 1.5.1