contensis-management-api
Version:
Client for managing content using the Contensis Management API
941 lines (701 loc) • 44.2 kB
text/typescript
import * as Contensis from '../../index';
import { defaultUsers, getDefaultAuthenticateUrl, getDefaultConfig, getDefaultFetchRequest, setDefaultSpy, defaultGroups } from '../../specs-utils.spec';
import fetch from 'cross-fetch';
import { PagedList, toQuery } from 'contensis-core-api';
import { User, Group, UserUpdatePasswordOptions } from '../../models';
const Zengenti = { Contensis };
const global = window || this;
global.fetch = fetch;
describe('User Operations', () => {
describe('Get user', () => {
beforeEach(() => {
setDefaultSpy(global, defaultUsers[0]);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('current', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let user = await client.security.users.getCurrent();
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/@current`,
getDefaultFetchRequest()
]);
expect(user).not.toBeNull();
expect(user.id).toEqual(defaultUsers[0].id);
expect(user.optOutOfNotifications).toBeTrue();
});
it('by id', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let user = await client.security.users.getById(defaultUsers[0].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}`,
getDefaultFetchRequest()
]);
expect(user).not.toBeNull();
expect(user.id).toEqual(defaultUsers[0].id);
});
it('by classic id', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let user = await client.security.users.getById(defaultUsers[0].id, true);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}?classicUserId=true`,
getDefaultFetchRequest()
]);
expect(user).not.toBeNull();
expect(user.id).toEqual(defaultUsers[0].id);
});
it('by username', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let user = await client.security.users.getByUsername(defaultUsers[0].username);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].username}`,
getDefaultFetchRequest()
]);
expect(user).not.toBeNull();
expect(user.username).toEqual(defaultUsers[0].username);
});
it('by email', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let user = await client.security.users.getByEmail(defaultUsers[0].email);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].email}`,
getDefaultFetchRequest()
]);
expect(user).not.toBeNull();
expect(user.email).toEqual(defaultUsers[0].email);
});
});
describe('List users', () => {
beforeEach(() => {
setDefaultSpy(global, {
pageIndex: 0,
pageSize: 25,
totalCount: 2,
items: defaultUsers
} as PagedList<Partial<User>>);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('with default options', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let users = await client.security.users.list();
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
'http://my-website.com/api/security/users',
getDefaultFetchRequest()
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
it('with specific options', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let users = await client.security.users.list({
q: 'content',
pageOptions: { pageIndex: 1, pageSize: 50 },
order: ['username']
});
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
'http://my-website.com/api/security/users?order=username&pageIndex=1&pageSize=50&q=content',
getDefaultFetchRequest()
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
it('with specific options and no query', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let users = await client.security.users.list({
pageOptions: { pageIndex: 1, pageSize: 50 },
order: ['username']
});
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
'http://my-website.com/api/security/users?order=username&pageIndex=1&pageSize=50',
getDefaultFetchRequest()
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
it('with zenQL', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let users = await client.security.users.list({
zenQL: 'username="Geoff"'
});
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
'http://my-website.com/api/security/users?pageIndex=0&pageSize=25&zenQL=username%3D%22Geoff%22',
getDefaultFetchRequest()
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
});
describe('Search users', () => {
beforeEach(() => {
setDefaultSpy(global, {
pageIndex: 0,
pageSize: 25,
totalCount: 2,
items: defaultUsers
} as PagedList<Partial<User>>);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('with query as Object', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let orderBy = [{
desc: 'optOutOfNotifications'
}, {
asc: 'username'
}];
let where = [{
field: 'email',
equalTo: 'EEEEEE2@test.com'
}, {
field: 'username',
in: ['UUUUUU1', 'UUUUUU2']
}];
let query = {
pageIndex: 1,
pageSize: 50,
orderBy,
where
};
let users = await client.security.users.search(query as any);
let expectedQueryString = toQuery({
...query,
orderBy: JSON.stringify(orderBy),
where: JSON.stringify(where)
});
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/search${expectedQueryString}`,
getDefaultFetchRequest()
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
it('with query as the default Query instance ', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let query = new Contensis.Query();
let users = await client.security.users.search(query);
let expectedQueryString = toQuery({
pageIndex: 0,
pageSize: 20,
where: JSON.stringify([])
});
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/search${expectedQueryString}`,
getDefaultFetchRequest()
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
it('with query as a specific Query instance ', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let query = new Contensis.Query(Contensis.Op.startsWith('email', 'EEEEEE2'));
query.orderBy = Contensis.OrderBy.asc('email');
query.pageIndex = 1;
query.pageSize = 50;
let users = await client.security.users.search(query);
let expectedQueryString = toQuery({
pageIndex: 1,
pageSize: 50,
orderBy: JSON.stringify([{
asc: 'email'
}]),
where: JSON.stringify([{
field: 'email',
startsWith: 'EEEEEE2'
}])
});
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/search${expectedQueryString}`,
getDefaultFetchRequest()
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
});
describe('Search users in IE browser', () => {
beforeEach(() => {
setDefaultSpy(global, {
pageCount: 1,
pageIndex: 0,
pageSize: 25,
totalCount: 2,
items: defaultUsers
} as PagedList<Partial<User>>);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
(global.document as any).documentMode = 11;
});
it('with query as Object and url length = 2083', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let orderBy = [{
asc: 'email'
}];
// use string with length = 1896
let where = [{
field: 'email',
// tslint:disable-next-line:max-line-length
startsWith: 'r2PxHazYJ4WFg6tgJwvNyW03bYFkE6xvnpzJyQHdjXEn4H3rAX0HY08iTHa5mqH7zzjH56xC1j62WYKG759S6YZyP158S4Z3ZqtkTf1KwTKAJEKur45qpXZ7rtt5RTXEkt0waDQy96dLFZjYdQYR9rNRurHtWyahtMgQW9vE3aVwKrHTYM0X817uYpTyCZmq4nr8k5ACijrS9FrSNcNVUgFdVaeEuFHaB6tKGQ1Jew4zeMaeZrqbF4v11GaA754ykEDWN8GbY3qhf5RuVaPktFYNJK6PeZkkmxEAVk7DQ2x7W62Y4n3GUmZbi6nwKXrLUrfGHeqR2h2b79A12CzpFHWxhnZ8hm3jRP0AP5085Sh2VtLGbCFMcVEC1bVrr5gFN26LPyTn1gvv6BJ1jUNfZ8JJGV0QA63VQJiqLLigvpYQJU1FJzFhj7rFBREaFCrVhPaZw5pSjD8kZi30i82Zh8VEMmXgEiLFPc8jHJ45wRzpu898NgjKv53bYBHYWqgyEpZF5pg2B1cqq5fLnfarUFKENCaPqxiqhjhMJ1SHC0e8kfLM4zR0TdkC6r7G9Dp4WLc3v0wcveapUjtzL3LEWFYJZpHix9RNCBd7AWzY0PDXih9DMc59frTe7U7GEqXzd36LrYVR8Auv5vwiXzu4fdwihCbeiinHnWnZwtQTJHYKZHLDdD9zMj1CAyEbNTm327NfuDZMQGEYjU8JB0yjhND05MNraL9FXx29iNVTht3j4PxMb3CMQqcBwH22UejpUzxE0mcbKEPvTPVEuP8d6ptBQN3mKc6v5MZ47YqdBqWSxBKDbxDpr7eGNHqrKXP0jUXwavNcAhMWmnE8zxSVKEHWhwdrZnJP1hNz0XtKQaTPBxHZErHcic8z806iHEdVaPGG7Q76ySVh58rNGX8tinEYCNT9eAJizCCKGpvCvkL52VHjChKcMc50ggDHTa6dwmhx6Q9Gjj4YE0XTbcVLQxHf0B4aPgcegRyG82MmBgUz8cwi5R4T8LhyeazQd3ER46DKt9YJBp9LAJXarc7WV6Axn88CviugeSEqH2vaF6Cy0Q6Xcx8tTE9QeiyTtHmMZrKKzMuzw4YD3GeXA7qqGjeQqcJQiF4KMbYzqXPUj7KVH2tg8pVXiFYqYuxEf61TzGab7WcEE7fU9V7rq1M6uqLiZC1KaPr8jM08DYMhjrmaJT6S9ZxfuqUdh6rjJJr5NvxZikhr9XXAKeL7RhgQjq12ZCDMjpDaPmKMufEVt9UTZcve6P7v1q6XYT7qJkpbYBfhn6vSh4XJBjuXDk4SkNu4cxC8F0D8zmU9jH7N1RNJ9nMEeSStafMV01W7aqABTXzz0eKkTUJuCX9UNTLuV2gAHnPkT3MGSjGC9UaJe5qbGUdcXqDjc6UgA9xCq2MUHRP2CQuxHTRHdKur2uyNi9M7Q2gULbVryeW3R38XRvekMSnHYSqSdDrx0dQRTZ4edMuA2t58LdA8kf6LxZrhdjH2FkGcXhAa8ZP4wjGe1ujPrPtnmK8TMmRr4AELcmLkb0AfX3QUNfv1DR2kqyT8Ja2WmGQHR35huMgek3ePB4NMCY6kZH09wfiSLxy68Pyir0huGVYHb4HdhMEEf89SmNaFHuFYgiTGRZexDfTSiaj4Rn04TR359AkNVibyT2E93ee8PN2Qv0vbBTG1nebXyuX7KRYQqBaSrchJFrc0jCGHgCR7mfMAgpPyCEd0Piyg3P3fCQFP0Uq7ADFAfEDgHa9SXHJmhJVwwYC7EUGBqHpFuQZiJAKFdZSUtNFEGDztmjEBwadeVT6vuZW3QUnpYUL4q9t7nQgYqf03jfnh90pzBTFqLTaebr8QkMxGSpHezJnevrBu8SKteUG5vjPEC0kdQKDnXn563AdxdD0w'
}];
let query = {
pageIndex: 1,
pageSize: 50,
orderBy,
where
};
let users = await client.security.users.search(query as any);
let expectedQueryString = toQuery({
...query,
orderBy: JSON.stringify(orderBy),
where: JSON.stringify(where)
});
let url = `http://my-website.com/api/security/users/search${expectedQueryString}`;
expect(url.length).toEqual(2083);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
url,
getDefaultFetchRequest()
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
it('with query as Object and url length > 2083', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let orderBy = [{
asc: 'email'
}];
// use string with length = 1897
let where = [{
field: 'email',
// tslint:disable-next-line:max-line-length
startsWith: '1r2PxHazYJ4WFg6tgJwvNyW03bYFkE6xvnpzJyQHdjXEn4H3rAX0HY08iTHa5mqH7zzjH56xC1j62WYKG759S6YZyP158S4Z3ZqtkTf1KwTKAJEKur45qpXZ7rtt5RTXEkt0waDQy96dLFZjYdQYR9rNRurHtWyahtMgQW9vE3aVwKrHTYM0X817uYpTyCZmq4nr8k5ACijrS9FrSNcNVUgFdVaeEuFHaB6tKGQ1Jew4zeMaeZrqbF4v11GaA754ykEDWN8GbY3qhf5RuVaPktFYNJK6PeZkkmxEAVk7DQ2x7W62Y4n3GUmZbi6nwKXrLUrfGHeqR2h2b79A12CzpFHWxhnZ8hm3jRP0AP5085Sh2VtLGbCFMcVEC1bVrr5gFN26LPyTn1gvv6BJ1jUNfZ8JJGV0QA63VQJiqLLigvpYQJU1FJzFhj7rFBREaFCrVhPaZw5pSjD8kZi30i82Zh8VEMmXgEiLFPc8jHJ45wRzpu898NgjKv53bYBHYWqgyEpZF5pg2B1cqq5fLnfarUFKENCaPqxiqhjhMJ1SHC0e8kfLM4zR0TdkC6r7G9Dp4WLc3v0wcveapUjtzL3LEWFYJZpHix9RNCBd7AWzY0PDXih9DMc59frTe7U7GEqXzd36LrYVR8Auv5vwiXzu4fdwihCbeiinHnWnZwtQTJHYKZHLDdD9zMj1CAyEbNTm327NfuDZMQGEYjU8JB0yjhND05MNraL9FXx29iNVTht3j4PxMb3CMQqcBwH22UejpUzxE0mcbKEPvTPVEuP8d6ptBQN3mKc6v5MZ47YqdBqWSxBKDbxDpr7eGNHqrKXP0jUXwavNcAhMWmnE8zxSVKEHWhwdrZnJP1hNz0XtKQaTPBxHZErHcic8z806iHEdVaPGG7Q76ySVh58rNGX8tinEYCNT9eAJizCCKGpvCvkL52VHjChKcMc50ggDHTa6dwmhx6Q9Gjj4YE0XTbcVLQxHf0B4aPgcegRyG82MmBgUz8cwi5R4T8LhyeazQd3ER46DKt9YJBp9LAJXarc7WV6Axn88CviugeSEqH2vaF6Cy0Q6Xcx8tTE9QeiyTtHmMZrKKzMuzw4YD3GeXA7qqGjeQqcJQiF4KMbYzqXPUj7KVH2tg8pVXiFYqYuxEf61TzGab7WcEE7fU9V7rq1M6uqLiZC1KaPr8jM08DYMhjrmaJT6S9ZxfuqUdh6rjJJr5NvxZikhr9XXAKeL7RhgQjq12ZCDMjpDaPmKMufEVt9UTZcve6P7v1q6XYT7qJkpbYBfhn6vSh4XJBjuXDk4SkNu4cxC8F0D8zmU9jH7N1RNJ9nMEeSStafMV01W7aqABTXzz0eKkTUJuCX9UNTLuV2gAHnPkT3MGSjGC9UaJe5qbGUdcXqDjc6UgA9xCq2MUHRP2CQuxHTRHdKur2uyNi9M7Q2gULbVryeW3R38XRvekMSnHYSqSdDrx0dQRTZ4edMuA2t58LdA8kf6LxZrhdjH2FkGcXhAa8ZP4wjGe1ujPrPtnmK8TMmRr4AELcmLkb0AfX3QUNfv1DR2kqyT8Ja2WmGQHR35huMgek3ePB4NMCY6kZH09wfiSLxy68Pyir0huGVYHb4HdhMEEf89SmNaFHuFYgiTGRZexDfTSiaj4Rn04TR359AkNVibyT2E93ee8PN2Qv0vbBTG1nebXyuX7KRYQqBaSrchJFrc0jCGHgCR7mfMAgpPyCEd0Piyg3P3fCQFP0Uq7ADFAfEDgHa9SXHJmhJVwwYC7EUGBqHpFuQZiJAKFdZSUtNFEGDztmjEBwadeVT6vuZW3QUnpYUL4q9t7nQgYqf03jfnh90pzBTFqLTaebr8QkMxGSpHezJnevrBu8SKteUG5vjPEC0kdQKDnXn563AdxdD0w'
}];
let query = {
pageIndex: 1,
pageSize: 50,
orderBy,
where
};
let users = await client.security.users.search(query as any);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/search`,
getDefaultFetchRequest('POST', false, JSON.stringify(query))
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
it('with query as Query instance and url length = 2083', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
// use string with length = 1896
// tslint:disable-next-line:max-line-length
const startsWithText = 'r2PxHazYJ4WFg6tgJwvNyW03bYFkE6xvnpzJyQHdjXEn4H3rAX0HY08iTHa5mqH7zzjH56xC1j62WYKG759S6YZyP158S4Z3ZqtkTf1KwTKAJEKur45qpXZ7rtt5RTXEkt0waDQy96dLFZjYdQYR9rNRurHtWyahtMgQW9vE3aVwKrHTYM0X817uYpTyCZmq4nr8k5ACijrS9FrSNcNVUgFdVaeEuFHaB6tKGQ1Jew4zeMaeZrqbF4v11GaA754ykEDWN8GbY3qhf5RuVaPktFYNJK6PeZkkmxEAVk7DQ2x7W62Y4n3GUmZbi6nwKXrLUrfGHeqR2h2b79A12CzpFHWxhnZ8hm3jRP0AP5085Sh2VtLGbCFMcVEC1bVrr5gFN26LPyTn1gvv6BJ1jUNfZ8JJGV0QA63VQJiqLLigvpYQJU1FJzFhj7rFBREaFCrVhPaZw5pSjD8kZi30i82Zh8VEMmXgEiLFPc8jHJ45wRzpu898NgjKv53bYBHYWqgyEpZF5pg2B1cqq5fLnfarUFKENCaPqxiqhjhMJ1SHC0e8kfLM4zR0TdkC6r7G9Dp4WLc3v0wcveapUjtzL3LEWFYJZpHix9RNCBd7AWzY0PDXih9DMc59frTe7U7GEqXzd36LrYVR8Auv5vwiXzu4fdwihCbeiinHnWnZwtQTJHYKZHLDdD9zMj1CAyEbNTm327NfuDZMQGEYjU8JB0yjhND05MNraL9FXx29iNVTht3j4PxMb3CMQqcBwH22UejpUzxE0mcbKEPvTPVEuP8d6ptBQN3mKc6v5MZ47YqdBqWSxBKDbxDpr7eGNHqrKXP0jUXwavNcAhMWmnE8zxSVKEHWhwdrZnJP1hNz0XtKQaTPBxHZErHcic8z806iHEdVaPGG7Q76ySVh58rNGX8tinEYCNT9eAJizCCKGpvCvkL52VHjChKcMc50ggDHTa6dwmhx6Q9Gjj4YE0XTbcVLQxHf0B4aPgcegRyG82MmBgUz8cwi5R4T8LhyeazQd3ER46DKt9YJBp9LAJXarc7WV6Axn88CviugeSEqH2vaF6Cy0Q6Xcx8tTE9QeiyTtHmMZrKKzMuzw4YD3GeXA7qqGjeQqcJQiF4KMbYzqXPUj7KVH2tg8pVXiFYqYuxEf61TzGab7WcEE7fU9V7rq1M6uqLiZC1KaPr8jM08DYMhjrmaJT6S9ZxfuqUdh6rjJJr5NvxZikhr9XXAKeL7RhgQjq12ZCDMjpDaPmKMufEVt9UTZcve6P7v1q6XYT7qJkpbYBfhn6vSh4XJBjuXDk4SkNu4cxC8F0D8zmU9jH7N1RNJ9nMEeSStafMV01W7aqABTXzz0eKkTUJuCX9UNTLuV2gAHnPkT3MGSjGC9UaJe5qbGUdcXqDjc6UgA9xCq2MUHRP2CQuxHTRHdKur2uyNi9M7Q2gULbVryeW3R38XRvekMSnHYSqSdDrx0dQRTZ4edMuA2t58LdA8kf6LxZrhdjH2FkGcXhAa8ZP4wjGe1ujPrPtnmK8TMmRr4AELcmLkb0AfX3QUNfv1DR2kqyT8Ja2WmGQHR35huMgek3ePB4NMCY6kZH09wfiSLxy68Pyir0huGVYHb4HdhMEEf89SmNaFHuFYgiTGRZexDfTSiaj4Rn04TR359AkNVibyT2E93ee8PN2Qv0vbBTG1nebXyuX7KRYQqBaSrchJFrc0jCGHgCR7mfMAgpPyCEd0Piyg3P3fCQFP0Uq7ADFAfEDgHa9SXHJmhJVwwYC7EUGBqHpFuQZiJAKFdZSUtNFEGDztmjEBwadeVT6vuZW3QUnpYUL4q9t7nQgYqf03jfnh90pzBTFqLTaebr8QkMxGSpHezJnevrBu8SKteUG5vjPEC0kdQKDnXn563AdxdD0w';
let query = new Contensis.Query(Contensis.Op.startsWith('email', startsWithText));
query.orderBy = Contensis.OrderBy.asc('email');
query.pageIndex = 1;
query.pageSize = 50;
let users = await client.security.users.search(query);
let expectedQueryString = toQuery({
pageIndex: 1,
pageSize: 50,
orderBy: JSON.stringify([{
asc: 'email'
}]),
where: JSON.stringify([{
field: 'email',
startsWith: startsWithText
}])
});
let url = `http://my-website.com/api/security/users/search${expectedQueryString}`;
expect(url.length).toEqual(2083);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
url,
getDefaultFetchRequest()
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
it('with query as Query instance and url length > 2083', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
// use string with length = 1897
// tslint:disable-next-line:max-line-length
const startsWithText = '1r2PxHazYJ4WFg6tgJwvNyW03bYFkE6xvnpzJyQHdjXEn4H3rAX0HY08iTHa5mqH7zzjH56xC1j62WYKG759S6YZyP158S4Z3ZqtkTf1KwTKAJEKur45qpXZ7rtt5RTXEkt0waDQy96dLFZjYdQYR9rNRurHtWyahtMgQW9vE3aVwKrHTYM0X817uYpTyCZmq4nr8k5ACijrS9FrSNcNVUgFdVaeEuFHaB6tKGQ1Jew4zeMaeZrqbF4v11GaA754ykEDWN8GbY3qhf5RuVaPktFYNJK6PeZkkmxEAVk7DQ2x7W62Y4n3GUmZbi6nwKXrLUrfGHeqR2h2b79A12CzpFHWxhnZ8hm3jRP0AP5085Sh2VtLGbCFMcVEC1bVrr5gFN26LPyTn1gvv6BJ1jUNfZ8JJGV0QA63VQJiqLLigvpYQJU1FJzFhj7rFBREaFCrVhPaZw5pSjD8kZi30i82Zh8VEMmXgEiLFPc8jHJ45wRzpu898NgjKv53bYBHYWqgyEpZF5pg2B1cqq5fLnfarUFKENCaPqxiqhjhMJ1SHC0e8kfLM4zR0TdkC6r7G9Dp4WLc3v0wcveapUjtzL3LEWFYJZpHix9RNCBd7AWzY0PDXih9DMc59frTe7U7GEqXzd36LrYVR8Auv5vwiXzu4fdwihCbeiinHnWnZwtQTJHYKZHLDdD9zMj1CAyEbNTm327NfuDZMQGEYjU8JB0yjhND05MNraL9FXx29iNVTht3j4PxMb3CMQqcBwH22UejpUzxE0mcbKEPvTPVEuP8d6ptBQN3mKc6v5MZ47YqdBqWSxBKDbxDpr7eGNHqrKXP0jUXwavNcAhMWmnE8zxSVKEHWhwdrZnJP1hNz0XtKQaTPBxHZErHcic8z806iHEdVaPGG7Q76ySVh58rNGX8tinEYCNT9eAJizCCKGpvCvkL52VHjChKcMc50ggDHTa6dwmhx6Q9Gjj4YE0XTbcVLQxHf0B4aPgcegRyG82MmBgUz8cwi5R4T8LhyeazQd3ER46DKt9YJBp9LAJXarc7WV6Axn88CviugeSEqH2vaF6Cy0Q6Xcx8tTE9QeiyTtHmMZrKKzMuzw4YD3GeXA7qqGjeQqcJQiF4KMbYzqXPUj7KVH2tg8pVXiFYqYuxEf61TzGab7WcEE7fU9V7rq1M6uqLiZC1KaPr8jM08DYMhjrmaJT6S9ZxfuqUdh6rjJJr5NvxZikhr9XXAKeL7RhgQjq12ZCDMjpDaPmKMufEVt9UTZcve6P7v1q6XYT7qJkpbYBfhn6vSh4XJBjuXDk4SkNu4cxC8F0D8zmU9jH7N1RNJ9nMEeSStafMV01W7aqABTXzz0eKkTUJuCX9UNTLuV2gAHnPkT3MGSjGC9UaJe5qbGUdcXqDjc6UgA9xCq2MUHRP2CQuxHTRHdKur2uyNi9M7Q2gULbVryeW3R38XRvekMSnHYSqSdDrx0dQRTZ4edMuA2t58LdA8kf6LxZrhdjH2FkGcXhAa8ZP4wjGe1ujPrPtnmK8TMmRr4AELcmLkb0AfX3QUNfv1DR2kqyT8Ja2WmGQHR35huMgek3ePB4NMCY6kZH09wfiSLxy68Pyir0huGVYHb4HdhMEEf89SmNaFHuFYgiTGRZexDfTSiaj4Rn04TR359AkNVibyT2E93ee8PN2Qv0vbBTG1nebXyuX7KRYQqBaSrchJFrc0jCGHgCR7mfMAgpPyCEd0Piyg3P3fCQFP0Uq7ADFAfEDgHa9SXHJmhJVwwYC7EUGBqHpFuQZiJAKFdZSUtNFEGDztmjEBwadeVT6vuZW3QUnpYUL4q9t7nQgYqf03jfnh90pzBTFqLTaebr8QkMxGSpHezJnevrBu8SKteUG5vjPEC0kdQKDnXn563AdxdD0w';
let query = new Contensis.Query(Contensis.Op.startsWith('email', startsWithText));
query.orderBy = Contensis.OrderBy.asc('email');
query.pageIndex = 1;
query.pageSize = 50;
let users = await client.security.users.search(query);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/search`,
getDefaultFetchRequest('POST', false, JSON.stringify(query))
]);
expect(users).not.toBeNull();
expect(users.items.length).toEqual(2);
expect(users.items[1].username).toEqual(defaultUsers[1].username);
});
});
describe('Create user', () => {
beforeEach(() => {
setDefaultSpy(global, defaultUsers[0]);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('for valid user', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let user = await client.security.users.create(defaultUsers[0] as User);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users`,
getDefaultFetchRequest('POST', null, JSON.stringify(defaultUsers[0]))
]);
expect(user).not.toBeNull();
expect(user.id).toEqual(defaultUsers[0].id);
});
it('for valid suspended user', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let user = await client.security.users.create(defaultUsers[0] as User, true);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users?suspended=true`,
getDefaultFetchRequest('POST', null, JSON.stringify(defaultUsers[0]))
]);
expect(user).not.toBeNull();
expect(user.id).toEqual(defaultUsers[0].id);
});
it('for valid unsuspended user', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let user = await client.security.users.create(defaultUsers[0] as User, false);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users`,
getDefaultFetchRequest('POST', null, JSON.stringify(defaultUsers[0]))
]);
expect(user).not.toBeNull();
expect(user.id).toEqual(defaultUsers[0].id);
});
});
describe('Update user', () => {
beforeEach(() => {
setDefaultSpy(global, defaultUsers[0]);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('for valid user', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let user = await client.security.users.update(defaultUsers[0] as User);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}`,
getDefaultFetchRequest('PATCH', null, JSON.stringify(defaultUsers[0]))
]);
expect(user).not.toBeNull();
expect(user.id).toEqual(defaultUsers[0].id);
});
});
describe('Update user password', () => {
beforeEach(() => {
setDefaultSpy(global, null);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('for valid user', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let options: UserUpdatePasswordOptions = {
userId: defaultUsers[0].id,
new: 'pwd1',
existing: 'pwd2'
};
const { userId, ...requestBody } = options;
let result = await client.security.users.updatePassword(options);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/credentials/password`,
getDefaultFetchRequest('POST', null, JSON.stringify(requestBody))
]);
expect(result).toEqual(null);
});
});
describe('Delete user', () => {
beforeEach(() => {
setDefaultSpy(global, null);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('for valid user', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let result = await client.security.users.delete(defaultUsers[0].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}`,
getDefaultFetchRequest('DELETE')
]);
expect(result).toEqual(null);
});
});
describe('Is user member of group', () => {
describe('for a positive result', () => {
beforeEach(() => {
setDefaultSpy(global, null);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('and valid user and group', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let result = await client.security.users.userIsMemberOf(defaultUsers[0].id, defaultGroups[0].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/groups/${defaultGroups[0].id}`,
getDefaultFetchRequest('HEAD')
]);
expect(result).toBeTrue();
});
});
describe('for a negative result', () => {
beforeEach(() => {
setDefaultSpy(global, null, true);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('and valid user and group', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let result = await client.security.users.userIsMemberOf(defaultUsers[0].id, defaultGroups[0].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/groups/${defaultGroups[0].id}`,
getDefaultFetchRequest('HEAD')
]);
expect(result).toBeFalse();
});
});
});
describe('Is user in groups', () => {
describe('for a positive result', () => {
beforeEach(() => {
setDefaultSpy(global, null);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('and valid user and group', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let result = await client.security.users.userIsMemberOf(defaultUsers[0].id, defaultGroups[0].id, defaultGroups[1].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/groups/${defaultGroups[0].id},${defaultGroups[1].id}`,
getDefaultFetchRequest('HEAD')
]);
expect(result).toBeTrue();
});
});
describe('for a negative result', () => {
beforeEach(() => {
setDefaultSpy(global, null, true);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('and valid user and group', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let result = await client.security.users.userIsMemberOf(defaultUsers[0].id, defaultGroups[0].id, defaultGroups[1].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/groups/${defaultGroups[0].id},${defaultGroups[1].id}`,
getDefaultFetchRequest('HEAD')
]);
expect(result).toBeFalse();
});
});
});
describe('Get user groups', () => {
beforeEach(() => {
setDefaultSpy(global, {
pageIndex: 0,
pageSize: 25,
totalCount: 2,
items: defaultGroups
} as PagedList<Partial<Group>>);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('with default options', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let groups = await client.security.users.getUserGroups(defaultUsers[0].id);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/groups?pageIndex=0&pageSize=25`,
getDefaultFetchRequest()
]);
expect(groups).not.toBeNull();
expect(groups.items.length).toEqual(2);
expect(groups.items[1].name).toEqual(defaultGroups[1].name);
});
it('with specific options', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let groups = await client.security.users.getUserGroups({
userId: defaultUsers[0].id,
pageOptions: { pageIndex: 1, pageSize: 50 },
order: ['name'],
includeInherited: true
});
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/groups?includeInherited=true&order=name&pageIndex=1&pageSize=50`,
getDefaultFetchRequest()
]);
expect(groups).not.toBeNull();
expect(groups.items.length).toEqual(2);
expect(groups.items[1].name).toEqual(defaultGroups[1].name);
});
it('with specific options and an exclusion group.', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let groups = await client.security.users.getUserGroups({
userId: defaultUsers[0].id,
pageOptions: { pageIndex: 1, pageSize: 50 },
order: ['name'],
includeInherited: true,
excludedGroups: ['abc']
});
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/groups?excludedGroups=abc&includeInherited=true&order=name&pageIndex=1&pageSize=50`,
getDefaultFetchRequest()
]);
expect(groups).not.toBeNull();
expect(groups.items.length).toEqual(2);
expect(groups.items[1].name).toEqual(defaultGroups[1].name);
});
it('with specific options and many exclusion groups.', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let groups = await client.security.users.getUserGroups({
userId: defaultUsers[0].id,
pageOptions: { pageIndex: 1, pageSize: 50 },
order: ['name'],
includeInherited: true,
excludedGroups: ['abc', 'def', 'hij']
});
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/groups?excludedGroups=abc%2Cdef%2Chij&includeInherited=true&order=name&pageIndex=1&pageSize=50`,
getDefaultFetchRequest()
]);
expect(groups).not.toBeNull();
expect(groups.items.length).toEqual(2);
expect(groups.items[1].name).toEqual(defaultGroups[1].name);
});
});
describe('Perform user actions', () => {
beforeEach(() => {
setDefaultSpy(global, null);
Zengenti.Contensis.Client.defaultClientConfig = null;
Zengenti.Contensis.Client.configure({
fetchFn: global.fetch
});
});
it('setPasswordToExpirable', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let result = await client.security.users.setPasswordToExpirable(defaultUsers[0].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/actions`,
getDefaultFetchRequest('POST', false, JSON.stringify({ type: 'setPasswordToExpirable' }))
]);
expect(result).toEqual(null);
});
it('suspend', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let result = await client.security.users.suspendUser(defaultUsers[0].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/actions`,
getDefaultFetchRequest('POST', false, JSON.stringify({ type: 'suspend' }))
]);
expect(result).toEqual(null);
});
it('unsuspend', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let result = await client.security.users.unsuspendUser(defaultUsers[0].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/actions`,
getDefaultFetchRequest('POST', false, JSON.stringify({ type: 'unsuspend' }))
]);
expect(result).toEqual(null);
});
it('unlock', async () => {
let client = Zengenti.Contensis.Client.create(getDefaultConfig());
let result = await client.security.users.unlockUser(defaultUsers[0].id);
expect(global.fetch).toHaveBeenCalledTimes(2);
expect((global.fetch as any).calls.first().args[0]).toEqual(getDefaultAuthenticateUrl());
expect((global.fetch as any).calls.mostRecent().args).toEqual([
`http://my-website.com/api/security/users/${defaultUsers[0].id}/actions`,
getDefaultFetchRequest('POST', false, JSON.stringify({ type: 'unlock' }))
]);
expect(result).toEqual(null);
});
});
});