summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--syweb/webclient/components/matrix/event-stream-service.js4
-rw-r--r--syweb/webclient/test/unit/event-stream-service.spec.js80
2 files changed, 84 insertions, 0 deletions
diff --git a/syweb/webclient/components/matrix/event-stream-service.js b/syweb/webclient/components/matrix/event-stream-service.js
index c03f0b953b..be60de7472 100644
--- a/syweb/webclient/components/matrix/event-stream-service.js
+++ b/syweb/webclient/components/matrix/event-stream-service.js
@@ -124,6 +124,10 @@ angular.module('eventStreamService', [])
     };
     
     return {
+        // expose these values for testing
+        SERVER_TIMEOUT: SERVER_TIMEOUT_MS,
+        CLIENT_TIMEOUT: CLIENT_TIMEOUT_MS,
+    
         // resume the stream from whereever it last got up to. Typically used
         // when the page is opened.
         resume: function() {
diff --git a/syweb/webclient/test/unit/event-stream-service.spec.js b/syweb/webclient/test/unit/event-stream-service.spec.js
new file mode 100644
index 0000000000..6fd7693a70
--- /dev/null
+++ b/syweb/webclient/test/unit/event-stream-service.spec.js
@@ -0,0 +1,80 @@
+describe('EventStreamService', function() {
+    var q, scope;
+
+    var testInitialSync, testEventStream;
+
+    var matrixService = {
+        initialSync: function(limit, feedback) {
+            var defer = q.defer();
+            defer.resolve(testInitialSync);
+            return defer.promise;
+        },
+        getEventStream: function(from, svrTimeout, cliTimeout) {
+            var defer = q.defer();
+            defer.resolve(testEventStream);
+            return defer.promise;
+        }
+    };
+    
+    var eventHandlerService = {
+        handleInitialSyncDone: function(response) {
+        
+        },
+        
+        handleEvents: function(chunk, isLive) {
+        
+        }
+    };
+
+    // setup the dependencies
+    beforeEach(function() {
+    
+        // reset test data
+        testInitialSync = {
+            data: {
+                end: "foo",
+                presence: [],
+                rooms: []
+            }
+        };
+        testEventStream = {
+            data: {
+                start: "foostart",
+                end: "fooend",
+                chunk: []
+            }
+        };
+    
+        // dependencies
+        module(function ($provide) {
+          $provide.value('matrixService', matrixService);
+          $provide.value('eventHandlerService', eventHandlerService);
+        });
+        
+        // tested service
+        module('eventStreamService');
+    });
+    
+    beforeEach(inject(function($q, $rootScope) {
+        q = $q;
+        scope = $rootScope;
+    }));
+
+    it('should start with /initialSync then go onto /events', inject(
+    function(eventStreamService) {
+        spyOn(eventHandlerService, "handleInitialSyncDone");
+        spyOn(eventHandlerService, "handleEvents");
+        eventStreamService.resume();
+        scope.$apply(); // initialSync request
+        expect(eventHandlerService.handleInitialSyncDone).toHaveBeenCalledWith(testInitialSync);
+        expect(eventHandlerService.handleEvents).toHaveBeenCalledWith(testEventStream.data.chunk, true);
+    }));
+    
+    it('should use the end token in /initialSync for the next /events request', inject(
+    function(eventStreamService) {
+        spyOn(matrixService, "getEventStream").and.callThrough();
+        eventStreamService.resume();
+        scope.$apply(); // initialSync request
+        expect(matrixService.getEventStream).toHaveBeenCalledWith("foo", eventStreamService.SERVER_TIMEOUT, eventStreamService.CLIENT_TIMEOUT);
+    }));
+});