fix unauthenticated topic details flow
[websub-hub] / test / src / service.js
1 /* eslint-env mocha */
2 /* eslint-disable capitalized-comments */
3
4 'use strict';
5
6 const assert = require('assert');
7 const sinon = require('sinon'); // eslint-disable-line node/no-unpublished-require
8
9 const stubDb = require('../stub-db');
10 const stubLogger = require('../stub-logger');
11 const Service = require('../../src/service');
12 const Config = require('../../config');
13
14
15 describe('Service', function () {
16 let service, options;
17 let req, res, ctx;
18
19 beforeEach(function () {
20 options = new Config('test');
21 service = new Service(stubLogger, stubDb, options);
22 sinon.stub(service.manager);
23 sinon.stub(service.sessionManager);
24 sinon.stub(service.authenticator);
25 sinon.stub(service, 'setResponseType');
26 sinon.stub(service, 'serveFile');
27 sinon.stub(service, 'ingestBody').resolves();
28 req = {
29 getHeader: sinon.stub(),
30 };
31 res = {
32 setHeader: sinon.stub(),
33 write: sinon.stub(),
34 end: sinon.stub(),
35 };
36 ctx = {
37 params: {},
38 };
39 });
40
41 afterEach(function () {
42 sinon.restore();
43 });
44
45 it('instantiates', function () {
46 assert(service);
47 });
48
49 describe('maybeIngestBody', function () {
50 beforeEach(function () {
51 sinon.stub(service, 'bodyData');
52 sinon.stub(service, 'parseBody').returns();
53 });
54 it('covers no body', async function() {
55 service.bodyData.resolves();
56 await service.maybeIngestBody(req, res, ctx);
57 });
58 it('covers body', async function() {
59 service.bodyData.resolves('data');
60 await service.maybeIngestBody(req, res, ctx);
61 });
62 }); // maybeIngestBody
63
64 describe('handlerPostRoot', function () {
65 it('covers public mode', async function () {
66 await service.handlerPostRoot(req, res, ctx);
67 assert(service.manager.postRoot.called);
68 });
69 }); // handlerPostRoot
70
71 describe('handlerGetRoot', function () {
72 it('covers', async function () {
73 await service.handlerGetRoot(req, res, ctx);
74 assert(service.manager.getRoot.called);
75 });
76 }); // handlerGetRoot
77
78 describe('handlerGetHealthcheck', function () {
79 it('covers', async function () {
80 await service.handlerGetHealthcheck(req, res, ctx);
81 assert(service.manager.getHealthcheck.called);
82 });
83 it('cover errors', async function () {
84 const expectedException = 'blah';
85 service.manager.getHealthcheck.rejects(expectedException);
86 try {
87 await service.handlerGetHealthcheck(req, res, ctx);
88 assert.fail('did not get expected exception');
89 } catch (e) {
90 assert.strictEqual(e.name, expectedException, 'did not get expected exception');
91 }
92 assert(service.manager.getHealthcheck.called);
93 });
94 }); // handlerGetHealthcheck
95
96 describe('handlerGetInfo', function () {
97 it('covers', async function () {
98 await service.handlerGetInfo(req, res, ctx);
99 assert(service.manager.getInfo.called);
100 });
101 }); // handlerGetInfo
102
103 describe('handlerGetHistorySVG', function () {
104 it('covers', async function () {
105 await service.handlerGetHistorySVG(req, res, ctx);
106 assert(service.manager.getHistorySVG.called);
107 });
108 }); // handlerGetHistorySVG
109
110 describe('handlerGetAdminOverview', function () {
111 it('covers authenticated', async function () {
112 service.authenticator.sessionRequired.resolves(false);
113 await service.handlerGetAdminOverview(req, res, ctx);
114 assert(service.authenticator.sessionRequired.called);
115 assert(service.manager.getAdminOverview.notCalled);
116 });
117 it('covers unauthenticated', async function () {
118 service.authenticator.sessionRequired.resolves(true);
119 await service.handlerGetAdminOverview(req, res, ctx);
120 assert(service.authenticator.sessionRequired.called);
121 assert(service.manager.getAdminOverview.called);
122 });
123 }); // handlerGetAdminOverview
124
125 describe('handlerGetAdminTopicDetails', function () {
126 it('covers unauthenticated', async function () {
127 service.authenticator.sessionRequired.resolves(false);
128 await service.handlerGetAdminTopicDetails(req, res, ctx);
129 assert(service.authenticator.sessionRequired.called);
130 assert(service.manager.getTopicDetails.notCalled);
131 });
132 it('covers authenticated', async function () {
133 service.authenticator.sessionRequired.resolves(true);
134 await service.handlerGetAdminTopicDetails(req, res, ctx);
135 assert(service.authenticator.sessionRequired.called);
136 assert(service.manager.getTopicDetails.called);
137 });
138 }); // handlerGetAdminTopicDetails
139
140 describe('handlerPostAdminProcess', function () {
141 it('covers', async function () {
142 service.serveFile.resolves();
143 await service.handlerPostAdminProcess(req, res, ctx);
144 assert(service.authenticator.apiRequiredLocal.called);
145 assert(service.manager.processTasks.called);
146 });
147 }); // handlerPostAdminProcess
148
149 describe('handlerUpdateTopic', function () {
150 it('covers', async function () {
151 sinon.stub(service, 'bodyData').resolves();
152 await service.handlerUpdateTopic(req, res, ctx);
153 assert(service.authenticator.apiRequiredLocal.called);
154 assert(service.manager.updateTopic.called);
155 });
156 }); // handlerUpdateTopic
157
158 describe('handlerUpdateSubscription', function () {
159 it('covers', async function () {
160 sinon.stub(service, 'bodyData').resolves();
161 await service.handlerUpdateSubscription(req, res, ctx);
162 assert(service.authenticator.apiRequiredLocal.called);
163 assert(service.manager.updateSubscription.called);
164 });
165 }); // handlerUpdateSubscription
166
167 describe('handlerGetAdminLogin', function () {
168 it('covers', async function () {
169 await service.handlerGetAdminLogin(req, res, ctx);
170 assert(service.sessionManager.getAdminLogin.called);
171 });
172 }); // handlerGetAdminLogin
173
174 describe('handlerPostAdminLogin', function () {
175 it('covers', async function () {
176 sinon.stub(service, 'bodyData').resolves();
177 await service.handlerPostAdminLogin(req, res, ctx);
178 assert(service.sessionManager.postAdminLogin.called);
179 });
180 }); // handlerPostAdminLogin
181
182 describe('handlerGetAdminLogout', function () {
183 it('covers', async function () {
184 await service.handlerGetAdminLogout(req, res, ctx);
185 assert(service.sessionManager.getAdminLogout.called);
186 });
187 }); // handlerGetAdminLogout
188
189 describe('handlerGetAdminIA', function () {
190 it('covers', async function () {
191 await service.handlerGetAdminIA(req, res, ctx);
192 assert(service.sessionManager.getAdminIA.called);
193 });
194 }); // handlerGetAdminIA
195
196 });