keycloak-mock
TypeScript icon, indicating that this package has built-in type declarations

1.0.10 • Public • Published

Keycloak Mock

License NPM version test

A minimal mock for a Keycloak server to be used in unit tests.

This mock is not complete and it definitely doesn't match Keycloak completely. Improvements are welcome.

About

This does not launch an actual HTTP server. It uses nock to patch Node.js HTTP client to intercept requests.

Tested with Node.js 8.x, 10.x, 12.x, 13.x

What works

  • GET /[realm]/protocol/openid-connect/certs
  • GET /[realm]/protocol/openid-connect/userinfo
  • GET /admin/realms/[realm]/users
  • GET /admin/realms/[realm]/users?username=myusername
  • POST /[realm]/protocol/openid-connect/token
  • GET /admin/realms/[realm]/users/[userid]
  • DELETE /admin/realms/[realm]/users/[userid]
  • POST /admin/realms/[realm]/users

Usage

Basic

import * as KeycloakMock from "keycloak-node-mock";

const keycloak = await KeycloakMock.createMockInstance({
    authServerURL: "https://myserver.com/auth",
    realm: "myrealm",
    clientID: "client-1",
    clientSecret: "test",
});

// all requests to `https://myserver.com/auth` will now be
// intercepted and replied to
const mock = KeycloakMock.activateMock(keycloak);

// create a user and a token for it
const user = keycloak.database.createUser({
    name: "test",
    email: "hello@hello.com", // username will be email
    credentials: [{
        value: "mypassword",
    }],
});

console.log(user.profile, user.credentials);

const token = keycloak.createBearerToken(user.profile.id);

// get active mock without a reference
const sameMock = KeycloakMock.getMock("https://myserver.com/auth");

// clear user database
mock.instance.database.clear();

// find user profile
const sameUser = mock.instance.database.findUserByID(user.profile.id);

// de-activate the mock
KeycloakMock.deactivateMock(sameMock);

Custom handlers

import * as KeycloakMock from "keycloak-node-mock";

const keycloak = await KeycloakMock.createMockInstance({
    authServerURL: "https://myserver.com/auth",
    realm: "myrealm",
    clientID: "client-1",
});

keycloak.activateMock(keycloak, {
   listCertificatesView: (instance, request) => {
       return [500, ""];
   },
   getUser: (instance, request) => {
       // might be null if not authorized
       console.log(request.user);
       return [500, ""];
   },
   deleteUser: (instance, request) => {
       return [500, ""];
   },
   getUserInfoView: (instance, request) => {
       return [500, ""];
   },
   listUsers: (instance, request) => {
       return [500, ""];
   },
   createTokenView: (instance, request, body) => {
       return [500, ""];
   },
   createUserView: (instance, request, body) => {
       return [500, ""];
   },
});

Readme

Keywords

none

Package Sidebar

Install

npm i keycloak-mock

Weekly Downloads

775

Version

1.0.10

License

MIT

Unpacked Size

60.4 kB

Total Files

52

Last publish

Collaborators

  • sectorlabs