summary refs log tree commit diff
path: root/syweb/webclient/test/unit/commands-service.spec.js
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2014-11-13 14:35:53 +0000
committerKegan Dougal <kegan@matrix.org>2014-11-13 14:35:58 +0000
commitcadcc6cabed8e6c679fc5cf58bb3809f8f1465ba (patch)
treecbd549f1075097b369196c33359421c579012691 /syweb/webclient/test/unit/commands-service.spec.js
parentremove nganimate dependency as it seems to feature disproportionately highly ... (diff)
downloadsynapse-cadcc6cabed8e6c679fc5cf58bb3809f8f1465ba.tar.xz
Add commands-service unit tests.
Diffstat (limited to 'syweb/webclient/test/unit/commands-service.spec.js')
-rw-r--r--syweb/webclient/test/unit/commands-service.spec.js143
1 files changed, 143 insertions, 0 deletions
diff --git a/syweb/webclient/test/unit/commands-service.spec.js b/syweb/webclient/test/unit/commands-service.spec.js
new file mode 100644
index 0000000000..142044f153
--- /dev/null
+++ b/syweb/webclient/test/unit/commands-service.spec.js
@@ -0,0 +1,143 @@
+describe('CommandsService', function() {
+    var scope;
+    var roomId = "!dlwifhweu:localhost";
+    
+    var testPowerLevelsEvent, testMatrixServicePromise;
+    
+    var matrixService = { // these will be spyed on by jasmine, hence stub methods
+        setDisplayName: function(args){},
+        kick: function(args){},
+        ban: function(args){},
+        unban: function(args){},
+        setUserPowerLevel: function(args){}
+    };
+    
+    var modelService = {
+        getRoom: function(roomId) {
+            return {
+                room_id: roomId,
+                current_room_state: {
+                    events: {
+                        "m.room.power_levels": testPowerLevelsEvent
+                    },
+                    state: function(type, key) {
+                        return key ? this.events[type+key] : this.events[type];
+                    }
+                }
+            };
+        }
+    };
+    
+    
+    // helper function for asserting promise outcomes
+    NOTHING = "[Promise]";
+    RESOLVED = "[Resolved promise]";
+    REJECTED = "[Rejected promise]";
+    var expectPromise = function(promise, expects) {
+        var value = NOTHING;
+        promise.then(function(result) {
+            value = RESOLVED;
+        }, function(fail) {
+            value = REJECTED;
+        });
+        scope.$apply();
+        expect(value).toEqual(expects);
+    };
+
+    // setup the service and mocked dependencies
+    beforeEach(function() {
+        
+        // set default mock values
+        testPowerLevelsEvent = {
+            content: {
+                default: 50
+            },
+            user_id: "@foo:bar",
+            room_id: roomId
+        }
+        
+        // mocked dependencies
+        module(function ($provide) {
+          $provide.value('matrixService', matrixService);
+          $provide.value('modelService', modelService);
+        });
+        
+        // tested service
+        module('commandsService');
+    });
+    
+    beforeEach(inject(function($rootScope, $q) {
+        scope = $rootScope;
+        testMatrixServicePromise = $q.defer();
+    }));
+
+    it('should reject a no-arg "/nick".', inject(
+    function(commandsService) {
+        var promise = commandsService.processInput(roomId, "/nick");
+        expectPromise(promise, REJECTED);
+    }));
+    
+    it('should be able to set a /nick with multiple words.', inject(
+    function(commandsService) {
+        spyOn(matrixService, 'setDisplayName').and.returnValue(testMatrixServicePromise);
+        var promise = commandsService.processInput(roomId, "/nick Bob Smith");
+        expect(matrixService.setDisplayName).toHaveBeenCalledWith("Bob Smith");
+        expect(promise).toBe(testMatrixServicePromise);
+    }));
+    
+    it('should be able to /kick a user without a reason.', inject(
+    function(commandsService) {
+        spyOn(matrixService, 'kick').and.returnValue(testMatrixServicePromise);
+        var promise = commandsService.processInput(roomId, "/kick @bob:matrix.org");
+        expect(matrixService.kick).toHaveBeenCalledWith(roomId, "@bob:matrix.org", undefined);
+        expect(promise).toBe(testMatrixServicePromise);
+    }));
+    
+    it('should be able to /kick a user with a reason.', inject(
+    function(commandsService) {
+        spyOn(matrixService, 'kick').and.returnValue(testMatrixServicePromise);
+        var promise = commandsService.processInput(roomId, "/kick @bob:matrix.org he smells");
+        expect(matrixService.kick).toHaveBeenCalledWith(roomId, "@bob:matrix.org", "he smells");
+        expect(promise).toBe(testMatrixServicePromise);
+    }));
+    
+    it('should be able to /ban a user without a reason.', inject(
+    function(commandsService) {
+        spyOn(matrixService, 'ban').and.returnValue(testMatrixServicePromise);
+        var promise = commandsService.processInput(roomId, "/ban @bob:matrix.org");
+        expect(matrixService.ban).toHaveBeenCalledWith(roomId, "@bob:matrix.org", undefined);
+        expect(promise).toBe(testMatrixServicePromise);
+    }));
+    
+    it('should be able to /ban a user with a reason.', inject(
+    function(commandsService) {
+        spyOn(matrixService, 'ban').and.returnValue(testMatrixServicePromise);
+        var promise = commandsService.processInput(roomId, "/ban @bob:matrix.org he smells");
+        expect(matrixService.ban).toHaveBeenCalledWith(roomId, "@bob:matrix.org", "he smells");
+        expect(promise).toBe(testMatrixServicePromise);
+    }));
+    
+    it('should be able to /unban a user.', inject(
+    function(commandsService) {
+        spyOn(matrixService, 'unban').and.returnValue(testMatrixServicePromise);
+        var promise = commandsService.processInput(roomId, "/unban @bob:matrix.org");
+        expect(matrixService.unban).toHaveBeenCalledWith(roomId, "@bob:matrix.org");
+        expect(promise).toBe(testMatrixServicePromise);
+    }));
+    
+    it('should be able to /op a user.', inject(
+    function(commandsService) {
+        spyOn(matrixService, 'setUserPowerLevel').and.returnValue(testMatrixServicePromise);
+        var promise = commandsService.processInput(roomId, "/op @bob:matrix.org 50");
+        expect(matrixService.setUserPowerLevel).toHaveBeenCalledWith(roomId, "@bob:matrix.org", 50, testPowerLevelsEvent);
+        expect(promise).toBe(testMatrixServicePromise);
+    }));
+    
+    it('should be able to /deop a user.', inject(
+    function(commandsService) {
+        spyOn(matrixService, 'setUserPowerLevel').and.returnValue(testMatrixServicePromise);
+        var promise = commandsService.processInput(roomId, "/deop @bob:matrix.org");
+        expect(matrixService.setUserPowerLevel).toHaveBeenCalledWith(roomId, "@bob:matrix.org", undefined, testPowerLevelsEvent);
+        expect(promise).toBe(testMatrixServicePromise);
+    }));
+});