http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-user/nf-registry-manage-user.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-user/nf-registry-manage-user.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-user/nf-registry-manage-user.js index 9abc043..23ac198 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-user/nf-registry-manage-user.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-user/nf-registry-manage-user.js @@ -64,17 +64,22 @@ NfRegistryManageUser.prototype = { */ ngOnInit: function () { var self = this; - this.nfRegistryService.sidenav.open(); - // subscribe to the route params this.$subscription = self.route.params .switchMap(function (params) { return self.nfRegistryApi.getUser(params['userId']); }) .subscribe(function (response) { - self.nfRegistryService.user = response; - self._username = response.identity; - self.filterGroups(); + if (!response.status || response.status === 200) { + self.nfRegistryService.sidenav.open(); + self.nfRegistryService.user = response; + self._username = response.identity; + self.filterGroups(); + } else if (response.status === 404) { + self.router.navigateByUrl('/nifi-registry/administration/users'); + } else if (response.status === 409) { + self.router.navigateByUrl('/nifi-registry/administration/workflow'); + } }); }, @@ -107,7 +112,7 @@ NfRegistryManageUser.prototype = { this.nfRegistryService.BUCKETS_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist, let's create it self.nfRegistryApi.postPolicyActionResource(action, resource, [self.nfRegistryService.user], []).subscribe( function (response) { @@ -148,7 +153,7 @@ NfRegistryManageUser.prototype = { this.nfRegistryService.BUCKETS_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist } else { // resource exists, let's filter out the current user and update it @@ -187,7 +192,7 @@ NfRegistryManageUser.prototype = { this.nfRegistryService.TENANTS_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist, let's create it self.nfRegistryApi.postPolicyActionResource(action, resource, [self.nfRegistryService.user], []).subscribe( function (response) { @@ -228,7 +233,7 @@ NfRegistryManageUser.prototype = { this.nfRegistryService.TENANTS_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist } else { // resource exists, let's filter out the current user and update it @@ -267,7 +272,7 @@ NfRegistryManageUser.prototype = { this.nfRegistryService.POLICIES_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist, let's create it self.nfRegistryApi.postPolicyActionResource(action, resource, [self.nfRegistryService.user], []).subscribe( function (response) { @@ -308,7 +313,7 @@ NfRegistryManageUser.prototype = { this.nfRegistryService.POLICIES_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist } else { // resource exists, let's filter out the current user and update it @@ -347,7 +352,7 @@ NfRegistryManageUser.prototype = { this.nfRegistryService.PROXY_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist, let's create it self.nfRegistryApi.postPolicyActionResource(action, resource, [self.nfRegistryService.user], []).subscribe( function (response) { @@ -388,7 +393,7 @@ NfRegistryManageUser.prototype = { this.nfRegistryService.PROXY_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist } else { // resource exists, let's filter out the current user and update it
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-user/nf-registry-manage-user.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-user/nf-registry-manage-user.spec.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-user/nf-registry-manage-user.spec.js new file mode 100644 index 0000000..d3eca21 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-user/nf-registry-manage-user.spec.js @@ -0,0 +1,1816 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +var NfRegistryRoutes = require('nifi-registry/nf-registry.routes.js'); +var ngCoreTesting = require('@angular/core/testing'); +var ngCommon = require('@angular/common'); +var ngRouter = require('@angular/router'); +var NfRegistry = require('nifi-registry/nf-registry.js'); +var NfRegistryApi = require('nifi-registry/services/nf-registry.api.js'); +var NfRegistryService = require('nifi-registry/services/nf-registry.service.js'); +var NfPageNotFoundComponent = require('nifi-registry/components/page-not-found/nf-registry-page-not-found.js'); +var NfRegistryExplorer = require('nifi-registry/components/explorer/nf-registry-explorer.js'); +var NfRegistryAdministration = require('nifi-registry/components/administration/nf-registry-administration.js'); +var NfRegistryUsersAdministration = require('nifi-registry/components/administration/users/nf-registry-users-administration.js'); +var NfRegistryAddUser = require('nifi-registry/components/administration/users/dialogs/add-user/nf-registry-add-user.js'); +var NfRegistryCreateNewGroup = require('nifi-registry/components/administration/users/dialogs/create-new-group/nf-registry-create-new-group.js'); +var NfRegistryEditBucketPolicy = require('nifi-registry/components/administration/workflow/dialogs/edit-bucket-policy/nf-registry-edit-bucket-policy.js'); +var NfRegistryAddPolicyToBucket = require('nifi-registry/components/administration/workflow/dialogs/add-policy-to-bucket/nf-registry-add-policy-to-bucket.js'); +var NfRegistryAddUserToGroups = require('nifi-registry/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.js'); +var NfRegistryAddUsersToGroup = require('nifi-registry/components/administration/users/dialogs/add-users-to-group/nf-registry-add-users-to-group.js'); +var NfRegistryManageUser = require('nifi-registry/components/administration/users/sidenav/manage-user/nf-registry-manage-user.js'); +var NfRegistryManageGroup = require('nifi-registry/components/administration/users/sidenav/manage-group/nf-registry-manage-group.js'); +var NfRegistryManageBucket = require('nifi-registry/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.js'); +var NfRegistryWorkflowAdministration = require('nifi-registry/components/administration/workflow/nf-registry-workflow-administration.js'); +var NfRegistryCreateBucket = require('nifi-registry/components/administration/workflow/dialogs/create-bucket/nf-registry-create-bucket.js'); +var NfRegistryGridListViewer = require('nifi-registry/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js'); +var NfRegistryBucketGridListViewer = require('nifi-registry/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.js'); +var NfRegistryDropletGridListViewer = require('nifi-registry/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.js'); +var fdsCore = require('@fluid-design-system/core'); +var ngMoment = require('angular2-moment'); +var rxjs = require('rxjs/Rx'); +var ngCommonHttp = require('@angular/common/http'); +var NfRegistryTokenInterceptor = require('nifi-registry/services/nf-registry.token.interceptor.js'); +var NfStorage = require('nifi-registry/services/nf-storage.service.js'); +var NfLoginComponent = require('nifi-registry/components/login/nf-registry-login.js'); +var NfUserLoginComponent = require('nifi-registry/components/login/dialogs/nf-registry-user-login.js'); + +describe('NfRegistryManageUser Component', function () { + var comp; + var fixture; + var nfRegistryService; + var nfRegistryApi; + + beforeEach(function () { + ngCoreTesting.TestBed.configureTestingModule({ + imports: [ + ngMoment.MomentModule, + ngCommonHttp.HttpClientModule, + fdsCore, + NfRegistryRoutes + ], + declarations: [ + NfRegistry, + NfRegistryExplorer, + NfRegistryAdministration, + NfRegistryUsersAdministration, + NfRegistryManageUser, + NfRegistryManageGroup, + NfRegistryManageBucket, + NfRegistryWorkflowAdministration, + NfRegistryAddUser, + NfRegistryCreateBucket, + NfRegistryCreateNewGroup, + NfRegistryAddUserToGroups, + NfRegistryAddUsersToGroup, + NfRegistryAddPolicyToBucket, + NfRegistryEditBucketPolicy, + NfRegistryGridListViewer, + NfRegistryBucketGridListViewer, + NfRegistryDropletGridListViewer, + NfPageNotFoundComponent, + NfLoginComponent, + NfUserLoginComponent + ], + entryComponents: [ + NfRegistryAddUser, + NfRegistryCreateBucket, + NfRegistryCreateNewGroup, + NfRegistryAddUserToGroups, + NfRegistryAddUsersToGroup, + NfRegistryAddPolicyToBucket, + NfRegistryEditBucketPolicy, + NfUserLoginComponent + ], + providers: [ + NfRegistryService, + NfRegistryApi, + NfStorage, + { + provide: ngCommonHttp.HTTP_INTERCEPTORS, + useClass: NfRegistryTokenInterceptor, + multi: true + }, + { + provide: ngCommon.APP_BASE_HREF, + useValue: '/' + }, + { + provide: ngRouter.ActivatedRoute, + useValue: { + params: rxjs.Observable.of({userId: '123'}) + } + } + ] + }); + fixture = ngCoreTesting.TestBed.createComponent(NfRegistryManageUser); + + // test instance + comp = fixture.componentInstance; + + // from the root injector + nfRegistryService = ngCoreTesting.TestBed.get(NfRegistryService); + nfRegistryApi = ngCoreTesting.TestBed.get(NfRegistryApi); + + // because the NfRegistryManageUser component is a nested route component we need to set up the nfRegistryService service manually + nfRegistryService.sidenav = { + open: function () { + }, + close: function () { + } + }; + nfRegistryService.user = { + identifier: 999, + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + }; + nfRegistryService.users = [nfRegistryService.user]; + + //Spy + spyOn(nfRegistryApi, 'ticketExchange').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({})); + spyOn(nfRegistryApi, 'loadCurrentUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({})); + }); + + it('should have a defined component', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + expect(comp).toBeDefined(); + expect(nfRegistryService.user.identifier).toEqual('123'); + + var getUserCall = nfRegistryApi.getUser.calls.first() + expect(getUserCall.args[0]).toBe('123'); + })); + + it('should FAIL to get user by id and redirect to admin users perspective', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(comp.router, 'navigateByUrl').and.callFake(function () { + }); + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var routerCall = comp.router.navigateByUrl.calls.first(); + expect(routerCall.args[0]).toBe('/nifi-registry/administration/users'); + expect(comp.router.navigateByUrl.calls.count()).toBe(1); + })); + + it('should FAIL to get user by id and redirect to workflow perspective', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 409 + })); + spyOn(comp.router, 'navigateByUrl').and.callFake(function () { + }); + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var routerCall = comp.router.navigateByUrl.calls.first(); + expect(routerCall.args[0]).toBe('/nifi-registry/administration/workflow'); + expect(comp.router.navigateByUrl.calls.count()).toBe(1); + })); + + it('should redirect to users perspective', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + spyOn(comp.router, 'navigateByUrl').and.callFake(function () { + }); + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + // the function to test + comp.closeSideNav(); + + //assertions + var routerCall = comp.router.navigateByUrl.calls.first(); + expect(routerCall.args[0]).toBe('/nifi-registry/administration/users'); + expect(comp.router.navigateByUrl.calls.count()).toBe(1); + })); + + it('should toggle to create the manage bucket privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'postPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManageBucketsPrivileges({ + checked: true + }, 'read'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.postPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to update the manage bucket privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [] + })); + spyOn(nfRegistryApi, 'putPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManageBucketsPrivileges({ + checked: true + }, 'read'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.putPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to remove the manage bucket privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 400, + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'putPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({})); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManageBucketsPrivileges({ + checked: false + }, 'read'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.putPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to create the manage proxy privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'postPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManageProxyPrivileges({ + checked: true + }, 'write'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.postPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to update the manage proxy privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [] + })); + spyOn(nfRegistryApi, 'putPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManageProxyPrivileges({ + checked: true + }, 'write'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.putPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to remove the manage proxy privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 400, + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'putPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({})); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManageProxyPrivileges({ + checked: false + }, 'write'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.putPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to create the manage policies privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'postPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManagePoliciesPrivileges({ + checked: true + }, 'read'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.postPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to update the manage policies privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [] + })); + spyOn(nfRegistryApi, 'putPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManagePoliciesPrivileges({ + checked: true + }, 'read'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.putPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to remove the manage policies privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 400, + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'putPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({})); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManagePoliciesPrivileges({ + checked: false + }, 'read'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.putPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to create the manage tenants privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'postPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManageTenantsPrivileges({ + checked: true + }, 'read'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.postPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to update the manage tenants privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [] + })); + spyOn(nfRegistryApi, 'putPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManageTenantsPrivileges({ + checked: true + }, 'read'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.putPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should toggle to remove the manage tenants privileges for the current user', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 400, + users: [ + { + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + } + ] + })); + spyOn(nfRegistryApi, 'putPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({})); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.toggleUserManageTenantsPrivileges({ + checked: false + }, 'read'); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.putPolicyActionResource.calls.count()).toBe(1); + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + })); + + it('should open a modal dialog UX enabling the addition of the current user to a group(s)', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(comp, 'filterGroups').and.callFake(function () { + }); + spyOn(comp.dialog, 'open').and.callFake(function () { + return { + afterClosed: function () { + return rxjs.Observable.of({}); + } + } + }); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.addUserToGroups(); + + //assertions + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + expect(comp.filterGroups).toHaveBeenCalled(); + })); + + it('should remove user from group', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(comp, 'filterGroups').and.callFake(function () { + }); + spyOn(comp.snackBarService, 'openCoaster'); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + spyOn(nfRegistryApi, 'getUserGroup').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + })); + spyOn(nfRegistryApi, 'updateUserGroup').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({})); + spyOn(comp.router, 'navigateByUrl').and.callFake(function () { + }); + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + var group = { + identifier: '123' + }; + + // the function to test + comp.removeUserFromGroup(group); + + //assertions + expect(nfRegistryApi.getUser.calls.count()).toBe(2); + expect(nfRegistryApi.getUserGroup.calls.count()).toBe(1); + expect(nfRegistryApi.updateUserGroup.calls.count()).toBe(1); + expect(comp.snackBarService.openCoaster.calls.count()).toBe(1); + expect(comp.filterGroups).toHaveBeenCalled(); + })); + + it('should update user name', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(comp.dialogService, 'openConfirm').and.callFake(function () { + return { + afterClosed: function () { + return rxjs.Observable.of(true); + } + } + }); + spyOn(comp.snackBarService, 'openCoaster'); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + spyOn(nfRegistryApi, 'updateUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'test', + status: 200 + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.updateUserName('test'); + + //assertions + expect(comp.snackBarService.openCoaster.calls.count()).toBe(1); + expect(comp.nfRegistryService.user.identity).toBe('test'); + })); + + it('should fail to update user name (409)', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(comp.dialogService, 'openConfirm').and.callFake(function () { + return { + afterClosed: function () { + return rxjs.Observable.of(true); + } + } + }); + spyOn(comp.snackBarService, 'openCoaster'); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + spyOn(nfRegistryApi, 'updateUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'test', + status: 409 + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + + //assertions + var getUserCall = nfRegistryApi.getUser.calls.first(); + expect(getUserCall.args[0]).toBe('123'); + expect(nfRegistryApi.getUser.calls.count()).toBe(1); + + // the function to test + comp.updateUserName('test'); + + //assertions + expect(comp.dialogService.openConfirm.calls.count()).toBe(1); + expect(comp.nfRegistryService.user.identity).toBe('User #1'); + })); + + it('should destroy the component', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryService.sidenav, 'close'); + spyOn(nfRegistryApi, 'getUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + identity: 'User #1', + resourcePermissions: { + anyTopLevelResource: { + canRead: false, + canWrite: false, + canDelete: false + }, + buckets: { + canRead: false, + canWrite: false, + canDelete: false + }, + tenants: { + canRead: false, + canWrite: false, + canDelete: false + }, + policies: { + canRead: false, + canWrite: false, + canDelete: false + }, + proxy: { + canRead: false, + canWrite: false, + canDelete: false + } + } + })); + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getUser calls + fixture.detectChanges(); + spyOn(comp.$subscription, 'unsubscribe'); + + // The function to test + comp.ngOnDestroy(); + + //assertions + expect(nfRegistryService.sidenav.close).toHaveBeenCalled(); + expect(nfRegistryService.user.identity).toBe('User #1'); + expect(comp.$subscription.unsubscribe).toHaveBeenCalled(); + })); +}); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.html ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.html b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.html index fd7453c..4b9744c 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.html +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.html @@ -23,13 +23,15 @@ limitations under the License. [items]="nfRegistryService.autoCompleteBuckets" (add)="nfRegistryService.bucketsSearchAdd($event)" (remove)="nfRegistryService.bucketsSearchRemove($event)"></td-chips> - <button class="push-top-sm push-right-sm" - color="fds-secondary" - mat-raised-button - [disabled]="!nfRegistryService.currentUser.resourcePermissions.buckets.canWrite" - (click)="createBucket()"> - New Bucket - </button> + <div matTooltip="{{(!nfRegistryService.currentUser.resourcePermissions.buckets.canWrite) ? 'You do not have permission. Please contact your system administrator.': ''}}"> + <button class="push-top-sm push-right-sm" + color="fds-secondary" + mat-raised-button + [disabled]="!nfRegistryService.currentUser.resourcePermissions.buckets.canWrite" + (click)="createBucket()"> + New Bucket + </button> + </div> <button class="push-top-sm" [disabled]="nfRegistryService.isMultiBucketActionsDisabled" color="fds-primary" mat-raised-button [matMenuTriggerFor]="bucketActionMenu"> Actions<i class="fa fa-caret-down" aria-hidden="true"></i> </button> http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js index dcc73e8..0b881c0 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js @@ -42,7 +42,6 @@ var ngMoment = require('angular2-moment'); var rxjs = require('rxjs/Rx'); var ngCommonHttp = require('@angular/common/http'); var NfRegistryTokenInterceptor = require('nifi-registry/services/nf-registry.token.interceptor.js'); -var NfRegistryAuthService = require('nifi-registry/services/nf-registry.auth.service.js'); var NfStorage = require('nifi-registry/services/nf-storage.service.js'); var NfLoginComponent = require('nifi-registry/components/login/nf-registry-login.js'); var NfUserLoginComponent = require('nifi-registry/components/login/dialogs/nf-registry-user-login.js'); @@ -87,7 +86,6 @@ describe('NfRegistryWorkflowAdministration Component', function () { ], providers: [ NfRegistryService, - NfRegistryAuthService, NfRegistryApi, NfStorage, { @@ -120,7 +118,7 @@ describe('NfRegistryWorkflowAdministration Component', function () { // Spy spyOn(nfRegistryApi, 'ticketExchange').and.callFake(function () {}).and.returnValue(rxjs.Observable.of({})); - spyOn(nfRegistryService, 'loadCurrentUser').and.callFake(function () {}).and.returnValue(rxjs.Observable.of({})); + spyOn(nfRegistryApi, 'loadCurrentUser').and.callFake(function () {}).and.returnValue(rxjs.Observable.of({})); spyOn(nfRegistryApi, 'getBuckets').and.callFake(function () { }).and.returnValue(rxjs.Observable.of([{name: 'Bucket #1'}])); spyOn(nfRegistryService, 'filterBuckets'); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.html ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.html b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.html index 9f48951..86e0fac 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.html +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.html @@ -44,7 +44,7 @@ limitations under the License. <div flex fxLayout="row" fxLayoutAlign="space-between center"> <span class="md-card-title">Policies ({{userIdentitiesWithPolicies.length + groupIdentitiesWithPolicies.length}})</span> <button color="fds-secondary" - [disabled]="nfRegistryService.currentUser.anonymous || !nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [disabled]="nfRegistryService.currentUser.anonymous || !nfRegistryService.currentUser.resourcePermissions.policies.canWrite || !nfRegistryService.currentUser.resourcePermissions.tenants.canRead" mat-raised-button (click)="addPolicy()"> New Policy http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.js b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.js index 8f485df..c0b1b00 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.js @@ -70,7 +70,6 @@ NfRegistryManageBucket.prototype = { */ ngOnInit: function () { var self = this; - this.nfRegistryService.sidenav.open(); this.$subscription = this.route.params .switchMap(function (params) { return new rxjs.Observable.forkJoin( @@ -79,30 +78,36 @@ NfRegistryManageBucket.prototype = { ); }) .subscribe(function (response) { - self.nfRegistryService.bucket = response[0]; - self._bucketname = response[0].name; - if (!self.nfRegistryService.currentUser.anonymous) { - if (!response[1].error) { - var policies = response[1]; - policies.forEach(function (policy) { - if (policy.resource.indexOf("/buckets/" + self.nfRegistryService.bucket.identifier) >= 0) { - self.bucketPolicies.push(policy); - policy.users.forEach(function (user) { - var userActionsForBucket = self.userPerms[user.identity] || []; - userActionsForBucket.push(policy.action); - self.userPerms[user.identity] = userActionsForBucket; + if (!response[0].status || response[0].status === 200) { + self.nfRegistryService.sidenav.open(); + var bucket = response[0]; + self.nfRegistryService.bucket = bucket; + self._bucketname = response[0].name; + if (!self.nfRegistryService.currentUser.anonymous) { + if (!response[1].status || response[1].status === 200) { + var policies = response[1]; + policies.forEach(function (policy) { + if (policy.resource.indexOf("/buckets/" + self.nfRegistryService.bucket.identifier) >= 0) { + self.bucketPolicies.push(policy); + policy.users.forEach(function (user) { + var userActionsForBucket = self.userPerms[user.identity] || []; + userActionsForBucket.push(policy.action); + self.userPerms[user.identity] = userActionsForBucket; - }); - policy.userGroups.forEach(function (group) { - var groupActionsForBucket = self.groupPerms[group.identity] || []; - groupActionsForBucket.push(policy.action); - self.groupPerms[group.identity] = groupActionsForBucket; + }); + policy.userGroups.forEach(function (group) { + var groupActionsForBucket = self.groupPerms[group.identity] || []; + groupActionsForBucket.push(policy.action); + self.groupPerms[group.identity] = groupActionsForBucket; - }); - } - }); - self.filterPolicies(); + }); + } + }); + self.filterPolicies(); + } } + } else if (response[0].status === 404) { + self.router.navigateByUrl('/nifi-registry/administration/workflow'); } }); }, @@ -112,7 +117,6 @@ NfRegistryManageBucket.prototype = { */ ngOnDestroy: function () { this.nfRegistryService.sidenav.close(); - this.nfRegistryService.bucket = {}; this.$subscription.unsubscribe(); }, @@ -281,9 +285,9 @@ NfRegistryManageBucket.prototype = { }, /** - * Remove user from group. + * Remove policy from bucket. * - * @param group + * @param userOrGroup The user or group object */ removePolicyFromBucket: function (userOrGroup) { var self = this;