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.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.spec.js b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.spec.js new file mode 100644 index 0000000..e27da78 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.spec.js @@ -0,0 +1,766 @@ +/* + * 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('NfRegistryManageBucket 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({bucketId: '123'}) + } + } + ] + }); + fixture = ngCoreTesting.TestBed.createComponent(NfRegistryManageBucket); + + // test instance + comp = fixture.componentInstance; + + // from the root injector + nfRegistryService = ngCoreTesting.TestBed.get(NfRegistryService); + nfRegistryApi = ngCoreTesting.TestBed.get(NfRegistryApi); + + // because the NfRegistryManageBucket component is a nested route component we need to set up the nfRegistryService service manually + nfRegistryService.sidenav = { + open: function () { + }, + close: function () { + } + }; + nfRegistryService.bucket = { + identifier: 999, + name: 'Bucket #1' + }; + nfRegistryService.buckets = [nfRegistryService.bucket]; + + //Spy + spyOn(nfRegistryApi, 'ticketExchange').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({})); + spyOn(nfRegistryApi, 'loadCurrentUser').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({})); + spyOn(nfRegistryService, 'filterDroplets'); + }); + + it('should have a defined component', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: 'string', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getBucket and getPolicies calls + fixture.detectChanges(); + + //assertions + expect(comp).toBeDefined(); + expect(nfRegistryService.bucket.name).toEqual('Bucket #1'); + expect(nfRegistryApi.getPolicies).toHaveBeenCalled(); + + var getBucketCall = nfRegistryApi.getBucket.calls.first() + expect(getBucketCall.args[0]).toBe('123'); + })); + + it('should FAIL to get bucket by id and redirect to workflow perspective', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'getPolicies').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 getBucket and getPolicies 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 workflow perspective', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: 'string', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + 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 getBucket and getPolicies 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/workflow'); + expect(comp.router.navigateByUrl.calls.count()).toBe(1); + })); + + it('should open a modal dialog UX enabling the creation of a user policy for a specific bucket', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(comp, 'filterPolicies').and.callFake(function () { + }); + spyOn(comp.dialog, 'open').and.callFake(function () { + return { + afterClosed: function () { + return rxjs.Observable.of({ + userOrGroup: { + type: 'user' + } + }); + } + } + }); + spyOn(comp.snackBarService, 'openCoaster'); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: '123', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + 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 getBucket and getPolicies calls + fixture.detectChanges(); + + //assertions + var getBucketCall = nfRegistryApi.getBucket.calls.first(); + expect(getBucketCall.args[0]).toBe('123'); + expect(nfRegistryApi.getBucket.calls.count()).toBe(1); + + // the function to test + comp.addPolicy(); + + //assertions + expect(nfRegistryApi.getBucket.calls.count()).toBe(2); + expect(comp.snackBarService.openCoaster).toHaveBeenCalled(); + expect(comp.filterPolicies).toHaveBeenCalled(); + })); + + it('should open a modal dialog UX enabling the creation of a user group policy for a specific bucket', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(comp, 'filterPolicies').and.callFake(function () { + }); + spyOn(comp.dialog, 'open').and.callFake(function () { + return { + afterClosed: function () { + return rxjs.Observable.of({ + userOrGroup: { + type: 'group' + } + }); + } + } + }); + spyOn(comp.snackBarService, 'openCoaster'); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: '123', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + 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 getBucket and getPolicies calls + fixture.detectChanges(); + + //assertions + var getBucketCall = nfRegistryApi.getBucket.calls.first(); + expect(getBucketCall.args[0]).toBe('123'); + expect(nfRegistryApi.getBucket.calls.count()).toBe(1); + + // the function to test + comp.addPolicy(); + + //assertions + expect(nfRegistryApi.getBucket.calls.count()).toBe(2); + expect(comp.snackBarService.openCoaster).toHaveBeenCalled(); + expect(comp.filterPolicies).toHaveBeenCalled(); + })); + + it('should open a modal dialog UX enabling the edit of a user policy for a specific bucket', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(comp, 'filterPolicies').and.callFake(function () { + }); + spyOn(comp.dialog, 'open').and.callFake(function () { + return { + afterClosed: function () { + return rxjs.Observable.of({ + userOrGroup: { + type: 'user' + } + }); + } + } + }); + spyOn(comp.snackBarService, 'openCoaster'); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: '123', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + 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 getBucket and getPolicies calls + fixture.detectChanges(); + + //assertions + var getBucketCall = nfRegistryApi.getBucket.calls.first(); + expect(getBucketCall.args[0]).toBe('123'); + expect(nfRegistryApi.getBucket.calls.count()).toBe(1); + + // the function to test + comp.editPolicy(); + + //assertions + expect(nfRegistryApi.getBucket.calls.count()).toBe(2); + expect(comp.snackBarService.openCoaster).toHaveBeenCalled(); + expect(comp.filterPolicies).toHaveBeenCalled(); + })); + + it('should open a modal dialog UX enabling the edit of a user group policy for a specific bucket', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(comp, 'filterPolicies').and.callFake(function () { + }); + spyOn(comp.dialog, 'open').and.callFake(function () { + return { + afterClosed: function () { + return rxjs.Observable.of({ + userOrGroup: { + type: 'group' + } + }); + } + } + }); + spyOn(comp.snackBarService, 'openCoaster'); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: '123', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + 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 getBucket and getPolicies calls + fixture.detectChanges(); + + //assertions + var getBucketCall = nfRegistryApi.getBucket.calls.first(); + expect(getBucketCall.args[0]).toBe('123'); + expect(nfRegistryApi.getBucket.calls.count()).toBe(1); + + // the function to test + comp.editPolicy(); + + //assertions + expect(nfRegistryApi.getBucket.calls.count()).toBe(2); + expect(comp.snackBarService.openCoaster).toHaveBeenCalled(); + expect(comp.filterPolicies).toHaveBeenCalled(); + })); + + it('should remove policy from bucket', ngCoreTesting.fakeAsync(function () { + // Spy + spyOn(comp, 'filterPolicies').and.callFake(function () { + }); + spyOn(comp.dialogService, 'openConfirm').and.callFake(function () { + return { + afterClosed: function () { + return rxjs.Observable.of(true); + } + } + }); + spyOn(comp.snackBarService, 'openCoaster'); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: '456', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + spyOn(nfRegistryApi, 'getPolicyActionResource').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + })); + spyOn(nfRegistryApi, 'putPolicyActionResource').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 getBucket and getPolicies calls + fixture.detectChanges(); + + //assertions + var getBucketCall = nfRegistryApi.getBucket.calls.first(); + expect(getBucketCall.args[0]).toBe('123'); + expect(nfRegistryApi.getBucket.calls.count()).toBe(1); + + var userOrGroup = { + type: 'user', + identity: '123', + permissions: 'read, write, delete' + }; + + // the function to test + comp.removePolicyFromBucket(userOrGroup); + + //assertions + expect(nfRegistryApi.getPolicyActionResource.calls.count()).toBe(3); + expect(nfRegistryApi.putPolicyActionResource.calls.count()).toBe(3); + expect(nfRegistryApi.getPolicies.calls.count()).toBe(4); + expect(comp.snackBarService.openCoaster.calls.count()).toBe(3); + expect(comp.filterPolicies).toHaveBeenCalled(); + })); + + it('should update bucket 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, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: '456', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + spyOn(nfRegistryApi, 'updateBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'test', + status: 200 + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getBucket and getPolicies calls + fixture.detectChanges(); + + //assertions + var getBucketCall = nfRegistryApi.getBucket.calls.first(); + expect(getBucketCall.args[0]).toBe('123'); + expect(nfRegistryApi.getBucket.calls.count()).toBe(1); + + // the function to test + comp.updateBucketName('test'); + + //assertions + expect(comp.snackBarService.openCoaster.calls.count()).toBe(1); + expect(comp.nfRegistryService.bucket.name).toBe('test'); + })); + + it('should fail to update bucket 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, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: '456', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + spyOn(nfRegistryApi, 'updateBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'test', + status: 409 + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getBucket and getPolicies calls + fixture.detectChanges(); + + //assertions + var getBucketCall = nfRegistryApi.getBucket.calls.first(); + expect(getBucketCall.args[0]).toBe('123'); + expect(nfRegistryApi.getBucket.calls.count()).toBe(1); + + // the function to test + comp.updateBucketName('test'); + + //assertions + expect(comp.dialogService.openConfirm.calls.count()).toBe(1); + expect(comp.nfRegistryService.bucket.name).toBe('Bucket #1'); + })); + + it('should fail to update bucket name (400)', 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, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: '456', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [{ + identity: 'User #1' + }], + userGroups: [{ + identity: 'Group #1' + }] + } + ])); + spyOn(nfRegistryApi, 'updateBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'test', + status: 400 + })); + + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getBucket and getPolicies calls + fixture.detectChanges(); + + //assertions + var getBucketCall = nfRegistryApi.getBucket.calls.first(); + expect(getBucketCall.args[0]).toBe('123'); + expect(nfRegistryApi.getBucket.calls.count()).toBe(1); + + // the function to test + comp.updateBucketName('test'); + + //assertions + expect(comp.dialogService.openConfirm.calls.count()).toBe(1); + expect(comp.nfRegistryService.bucket.name).toBe('Bucket #1'); + })); + + it('should destroy the component', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryService.sidenav, 'close'); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '123', + name: 'Bucket #1' + })); + spyOn(nfRegistryApi, 'getPolicies').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([ + { + identifier: 'string', + resource: '/buckets/123', + action: 'READ', + configurable: true, + users: [], + userGroups: [] + } + ])); + // 1st change detection triggers ngOnInit + fixture.detectChanges(); + // wait for async calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getBucket and getPolicies calls + fixture.detectChanges(); + spyOn(comp.$subscription, 'unsubscribe'); + + // The function to test + comp.ngOnDestroy(); + + //assertions + expect(nfRegistryService.sidenav.close).toHaveBeenCalled(); + expect(nfRegistryService.bucket.name).toBe('Bucket #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/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.js b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.js index 7f4ae24..1772297 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.js +++ b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.js @@ -29,10 +29,12 @@ var nfRegistryAnimations = require('nifi-registry/nf-registry.animations.js'); * @param nfStorage A wrapper for the browser's local storage. * @param nfRegistryService The nf-registry.service module. * @param ActivatedRoute The angular activated route module. + * @param router The angular router module. * @constructor */ -function NfRegistryBucketGridListViewer(nfRegistryApi, nfStorage, nfRegistryService, ActivatedRoute) { +function NfRegistryBucketGridListViewer(nfRegistryApi, nfStorage, nfRegistryService, ActivatedRoute, router) { this.route = ActivatedRoute; + this.router = router; this.nfStorage = nfStorage; this.nfRegistryService = nfRegistryService; this.nfRegistryApi = nfRegistryApi; @@ -62,12 +64,29 @@ NfRegistryBucketGridListViewer.prototype = { ); }) .subscribe(function (response) { - var buckets = response[0]; - var droplets = response[1]; - var bucket = response[2]; - self.nfRegistryService.bucket = bucket; - self.nfRegistryService.buckets = buckets; - self.nfRegistryService.droplets = droplets; + if (!response[0].status || response[0].status === 200) { + var buckets = response[0]; + self.nfRegistryService.buckets = buckets; + } else if (response[0].status === 404) { + self.router.navigateByUrl('/nifi-registry/explorer/grid-list'); + } + if (!response[2].status || response[2].status === 200) { + var bucket = response[2]; + self.nfRegistryService.bucket = bucket; + } else if (response[2].status === 404) { + self.router.navigateByUrl('/nifi-registry/explorer/grid-list'); + } + if (!response[1].status || response[1].status === 200) { + var droplets = response[1]; + self.nfRegistryService.droplets = droplets; + } else if (response[1].status === 404) { + if (!response[2].status || response[2].status === 200) { + var bucket = response[2]; + self.router.navigateByUrl('/nifi-registry/explorer/grid-list/buckets/' + bucket); + } else { + self.router.navigateByUrl('/nifi-registry/explorer/grid-list'); + } + } self.nfRegistryService.filterDroplets(); self.nfRegistryService.setBreadcrumbState('in'); self.nfRegistryService.inProgress = false; @@ -97,7 +116,8 @@ NfRegistryBucketGridListViewer.parameters = [ NfRegistryApi, NfStorage, NfRegistryService, - ngRouter.ActivatedRoute + ngRouter.ActivatedRoute, + ngRouter.Router ]; module.exports = NfRegistryBucketGridListViewer; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.spec.js b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.spec.js index c1140c5..700ed49 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.spec.js @@ -39,7 +39,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'); @@ -77,7 +76,6 @@ describe('NfRegistryBucketGridListViewer Component', function () { ], providers: [ NfRegistryService, - NfRegistryAuthService, NfRegistryApi, NfStorage, { @@ -111,7 +109,11 @@ describe('NfRegistryBucketGridListViewer 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(nfRegistryService, 'filterDroplets'); + }); + + it('should have a defined component', ngCoreTesting.fakeAsync(function () { spyOn(nfRegistryApi, 'getBuckets').and.callFake(function () { }).and.returnValue(rxjs.Observable.of([{ identifier: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc', @@ -122,10 +124,6 @@ describe('NfRegistryBucketGridListViewer Component', function () { identifier: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc', name: 'Bucket #1' })); - spyOn(nfRegistryService, 'filterDroplets'); - }); - - it('should have a defined component', ngCoreTesting.fakeAsync(function () { spyOn(nfRegistryApi, 'getDroplets').and.callFake(function () { }).and.returnValue(rxjs.Observable.of([{ "identifier": "2e04b4fb-9513-47bb-aa74-1ae34616bfdc", @@ -170,7 +168,45 @@ describe('NfRegistryBucketGridListViewer Component', function () { expect(getBucketCall.args[0]).toBe('2f7f9e54-dc09-4ceb-aa58-9fe581319cdc'); })); + it('should FAIL to get buckets, get bucket, and get droplets and redirect to view all buckets', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryApi, 'getBuckets').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'getDroplets').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(comp.router, 'navigateByUrl').and.callFake(function () { + }); + // 1st change detection triggers ngOnInit which makes getBuckets, getBucket, and getDroplets calls + fixture.detectChanges(); + // wait for async getBuckets, getBucket, and getDroplets calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getBuckets, getBucket, and getDroplets calls + fixture.detectChanges(); + + //assertions + var routerCall = comp.router.navigateByUrl.calls.first(); + expect(routerCall.args[0]).toBe('/nifi-registry/explorer/grid-list'); + expect(comp.router.navigateByUrl.calls.count()).toBe(3); + })); + it('should destroy the component', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryApi, 'getBuckets').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([{ + identifier: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc', + name: 'Bucket #1' + }])); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc', + name: 'Bucket #1' + })); spyOn(nfRegistryApi, 'getDroplets').and.callFake(function () { }).and.returnValue(rxjs.Observable.of([{ "identifier": "2e04b4fb-9513-47bb-aa74-1ae34616bfdc", http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.js b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.js index d85f68b..0705156 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.js +++ b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.js @@ -29,10 +29,12 @@ var nfRegistryAnimations = require('nifi-registry/nf-registry.animations.js'); * @param nfStorage A wrapper for the browser's local storage. * @param nfRegistryService The nf-registry.service module. * @param activatedRoute The angular activated route module. + * @param router The angular router module. * @constructor */ -function NfRegistryDropletGridListViewer(nfRegistryApi, nfStorage, nfRegistryService, activatedRoute) { +function NfRegistryDropletGridListViewer(nfRegistryApi, nfStorage, nfRegistryService, activatedRoute, router) { this.route = activatedRoute; + this.router = router; this.nfStorage = nfStorage; this.nfRegistryService = nfRegistryService; this.nfRegistryApi = nfRegistryApi; @@ -60,14 +62,32 @@ NfRegistryDropletGridListViewer.prototype = { ); }) .subscribe(function (response) { - var droplet = response[0]; - var bucket = response[1]; - var buckets = response[2]; - var droplets = response[3]; - self.nfRegistryService.bucket = bucket; - self.nfRegistryService.buckets = buckets; - self.nfRegistryService.droplet = droplet; - self.nfRegistryService.droplets = droplets; + if (!response[0].status || response[0].status === 200) { + var droplet = response[0]; + self.nfRegistryService.droplet = droplet; + } else if (response[0].status === 404) { + if (!response[1].status || response[1].status === 200) { + var bucket = response[1]; + self.nfRegistryService.bucket = bucket; + self.router.navigateByUrl('/nifi-registry/explorer/grid-list/buckets/' + bucket.identifier); + } else if (response[1].status === 404) { + self.router.navigateByUrl('/nifi-registry/explorer/grid-list'); + } + } + if (!response[1].status || response[1].status === 200) { + var bucket = response[1]; + self.nfRegistryService.bucket = bucket; + } else if (response[1].status === 404) { + self.router.navigateByUrl('/nifi-registry/explorer/grid-list'); + } + if (!response[2].status || response[2].status === 200) { + var buckets = response[2]; + self.nfRegistryService.buckets = buckets; + } + if (!response[3].status || response[3].status === 200) { + var droplets = response[3]; + self.nfRegistryService.droplets = droplets; + } self.nfRegistryService.filterDroplets(); self.nfRegistryService.setBreadcrumbState('in'); self.nfRegistryService.inProgress = false; @@ -96,7 +116,8 @@ NfRegistryDropletGridListViewer.parameters = [ NfRegistryApi, NfStorage, NfRegistryService, - ngRouter.ActivatedRoute + ngRouter.ActivatedRoute, + ngRouter.Router ]; module.exports = NfRegistryDropletGridListViewer; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.spec.js b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.spec.js index b802a4d..77488a9 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.spec.js @@ -39,7 +39,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'); @@ -77,7 +76,6 @@ describe('NfRegistryDropletGridListViewer Component', function () { ], providers: [ NfRegistryService, - NfRegistryAuthService, NfRegistryApi, NfStorage, { @@ -116,8 +114,11 @@ describe('NfRegistryDropletGridListViewer 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(ngHttpService, 'get').and.callThrough(); + spyOn(nfRegistryApi, 'loadCurrentUser').and.callFake(function () {}).and.returnValue(rxjs.Observable.of({})); + spyOn(nfRegistryService, 'filterDroplets'); + }); + + it('should have a defined component', ngCoreTesting.fakeAsync(function () { spyOn(nfRegistryApi, 'getDroplet').and.callFake(function () { }).and.returnValue(rxjs.Observable.of({ "identifier": "2e04b4fb-9513-47bb-aa74-1ae34616bfdc", @@ -145,10 +146,6 @@ describe('NfRegistryDropletGridListViewer Component', function () { identifier: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc', name: 'Bucket #1' })); - spyOn(nfRegistryService, 'filterDroplets'); - }); - - it('should have a defined component', ngCoreTesting.fakeAsync(function () { spyOn(nfRegistryApi, 'getDroplets').and.callFake(function () { }).and.returnValue(rxjs.Observable.of([{ "identifier": "2e04b4fb-9513-47bb-aa74-1ae34616bfdc", @@ -199,7 +196,66 @@ describe('NfRegistryDropletGridListViewer Component', function () { expect(getBucketCall.args[0]).toBe('2f7f9e54-dc09-4ceb-aa58-9fe581319cdc'); })); + it('should FAIL to get buckets, get bucket, get droplets, and get droplet and then redirect to view all buckets', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryApi, 'getBuckets').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'getDroplets').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(nfRegistryApi, 'getDroplet').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + status: 404 + })); + spyOn(comp.router, 'navigateByUrl').and.callFake(function () { + }); + // 1st change detection triggers ngOnInit which makes getBuckets, getBucket, and getDroplets calls + fixture.detectChanges(); + // wait for async getBuckets, getBucket, and getDroplets calls + ngCoreTesting.tick(); + // 2nd change detection completes after the getBuckets, getBucket, and getDroplets calls + fixture.detectChanges(); + + //assertions + var routerCall = comp.router.navigateByUrl.calls.first(); + expect(routerCall.args[0]).toBe('/nifi-registry/explorer/grid-list'); + expect(comp.router.navigateByUrl.calls.count()).toBe(2); + })); + it('should destroy the component', ngCoreTesting.fakeAsync(function () { + spyOn(nfRegistryApi, 'getDroplet').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + "identifier": "2e04b4fb-9513-47bb-aa74-1ae34616bfdc", + "name": "Flow #1", + "description": "This is flow #1", + "bucketIdentifier": "2f7f9e54-dc09-4ceb-aa58-9fe581319cdc", + "createdTimestamp": 1505931890999, + "modifiedTimestamp": 1505931890999, + "type": "FLOW", + "snapshotMetadata": null, + "link": { + "params": { + "rel": "self" + }, + "href": "flows/2e04b4fb-9513-47bb-aa74-1ae34616bfdc" + } + })); + spyOn(nfRegistryApi, 'getBuckets').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of([{ + identifier: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc', + name: 'Bucket #1' + }])); + spyOn(nfRegistryApi, 'getBucket').and.callFake(function () { + }).and.returnValue(rxjs.Observable.of({ + identifier: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc', + name: 'Bucket #1' + })); spyOn(nfRegistryApi, 'getDroplets').and.callFake(function () { }).and.returnValue(rxjs.Observable.of([{ "identifier": "2e04b4fb-9513-47bb-aa74-1ae34616bfdc", http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.html ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.html b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.html index d077016..8fbd6d4 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.html +++ b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.html @@ -74,15 +74,15 @@ limitations under the License. <div fxFlex="25" class="pad-left-sm"> <div> <span class="uppercase">Bucket Identifier</span> - <p class="ellipsis" title="{{droplet.bucketIdentifier}}" *ngIf="droplet.bucketIdentifier">{{droplet.bucketIdentifier}}</p> + <p class="ellipsis" matTooltip="{{droplet.bucketIdentifier}}" *ngIf="droplet.bucketIdentifier">{{droplet.bucketIdentifier}}</p> </div> <div class="pad-top-md"> <span class="uppercase">{{droplet.type}} Identifier</span> - <p class="ellipsis" title="{{droplet.identifier}} "*ngIf="droplet.identifier">{{droplet.identifier}}</p> + <p class="ellipsis" matTooltip="{{droplet.identifier}} "*ngIf="droplet.identifier">{{droplet.identifier}}</p> </div> <div class="pad-top-md"> <span class="uppercase">Description</span> - <p class="nf-registry-droplet-description" title="{{droplet.description}}" *ngIf="droplet.description">{{droplet.description}}</p> + <p class="nf-registry-droplet-description" matTooltip="{{droplet.description}}" *ngIf="droplet.description">{{droplet.description}}</p> <p *ngIf="!droplet.description">No description specified</p> </div> </div> http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.spec.js b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.spec.js index 68d1988..47ddab5 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.spec.js @@ -39,7 +39,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'); @@ -77,7 +76,6 @@ describe('NfRegistryGridListViewer Component', function () { ], providers: [ NfRegistryService, - NfRegistryAuthService, NfRegistryApi, NfStorage, { @@ -111,7 +109,7 @@ describe('NfRegistryGridListViewer 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([{ identifier: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc', http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/components/explorer/nf-registry-explorer.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/explorer/nf-registry-explorer.spec.js b/nifi-registry-web-ui/src/main/webapp/components/explorer/nf-registry-explorer.spec.js index cd6e2eb..4cf6c5f 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/explorer/nf-registry-explorer.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/explorer/nf-registry-explorer.spec.js @@ -37,7 +37,6 @@ var fdsCore = require('@fluid-design-system/core'); var ngMoment = require('angular2-moment'); 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'); @@ -74,7 +73,6 @@ describe('NfRegistryExplorer Component', function () { ], providers: [ NfRegistryService, - NfRegistryAuthService, NfRegistryApi, NfStorage, { http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/nf-registry.module.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/nf-registry.module.js b/nifi-registry-web-ui/src/main/webapp/nf-registry.module.js index a2d9671..cafe1f6 100644 --- a/nifi-registry-web-ui/src/main/webapp/nf-registry.module.js +++ b/nifi-registry-web-ui/src/main/webapp/nf-registry.module.js @@ -44,7 +44,6 @@ var NfRegistryDropletGridListViewer = require('nifi-registry/components/explorer var fdsCore = require('@fluid-design-system/core'); 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 nfRegistryAuthGuardService = require('nifi-registry/services/nf-registry.auth-guard.service.js'); var NfStorage = require('nifi-registry/services/nf-storage.service.js'); @@ -98,7 +97,6 @@ NfRegistryModule.annotations = [ ], providers: [ NfRegistryService, - NfRegistryAuthService, nfRegistryAuthGuardService.NfRegistryUsersAdministrationAuthGuard, nfRegistryAuthGuardService.NfRegistryWorkflowsAdministrationAuthGuard, nfRegistryAuthGuardService.NfRegistryLoginAuthGuard, http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/nf-registry.routes.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/nf-registry.routes.js b/nifi-registry-web-ui/src/main/webapp/nf-registry.routes.js index 4235b0a..3fe831a 100644 --- a/nifi-registry-web-ui/src/main/webapp/nf-registry.routes.js +++ b/nifi-registry-web-ui/src/main/webapp/nf-registry.routes.js @@ -35,6 +35,11 @@ var NfRegistryRoutes = new ngRouter.RouterModule.forRoot([{ component: NfRegistryExplorer, children: [ { + path: '', + redirectTo: 'grid-list', + pathMatch: 'full' + }, + { path: 'grid-list', component: NfRegistryGridListViewer, canActivate: [nfRegistryAuthGuardService.NfRegistryResourcesAuthGuard] http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/nf-registry.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/nf-registry.spec.js b/nifi-registry-web-ui/src/main/webapp/nf-registry.spec.js index a5e43c7..c9d90d6 100644 --- a/nifi-registry-web-ui/src/main/webapp/nf-registry.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/nf-registry.spec.js @@ -38,7 +38,6 @@ var ngMoment = require('angular2-moment'); var ngHttp = require('@angular/http'); 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'); @@ -77,7 +76,6 @@ describe('NfRegistry Component', function () { ], providers: [ NfRegistryService, - NfRegistryAuthService, NfRegistryApi, NfStorage, { http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/1bb1e2b6/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.js b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.js index 04ec818..9cde0d9 100644 --- a/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.js +++ b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.js @@ -19,7 +19,6 @@ var NfStorage = require('nifi-registry/services/nf-storage.service.js'); var ngCommonHttp = require('@angular/common/http'); var fdsDialogsModule = require('@fluid-design-system/dialogs'); var rxjs = require('rxjs/Observable'); -var ngRouter = require('@angular/router'); var MILLIS_PER_SECOND = 1000; var headers = new Headers({'Content-Type': 'application/json'}); @@ -36,14 +35,12 @@ var config = { * @param nfStorage A wrapper for the browser's local storage. * @param http The angular http module. * @param fdsDialogService The FDS dialog service. - * @param router The angular router module. * @constructor */ -function NfRegistryApi(nfStorage, http, fdsDialogService, router) { +function NfRegistryApi(nfStorage, http, fdsDialogService) { this.nfStorage = nfStorage; this.http = http; this.dialogService = fdsDialogService; - this.router = router; }; NfRegistryApi.prototype = { @@ -91,16 +88,11 @@ NfRegistryApi.prototype = { }) .catch(function (error) { self.dialogService.openConfirm({ - title: 'Error', + title: 'Flow Not Found', message: error.error, acceptButton: 'Ok', acceptButtonColor: 'fds-warn' - }).afterClosed().subscribe( - function (accept) { - if (accept) { - self.router.navigateByUrl('/nifi-registry/explorer/grid-list/buckets/' + bucketId); - } - }); + }); return rxjs.Observable.of(error); }); }, @@ -125,12 +117,6 @@ NfRegistryApi.prototype = { return response || []; }) .catch(function (error) { - self.dialogService.openConfirm({ - title: 'Error', - message: error.error, - acceptButton: 'Ok', - acceptButtonColor: 'fds-warn' - }); return rxjs.Observable.of(error); }); }, @@ -224,16 +210,11 @@ NfRegistryApi.prototype = { }) .catch(function (error) { self.dialogService.openConfirm({ - title: 'Error', + title: 'Bucket Not Found', message: error.error, acceptButton: 'Ok', acceptButtonColor: 'fds-warn' - }).afterClosed().subscribe( - function (accept) { - if (accept) { - self.router.navigateByUrl('/nifi-registry/explorer/grid-list'); - } - }); + }); return rxjs.Observable.of(error); }); }, @@ -255,7 +236,7 @@ NfRegistryApi.prototype = { }) .catch(function (error) { self.dialogService.openConfirm({ - title: 'Error', + title: 'Buckets Not Found', message: error.error, acceptButton: 'Ok', acceptButtonColor: 'fds-warn' @@ -299,12 +280,12 @@ NfRegistryApi.prototype = { }) .catch(function (error) { self.dialogService.openConfirm({ - title: 'Error', + title: 'User Not Found', message: error.error, acceptButton: 'Ok', acceptButtonColor: 'fds-warn' }); - return rxjs.Observable.throw(error.error); + return rxjs.Observable.of(error); }); }, @@ -394,7 +375,7 @@ NfRegistryApi.prototype = { }) .catch(function (error) { self.dialogService.openConfirm({ - title: 'Error', + title: 'Users Not Found', message: error.error, acceptButton: 'Ok', acceptButtonColor: 'fds-warn' @@ -439,7 +420,7 @@ NfRegistryApi.prototype = { }) .catch(function (error) { self.dialogService.openConfirm({ - title: 'Error', + title: 'Groups Not Found', message: error.error, acceptButton: 'Ok', acceptButtonColor: 'fds-warn' @@ -462,7 +443,7 @@ NfRegistryApi.prototype = { }) .catch(function (error) { self.dialogService.openConfirm({ - title: 'Error', + title: 'Group Not Found', message: error.error, acceptButton: 'Ok', acceptButtonColor: 'fds-warn' @@ -578,6 +559,12 @@ NfRegistryApi.prototype = { return response; }) .catch(function (error) { + self.dialogService.openConfirm({ + title: 'Error', + message: error.error, + acceptButton: 'Ok', + acceptButtonColor: 'fds-warn' + }); return rxjs.Observable.of(error); }); }, @@ -596,6 +583,12 @@ NfRegistryApi.prototype = { return response; }) .catch(function (error) { + self.dialogService.openConfirm({ + title: 'Error', + message: error.error, + acceptButton: 'Ok', + acceptButtonColor: 'fds-warn' + }); return rxjs.Observable.of(error); }); }, @@ -744,12 +737,8 @@ NfRegistryApi.prototype = { return response; }) .catch(function (error) { - // there is no anonymous access and we don't know this user - open the login page which handles login/registration/etc - if (error.status === 401) { - self.nfStorage.removeItem('jwt'); - self.router.navigateByUrl('/nifi-registry/login'); - } return rxjs.Observable.of({ + error: error, resourcePermissions: { anyTopLevelResource: { canRead: false, @@ -785,8 +774,7 @@ NfRegistryApi.prototype = { NfRegistryApi.parameters = [ NfStorage, ngCommonHttp.HttpClient, - fdsDialogsModule.FdsDialogService, - ngRouter.Router + fdsDialogsModule.FdsDialogService ]; module.exports = NfRegistryApi;