mirror of https://github.com/boxyhq/jackson.git
Compare commits
4 Commits
d4e46ab679
...
dd256bbaea
Author | SHA1 | Date |
---|---|---|
ukrocks007 | dd256bbaea | |
ukrocks007 | eefba3a921 | |
ukrocks007 | 7e363e8231 | |
ukrocks007 | ab52092548 |
|
@ -1,4 +1,5 @@
|
|||
import { expect, type APIRequestContext } from '@playwright/test';
|
||||
import { Directory } from 'npm/src';
|
||||
|
||||
const directoryBase = {
|
||||
tenant: 'api-boxyhq',
|
||||
|
@ -25,6 +26,18 @@ export const directoryExpected = {
|
|||
webhook: { endpoint: 'https://example.com', secret: 'secret' },
|
||||
};
|
||||
|
||||
export const updateDirectory = async (request: APIRequestContext, directory: Directory, data: any) => {
|
||||
const response = await request.patch(`/api/v1/dsync/${directory.id}`, {
|
||||
data,
|
||||
});
|
||||
|
||||
expect(response.ok()).toBe(true);
|
||||
expect(response.status()).toBe(200);
|
||||
|
||||
const { data: updatedDirectory } = await response.json();
|
||||
return updatedDirectory;
|
||||
};
|
||||
|
||||
export const createDirectory = async (request: APIRequestContext, payload: typeof directoryPayload) => {
|
||||
const response = await request.post('/api/v1/dsync', {
|
||||
data: {
|
||||
|
@ -59,6 +72,21 @@ export const getDirectory = async (
|
|||
return data;
|
||||
};
|
||||
|
||||
export const getDirectoryByProduct = async (request: APIRequestContext, { product }: { product: string }) => {
|
||||
const response = await request.get('/api/v1/dsync/product', {
|
||||
params: {
|
||||
product,
|
||||
},
|
||||
});
|
||||
|
||||
expect(response.ok()).toBe(true);
|
||||
expect(response.status()).toBe(200);
|
||||
|
||||
const { data } = await response.json();
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
export const deleteDirectory = async (request: APIRequestContext, directoryId: string) => {
|
||||
const response = await request.delete(`/api/v1/dsync/${directoryId}`);
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { expect, type APIRequestContext } from '@playwright/test';
|
||||
import type { Directory } from '@boxyhq/saml-jackson';
|
||||
import type { Directory, Group } from '@boxyhq/saml-jackson';
|
||||
|
||||
export const createGroup = async (request: APIRequestContext, directory: Directory, group: any) => {
|
||||
const response = await request.post(`${directory.scim.path}/Groups`, {
|
||||
|
@ -15,6 +15,38 @@ export const createGroup = async (request: APIRequestContext, directory: Directo
|
|||
return await response.json();
|
||||
};
|
||||
|
||||
export const addGroupMember = async (
|
||||
request: APIRequestContext,
|
||||
directory: Directory,
|
||||
group: Group,
|
||||
member: string
|
||||
) => {
|
||||
const response = await request.patch(`${directory.scim.path}/Groups/${group.id}`, {
|
||||
data: {
|
||||
Operations: [
|
||||
{
|
||||
action: 'addGroupMember',
|
||||
op: 'add',
|
||||
path: 'members',
|
||||
value: [
|
||||
{
|
||||
value: member,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
headers: {
|
||||
Authorization: `Bearer ${directory.scim.secret}`,
|
||||
},
|
||||
});
|
||||
|
||||
expect(response.ok()).toBe(true);
|
||||
expect(response.status()).toBe(200);
|
||||
|
||||
return await response.json();
|
||||
};
|
||||
|
||||
export const getGroupByDisplayName = async (
|
||||
request: APIRequestContext,
|
||||
directory: Directory,
|
||||
|
@ -47,3 +79,17 @@ export const getGroupById = async (request: APIRequestContext, directory: Direct
|
|||
|
||||
return await response.json();
|
||||
};
|
||||
|
||||
export const getGroupsByDirectoryId = async (request: APIRequestContext, directory: Directory) => {
|
||||
const response = await request.get(`${directory.scim.path}/Groups`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${directory.scim.secret}`,
|
||||
},
|
||||
});
|
||||
|
||||
expect(response.ok()).toBe(true);
|
||||
expect(response.status()).toBe(200);
|
||||
|
||||
const data = await response.json();
|
||||
return data.Resources;
|
||||
};
|
||||
|
|
|
@ -5,6 +5,7 @@ import {
|
|||
directoryExpected,
|
||||
directoryPayload,
|
||||
getDirectory,
|
||||
getDirectoryByProduct,
|
||||
} from '../../helpers/directories';
|
||||
import { options } from '../../helpers/api';
|
||||
|
||||
|
@ -21,6 +22,9 @@ test.beforeAll(async ({ request }) => {
|
|||
test.afterAll(async ({ request }) => {
|
||||
const [directory] = await getDirectory(request, { tenant, product });
|
||||
|
||||
if (!directory) {
|
||||
return;
|
||||
}
|
||||
await deleteDirectory(request, directory.id);
|
||||
});
|
||||
|
||||
|
@ -153,3 +157,15 @@ test.describe('PATCH /api/v1/dsync/{directoryId}', () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('GET /api/v1/dsync/product', () => {
|
||||
test('should be able to get a directory by product', async ({ request }) => {
|
||||
let directories = await getDirectoryByProduct(request, { product });
|
||||
expect(directories.length).toBe(1);
|
||||
|
||||
await deleteDirectory(request, directories[0].id);
|
||||
|
||||
directories = await getDirectoryByProduct(request, { product });
|
||||
expect(directories.length).toBe(0);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
import { test, expect } from '@playwright/test';
|
||||
import {
|
||||
createDirectory,
|
||||
deleteDirectory,
|
||||
directoryPayload,
|
||||
getDirectory,
|
||||
updateDirectory,
|
||||
} from '../../helpers/directories';
|
||||
import groups from '@boxyhq/saml-jackson/test/dsync/data/groups';
|
||||
import { addGroupMember, createGroup } from '../../helpers/groups';
|
||||
import { options } from '../../helpers/api';
|
||||
|
||||
test.use(options);
|
||||
|
||||
const { tenant, product } = { ...directoryPayload, tenant: 'api-boxyhq-3' };
|
||||
const memberId = 'member1';
|
||||
|
||||
test.beforeAll(async ({ request }) => {
|
||||
let directory = await createDirectory(request, {
|
||||
...directoryPayload,
|
||||
tenant,
|
||||
});
|
||||
|
||||
directory = await updateDirectory(request, directory, {
|
||||
log_webhook_events: true,
|
||||
});
|
||||
|
||||
const group = await createGroup(request, directory, groups[0]);
|
||||
await addGroupMember(request, directory, group, memberId);
|
||||
});
|
||||
|
||||
test.afterAll(async ({ request }) => {
|
||||
const [directory] = await getDirectory(request, { tenant, product });
|
||||
|
||||
await deleteDirectory(request, directory.id);
|
||||
});
|
||||
|
||||
test.describe('GET /api/v1/dsync/events', () => {
|
||||
test('should be able to get list of events from a directory', async ({ request }) => {
|
||||
const [directory] = await getDirectory(request, { tenant, product });
|
||||
|
||||
const response = await request.get(`/api/v1/dsync/events`, {
|
||||
params: {
|
||||
tenant,
|
||||
product,
|
||||
directoryId: directory.id,
|
||||
},
|
||||
});
|
||||
|
||||
const { data: events } = await response.json();
|
||||
|
||||
expect(response.ok()).toBe(true);
|
||||
expect(response.status()).toBe(200);
|
||||
expect(events.length).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('GET /api/v1/dsync/events/:event', () => {
|
||||
test('should be able to delete all the events from directory', async ({ request }) => {
|
||||
const [directory] = await getDirectory(request, { tenant, product });
|
||||
|
||||
let response = await request.get(`/api/v1/dsync/events`, {
|
||||
params: {
|
||||
directoryId: directory.id,
|
||||
},
|
||||
});
|
||||
|
||||
const { data: events } = await response.json();
|
||||
|
||||
response = await request.get(`/api/v1/dsync/events/${events[0].id}`, {
|
||||
params: {
|
||||
tenant,
|
||||
product,
|
||||
directoryId: directory.id,
|
||||
},
|
||||
});
|
||||
|
||||
const { data: event } = await response.json();
|
||||
|
||||
expect(response.ok()).toBe(true);
|
||||
expect(response.status()).toBe(200);
|
||||
expect(event.status_code).toBe(200);
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('DELETE /api/v1/dsync/events', () => {
|
||||
test('should be able to delete all the events from directory', async ({ request }) => {
|
||||
const [directory] = await getDirectory(request, { tenant, product });
|
||||
|
||||
let response = await request.delete(`/api/v1/dsync/events`, {
|
||||
params: {
|
||||
directoryId: directory.id,
|
||||
},
|
||||
});
|
||||
|
||||
response = await request.get(`/api/v1/dsync/events`, {
|
||||
params: {
|
||||
tenant,
|
||||
product,
|
||||
directoryId: directory.id,
|
||||
},
|
||||
});
|
||||
|
||||
const { data: events } = await response.json();
|
||||
|
||||
expect(response.ok()).toBe(true);
|
||||
expect(response.status()).toBe(200);
|
||||
expect(events.length).toBe(0);
|
||||
});
|
||||
});
|
|
@ -0,0 +1,51 @@
|
|||
import { test, expect } from '@playwright/test';
|
||||
import { createDirectory, deleteDirectory, directoryPayload, getDirectory } from '../../helpers/directories';
|
||||
import groups from '@boxyhq/saml-jackson/test/dsync/data/groups';
|
||||
import { addGroupMember, createGroup, getGroupsByDirectoryId } from '../../helpers/groups';
|
||||
import { options } from '../../helpers/api';
|
||||
|
||||
test.use(options);
|
||||
|
||||
const { tenant, product } = { ...directoryPayload, tenant: 'api-boxyhq-3' };
|
||||
const memberId = 'member1';
|
||||
|
||||
test.beforeAll(async ({ request }) => {
|
||||
const directory = await createDirectory(request, {
|
||||
...directoryPayload,
|
||||
tenant,
|
||||
});
|
||||
|
||||
const group = await createGroup(request, directory, groups[0]);
|
||||
await addGroupMember(request, directory, group, memberId);
|
||||
});
|
||||
|
||||
test.afterAll(async ({ request }) => {
|
||||
const [directory] = await getDirectory(request, { tenant, product });
|
||||
|
||||
await deleteDirectory(request, directory.id);
|
||||
});
|
||||
|
||||
test.describe('GET /api/v1/dsync/groups/:id/members', () => {
|
||||
test('should be able to get a group members from a directory', async ({ request }) => {
|
||||
const [directory] = await getDirectory(request, { tenant, product });
|
||||
|
||||
const groups = await getGroupsByDirectoryId(request, directory);
|
||||
const response = await request.get(`/api/v1/dsync/groups/${groups[0].id}/members`, {
|
||||
params: {
|
||||
tenant,
|
||||
product,
|
||||
},
|
||||
});
|
||||
|
||||
const { data: directoryMembers } = await response.json();
|
||||
|
||||
expect(response.ok()).toBe(true);
|
||||
expect(response.status()).toBe(200);
|
||||
expect(directoryMembers.length).toBe(1);
|
||||
expect(directoryMembers).toMatchObject([
|
||||
{
|
||||
user_id: memberId,
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue