Skip to content

Commit

Permalink
disable advanced settings for delegated roles during role creation or…
Browse files Browse the repository at this point in the history
… editing (#2733)

Signed-off-by: aporss <[email protected]>
  • Loading branch information
ArtjomsPorss committed Sep 23, 2024
1 parent 4a5bf73 commit d0dd183
Show file tree
Hide file tree
Showing 10 changed files with 194 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ exports[`RoleRow should render 1`] = `
class="emotion-12"
data-testid="icon"
height="1.25em"
id=""
id="ztssia_cert_rotate-setting-role-button"
viewBox="0 0 1024 1024"
width="1.25em"
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ exports[`RoleTable should render 1`] = `
class="emotion-36"
data-testid="icon"
height="1.25em"
id=""
id="a-setting-role-button"
viewBox="0 0 1024 1024"
width="1.25em"
>
Expand Down Expand Up @@ -458,7 +458,7 @@ exports[`RoleTable should render 1`] = `
class="emotion-36"
data-testid="icon"
height="1.25em"
id=""
id="b-setting-role-button"
viewBox="0 0 1024 1024"
width="1.25em"
>
Expand Down
140 changes: 140 additions & 0 deletions ui/src/__tests__/spec/tests/role.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
/*
* Copyright The Athenz Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

describe('role screen tests', () => {
it('when creating or editing a delegated role, all additional settings except description must be disabled', async () => {
// open browser
await browser.newUser();
await browser.url(`/`);
// select domain
let domain = 'athenz.dev.functional-test';
let testDomain = await $(`a*=${domain}`);
await browser.waitUntil(async () => await testDomain.isClickable());
await testDomain.click();

// open Add Role screen
let addRoleButton = await $('button*=Add Role');
await browser.waitUntil(async () => await addRoleButton.isClickable());
await addRoleButton.click();
// select Delegated
let delegatedButton = await $('div*=Delegated');
await delegatedButton.click();
// verify all settings except Description are disabled
let advancedSettingsIcon = await $('#advanced-settings-icon');
await advancedSettingsIcon.click();
let switchSettingAuditEnabled = await $('#switch-settingauditEnabled');
await expect(switchSettingAuditEnabled).toBeDisabled();
let switchSettingReviewEnabled = await $('#switch-settingreviewEnabled');
await expect(switchSettingReviewEnabled).toBeDisabled();
let switchSettingDeleteProtection = await $('#switch-settingdeleteProtection');
await expect(switchSettingDeleteProtection).toBeDisabled();
let switchSettingSelfServe = await $('#switch-settingselfServe');
await expect(switchSettingSelfServe).toBeDisabled();
let switchSettingSelfRenew = await $('#switch-settingselfRenew');
await expect(switchSettingSelfRenew).toBeDisabled();
let inputSelfRenewMins = await $('#setting-selfRenewMins');
await expect(inputSelfRenewMins).toBeDisabled();
let inputMemberExpiryDays = await $('#setting-memberExpiryDays');
await expect(inputMemberExpiryDays).toBeDisabled();
let inputGroupExpiryDays = await $('#setting-groupExpiryDays');
await expect(inputGroupExpiryDays).toBeDisabled();
let inputGroupReviewDays = await $('#setting-groupReviewDays');
await expect(inputGroupReviewDays).toBeDisabled();
let inputServiceExpiryDays = await $('#setting-serviceExpiryDays');
await expect(inputServiceExpiryDays).toBeDisabled();
let inputServiceReviewDays = await $('#setting-serviceReviewDays');
await expect(inputServiceReviewDays).toBeDisabled();
let inputTokenExpiryMins = await $('#setting-tokenExpiryMins');
await expect(inputTokenExpiryMins).toBeDisabled();
let inputCertExpiryMins = await $('#setting-certExpiryMins');
await expect(inputCertExpiryMins).toBeDisabled();
let dropdownUserAuthorityFilter = await $('[name="setting-userAuthorityFilter"]');
await expect(dropdownUserAuthorityFilter).toBeDisabled();
let dropdownUserAuthorityExpiration = await $('[name="setting-userAuthorityExpiration"]');
await expect(dropdownUserAuthorityExpiration).toBeDisabled();
let inputSettingDescription = await $('#setting-description');
await expect(inputSettingDescription).toBeEnabled();
let inputMaxMembers = await $('#setting-maxMembers');
await expect(inputMaxMembers).toBeDisabled();

// add role info
let inputRoleName = await $('#role-name-input');
let roleName = 'delegated-role';
await inputRoleName.addValue(roleName);
let inputDelegateTo = await $('#delegated-to-input');
await inputDelegateTo.addValue('athenz.dev');
let buttonSubmit = await $('button*=Submit');
// submit role
await buttonSubmit.click();

// find row with 'delegated-role' in name and click settings svg
let buttonSettingsOfDelegatedRole = await $('.//*[local-name()="svg" and @id="delegated-role-setting-role-button"]');
await buttonSettingsOfDelegatedRole.click();

// verify all settings except Description are disabled
switchSettingReviewEnabled = await $('#switch-settingreviewEnabled');
await expect(switchSettingReviewEnabled).toBeDisabled();
switchSettingDeleteProtection = await $('#switch-settingdeleteProtection');
await expect(switchSettingDeleteProtection).toBeDisabled();
switchSettingSelfServe = await $('#switch-settingselfServe');
await expect(switchSettingSelfServe).toBeDisabled();
switchSettingSelfRenew = await $('#switch-settingselfRenew');
await expect(switchSettingSelfRenew).toBeDisabled();
inputSelfRenewMins = await $('#setting-selfRenewMins');
await expect(inputSelfRenewMins).toBeDisabled();
inputMemberExpiryDays = await $('#setting-memberExpiryDays');
await expect(inputMemberExpiryDays).toBeDisabled();
inputGroupExpiryDays = await $('#setting-groupExpiryDays');
await expect(inputGroupExpiryDays).toBeDisabled();
inputGroupReviewDays = await $('#setting-groupReviewDays');
await expect(inputGroupReviewDays).toBeDisabled();
inputServiceExpiryDays = await $('#setting-serviceExpiryDays');
await expect(inputServiceExpiryDays).toBeDisabled();
inputServiceReviewDays = await $('#setting-serviceReviewDays');
await expect(inputServiceReviewDays).toBeDisabled();
inputTokenExpiryMins = await $('#setting-tokenExpiryMins');
await expect(inputTokenExpiryMins).toBeDisabled();
inputCertExpiryMins = await $('#setting-certExpiryMins');
await expect(inputCertExpiryMins).toBeDisabled();
dropdownUserAuthorityFilter = await $('[name="setting-userAuthorityFilter"]');
await expect(dropdownUserAuthorityFilter).toBeDisabled();
dropdownUserAuthorityExpiration = await $('[name="setting-userAuthorityExpiration"]');
await expect(dropdownUserAuthorityExpiration).toBeDisabled();
inputSettingDescription = await $('#setting-description');
await expect(inputSettingDescription).toBeEnabled();
inputMaxMembers = await $('#setting-maxMembers');
await expect(inputMaxMembers).toBeDisabled();
});

// after - runs after the last test in order of declaration
after(async() => {
// open browser
await browser.newUser();
await browser.url(`/`);
// select domain
let domain = 'athenz.dev.functional-test';
let testDomain = await $(`a*=${domain}`);
await browser.waitUntil(async () => await testDomain.isClickable());
await testDomain.click();

// delete the delegate role used in the test
// find row with 'delegated-role' in name and click delete on svg
let buttonDeleteDelegatedRole = await $('.//*[local-name()="svg" and @id="delegated-role-delete-role-button"]');
await buttonDeleteDelegatedRole.click();
let modalDeleteButton = await $('button*=Delete');
await modalDeleteButton.click();
});
})
9 changes: 9 additions & 0 deletions ui/src/__tests__/spec/wdio.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,15 @@ if (!sauceLabsUser) {
localOrRemote.capabilities = [
{
browserName: 'chrome',
'goog:chromeOptions': {
args: [
'--disable-infobars', // Disables "Chrome is being controlled by automated software" infobar
'--disable-default-apps', // Disables default apps (including search engine prompts)
'--no-first-run', // Bypass first-time setup including "Choose your search engine"
'--disable-popup-blocking', // Disables popup blocking
'--disable-search-engine-choice-screen' // Disables choose your search engine popup
]
},
browserVersion: 'latest',
acceptInsecureCerts: true,
},
Expand Down
3 changes: 3 additions & 0 deletions ui/src/components/role/AddRole.js
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,7 @@ class AddRole extends React.Component {
<StyledInputLabel>Delegated to</StyledInputLabel>
<ContentDiv>
<StyledInput
id={'delegated-to-input'}
placeholder={
ADD_ROLE_DELEGATED_DOMAIN_PLACEHOLDER
}
Expand Down Expand Up @@ -593,6 +594,8 @@ class AddRole extends React.Component {
members={members}
role={this.state.role}
reviewEnabled={this.state.reviewEnabled}
// to disable all settings except description for delegated role
delegated={this.state.category === 'delegated'}
/>
</tbody>
</StyleTable>
Expand Down
19 changes: 18 additions & 1 deletion ui/src/components/role/AddRoleAdvancedSettings.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
label='Audit'
type='switch'
disabled={
this.props.delegated ||
!this.props.isDomainAuditEnabled ||
this.props.members.length > 0
}
Expand All @@ -111,6 +112,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
userProfileLink={this.props.userProfileLink}
inModal={true}
tooltip={ADD_ROLE_REVIEW_ENABLED_TOOLTIP}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-deleteProtection'}
Expand All @@ -122,6 +124,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
value={this.props.role['deleteProtection']}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-selfServe'}
Expand All @@ -133,6 +136,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
value={this.props.role['selfServe']}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-selfRenew'}
Expand All @@ -144,6 +148,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
value={this.props.role['selfRenew']}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-selfRenewMins'}
Expand All @@ -152,7 +157,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
type='input'
desc={SELF_RENEW_MINS_DESC}
unit='Mins'
disabled={!this.props.role['selfRenew']}
disabled={this.props.delegated || !this.props.role['selfRenew']}
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
Expand All @@ -167,6 +172,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-memberReviewDays'}
Expand All @@ -178,6 +184,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-groupExpiryDays'}
Expand All @@ -189,6 +196,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-groupReviewDays'}
Expand All @@ -200,6 +208,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-serviceExpiryDays'}
Expand All @@ -211,6 +220,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-serviceReviewDays'}
Expand All @@ -222,6 +232,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-tokenExpiryMins'}
Expand All @@ -233,6 +244,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-certExpiryMins'}
Expand All @@ -244,6 +256,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-userAuthorityFilter'}
Expand All @@ -256,6 +269,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-userAuthorityExpiration'}
Expand All @@ -268,6 +282,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-description'}
Expand All @@ -278,6 +293,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
<SettingRow
key={'setting-row-maxmembers'}
Expand All @@ -289,6 +305,7 @@ export default class AddRoleAdvancedSettings extends React.Component {
onValueChange={this.advancedSettingsChanged}
userProfileLink={this.props.userProfileLink}
inModal={true}
disabled={this.props.delegated}
/>,
];
}
Expand Down
1 change: 1 addition & 0 deletions ui/src/components/role/RoleRow.js
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,7 @@ class RoleRow extends React.Component {
trigger={
<span>
<Icon
id={`${this.state.name}-setting-role-button`}
icon={'setting'}
onClick={clickSettings}
color={colors.icons}
Expand Down
1 change: 1 addition & 0 deletions ui/src/components/settings/SettingRow.js
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ export default class SettingRow extends React.Component {
filterable
onChange={this.onDropDownChange}
defaultSelectedValue={this.props.value}
disabled={this.props.disabled || false}
/>
</StyledDiv>
);
Expand Down
Loading

0 comments on commit d0dd183

Please sign in to comment.