Skip to content
This repository has been archived by the owner on Apr 19, 2023. It is now read-only.

Add call to partial import endpoint. #313

Merged
merged 5 commits into from
Nov 23, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@
"clean": "rimraf lib",
"lint": "tslint --force --format verbose \"src/**/*.ts\" \"test/*\"",
"build": "npm run clean && tsc -p ./tsconfig.release.json --pretty",
"test": "DEBUG=kc-admin mocha --require ts-node/register --recursive \"test/**/*.spec.ts\"",
"test:grep": "DEBUG=kc-admin mocha --require ts-node/register",
"test": "mocha --require ts-node/register --recursive \"test/**/*.spec.ts\"",
"test:subset": "mocha --require ts-node/register --recursive --",
jonkoops marked this conversation as resolved.
Show resolved Hide resolved
"test:grep": "mocha --require ts-node/register",
"coverage": "nyc npm run test",
"watch": "npm run build -- --watch",
"watch:test": "npm run test -- --watch",
Expand Down
18 changes: 18 additions & 0 deletions src/defs/realmRepresentation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,21 @@ export default interface RealmRepresentation {
verifyEmail?: boolean;
waitIncrementSeconds?: number;
}

export type PartialImportRealmRepresentation = RealmRepresentation & {
ssilvert marked this conversation as resolved.
Show resolved Hide resolved
ifResourceExists: 'FAIL' | 'SKIP' | 'OVERWRITE';
};

export type PartialImportResponse = {
overwritten: number;
added: number;
skipped: number;
results: [
{
action: string;
resourceType: string;
resourceName: string;
id: string;
},
];
};
18 changes: 17 additions & 1 deletion src/resources/realms.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import Resource from './resource';
import AdminEventRepresentation from '../defs/adminEventRepresentation';
import RealmRepresentation from '../defs/realmRepresentation';
import RealmRepresentation, {
PartialImportRealmRepresentation,
PartialImportResponse,
} from '../defs/realmRepresentation';
import EventRepresentation from '../defs/eventRepresentation';
import EventType from '../defs/eventTypes';
import KeysMetadataRepresentation from '../defs/keyMetadataRepresentation';
Expand Down Expand Up @@ -53,6 +56,19 @@ export class Realms extends Resource {
urlParamKeys: ['realm'],
});

public partialImport = this.makeRequest<
{
realm: string;
realmRep: PartialImportRealmRepresentation;
ssilvert marked this conversation as resolved.
Show resolved Hide resolved
},
PartialImportResponse
>({
method: 'POST',
path: '/{realm}/partialImport',
urlParamKeys: ['realm'],
payloadKey: 'realmRep',
ssilvert marked this conversation as resolved.
Show resolved Hide resolved
});

public export = this.makeRequest<
{
realm: string;
Expand Down
49 changes: 39 additions & 10 deletions test/realms.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {KeycloakAdminClient} from '../src/client';
import {credentials} from './constants';
import faker from 'faker';
import {fail} from 'assert';
import {PartialImportRealmRepresentation} from '../src/defs/realmRepresentation';
const expect = chai.expect;

const createRealm = async (kcAdminClient: KeycloakAdminClient) => {
Expand Down Expand Up @@ -66,6 +67,34 @@ describe('Realms', () => {
});
});

const roleToImport: PartialImportRealmRepresentation = {
ifResourceExists: 'FAIL',
roles: {
realm: [
{
id: '9d2638c8-4c62-4c42-90ea-5f3c836d0cc8',
name: 'myRole',
scopeParamRequired: false,
composite: false,
},
],
},
};

it('does partial import', async () => {
const result = await kcAdminClient.realms.partialImport({
realm: currentRealmName,
realmRep: roleToImport,
ssilvert marked this conversation as resolved.
Show resolved Hide resolved
});
expect(result.added).to.be.eq(1);
expect(result.overwritten).to.be.eq(0);
expect(result.skipped).to.be.eq(0);
expect(result.results.length).to.be.eq(1);
expect(result.results[0].action).to.be.eq('ADDED');
expect(result.results[0].resourceName).to.be.eq('myRole');
expect(result.results[0].id).to.exist;
});

it('export a realm', async () => {
const realm = await kcAdminClient.realms.export({
realm: currentRealmName,
Expand Down Expand Up @@ -237,21 +266,19 @@ describe('Realms', () => {
});

it('get users management permissions', async () => {
const managementPermissions = await kcAdminClient.realms.getUsersManagementPermissions(
{
const managementPermissions =
await kcAdminClient.realms.getUsersManagementPermissions({
realm: currentRealmName,
},
);
});
expect(managementPermissions).to.be.ok;
});

it('enable users management permissions', async () => {
const managementPermissions = await kcAdminClient.realms.updateUsersManagementPermissions(
{
const managementPermissions =
await kcAdminClient.realms.updateUsersManagementPermissions({
realm: currentRealmName,
enabled: true,
},
);
});
expect(managementPermissions).to.include({enabled: true});
});

Expand Down Expand Up @@ -340,12 +367,14 @@ describe('Realms', () => {
});
});


describe('Realm localization', () => {
currentRealmName = 'master';

it.skip('enable localization', async () => {
await kcAdminClient.realms.getRealmLocalizationTexts({realm: currentRealmName, selectedLocale: 'nl'});
await kcAdminClient.realms.getRealmLocalizationTexts({
realm: currentRealmName,
selectedLocale: 'nl',
});
});

it.skip('should add localization', async () => {
Expand Down