consider path when determining if an IA profile user can view a topic
[websub-hub] / test / src / manager.js
index 7db6b84e8ef49021bc6deedc9b0c271162d2a620..9d8c380ff3b300b25d2841de4dffea19b6b05cf5 100644 (file)
@@ -33,6 +33,7 @@ describe('Manager', function () {
     };
     ctx = {
       params: {},
+      queryParams: {},
     };
     manager = new Manager(stubLogger, stubDb, options);
     sinon.stub(manager.communication, 'verificationProcess');
@@ -59,18 +60,6 @@ describe('Manager', function () {
       await manager.getRoot(req, res, ctx);
       assert(res.end.called);
     });
-    it('repeat response', async function () {
-      manager.startTime = (new Date()).toGMTString();
-      common.isClientCached.returns(true);
-      await manager.getRoot(req, res, ctx);
-      assert(res.end.called);
-    });
-    it('cached response', async function () {
-      common.isClientCached.returns(true);
-      await manager.getRoot(req, res, ctx);
-      assert(res.end.called);
-      assert.strictEqual(res.statusCode, 304);      
-    });
   }); // getRoot
 
   describe('getHealthcheck', function () {
@@ -149,6 +138,31 @@ describe('Manager', function () {
     });
   }); // getInfo
 
+  describe('_historyBarCaption', function () {
+    it('covers today, none', function () {
+      const result = Manager._historyBarCaption(0, 0);
+      assert.strictEqual(result, 'today, no updates');
+    });
+    it('covers yesterday, singular', function () {
+      const result = Manager._historyBarCaption(1, 1);
+      assert.strictEqual(result, 'yesterday, 1 update');
+    });
+    it('covers older, plural', function () {
+      const result = Manager._historyBarCaption(7, 3);
+      assert.strictEqual(result, '7 days ago, 3 updates');
+    });
+  }); // _historyBarCaption
+
+  describe('getHistorySVG', function () {
+    beforeEach(function () {
+      manager.db.topicPublishHistory.resolves([0, 1, 2, 1, 0, 1, 2, 0, 1]);
+    });
+    it('covers', async function () {
+      await manager.getHistorySVG(res, ctx);
+      assert(res.end.called);
+    });
+  }); // getHistorySVG
+
   describe('getAdminOverview', function () {
     beforeEach(function () {
       manager.db.topicGetAll.resolves([
@@ -193,7 +207,7 @@ describe('Manager', function () {
       manager.db.topicGetById.resolves({
         id: '56c557ce-e667-11eb-bd80-0025905f714a',
         created: new Date(),
-        url: 'https://example.com/',
+        url: 'https://example.com/topic',
         leaseSecondsPreferred: 123,
         leaseSecondsMin: 12,
         leaseSecondsMax: 123456789,
@@ -224,6 +238,7 @@ describe('Manager', function () {
         deliveryAttemptsSinceSuccess: 0,
         deliveryNextAttempt: new Date(-Infinity),
       }]);
+      manager.db.topicPublishHistory.resolves([0, 1, 0, 1, 0]);
     });
     it('covers', async function() {
       await manager.getTopicDetails(res, ctx);
@@ -239,7 +254,7 @@ describe('Manager', function () {
     });
     it('covers matching profile', async function () {
       ctx.session = {
-        authenticatedProfile: 'https://example.com/profile',
+        authenticatedProfile: 'https://example.com/',
       };
       await manager.getTopicDetails(res, ctx);
       assert(ctx.topic);
@@ -352,6 +367,34 @@ describe('Manager', function () {
     });
   }); // postRoot
 
+  describe('_profileControlsTopic', function () {
+    let profileUrlObj, topicUrlObj;
+    it('allows exact match', function () {
+      profileUrlObj = new URL('https://profile.example.com/');
+      topicUrlObj = new URL('https://profile.example.com/');
+      const result = Manager._profileControlsTopic(profileUrlObj, topicUrlObj);
+      assert.strictEqual(result, true);
+    });
+    it('allows descendent-path match', function () {
+      profileUrlObj = new URL('https://profile.example.com/');
+      topicUrlObj = new URL('https://profile.example.com/feed/atom');
+      const result = Manager._profileControlsTopic(profileUrlObj, topicUrlObj);
+      assert.strictEqual(result, true);
+    });
+    it('disallows non-descendent-path', function () {
+      profileUrlObj = new URL('https://profile.example.com/itsame');
+      topicUrlObj = new URL('https://profile.example.com/');
+      const result = Manager._profileControlsTopic(profileUrlObj, topicUrlObj);
+      assert.strictEqual(result, false);
+    });
+    it('disallows non-matched host', function () {
+      profileUrlObj = new URL('https://profile.example.com/itsame');
+      topicUrlObj = new URL('https://elsewhere.example.com/itsame/feed');
+      const result = Manager._profileControlsTopic(profileUrlObj, topicUrlObj);
+      assert.strictEqual(result, false);
+    });
+  }); // _profileControlsTopic
+
   describe('_getRootData', function () {
     it('extracts expected values', function () {
       req.getHeader.returns('user@example.com');