Disable add group button for LDAP project admin (#15448)

Signed-off-by: AllForNothing <sshijun@vmware.com>
This commit is contained in:
孙世军 2021-08-18 19:48:02 +08:00 committed by GitHub
parent cdb13f5191
commit 2e8c3463ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 7 deletions

View File

@ -16,7 +16,7 @@
<button class="btn btn-secondary" (click)="openAddMemberModal()" [disabled]="!hasCreateMemberPermission">
<span><clr-icon shape="plus" size="16"></clr-icon>&nbsp;{{'MEMBER.USER' | translate }}</span>
</button>
<button class="btn btn-secondary" (click)="openAddGroupModal()" [disabled]="!hasCreateMemberPermission || !(isLdapMode || isHttpAuthMode || isOidcMode)">
<button class="btn btn-secondary" (click)="openAddGroupModal()" [disabled]="!hasCreateMemberPermission || !((isLdapMode && currentUser?.has_admin_role) || isHttpAuthMode || isOidcMode)">
<span><clr-icon shape="plus" size="16"></clr-icon>&nbsp;{{'MEMBER.LDAP_GROUP' | translate}}</span>
</button>
<clr-dropdown [clrCloseMenuOnItemClick]="false" class="btn btn-link" clrDropdownTrigger>

View File

@ -4,7 +4,7 @@ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ActivatedRoute } from "@angular/router";
import { MessageHandlerService } from "../../../shared/services/message-handler.service";
import { SessionService } from "../../../shared/services/session.service";
import { MemberService } from "./member.service";
import { MemberService } from "../../../../../ng-swagger-gen/services/member.service";
import { AppConfigService } from "../../../services/app-config.service";
import { of } from 'rxjs';
import { OperationService } from "../../../shared/components/operation/operation.service";
@ -14,20 +14,42 @@ import { ConfirmationDialogService } from "../../global-confirmation-dialog/conf
import { SharedTestingModule } from "../../../shared/shared.module";
import { HttpHeaders, HttpResponse } from "@angular/common/http";
import { Registry } from "../../../../../ng-swagger-gen/models/registry";
import { ProjectMemberEntity } from "../../../../../ng-swagger-gen/models/project-member-entity";
import { delay } from "rxjs/operators";
describe('MemberComponent', () => {
let component: MemberComponent;
let fixture: ComponentFixture<MemberComponent>;
const mockedMembers: ProjectMemberEntity[] = [
{
id: 1,
project_id: 1,
entity_name: 'test1',
role_name: 'projectAdmin',
role_id: 1,
entity_id: 1,
entity_type: 'u'
},
{
id: 2,
project_id: 1,
entity_name: 'test2',
role_name: 'projectAdmin',
role_id: 1,
entity_id: 2,
entity_type: 'u'
}
];
const mockMemberService = {
getUsersNameList: () => {
return of([]);
},
listProjectMembersResponse: () => {
const response: HttpResponse<Array<Registry>> = new HttpResponse<Array<Registry>>({
headers: new HttpHeaders({'x-total-count': '0'}),
body: []
headers: new HttpHeaders({'x-total-count': '2'}),
body: mockedMembers
});
return of(response);
return of(response).pipe(delay(0));
},
updateProjectMember: () => {
return of(null);
@ -118,11 +140,16 @@ describe('MemberComponent', () => {
beforeEach(() => {
fixture = TestBed.createComponent(MemberComponent);
component = fixture.componentInstance;
component.loading = true;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should render member list', async () => {
fixture.autoDetectChanges(true);
await fixture.whenStable();
const rows = fixture.nativeElement.querySelectorAll('clr-dg-row');
expect(rows.length).toEqual(2);
});
});

View File

@ -55,7 +55,7 @@ export class MemberComponent implements OnInit, OnDestroy {
roleNum: number;
isDelete = false;
isChangeRole = false;
loading = false;
loading = true;
isChangingRole = false;
batchChangeRoleInfos = {};