Skip to content

Commit

Permalink
update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mshustov committed May 23, 2019
1 parent 84c5c1d commit e0a607b
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 9 deletions.
105 changes: 104 additions & 1 deletion src/core/server/http/http_server.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,7 @@ test('registers auth request interceptor only once', async () => {
expect(doRegister()).rejects.toThrowError('Auth interceptor was already registered');
});

test('registers onRequest interceptor several times', async () => {
test('registers registerOnPostAuth interceptor several times', async () => {
const { registerOnPostAuth } = await server.setup(config);
const doRegister = () => registerOnPostAuth(() => null as any);

Expand Down Expand Up @@ -751,3 +751,106 @@ test('Should support disabling auth for a route', async () => {

expect(authenticate).not.toHaveBeenCalled();
});

describe('#auth.isAuthenticated()', () => {
it('returns true if has been authorized', async () => {
const { registerAuth, registerRouter, server: innerServer, auth } = await server.setup(config);

const router = new Router('');
router.get({ path: '/', validate: false }, async (req, res) =>
res.ok({ isAuthenticated: auth.isAuthenticated(req) })
);
registerRouter(router);

await registerAuth((req, sessionStorage, t) => t.authenticated({}), cookieOptions);

await server.start(config);
await supertest(innerServer.listener)
.get('/')
.expect(200, { isAuthenticated: true });
});

it('returns false if has not been authorized', async () => {
const { registerAuth, registerRouter, server: innerServer, auth } = await server.setup(config);

const router = new Router('');
router.get({ path: '/', validate: false, authRequired: false }, async (req, res) =>
res.ok({ isAuthenticated: auth.isAuthenticated(req) })
);
registerRouter(router);

await registerAuth((req, sessionStorage, t) => t.authenticated({}), cookieOptions);

await server.start(config);
await supertest(innerServer.listener)
.get('/')
.expect(200, { isAuthenticated: false });
});

it('returns false if no authorization mechanism has been registered', async () => {
const { registerRouter, server: innerServer, auth } = await server.setup(config);

const router = new Router('');
router.get({ path: '/', validate: false, authRequired: false }, async (req, res) =>
res.ok({ isAuthenticated: auth.isAuthenticated(req) })
);
registerRouter(router);

await server.start(config);
await supertest(innerServer.listener)
.get('/')
.expect(200, { isAuthenticated: false });
});
});

describe('#auth.get()', () => {
it('Should return authenticated status and allow associate auth state with request', async () => {
const user = { id: '42' };
const { registerRouter, registerAuth, server: innerServer, auth } = await server.setup(config);
await registerAuth((req, sessionStorage, t) => {
sessionStorage.set({ value: user });
return t.authenticated(user);
}, cookieOptions);

const router = new Router('');
router.get({ path: '/', validate: false }, async (req, res) => res.ok(auth.get(req)));
registerRouter(router);
await server.start(config);

await supertest(innerServer.listener)
.get('/')
.expect(200, { state: user, status: 'authenticated' });
});

it('Should return correct authentication unknown status', async () => {
const { registerRouter, server: innerServer, auth } = await server.setup(config);
const router = new Router('');
router.get({ path: '/', validate: false }, async (req, res) => res.ok(auth.get(req)));

registerRouter(router);
await server.start(config);
await supertest(innerServer.listener)
.get('/')
.expect(200, { status: 'unknown' });
});

it('Should return correct unauthenticated status', async () => {
const authenticate = jest.fn();

const { registerRouter, registerAuth, server: innerServer, auth } = await server.setup(config);
await registerAuth(authenticate, cookieOptions);
const router = new Router('');
router.get({ path: '/', validate: false, authRequired: false }, async (req, res) =>
res.ok(auth.get(req))
);

registerRouter(router);
await server.start(config);

await supertest(innerServer.listener)
.get('/')
.expect(200, { status: 'unauthenticated' });

expect(authenticate).not.toHaveBeenCalled();
});
});
4 changes: 4 additions & 0 deletions src/core/server/http/http_service.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ const createSetupContractMock = () => {
setBasePathFor: jest.fn(),
// we can mock some hapi server method when we need it
server: {} as Server,
auth: {
get: jest.fn(),
isAuthenticated: jest.fn(),
},
};
return setupContract;
};
Expand Down
46 changes: 38 additions & 8 deletions src/core/server/http/integration_tests/http_service.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,14 @@ describe('http service', () => {
if (req.headers.authorization) {
const user = { id: '42' };
sessionStorage.set({ value: user, expires: Date.now() + sessionDurationMs });
return t.authenticated({ credentials: user });
return t.authenticated(user);
} else {
return t.rejected(Boom.unauthorized());
}
};

const { http } = await root.setup();
http.registerAuth(authenticate, cookieOptions);
await http.registerAuth(authenticate, cookieOptions);
http.registerRouter(router);
await root.start();

Expand All @@ -94,14 +94,14 @@ describe('http service', () => {
if (req.headers.authorization) {
const user = { id: '42' };
sessionStorage.set({ value: user, expires: Date.now() + sessionDurationMs });
return t.authenticated({ credentials: user });
return t.authenticated(user);
} else {
return t.rejected(Boom.unauthorized());
}
};

const { http } = await root.setup();
http.registerAuth(authenticate, cookieOptions);
await http.registerAuth(authenticate, cookieOptions);
await root.start();

await kbnTestServer.request
Expand All @@ -117,7 +117,7 @@ describe('http service', () => {
};

const { http } = await root.setup();
http.registerAuth(authenticate, cookieOptions);
await http.registerAuth(authenticate, cookieOptions);
await root.start();

const response = await kbnTestServer.request.get(root, '/').expect(302);
Expand All @@ -129,14 +129,14 @@ describe('http service', () => {
if (req.headers.authorization) {
const user = { id: '42' };
sessionStorage.set({ value: user, expires: Date.now() + sessionDurationMs });
return t.authenticated({ credentials: user });
return t.authenticated(user);
} else {
return t.rejected(Boom.unauthorized());
}
};

const { http } = await root.setup();
http.registerAuth(authenticate, cookieOptions);
await http.registerAuth(authenticate, cookieOptions);
await root.start();

const legacyUrl = '/legacy';
Expand All @@ -154,13 +154,43 @@ describe('http service', () => {
expect(response.header['set-cookie']).toBe(undefined);
});

it('Should pass associated auth state to Legacy platform', async () => {
const user = { id: '42' };
const authenticate: AuthenticationHandler<Storage> = async (req, sessionStorage, t) => {
if (req.headers.authorization) {
sessionStorage.set({ value: user, expires: Date.now() + sessionDurationMs });
return t.authenticated(user);
} else {
return t.rejected(Boom.unauthorized());
}
};

const { http } = await root.setup();
await http.registerAuth(authenticate, cookieOptions);
await root.start();

const legacyUrl = '/legacy';
const kbnServer = kbnTestServer.getKbnServer(root);
kbnServer.server.route({
method: 'GET',
path: legacyUrl,
handler: kbnServer.newPlatform.setup.core.http.auth.get,
});

const response = await kbnTestServer.request.get(root, legacyUrl).expect(200);
expect(response.body.state).toEqual(user);
expect(response.body.status).toEqual('authenticated');

expect(response.header['set-cookie']).toBe(undefined);
});

it(`Shouldn't expose internal error details`, async () => {
const authenticate: AuthenticationHandler<Storage> = async (req, sessionStorage, t) => {
throw new Error('sensitive info');
};

const { http } = await root.setup();
http.registerAuth(authenticate, cookieOptions);
await http.registerAuth(authenticate, cookieOptions);
await root.start();

await kbnTestServer.request.get(root, '/').expect({
Expand Down

0 comments on commit e0a607b

Please sign in to comment.