You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by kd...@apache.org on 2018/02/09 19:25:44 UTC
[2/5] nifi-registry git commit: [NIFIREG-126] adding some polish and
testing around deep links
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;