@querc/squidex-client
Version:
NodeJS client for the [Squidex](https://squidex.io/) CMS
70 lines (63 loc) • 9.31 kB
JavaScript
;
require("jest");
var _authenticationManager = require("./authentication-manager");
var _httpClient = require("../http/http-client");
jest.mock('../http/http-client');
const TOKEN = 'abc-123';
describe('Authentication Manager should...', () => {
let httpClient;
let authenticationManager;
beforeEach(() => {
// Mock the identity server response
_httpClient.HttpClient.prototype.send = jest.fn().mockResolvedValue({
/* eslint-disable @typescript-eslint/camelcase */
access_token: TOKEN,
expires_in: 123456,
token_type: '?',
scope: '?'
/* eslint-enable */
});
httpClient = new _httpClient.HttpClient();
authenticationManager = new _authenticationManager.AuthenticationManager({
url: 'https://foo',
clientId: 'my-app:default',
clientSecret: 'SEKRIT'
}, httpClient);
});
test('exist', () => {
expect(_authenticationManager.AuthenticationManager).toBeDefined();
});
test('call identity server', async () => {
await authenticationManager.authenticate();
expect(httpClient.send).toHaveBeenCalledTimes(1);
expect(httpClient.send).toHaveBeenCalledWith(expect.objectContaining({
data: {
/* eslint-disable @typescript-eslint/camelcase */
client_id: 'my-app:default',
client_secret: 'SEKRIT',
grant_type: 'client_credentials',
scope: 'squidex-api'
/* eslint-enable */
},
path: '/identity-server/connect/token'
}));
});
test('not call identity server after authentication', async () => {
await authenticationManager.authenticate();
await authenticationManager.authenticate();
expect(httpClient.send).toHaveBeenCalledTimes(1);
});
test('call identity server after expiry', async () => {
await authenticationManager.authenticate(); // Reset expiry date to 2 days ago
const now = new Date();
now.setDate(now.getDate() - 2);
authenticationManager.accessTokenExpiresOn = new Date(now.toUTCString());
await authenticationManager.authenticate();
expect(httpClient.send).toHaveBeenCalledTimes(2);
});
test('resolve with token', async () => {
const token = await authenticationManager.authenticate();
expect(token).toBe(TOKEN);
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoZW50aWNhdGlvbi9hdXRoZW50aWNhdGlvbi1tYW5hZ2VyLnRlc3QudHMiXSwibmFtZXMiOlsiamVzdCIsIm1vY2siLCJUT0tFTiIsImRlc2NyaWJlIiwiaHR0cENsaWVudCIsImF1dGhlbnRpY2F0aW9uTWFuYWdlciIsImJlZm9yZUVhY2giLCJIdHRwQ2xpZW50IiwicHJvdG90eXBlIiwic2VuZCIsImZuIiwibW9ja1Jlc29sdmVkVmFsdWUiLCJhY2Nlc3NfdG9rZW4iLCJleHBpcmVzX2luIiwidG9rZW5fdHlwZSIsInNjb3BlIiwiQXV0aGVudGljYXRpb25NYW5hZ2VyIiwidXJsIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJ0ZXN0IiwiZXhwZWN0IiwidG9CZURlZmluZWQiLCJhdXRoZW50aWNhdGUiLCJ0b0hhdmVCZWVuQ2FsbGVkVGltZXMiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIm9iamVjdENvbnRhaW5pbmciLCJkYXRhIiwiY2xpZW50X2lkIiwiY2xpZW50X3NlY3JldCIsImdyYW50X3R5cGUiLCJwYXRoIiwibm93IiwiRGF0ZSIsInNldERhdGUiLCJnZXREYXRlIiwiYWNjZXNzVG9rZW5FeHBpcmVzT24iLCJ0b1VUQ1N0cmluZyIsInRva2VuIiwidG9CZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUscUJBQVY7QUFFQSxNQUFNQyxLQUFLLEdBQUcsU0FBZDtBQUVBQyxRQUFRLENBQUMsa0NBQUQsRUFBcUMsTUFBTTtBQUMvQyxNQUFJQyxVQUFKO0FBQ0EsTUFBSUMscUJBQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLE1BQU07QUFDYjtBQUNBQywyQkFBV0MsU0FBWCxDQUFxQkMsSUFBckIsR0FBNEJULElBQUksQ0FBQ1UsRUFBTCxHQUFVQyxpQkFBVixDQUE0QjtBQUNwRDtBQUNBQyxNQUFBQSxZQUFZLEVBQUVWLEtBRnNDO0FBR3BEVyxNQUFBQSxVQUFVLEVBQUUsTUFId0M7QUFJcERDLE1BQUFBLFVBQVUsRUFBRSxHQUp3QztBQUtwREMsTUFBQUEsS0FBSyxFQUFFO0FBQ1A7O0FBTm9ELEtBQTVCLENBQTVCO0FBUUFYLElBQUFBLFVBQVUsR0FBRyxJQUFLRyxzQkFBTCxFQUFiO0FBRUFGLElBQUFBLHFCQUFxQixHQUFHLElBQUlXLDRDQUFKLENBQ3BCO0FBQ0lDLE1BQUFBLEdBQUcsRUFBRSxhQURUO0FBRUlDLE1BQUFBLFFBQVEsRUFBRSxnQkFGZDtBQUdJQyxNQUFBQSxZQUFZLEVBQUU7QUFIbEIsS0FEb0IsRUFNcEJmLFVBTm9CLENBQXhCO0FBUUgsR0FwQlMsQ0FBVjtBQXNCQWdCLEVBQUFBLElBQUksQ0FBQyxPQUFELEVBQVUsTUFBTTtBQUNoQkMsSUFBQUEsTUFBTSxDQUFDTCw0Q0FBRCxDQUFOLENBQThCTSxXQUE5QjtBQUNILEdBRkcsQ0FBSjtBQUlBRixFQUFBQSxJQUFJLENBQUMsc0JBQUQsRUFBeUIsWUFBWTtBQUNyQyxVQUFNZixxQkFBcUIsQ0FBQ2tCLFlBQXRCLEVBQU47QUFFQUYsSUFBQUEsTUFBTSxDQUFDakIsVUFBVSxDQUFDSyxJQUFaLENBQU4sQ0FBd0JlLHFCQUF4QixDQUE4QyxDQUE5QztBQUNBSCxJQUFBQSxNQUFNLENBQUNqQixVQUFVLENBQUNLLElBQVosQ0FBTixDQUF3QmdCLG9CQUF4QixDQUNJSixNQUFNLENBQUNLLGdCQUFQLENBQXdCO0FBQ3BCQyxNQUFBQSxJQUFJLEVBQUU7QUFDRjtBQUNBQyxRQUFBQSxTQUFTLEVBQUUsZ0JBRlQ7QUFHRkMsUUFBQUEsYUFBYSxFQUFFLFFBSGI7QUFJRkMsUUFBQUEsVUFBVSxFQUFFLG9CQUpWO0FBS0ZmLFFBQUFBLEtBQUssRUFBRTtBQUNQOztBQU5FLE9BRGM7QUFTcEJnQixNQUFBQSxJQUFJLEVBQUU7QUFUYyxLQUF4QixDQURKO0FBYUgsR0FqQkcsQ0FBSjtBQW1CQVgsRUFBQUEsSUFBSSxDQUFDLCtDQUFELEVBQWtELFlBQVk7QUFDOUQsVUFBTWYscUJBQXFCLENBQUNrQixZQUF0QixFQUFOO0FBQ0EsVUFBTWxCLHFCQUFxQixDQUFDa0IsWUFBdEIsRUFBTjtBQUVBRixJQUFBQSxNQUFNLENBQUNqQixVQUFVLENBQUNLLElBQVosQ0FBTixDQUF3QmUscUJBQXhCLENBQThDLENBQTlDO0FBQ0gsR0FMRyxDQUFKO0FBT0FKLEVBQUFBLElBQUksQ0FBQyxtQ0FBRCxFQUFzQyxZQUFZO0FBQ2xELFVBQU1mLHFCQUFxQixDQUFDa0IsWUFBdEIsRUFBTixDQURrRCxDQUdsRDs7QUFDQSxVQUFNUyxHQUFHLEdBQUcsSUFBSUMsSUFBSixFQUFaO0FBQ0FELElBQUFBLEdBQUcsQ0FBQ0UsT0FBSixDQUFZRixHQUFHLENBQUNHLE9BQUosS0FBZ0IsQ0FBNUI7QUFDQzlCLElBQUFBLHFCQUFELENBQStCK0Isb0JBQS9CLEdBQXNELElBQUlILElBQUosQ0FBU0QsR0FBRyxDQUFDSyxXQUFKLEVBQVQsQ0FBdEQ7QUFFQSxVQUFNaEMscUJBQXFCLENBQUNrQixZQUF0QixFQUFOO0FBRUFGLElBQUFBLE1BQU0sQ0FBQ2pCLFVBQVUsQ0FBQ0ssSUFBWixDQUFOLENBQXdCZSxxQkFBeEIsQ0FBOEMsQ0FBOUM7QUFDSCxHQVhHLENBQUo7QUFhQUosRUFBQUEsSUFBSSxDQUFDLG9CQUFELEVBQXVCLFlBQVk7QUFDbkMsVUFBTWtCLEtBQUssR0FBRyxNQUFNakMscUJBQXFCLENBQUNrQixZQUF0QixFQUFwQjtBQUNBRixJQUFBQSxNQUFNLENBQUNpQixLQUFELENBQU4sQ0FBY0MsSUFBZCxDQUFtQnJDLEtBQW5CO0FBQ0gsR0FIRyxDQUFKO0FBSUgsQ0F6RU8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnamVzdCc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1hbmFnZXIgfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLW1hbmFnZXInO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJy4uL2h0dHAvaHR0cC1jbGllbnQnO1xuamVzdC5tb2NrKCcuLi9odHRwL2h0dHAtY2xpZW50Jyk7XG5cbmNvbnN0IFRPS0VOID0gJ2FiYy0xMjMnO1xuXG5kZXNjcmliZSgnQXV0aGVudGljYXRpb24gTWFuYWdlciBzaG91bGQuLi4nLCAoKSA9PiB7XG4gICAgbGV0IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQ7XG4gICAgbGV0IGF1dGhlbnRpY2F0aW9uTWFuYWdlcjogQXV0aGVudGljYXRpb25NYW5hZ2VyO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIC8vIE1vY2sgdGhlIGlkZW50aXR5IHNlcnZlciByZXNwb25zZVxuICAgICAgICBIdHRwQ2xpZW50LnByb3RvdHlwZS5zZW5kID0gamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9jYW1lbGNhc2UgKi9cbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogVE9LRU4sXG4gICAgICAgICAgICBleHBpcmVzX2luOiAxMjM0NTYsXG4gICAgICAgICAgICB0b2tlbl90eXBlOiAnPycsXG4gICAgICAgICAgICBzY29wZTogJz8nLFxuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgICAgICB9KTtcbiAgICAgICAgaHR0cENsaWVudCA9IG5ldyAoSHR0cENsaWVudCBhcyBhbnkpKCk7XG5cbiAgICAgICAgYXV0aGVudGljYXRpb25NYW5hZ2VyID0gbmV3IEF1dGhlbnRpY2F0aW9uTWFuYWdlcihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL2ZvbycsXG4gICAgICAgICAgICAgICAgY2xpZW50SWQ6ICdteS1hcHA6ZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgY2xpZW50U2VjcmV0OiAnU0VLUklUJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBodHRwQ2xpZW50LFxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXhpc3QnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChBdXRoZW50aWNhdGlvbk1hbmFnZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYWxsIGlkZW50aXR5IHNlcnZlcicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgYXV0aGVudGljYXRpb25NYW5hZ2VyLmF1dGhlbnRpY2F0ZSgpO1xuXG4gICAgICAgIGV4cGVjdChodHRwQ2xpZW50LnNlbmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgICAgZXhwZWN0KGh0dHBDbGllbnQuc2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvY2FtZWxjYXNlICovXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudF9pZDogJ215LWFwcDpkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogJ1NFS1JJVCcsXG4gICAgICAgICAgICAgICAgICAgIGdyYW50X3R5cGU6ICdjbGllbnRfY3JlZGVudGlhbHMnLFxuICAgICAgICAgICAgICAgICAgICBzY29wZTogJ3NxdWlkZXgtYXBpJyxcbiAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDogJy9pZGVudGl0eS1zZXJ2ZXIvY29ubmVjdC90b2tlbicsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ25vdCBjYWxsIGlkZW50aXR5IHNlcnZlciBhZnRlciBhdXRoZW50aWNhdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgYXV0aGVudGljYXRpb25NYW5hZ2VyLmF1dGhlbnRpY2F0ZSgpO1xuICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGlvbk1hbmFnZXIuYXV0aGVudGljYXRlKCk7XG5cbiAgICAgICAgZXhwZWN0KGh0dHBDbGllbnQuc2VuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FsbCBpZGVudGl0eSBzZXJ2ZXIgYWZ0ZXIgZXhwaXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGlvbk1hbmFnZXIuYXV0aGVudGljYXRlKCk7XG5cbiAgICAgICAgLy8gUmVzZXQgZXhwaXJ5IGRhdGUgdG8gMiBkYXlzIGFnb1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBub3cuc2V0RGF0ZShub3cuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgIChhdXRoZW50aWNhdGlvbk1hbmFnZXIgYXMgYW55KS5hY2Nlc3NUb2tlbkV4cGlyZXNPbiA9IG5ldyBEYXRlKG5vdy50b1VUQ1N0cmluZygpKTtcblxuICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGlvbk1hbmFnZXIuYXV0aGVudGljYXRlKCk7XG5cbiAgICAgICAgZXhwZWN0KGh0dHBDbGllbnQuc2VuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmVzb2x2ZSB3aXRoIHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGF1dGhlbnRpY2F0aW9uTWFuYWdlci5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgZXhwZWN0KHRva2VuKS50b0JlKFRPS0VOKTtcbiAgICB9KTtcbn0pO1xuIl19