1781-zoneHoliday #994
|
@ -46,7 +46,7 @@ module.exports = Self => {
|
||||||
|
|
||||||
const {data} = await Self.getUserStatus(recipient.name);
|
const {data} = await Self.getUserStatus(recipient.name);
|
||||||
if (data) {
|
if (data) {
|
||||||
if (data.status === 'offline' || data.status === 'busy') {
|
if (data.status === 'offline' || data.status === 'busy') {
|
||||||
// Send message to department room
|
// Send message to department room
|
||||||
const workerDepartment = await models.WorkerDepartment.findById(recipientId, {
|
const workerDepartment = await models.WorkerDepartment.findById(recipientId, {
|
||||||
include: {
|
include: {
|
||||||
|
|
|
@ -101,6 +101,47 @@ export default {
|
||||||
email: 'vn-user-mail-forwarding vn-textfield[ng-model="data.forwardTo"]',
|
email: 'vn-user-mail-forwarding vn-textfield[ng-model="data.forwardTo"]',
|
||||||
save: 'vn-user-mail-forwarding vn-submit'
|
save: 'vn-user-mail-forwarding vn-submit'
|
||||||
},
|
},
|
||||||
|
accountAcl: {
|
||||||
|
addAcl: 'vn-acl-index button vn-icon[icon="add"]',
|
||||||
|
thirdAcl: 'vn-acl-index vn-list> a:nth-child(3)',
|
||||||
|
deleteThirdAcl: 'vn-acl-index vn-list > a:nth-child(3) > vn-item-section > vn-icon-button[icon="delete"]',
|
||||||
|
role: 'vn-acl-create vn-autocomplete[ng-model="$ctrl.acl.principalId"]',
|
||||||
|
model: 'vn-acl-create vn-autocomplete[ng-model="$ctrl.acl.model"]',
|
||||||
|
property: 'vn-acl-create vn-autocomplete[ng-model="$ctrl.acl.property"]',
|
||||||
|
accessType: 'vn-acl-create vn-autocomplete[ng-model="$ctrl.acl.accessType"]',
|
||||||
|
permission: 'vn-acl-create vn-autocomplete[ng-model="$ctrl.acl.permission"]',
|
||||||
|
save: 'vn-acl-create vn-submit'
|
||||||
|
},
|
||||||
|
accountConnections: {
|
||||||
|
firstConnection: 'vn-connections vn-list > a:nth-child(1)',
|
||||||
|
deleteFirstConnection: 'vn-connections vn-list > a:nth-child(1) > vn-item-section > vn-icon-button[icon="exit_to_app"]'
|
||||||
|
},
|
||||||
|
accountAccounts: {
|
||||||
|
syncRoles: 'vn-account-accounts vn-button[label="Synchronize roles"]',
|
||||||
|
syncUser: 'vn-account-accounts vn-button[label="Synchronize user"]',
|
||||||
|
syncAll: 'vn-account-accounts vn-button[label="Synchronize all"]',
|
||||||
|
syncUserName: 'vn-textfield[ng-model="$ctrl.syncUser"]',
|
||||||
|
syncUserPassword: 'vn-textfield[ng-model="$ctrl.syncPassword"]',
|
||||||
|
buttonAccept: 'button[response="accept"]'
|
||||||
|
},
|
||||||
|
accountLdap: {
|
||||||
|
checkEnable: 'vn-account-ldap vn-check[ng-model="watcher.hasData"]',
|
||||||
|
server: 'vn-account-ldap vn-textfield[ng-model="$ctrl.config.server"]',
|
||||||
|
rdn: 'vn-account-ldap vn-textfield[ng-model="$ctrl.config.rdn"]',
|
||||||
|
password: 'vn-account-ldap vn-textfield[ng-model="$ctrl.config.password"]',
|
||||||
|
userDn: 'vn-account-ldap vn-textfield[ng-model="$ctrl.config.userDn"]',
|
||||||
|
groupDn: 'vn-account-ldap vn-textfield[ng-model="$ctrl.config.groupDn"]',
|
||||||
|
save: 'vn-account-ldap vn-submit'
|
||||||
|
},
|
||||||
|
accountSamba: {
|
||||||
|
checkEnable: 'vn-account-samba vn-check[ng-model="watcher.hasData"]',
|
||||||
|
adDomain: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adDomain"]',
|
||||||
|
adController: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adController"]',
|
||||||
|
adUser: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adUser"]',
|
||||||
|
adPassword: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adPassword"]',
|
||||||
|
verifyCert: 'vn-account-samba vn-check[ng-model="$ctrl.config.verifyCert"]',
|
||||||
|
save: 'vn-account-samba vn-submit'
|
||||||
|
},
|
||||||
clientsIndex: {
|
clientsIndex: {
|
||||||
createClientButton: `vn-float-button`
|
createClientButton: `vn-float-button`
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
import selectors from '../../helpers/selectors.js';
|
||||||
|
import getBrowser from '../../helpers/puppeteer';
|
||||||
|
|
||||||
|
describe('Account ACL path', () => {
|
||||||
|
let browser;
|
||||||
|
let page;
|
||||||
|
|
||||||
|
beforeAll(async() => {
|
||||||
|
browser = await getBrowser();
|
||||||
|
page = browser.page;
|
||||||
|
await page.loginAndModule('developer', 'account');
|
||||||
|
await page.accessToSection('account.acl');
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async() => {
|
||||||
|
await browser.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should go to create new acl', async() => {
|
||||||
|
await page.waitToClick(selectors.accountAcl.addAcl);
|
||||||
|
await page.waitForState('account.acl.create');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create new acl', async() => {
|
||||||
|
await page.autocompleteSearch(selectors.accountAcl.role, 'sysadmin');
|
||||||
|
await page.autocompleteSearch(selectors.accountAcl.model, 'UserAccount');
|
||||||
|
await page.autocompleteSearch(selectors.accountAcl.accessType, '*');
|
||||||
|
await page.autocompleteSearch(selectors.accountAcl.permission, 'ALLOW');
|
||||||
|
await page.waitToClick(selectors.accountAcl.save);
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('Data saved!');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should navigate to edit', async() => {
|
||||||
|
await page.doSearch();
|
||||||
|
await page.waitToClick(selectors.accountAcl.thirdAcl);
|
||||||
|
await page.waitForState('account.acl.edit');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should edit the third acl', async() => {
|
||||||
|
await page.autocompleteSearch(selectors.accountAcl.model, 'Supplier');
|
||||||
|
await page.autocompleteSearch(selectors.accountAcl.accessType, 'READ');
|
||||||
|
await page.waitToClick(selectors.accountAcl.save);
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('Data saved!');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should delete the third result', async() => {
|
||||||
|
const result = await page.waitToGetProperty(selectors.accountAcl.thirdAcl, 'innerText');
|
||||||
|
await page.waitToClick(selectors.accountAcl.deleteThirdAcl);
|
||||||
|
await page.waitToClick(selectors.globalItems.acceptButton);
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
const newResult = await page.waitToGetProperty(selectors.accountAcl.thirdAcl, 'innerText');
|
||||||
|
|
||||||
|
expect(message.text).toContain('ACL removed');
|
||||||
|
expect(result).not.toEqual(newResult);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,33 @@
|
||||||
|
import selectors from '../../helpers/selectors.js';
|
||||||
|
import getBrowser from '../../helpers/puppeteer';
|
||||||
|
|
||||||
|
describe('Account Connections path', () => {
|
||||||
|
let browser;
|
||||||
|
let page;
|
||||||
|
const account = 'sysadmin';
|
||||||
|
|
||||||
|
beforeAll(async() => {
|
||||||
|
browser = await getBrowser();
|
||||||
|
page = browser.page;
|
||||||
|
await page.loginAndModule(account, 'account');
|
||||||
|
await page.accessToSection('account.connections');
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async() => {
|
||||||
|
await browser.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should check this is the last connection', async() => {
|
||||||
|
const firstResult = await page.waitToGetProperty(selectors.accountConnections.firstConnection, 'innerText');
|
||||||
|
|
||||||
|
expect(firstResult).toContain(account);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should kill this connection and then get redirected to the login page', async() => {
|
||||||
|
await page.waitToClick(selectors.accountConnections.deleteFirstConnection);
|
||||||
|
await page.waitToClick(selectors.globalItems.acceptButton);
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('Your session has expired, please login again');
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,49 @@
|
||||||
|
import selectors from '../../helpers/selectors.js';
|
||||||
|
import getBrowser from '../../helpers/puppeteer';
|
||||||
|
|
||||||
|
describe('Account Accounts path', () => {
|
||||||
|
let browser;
|
||||||
|
let page;
|
||||||
|
|
||||||
|
beforeAll(async() => {
|
||||||
|
browser = await getBrowser();
|
||||||
|
page = browser.page;
|
||||||
|
await page.loginAndModule('sysadmin', 'account');
|
||||||
|
await page.accessToSection('account.accounts');
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async() => {
|
||||||
|
await browser.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should sync roles', async() => {
|
||||||
|
await page.waitToClick(selectors.accountAccounts.syncRoles);
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('Roles synchronized!');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should sync user', async() => {
|
||||||
|
await page.waitToClick(selectors.accountAccounts.syncUser);
|
||||||
|
await page.write(selectors.accountAccounts.syncUserName, 'sysadmin');
|
||||||
|
await page.write(selectors.accountAccounts.syncUserPassword, 'nightmare');
|
||||||
|
|
||||||
|
await page.waitToClick(selectors.accountAccounts.buttonAccept);
|
||||||
|
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('User synchronized!');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should relogin', async() => {
|
||||||
|
await page.loginAndModule('sysadmin', 'account');
|
||||||
|
await page.accessToSection('account.accounts');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should sync all', async() => {
|
||||||
|
await page.waitToClick(selectors.accountAccounts.syncAll);
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('Synchronizing in the background');
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,32 @@
|
||||||
|
import selectors from '../../helpers/selectors.js';
|
||||||
|
import getBrowser from '../../helpers/puppeteer';
|
||||||
|
|
||||||
|
describe('Account LDAP path', () => {
|
||||||
|
let browser;
|
||||||
|
let page;
|
||||||
|
|
||||||
|
beforeAll(async() => {
|
||||||
|
browser = await getBrowser();
|
||||||
|
page = browser.page;
|
||||||
|
await page.loginAndModule('sysadmin', 'account');
|
||||||
|
await page.accessToSection('account.ldap');
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async() => {
|
||||||
|
await browser.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should set data and save', async() => {
|
||||||
|
await page.waitToClick(selectors.accountLdap.checkEnable);
|
||||||
|
await page.write(selectors.accountLdap.server, '1234');
|
||||||
|
await page.write(selectors.accountLdap.rdn, '1234');
|
||||||
|
await page.write(selectors.accountLdap.password, 'nightmare');
|
||||||
|
await page.write(selectors.accountLdap.userDn, 'sysadmin');
|
||||||
|
await page.write(selectors.accountLdap.groupDn, '1234');
|
||||||
|
await page.waitToClick(selectors.accountLdap.save);
|
||||||
|
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('Data saved!');
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,32 @@
|
||||||
|
import selectors from '../../helpers/selectors.js';
|
||||||
|
import getBrowser from '../../helpers/puppeteer';
|
||||||
|
|
||||||
|
describe('Account Samba path', () => {
|
||||||
|
let browser;
|
||||||
|
let page;
|
||||||
|
|
||||||
|
beforeAll(async() => {
|
||||||
|
browser = await getBrowser();
|
||||||
|
page = browser.page;
|
||||||
|
await page.loginAndModule('sysadmin', 'account');
|
||||||
|
await page.accessToSection('account.samba');
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async() => {
|
||||||
|
await browser.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should set data and save', async() => {
|
||||||
|
await page.waitToClick(selectors.accountSamba.checkEnable);
|
||||||
|
await page.write(selectors.accountSamba.adDomain, '1234');
|
||||||
|
await page.write(selectors.accountSamba.adController, '1234');
|
||||||
|
await page.write(selectors.accountSamba.adUser, 'nightmare');
|
||||||
|
await page.write(selectors.accountSamba.adPassword, 'sysadmin');
|
||||||
|
await page.waitToClick(selectors.accountSamba.verifyCert);
|
||||||
|
await page.waitToClick(selectors.accountSamba.save);
|
||||||
|
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('Data saved!');
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue