* [MM-63717] LDAP Wizard skeleton (#31029) * add ldap_wizard component to render its admin components * i18n * test adjustment * keys and props fixes * title fix * fix placeholders * fix value initialization * linting * remove all ...props (except custom component); any->unknown * fix i18n (temp, will be changed in later PR) * better return; simplify function checking/calling * [MM-64259] Sections sidebar and navigation (#31059) * initial sections list sidebar * sidebar highlighting and scroll on click * some tidying up * add custom section titles for section sidebar * i18n * updating border on sections * scss style lint * color -> border-color * simplify activeSectionKey initialization; remove trailing newline * add useSectionNavigation; clean up ldap_wizard and scss; PR comments * extract section of code into renderSidebar() --------- Co-authored-by: Asaad Mahmood <asaadmahmood@users.noreply.github.com> * [MM-64296] Add test connection for connection settings panel (#31190) * button -> ldap test connect api * fix console error by sanitizing value in text component * return detailed error as error; adjust button -> primary, flushLeft * middle of redesigning how we do hover text, first button * add hover text to bools and file uploads * i18n * add LdapSettings as api type; add new endpoint to api yaml * allow testing without first enabling LDAP and saving config * i18n id changes * improve TestLdapConnection to current standards * PR comments * safeDereference; cleaner returns * remove hover markdown; formatting and typing simplification * use button for "More Info"; i18n * finish renaming help_text_hover -> help_text_more_info * fix error output * only send bindpassword if it has been changed * fix: don't send blank bindPassword when it is still ***** * merge conflict * [MM-64480] Refactor Admin Definition (#31280) * move ldap definition to its own file for simplicity & context * refactor admin_definition to eliminate circular dependencies * merge conflicts * before: buggy userHasReadPermissinOnSomeResources; after: fix incorrect snapshot * merge conflict: new bindPasssword definition was left behind; fixed. * merge conflict * [MM-63765] LDAP Wizard: User filter expandable section (#31286) * add "more info" hover to user filter help texts; make wider * add expandable_setting type and component * use Dislosure show/hide pattern for accessibility * fix tooltip scss selectors * fix hover -> more_info; make sure translation files are correct * use join('\n\n') instead of the eslint disable line * Revert "use join('\n\n') instead of the eslint disable line" This reverts commit 274667e875b34703f14fee0706cd28b0125cefc9. * [MM-64482] LDAP Wizard - Test User filters (#31312) * initial cut at UI and backend for test filters * api definitions; mocks * clean up to current standards * [MM-64512] - Test user filters UI (#31355) * result_count -> total_count * json cannot marshal error, returning error as string as god intended * render errors with icon, hover text, and better feedback texts * gather the settings that may be in expandable sections * remove success, use error == "" to indicate success * [MM-64536] LDAP Wizard: Test user attributes (#31373) * LdapFilterTestResult -> LdapDiagnosticResult; FilterName -> TestName * implement test_attributes endpoint and limited frontend (first step) * adding EntriesWithValue * [MM-64550] LDAP Wizard: Test user attributes UI (#31374) * [MM-64551] LDAP Wizard: Test group attributes (#31375) * remove Test LDAP button (not needed); reused helptext for other btn * implement test_group_attributes endpoint; button/client-side paths * [MM-64552] LDAP Wizard: Test group attributes UI (#31376) * implement Test Group Attributes button * simplify helper functions (improves useCallback dependencies) * show the default filter that was used on the backend in the tooltip * show the icon when there's an error (e.g. required filter/attribute) * fix infinite rerendering * fix error after failed save; fix navigation unlocked after save * empty * Adjust message feedback given we don't test the schema anymore * improve css; don't use inline styles * removed unneccesary pointer indirection * improved i18n strings and logic * combining filters/attributes/group attributes endpoints improve types * improve help text for User Filter (it's tricky) * AvailableAttrs -> AvailableAttributes * fix for e2e tests (renamed title) * more e2e fixes * skip broken e2e test --------- Co-authored-by: Asaad Mahmood <asaadmahmood@users.noreply.github.com>
96 строки
3.0 KiB
JavaScript
96 строки
3.0 KiB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import * as TIMEOUTS from '../fixtures/timeouts';
|
|
|
|
import {getAdminAccount} from './env';
|
|
|
|
Cypress.Commands.add('visitLDAPSettings', () => {
|
|
// # Go to LDAP settings Page
|
|
cy.visit('/admin_console/authentication/ldap');
|
|
cy.get('.admin-console__header').should('be.visible').and('have.text', 'AD/LDAP Wizard');
|
|
});
|
|
|
|
Cypress.Commands.add('doLDAPLogin', (settings = {}, useEmail = false) => {
|
|
// # Go to login page
|
|
cy.apiLogout();
|
|
cy.visit('/login');
|
|
cy.wait(TIMEOUTS.FIVE_SEC);
|
|
cy.checkLoginPage(settings);
|
|
cy.performLDAPLogin(settings, useEmail);
|
|
});
|
|
|
|
Cypress.Commands.add('performLDAPLogin', (settings = {}, useEmail = false) => {
|
|
const loginId = useEmail ? settings.user.email : settings.user.username;
|
|
cy.get('#input_loginId').type(loginId);
|
|
cy.get('#input_password-input').type(settings.user.password);
|
|
|
|
//click the login button
|
|
cy.get('#saveSetting').should('not.be.disabled').click();
|
|
});
|
|
|
|
Cypress.Commands.add('doLDAPLogout', (settings = {}) => {
|
|
cy.checkLeftSideBar(settings);
|
|
|
|
// # Logout then check login page
|
|
cy.uiLogout();
|
|
cy.checkLoginPage(settings);
|
|
});
|
|
|
|
Cypress.Commands.add('doSkipTutorial', () => {
|
|
cy.wait(TIMEOUTS.FIVE_SEC);
|
|
cy.get('body').then((body) => {
|
|
if (body.find('#tutorialSkipLink').length > 0) {
|
|
cy.get('#tutorialSkipLink').click().wait(TIMEOUTS.HALF_SEC);
|
|
}
|
|
});
|
|
});
|
|
|
|
Cypress.Commands.add('runLdapSync', (admin) => {
|
|
cy.externalRequest({user: admin, method: 'post', path: 'ldap/sync'}).then(() => {
|
|
cy.waitForLdapSyncCompletion(Date.now(), TIMEOUTS.THREE_MIN).then(() => {
|
|
return cy.wrap(true);
|
|
});
|
|
});
|
|
});
|
|
|
|
Cypress.Commands.add('getLdapSyncJobStatus', (start) => {
|
|
const admin = getAdminAccount();
|
|
cy.externalRequest({user: admin, method: 'get', path: 'jobs/type/ldap_sync'}).then((result) => {
|
|
const jobs = result.data;
|
|
if (jobs && jobs[0]) {
|
|
if (Math.abs(jobs[0].create_at - start) < TIMEOUTS.TWO_SEC) {
|
|
switch (jobs[0].status) {
|
|
case 'success':
|
|
return cy.wrap('success');
|
|
case 'pending':
|
|
case 'in_progress':
|
|
return cy.wrap('pending');
|
|
default:
|
|
return cy.wrap('unsuccessful');
|
|
}
|
|
}
|
|
}
|
|
return cy.wrap('not found');
|
|
});
|
|
});
|
|
|
|
Cypress.Commands.add('waitForLdapSyncCompletion', (start, timeout) => {
|
|
if (Date.now() - start > timeout) {
|
|
throw new Error('Timeout Waiting for LdapSync');
|
|
}
|
|
|
|
cy.getLdapSyncJobStatus(start).then((status) => {
|
|
if (status === 'success') {
|
|
return;
|
|
}
|
|
if (status === 'unsuccessful') {
|
|
throw new Error('LdapSync Unsuccessful');
|
|
}
|
|
|
|
// eslint-disable-next-line cypress/no-unnecessary-waiting
|
|
cy.wait(TIMEOUTS.FIVE_SEC);
|
|
cy.waitForLdapSyncCompletion(start, timeout);
|
|
});
|
|
});
|