[NIFIREG-30] update dep versions and enhance performance Signed-off-by: Scott Aslan <[email protected]>
This closes #50 Project: http://git-wip-us.apache.org/repos/asf/nifi-registry/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi-registry/commit/a931858f Tree: http://git-wip-us.apache.org/repos/asf/nifi-registry/tree/a931858f Diff: http://git-wip-us.apache.org/repos/asf/nifi-registry/diff/a931858f Branch: refs/heads/master Commit: a931858f1f59215128d8293c31e013745d52735d Parents: 2f343e1 Author: Scott Aslan <[email protected]> Authored: Fri Dec 8 01:15:29 2017 -0500 Committer: Scott Aslan <[email protected]> Committed: Fri Dec 8 01:34:14 2017 -0500 ---------------------------------------------------------------------- .../src/main/frontend/karma.conf.js | 6 +- .../src/main/frontend/package.json | 24 +- .../nf-registry-administration.html | 12 +- .../nf-registry-administration.spec.js | 3 - .../users/nf-registry-users-administration.js | 4 +- .../nf-registry-users-adminstration.spec.js | 4 +- .../nf-registry-workflow-administration.js | 2 + .../nf-registry-workflow-administration.spec.js | 4 +- .../nf-registry-bucket-grid-list-viewer.js | 5 +- .../nf-registry-bucket-grid-list-viewer.spec.js | 30 +- .../nf-registry-droplet-grid-list-viewer.js | 5 +- ...nf-registry-droplet-grid-list-viewer.spec.js | 31 +- .../registry/nf-registry-grid-list-viewer.html | 8 +- .../registry/nf-registry-grid-list-viewer.js | 5 +- .../nf-registry-grid-list-viewer.spec.js | 22 +- .../explorer/nf-registry-explorer.spec.js | 3 - .../src/main/webapp/nf-registry-bootstrap.js | 5 + .../src/main/webapp/nf-registry.animations.js | 18 +- .../src/main/webapp/nf-registry.html | 4 +- .../src/main/webapp/nf-registry.module.js | 3 - .../src/main/webapp/services/nf-registry.api.js | 2 +- .../webapp/services/nf-registry.api.spec.js | 312 ++++++++----------- .../main/webapp/services/nf-registry.service.js | 7 +- .../webapp/services/nf-registry.service.spec.js | 160 ++-------- .../src/main/webapp/systemjs.builder.config.js | 2 + .../src/main/webapp/systemjs.spec.config.js | 2 + .../main/webapp/theming/_structureElements.scss | 3 +- .../explorer/grid-list/_structureElements.scss | 1 - 28 files changed, 281 insertions(+), 406 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/frontend/karma.conf.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/frontend/karma.conf.js b/nifi-registry-web-ui/src/main/frontend/karma.conf.js index 6be2e75..8a63bfd 100644 --- a/nifi-registry-web-ui/src/main/frontend/karma.conf.js +++ b/nifi-registry-web-ui/src/main/frontend/karma.conf.js @@ -117,10 +117,6 @@ module.exports = function (config) { served: true }, - // Asset (HTML) paths loaded via Angular's component compiler - // (these paths need to be rewritten, see proxies section) - // {pattern: appBase + '**/*.html', included: false, watched: true}, - // Images {pattern: '**/*.svg', watched: false, included: true, served: true}, @@ -159,7 +155,7 @@ module.exports = function (config) { logLevel: config.LOG_INFO, autoWatch: true, browsers: ['Chrome'], - singleRun: false + singleRun: true }); if (process.env.TRAVIS) { http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/frontend/package.json ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/frontend/package.json b/nifi-registry-web-ui/src/main/frontend/package.json index efd0d4f..4bfe687 100644 --- a/nifi-registry-web-ui/src/main/frontend/package.json +++ b/nifi-registry-web-ui/src/main/frontend/package.json @@ -21,18 +21,18 @@ "roboto-fontface": "0.7.0" }, "devDependencies": { - "@angular/animations": "4.4.4", + "@angular/animations": "4.4.6", "@angular/cdk": "2.0.0-beta.12", - "@angular/common": "4.4.4", - "@angular/compiler": "4.4.4", - "@angular/core": "4.4.4", + "@angular/common": "4.4.6", + "@angular/compiler": "4.4.6", + "@angular/core": "4.4.6", "@angular/flex-layout": "2.0.0-beta.9", - "@angular/forms": "4.4.4", - "@angular/http": "4.4.4", + "@angular/forms": "4.4.6", + "@angular/http": "4.4.6", "@angular/material": "2.0.0-beta.12", - "@angular/platform-browser": "4.4.4", - "@angular/platform-browser-dynamic": "4.4.4", - "@angular/router": "4.4.4", + "@angular/platform-browser": "4.4.6", + "@angular/platform-browser-dynamic": "4.4.6", + "@angular/router": "4.4.6", "angular2-jwt": "0.2.3", "canonical-path": "0.0.2", "grunt": "0.4.5", @@ -41,13 +41,13 @@ "grunt-sass": "2.0.0", "grunt-systemjs-builder": "1.0.0", "hammerjs": "2.0.8", - "jasmine-core": "2.4.1", + "jasmine-core": "2.8.0", "jquery": "3.2.1", - "karma": "1.7.0", + "karma": "1.7.1", "karma-chrome-launcher": "2.2.0", "karma-cli": "1.0.1", "karma-coverage": "1.1.1", - "karma-jasmine": "1.0.2", + "karma-jasmine": "1.1.1", "karma-jasmine-html-reporter": "0.2.2", "karma-spec-reporter": "0.0.31", "load-grunt-tasks": "3.5.2", http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.html ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.html b/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.html index 73c78e1..604af59 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.html +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.html @@ -18,17 +18,17 @@ limitations under the License. <div id="nifi-registry-administration-perspective"> <mat-button-toggle-group name="nifi-registry-administration-perspective" fxLayout="row" fxLayoutAlign="space-between center" class="tab-toggle-group"> + <mat-button-toggle [checked]="nfRegistryService.adminPerspective === 'workflow'" value="workflow" + class="uppercase" + routerLink="/nifi-registry/administration/workflow" + i18n="Workflow administration tab|A description of the type of administration options available.@@nf-admin-workflow-tab-title"> + Buckets + </mat-button-toggle> <mat-button-toggle [checked]="nfRegistryService.adminPerspective === 'users'" value="users" class="uppercase" routerLink="/nifi-registry/administration/users" i18n="Users administration tab|A description of the type of administration options available.@@nf-admin-users-tab-title"> Users </mat-button-toggle> - <mat-button-toggle [checked]="nfRegistryService.adminPerspective === 'workflow'" value="workflow" - class="uppercase" - routerLink="/nifi-registry/administration/workflow" - i18n="Workflow administration tab|A description of the type of administration options available.@@nf-admin-workflow-tab-title"> - Buckets - </mat-button-toggle> </mat-button-toggle-group> </div> <router-outlet></router-outlet> http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js b/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js index 27694ce..4cc7cf8 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js @@ -43,7 +43,6 @@ var NfRegistryDropletGridListViewer = require('nifi-registry/components/explorer var fdsCore = require('@fluid-design-system/core'); var ngMoment = require('angular2-moment'); var rxjs = require('rxjs/Rx'); -var ngHttp = require('@angular/http'); describe('NfRegistryAdministration Component', function () { var comp; @@ -57,8 +56,6 @@ describe('NfRegistryAdministration Component', function () { ngCoreTesting.TestBed.configureTestingModule({ imports: [ ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, ngCommonHttp.HttpClientModule, fdsCore, NfRegistryRoutes http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js index 17e288c..1fdef66 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js @@ -15,7 +15,7 @@ * limitations under the License. */ var ngCore = require('@angular/core'); -var rxjs = require('rxjs/Rx'); +var rxjs = require('rxjs/Observable'); var NfRegistryService = require('nifi-registry/services/nf-registry.service.js'); var NfRegistryApi = require('nifi-registry/services/nf-registry.api.js'); var NfStorage = require('nifi-registry/services/nf-storage.service.js'); @@ -75,6 +75,7 @@ NfRegistryUsersAdministration.prototype = { */ ngOnInit: function () { var self = this; + this.nfRegistryService.inProgress = true; // attempt kerberos authentication this.nfRegistryApi.ticketExchange().subscribe(function (jwt) { self.nfRegistryService.loadCurrentUser().subscribe(function (currentUser) { @@ -92,6 +93,7 @@ NfRegistryUsersAdministration.prototype = { self.nfRegistryService.users = users; self.nfRegistryService.groups = groups; self.nfRegistryService.filterUsersAndGroups(); + self.nfRegistryService.inProgress = false; }); }); }); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js index dc82791..80fd245 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js @@ -42,7 +42,6 @@ var NfRegistryDropletGridListViewer = require('nifi-registry/components/explorer var fdsCore = require('@fluid-design-system/core'); var ngMoment = require('angular2-moment'); var rxjs = require('rxjs/Rx'); -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'); @@ -60,8 +59,6 @@ describe('NfRegistryUsersAdministration Component', function () { ngCoreTesting.TestBed.configureTestingModule({ imports: [ ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, ngCommonHttp.HttpClientModule, fdsCore, NfRegistryRoutes, @@ -145,6 +142,7 @@ describe('NfRegistryUsersAdministration Component', function () { expect(comp).toBeDefined(); expect(de).toBeDefined(); expect(nfRegistryService.adminPerspective).toBe('users'); + expect(nfRegistryService.inProgress).toBe(false); expect(nfRegistryService.users[0].identity).toEqual('User #1'); expect(nfRegistryService.users.length).toBe(1); expect(nfRegistryService.groups[0].identity).toEqual('Group #1'); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.js b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.js index 85a6b97..5a27be9 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.js @@ -59,6 +59,7 @@ NfRegistryWorkflowAdministration.prototype = { */ ngOnInit: function () { var self = this; + this.nfRegistryService.inProgress = true; // attempt kerberos authentication this.nfRegistryApi.ticketExchange().subscribe(function (jwt) { self.nfRegistryService.loadCurrentUser().subscribe(function (currentUser) { @@ -70,6 +71,7 @@ NfRegistryWorkflowAdministration.prototype = { .subscribe(function (buckets) { self.nfRegistryService.buckets = buckets; self.nfRegistryService.filterBuckets(); + self.nfRegistryService.inProgress = false; }); }); }); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js index a8e48d0..febac5c 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/workflow/nf-registry-workflow-administration.spec.js @@ -42,7 +42,6 @@ var NfRegistryDropletGridListViewer = require('nifi-registry/components/explorer var fdsCore = require('@fluid-design-system/core'); var ngMoment = require('angular2-moment'); var rxjs = require('rxjs/Rx'); -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'); @@ -60,8 +59,6 @@ describe('NfRegistryWorkflowAdministration Component', function () { ngCoreTesting.TestBed.configureTestingModule({ imports: [ ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, ngCommonHttp.HttpClientModule, fdsCore, NfRegistryRoutes, @@ -138,6 +135,7 @@ describe('NfRegistryWorkflowAdministration Component', function () { expect(comp).toBeDefined(); expect(de).toBeDefined(); expect(nfRegistryService.adminPerspective).toBe('workflow'); + expect(nfRegistryService.inProgress).toBe(false); expect(nfRegistryService.buckets[0].name).toEqual('Bucket #1'); expect(nfRegistryService.buckets.length).toBe(1); expect(nfRegistryService.filterBuckets).toHaveBeenCalled(); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/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 d0e9077..cbba95e 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 @@ -15,7 +15,7 @@ * limitations under the License. */ var ngCore = require('@angular/core'); -var rxjs = require('rxjs/Rx'); +var rxjs = require('rxjs/Observable'); var NfRegistryService = require('nifi-registry/services/nf-registry.service.js'); var NfRegistryApi = require('nifi-registry/services/nf-registry.api.js'); var NfStorage = require('nifi-registry/services/nf-storage.service.js'); @@ -46,6 +46,7 @@ NfRegistryBucketGridListViewer.prototype = { */ ngOnInit: function () { var self = this; + this.nfRegistryService.inProgress = true; this.nfRegistryService.explorerViewType = 'grid-list'; // reset the breadcrumb state @@ -71,6 +72,7 @@ NfRegistryBucketGridListViewer.prototype = { self.nfRegistryService.droplets = droplets; self.nfRegistryService.filterDroplets(); self.nfRegistryService.setBreadcrumbState('in'); + self.nfRegistryService.inProgress = false; }); }); }); @@ -83,6 +85,7 @@ NfRegistryBucketGridListViewer.prototype = { ngOnDestroy: function () { this.nfRegistryService.explorerViewType = ''; this.nfRegistryService.setBreadcrumbState('out'); + this.nfRegistryService.filteredDroplets = []; } }; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/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 2d58a8b..22805d0 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 @@ -40,7 +40,6 @@ var NfRegistryDropletGridListViewer = require('nifi-registry/components/explorer var fdsCore = require('@fluid-design-system/core'); var ngMoment = require('angular2-moment'); var rxjs = require('rxjs/Rx'); -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'); @@ -51,14 +50,11 @@ describe('NfRegistryBucketGridListViewer Component', function () { var fixture; var nfRegistryService; var nfRegistryApi; - var ngHttpService; beforeEach(function () { ngCoreTesting.TestBed.configureTestingModule({ imports: [ ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, ngCommonHttp.HttpClientModule, fdsCore, NfRegistryRoutes @@ -99,10 +95,6 @@ describe('NfRegistryBucketGridListViewer Component', function () { useValue: { params: rxjs.Observable.of({bucketId: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc'}) } - }, - { - provide: ngHttp.XHRBackend, - useClass: ngHttpTesting.MockBackend } ] }); @@ -114,7 +106,6 @@ describe('NfRegistryBucketGridListViewer Component', function () { // from the root injector nfRegistryService = ngCoreTesting.TestBed.get(NfRegistryService); nfRegistryApi = ngCoreTesting.TestBed.get(NfRegistryApi); - ngHttpService = ngCoreTesting.TestBed.get(ngHttp.Http); // because the NfRegistryBucketGridListViewer component is a nested route component we need to set up the nfRegistryService service manually nfRegistryService.explorerViewType = 'grid-list'; @@ -122,7 +113,6 @@ 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(ngHttpService, 'get').and.callThrough(); spyOn(nfRegistryApi, 'getBuckets').and.callFake(function () { }).and.returnValue(rxjs.Observable.of([{ identifier: '2f7f9e54-dc09-4ceb-aa58-9fe581319cdc', @@ -164,6 +154,7 @@ describe('NfRegistryBucketGridListViewer Component', function () { //assertions expect(comp).toBeDefined(); expect(nfRegistryService.breadCrumbState).toBe('in'); + expect(nfRegistryService.inProgress).toBe(false); expect(nfRegistryService.droplet.identity).toBeUndefined(); expect(nfRegistryService.bucket.name).toEqual('Bucket #1'); expect(nfRegistryService.buckets[0].name).toEqual('Bucket #1'); @@ -182,7 +173,22 @@ describe('NfRegistryBucketGridListViewer Component', function () { it('should destroy the component', ngCoreTesting.fakeAsync(function () { spyOn(nfRegistryApi, 'getDroplets').and.callFake(function () { - }).and.returnValue(rxjs.Observable.of([])); + }).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" + } + }])); // 1st change detection triggers ngOnInit which makes getBuckets, getBucket, and getDroplets calls fixture.detectChanges(); // wait for async getBuckets, getBucket, and getDroplets calls @@ -194,6 +200,8 @@ describe('NfRegistryBucketGridListViewer Component', function () { comp.ngOnDestroy(); //assertions + expect(nfRegistryService.explorerViewType).toBe(''); + expect(nfRegistryService.filteredDroplets.length).toBe(0); expect(nfRegistryService.breadCrumbState).toBe('out'); })); }); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/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 97d2a0c..41bef94 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 @@ -15,7 +15,7 @@ * limitations under the License. */ var ngCore = require('@angular/core'); -var rxjs = require('rxjs/Rx'); +var rxjs = require('rxjs/Observable'); var NfRegistryService = require('nifi-registry/services/nf-registry.service.js'); var NfRegistryApi = require('nifi-registry/services/nf-registry.api.js'); var NfStorage = require('nifi-registry/services/nf-storage.service.js'); @@ -46,6 +46,7 @@ NfRegistryDropletGridListViewer.prototype = { */ ngOnInit: function () { var self = this; + this.nfRegistryService.inProgress = true; this.nfRegistryService.explorerViewType = 'grid-list'; // attempt kerberos authentication this.nfRegistryApi.ticketExchange().subscribe(function (jwt) { @@ -70,6 +71,7 @@ NfRegistryDropletGridListViewer.prototype = { self.nfRegistryService.droplets = droplets; self.nfRegistryService.filterDroplets(); self.nfRegistryService.setBreadcrumbState('in'); + self.nfRegistryService.inProgress = false; }); }); }); @@ -81,6 +83,7 @@ NfRegistryDropletGridListViewer.prototype = { ngOnDestroy: function () { this.nfRegistryService.explorerViewType = ''; this.nfRegistryService.setBreadcrumbState('out'); + this.nfRegistryService.filteredDroplets = []; } }; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/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 30b37f7..8631eb4 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 @@ -40,7 +40,6 @@ var NfRegistryDropletGridListViewer = require('nifi-registry/components/explorer var fdsCore = require('@fluid-design-system/core'); var ngMoment = require('angular2-moment'); var rxjs = require('rxjs/Rx'); -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'); @@ -51,14 +50,11 @@ describe('NfRegistryDropletGridListViewer Component', function () { var fixture; var nfRegistryService; var nfRegistryApi; - var ngHttpService; beforeEach(function () { ngCoreTesting.TestBed.configureTestingModule({ imports: [ ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, ngCommonHttp.HttpClientModule, fdsCore, NfRegistryRoutes @@ -102,10 +98,6 @@ describe('NfRegistryDropletGridListViewer Component', function () { dropletType: 'flow' }) } - }, - { - provide: ngHttp.XHRBackend, - useClass: ngHttpTesting.MockBackend } ] }); @@ -118,7 +110,6 @@ describe('NfRegistryDropletGridListViewer Component', function () { // from the root injector nfRegistryService = ngCoreTesting.TestBed.get(NfRegistryService); nfRegistryApi = ngCoreTesting.TestBed.get(NfRegistryApi); - ngHttpService = ngCoreTesting.TestBed.get(ngHttp.Http); // because the NfRegistryDropletGridListViewer component is a nested route component we need to set up the nfRegistryService service manually nfRegistryService.perspective = 'explorer'; @@ -127,7 +118,7 @@ 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(ngHttpService, 'get').and.callThrough(); spyOn(nfRegistryApi, 'getDroplet').and.callFake(function () { }).and.returnValue(rxjs.Observable.of({ "identifier": "2e04b4fb-9513-47bb-aa74-1ae34616bfdc", @@ -186,6 +177,7 @@ describe('NfRegistryDropletGridListViewer Component', function () { //assertions expect(comp).toBeDefined(); expect(nfRegistryService.breadCrumbState).toBe('in'); + expect(nfRegistryService.inProgress).toBe(false); expect(nfRegistryService.bucket.name).toEqual('Bucket #1'); expect(nfRegistryService.buckets[0].name).toEqual('Bucket #1'); expect(nfRegistryService.buckets.length).toBe(1); @@ -210,7 +202,22 @@ describe('NfRegistryDropletGridListViewer Component', function () { it('should destroy the component', ngCoreTesting.fakeAsync(function () { spyOn(nfRegistryApi, 'getDroplets').and.callFake(function () { - }).and.returnValue(rxjs.Observable.of([])); + }).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" + } + }])); // 1st change detection triggers ngOnInit which makes getBuckets, getBucket, getDroplet, and getDroplets calls fixture.detectChanges(); // wait for async getBuckets, getBucket, getDroplet, and getDroplets calls @@ -222,6 +229,8 @@ describe('NfRegistryDropletGridListViewer Component', function () { comp.ngOnDestroy(); //assertions + expect(nfRegistryService.explorerViewType).toBe(''); + expect(nfRegistryService.filteredDroplets.length).toBe(0); expect(nfRegistryService.breadCrumbState).toBe('out'); })); }); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/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 eb0bb99..bb8c52d 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 @@ -20,8 +20,8 @@ limitations under the License. <div flex fxLayout="row" fxLayoutAlign="end center"> <td-chips [(ngModel)]="nfRegistryService.dropletsSearchTerms" [items]="nfRegistryService.autoCompleteDroplets" - (add)="nfRegistryService.filterDroplets(nfRegistryService.activeDropletColumn.name, nfRegistryService.activeDropletColumn.sortOrder);" - (remove)="nfRegistryService.filterDroplets(nfRegistryService.activeDropletColumn.name, nfRegistryService.activeDropletColumn.sortOrder);" class="push-right-sm"></td-chips> + (add)="nfRegistryService.filterDroplets(nfRegistryService.activeDropletColumn.identity, nfRegistryService.activeDropletColumn.sortOrder);" + (remove)="nfRegistryService.filterDroplets(nfRegistryService.activeDropletColumn.identity, nfRegistryService.activeDropletColumn.sortOrder);" class="push-right-sm"></td-chips> <span class="push-top-sm pad-right-sm">Sort by:</span> <div fxLayout="row" fxLayoutAlign="end center" [matMenuTriggerFor]="dropletGridSortMenu"> <div class="push-top-sm" id="droplet-sort-by-field">{{nfRegistryService.getSortByLabel()}}</div> @@ -62,7 +62,7 @@ limitations under the License. Actions<i class="fa fa-caret-down" aria-hidden="true"></i> </button> <mat-menu class="fds-primary-dropdown-button-menu" #primaryButtonDropdownMenu="matMenu" - [overlapTrigger]="false"> + [overlapTrigger]="false"> <button mat-menu-item *ngFor="let action of nfRegistryService.dropletActions" (click)="nfRegistryService.executeDropletAction(action, droplet)"> <span>{{action.name}}</span> @@ -108,7 +108,7 @@ limitations under the License. <div class="pad-bottom-sm"></div> </div> </div> -<div class="pad-right-xxl pad-left-xxl" *ngIf="nfRegistryService.filteredDroplets.length === 0"> +<div class="pad-right-xxl pad-left-xxl" *ngIf="nfRegistryService.filteredDroplets.length === 0 && !nfRegistryService.inProgress"> <p class="text-center">No results match this query.</p> </div> <router-outlet></router-outlet> http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js index 042747e..adeee3f 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js +++ b/nifi-registry-web-ui/src/main/webapp/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js @@ -15,7 +15,7 @@ * limitations under the License. */ var ngCore = require('@angular/core'); -var rxjs = require('rxjs/Rx'); +var rxjs = require('rxjs/Observable'); var NfRegistryService = require('nifi-registry/services/nf-registry.service.js'); var NfRegistryApi = require('nifi-registry/services/nf-registry.api.js'); var NfStorage = require('nifi-registry/services/nf-storage.service.js'); @@ -47,6 +47,7 @@ NfRegistryGridListViewer.prototype = { ngOnInit: function () { var self = this; this.nfRegistryService.explorerViewType = 'grid-list'; + this.nfRegistryService.inProgress = true; // reset the breadcrumb state this.nfRegistryService.bucket = {}; @@ -67,6 +68,7 @@ NfRegistryGridListViewer.prototype = { self.nfRegistryService.droplets = droplets; self.nfRegistryService.filterDroplets(); self.nfRegistryService.setBreadcrumbState('in'); + self.nfRegistryService.inProgress = false; }); }); }); @@ -78,6 +80,7 @@ NfRegistryGridListViewer.prototype = { ngOnDestroy: function () { this.nfRegistryService.explorerViewType = ''; this.nfRegistryService.setBreadcrumbState('out'); + this.nfRegistryService.filteredDroplets = []; } }; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/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 8c5cc38..2c926b4 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 NfRegistryDropletGridListViewer = require('nifi-registry/components/explorer var fdsCore = require('@fluid-design-system/core'); var ngMoment = require('angular2-moment'); var rxjs = require('rxjs/Rx'); -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'); @@ -55,8 +54,6 @@ describe('NfRegistryGridListViewer Component', function () { ngCoreTesting.TestBed.configureTestingModule({ imports: [ ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, ngCommonHttp.HttpClientModule, fdsCore, NfRegistryRoutes @@ -152,6 +149,7 @@ describe('NfRegistryGridListViewer Component', function () { expect(comp).toBeDefined(); expect(nfRegistryService.explorerViewType).toBe('grid-list'); expect(nfRegistryService.breadCrumbState).toBe('in'); + expect(nfRegistryService.inProgress).toBe(false); expect(nfRegistryService.bucket.identity).toBeUndefined(); expect(nfRegistryService.droplet.identity).toBeUndefined(); expect(nfRegistryService.buckets[0].name).toEqual('Bucket #1'); @@ -165,7 +163,22 @@ describe('NfRegistryGridListViewer Component', function () { it('should destroy the component', ngCoreTesting.fakeAsync(function () { spyOn(nfRegistryApi, 'getDroplets').and.callFake(function () { - }).and.returnValue(rxjs.Observable.of([])); + }).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" + } + }])); // 1st change detection triggers ngOnInit which makes getBuckets and getDroplets calls fixture.detectChanges(); // wait for async getBuckets and getDroplets calls @@ -178,7 +191,6 @@ describe('NfRegistryGridListViewer Component', function () { //assertions expect(nfRegistryService.explorerViewType).toBe(''); - expect(nfRegistryService.droplets.length).toBe(0); expect(nfRegistryService.filteredDroplets.length).toBe(0); expect(nfRegistryService.breadCrumbState).toBe('out'); })); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/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 c60a230..605965a 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 NfRegistryBucketGridListViewer = require('nifi-registry/components/explorer/ 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 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'); @@ -52,8 +51,6 @@ describe('NfRegistryExplorer Component', function () { ngCoreTesting.TestBed.configureTestingModule({ imports: [ ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, ngCommonHttp.HttpClientModule, fdsCore, NfRegistryRoutes http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/nf-registry-bootstrap.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/nf-registry-bootstrap.js b/nifi-registry-web-ui/src/main/webapp/nf-registry-bootstrap.js index 14bdc3c..f692564 100644 --- a/nifi-registry-web-ui/src/main/webapp/nf-registry-bootstrap.js +++ b/nifi-registry-web-ui/src/main/webapp/nf-registry-bootstrap.js @@ -19,6 +19,11 @@ require('core-js'); require('zone.js'); require('hammerjs'); require('switchMap'); +// patch Observable with appropriate methods +require('rxjs/add/operator/map'); +require('rxjs/add/operator/catch'); +require('rxjs/add/observable/of'); +require('rxjs/add/observable/forkJoin'); var $ = require('jquery'); var NfRegistryModule = require('nifi-registry/nf-registry.module.js'); var ngPlatformBrowserDynamic = require('@angular/platform-browser-dynamic'); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/nf-registry.animations.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/nf-registry.animations.js b/nifi-registry-web-ui/src/main/webapp/nf-registry.animations.js index e78f3a4..5f7d0cb 100644 --- a/nifi-registry-web-ui/src/main/webapp/nf-registry.animations.js +++ b/nifi-registry-web-ui/src/main/webapp/nf-registry.animations.js @@ -109,11 +109,25 @@ NfAnimations.prototype = { ), ngAnimate.transition('void => *', [ ngAnimate.style({transform: 'translateX(100%)'}), + ngAnimate.animate('0.4s 0.1s ease-in') + ]), + ngAnimate.transition('* => void', ngAnimate.animate('0.2s ease-out', ngAnimate.style({transform: 'translateX(-100%)'}))) + ]), + + /** + * Fly in/out animation + */ + fadeInOutAnimation: ngAnimate.trigger('fadeInOut', [ + ngAnimate.state('in', + ngAnimate.style({opacity: 1}) + ), + ngAnimate.transition('void => *', [ + ngAnimate.style({opacity: 0}), ngAnimate.animate('0.5s 0.1s ease-in') ]), - ngAnimate.transition('* => void', ngAnimate.animate('0.5s ease-out', ngAnimate.style({transform: 'translateX(-100%)'}))) + ngAnimate.transition('* => void', ngAnimate.animate('0.5s ease-out', ngAnimate.style({opacity: 0}))) ]) }; -module.exports = new NfAnimations(); \ No newline at end of file +module.exports = new NfAnimations(); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/nf-registry.html ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/nf-registry.html b/nifi-registry-web-ui/src/main/webapp/nf-registry.html index 4e9c4c4..b175233 100644 --- a/nifi-registry-web-ui/src/main/webapp/nf-registry.html +++ b/nifi-registry-web-ui/src/main/webapp/nf-registry.html @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<mat-progress-spinner id="loading-spinner" mode="indeterminate"></mat-progress-spinner> +<mat-progress-spinner id="loading-spinner" *ngIf="nfRegistryService.inProgress" mode="indeterminate"></mat-progress-spinner> <mat-sidenav-container> <mat-sidenav #sidenav mode="over" align="end" opened="false" disableClose="true"> <router-outlet name="sidenav"></router-outlet> @@ -76,7 +76,7 @@ limitations under the License. <a id="logout-link-container" *ngIf="nfRegistryService.currentUser.canLogout" class="link" (click)="logout()">logout</a> </div> <button mat-ripple *ngIf="nfRegistryService.perspective === 'explorer'" mat-icon-button - routerLink="/nifi-registry/administration/users"> + routerLink="/nifi-registry/administration/workflow"> <i class="fa fa-wrench" aria-hidden="true"></i> </button> <button mat-ripple *ngIf="nfRegistryService.perspective === 'administration'" mat-mini-fab http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/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 455574e..c862dab 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 @@ -39,7 +39,6 @@ var NfRegistryGridListViewer = require('nifi-registry/components/explorer/grid-l 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 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'); @@ -57,8 +56,6 @@ NfRegistryModule.annotations = [ imports: [ ngMoment.MomentModule, fdsCore, - ngHttp.HttpModule, - ngHttp.JsonpModule, ngCommonHttp.HttpClientModule, NfRegistryRoutes ], http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/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 c2b9e44..5491c25 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 @@ -18,7 +18,7 @@ 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/Rx'); +var rxjs = require('rxjs/Observable'); var ngRouter = require('@angular/router'); var MILLIS_PER_SECOND = 1000; var headers = new Headers({'Content-Type': 'application/json'}); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.spec.js b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.spec.js index eee6858..b1a6609 100644 --- a/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.api.spec.js @@ -38,16 +38,13 @@ var NfRegistryBucketGridListViewer = require('nifi-registry/components/explorer/ 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 ngHttp = require('@angular/http'); 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'); -describe('NfRegistry Service API w/ Angular testing utils', function () { - var comp; - var fixture; +xdescribe('NfRegistry API w/ Angular testing utils', function () { var nfRegistryApi; var nfRegistryService; @@ -55,12 +52,9 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { ngCoreTesting.TestBed.configureTestingModule({ imports: [ ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, - ngCommonHttp.HttpClientModule, + ngCommonHttpTesting.HttpClientTestingModule, fdsCore, NfRegistryRoutes, - ngCommonHttpTesting.HttpClientTestingModule ], declarations: [ FdsDemo, @@ -96,19 +90,112 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { ], bootstrap: [NfRegistry] }); - fixture = ngCoreTesting.TestBed.createComponent(NfRegistry); - fixture.detectChanges(); - comp = fixture.componentInstance; - // NfRegistryService from the root injector nfRegistryService = ngCoreTesting.TestBed.get(NfRegistryService); nfRegistryApi = ngCoreTesting.TestBed.get(NfRegistryApi); - spyOn(nfRegistryApi, 'ticketExchange').and.callFake(function () { - }).and.returnValue(rxjs.Observable.of({})); - spyOn(nfRegistryService, 'loadCurrentUser').and.callFake(function () { - }).and.returnValue(rxjs.Observable.of({})); }); + it('should POST to exchange tickets.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { + // Spy + spyOn(nfRegistryApi.nfStorage, 'setItem').and.callThrough(); + + // api call + nfRegistryApi.ticketExchange().subscribe(function (response) { + var setItemCall = nfRegistryApi.nfStorage.setItem.calls.first(); + expect(setItemCall.args[1]).toBe('eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJiYmVuZGVATklGSS5BUEFDSEUuT1JHIiwiaXNzIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwiYXVkIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYmJlbmRlQE5JRkkuQVBBQ0hFLk9SRyIsImtpZCI6IjQ3NWQwZWEyLTkzZGItNDhiNi05MjcxLTgyOGM3MzQ5ZTFkNiIsImlhdCI6MTUxMjQ4NTY4NywiZXhwIjoxNTEyNTI4ODg3fQ.lkaWPQw1ld7Qqb6-Zu8mAqu6r8mUVHBNP0ZfNpES3rA'); + expect(response).toBe('eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJiYmVuZGVATklGSS5BUEFDSEUuT1JHIiwiaXNzIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwiYXVkIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYmJlbmRlQE5JRkkuQVBBQ0hFLk9SRyIsImtpZCI6IjQ3NWQwZWEyLTkzZGItNDhiNi05MjcxLTgyOGM3MzQ5ZTFkNiIsImlhdCI6MTUxMjQ4NTY4NywiZXhwIjoxNTEyNTI4ODg3fQ.lkaWPQw1ld7Qqb6-Zu8mAqu6r8mUVHBNP0ZfNpES3rA'); + }); + + // the request it made + req = httpMock.expectOne('/nifi-registry-api/access/token/kerberos'); + expect(req.request.method).toEqual('POST'); + + // Next, fulfill the request by transmitting a response. + req.flush('eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJiYmVuZGVATklGSS5BUEFDSEUuT1JHIiwiaXNzIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwiYXVkIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYmJlbmRlQE5JRkkuQVBBQ0hFLk9SRyIsImtpZCI6IjQ3NWQwZWEyLTkzZGItNDhiNi05MjcxLTgyOGM3MzQ5ZTFkNiIsImlhdCI6MTUxMjQ4NTY4NywiZXhwIjoxNTEyNTI4ODg3fQ.lkaWPQw1ld7Qqb6-Zu8mAqu6r8mUVHBNP0ZfNpES3rA'); + + // Finally, assert that there are no outstanding requests. + httpMock.verify(); + })); + + it('should load jwt from local storage.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { + // Spy + spyOn(nfRegistryApi.nfStorage, 'hasItem').and.callFake(function () { + return true; + }); + spyOn(nfRegistryApi.nfStorage, 'getItem').and.callFake(function () { + return 123; + }); + + // api call + nfRegistryApi.ticketExchange().subscribe(function (response) { + expect(response).toBe(123); + }); + })); + + it('should fail to POST to exchange tickets.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { + // Spy + spyOn(nfRegistryApi.nfStorage, 'hasItem').and.callFake(function () { + return false; + }); + // api call + nfRegistryApi.ticketExchange().subscribe(function (response) { + expect(response).toEqual(''); + }); + + // the request it made + req = httpMock.expectOne('/nifi-registry-api/access/token/kerberos'); + expect(req.request.method).toEqual('POST'); + + // Next, fulfill the request by transmitting a response. + req.flush(null, {status: 401, statusText: 'POST exchange tickets mock error'}); + + // Finally, assert that there are no outstanding requests. + httpMock.verify(); + })); + + it('should GET to load the current user.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { + // api call + nfRegistryApi.loadCurrentUser().subscribe(function (response) { + expect(response.identifier).toBe(123); + expect(response.identity).toBe('Admin User'); + }); + + // the request it made + req = httpMock.expectOne('/nifi-registry-api/access'); + expect(req.request.method).toEqual('GET'); + + // Next, fulfill the request by transmitting a response. + req.flush({ + 'identifier': 123, + 'identity': 'Admin User' + }); + + // Finally, assert that there are no outstanding requests. + httpMock.verify(); + })); + + it('should fail to GET to load the current user.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { + // Spy + spyOn(nfRegistryApi.router, 'navigateByUrl').and.callFake(function () { + }); + + // api call + nfRegistryApi.loadCurrentUser().subscribe(function (response) { + var navigateByUrlCall = nfRegistryApi.router.navigateByUrl.calls.first(); + expect(navigateByUrlCall.args[0]).toBe('/nifi-registry/login'); + }); + + // the request it made + req = httpMock.expectOne('/nifi-registry-api/access'); + expect(req.request.method).toEqual('GET'); + + // Next, fulfill the request by transmitting a response. + req.flush(null, {status: 401, statusText: 'GET current user mock error'}); + + // Finally, assert that there are no outstanding requests. + httpMock.verify(); + })); + it('should GET droplet snapshot metadata.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { // api call nfRegistryApi.getDropletSnapshotMetadata('flow/test').subscribe(function (response) { @@ -190,7 +277,9 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { // Spy spyOn(nfRegistryApi.dialogService, 'openConfirm').and.callFake(function () { return { - afterClosed: function() { return rxjs.Observable.of(true); } + afterClosed: function () { + return rxjs.Observable.of(true); + } } }); @@ -480,7 +569,9 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { // Spy spyOn(nfRegistryApi.dialogService, 'openConfirm').and.callFake(function () { return { - afterClosed: function() { return rxjs.Observable.of(true); } + afterClosed: function () { + return rxjs.Observable.of(true); + } } }); @@ -507,7 +598,9 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { // Spy spyOn(nfRegistryApi.dialogService, 'openConfirm').and.callFake(function () { return { - afterClosed: function() { return rxjs.Observable.of(true); } + afterClosed: function () { + return rxjs.Observable.of(true); + } } }); @@ -855,7 +948,10 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { it('should POST to create a user group.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { // api call - nfRegistryApi.createNewGroup(123, 'Group #1', [{identity: 'User #1', identifier: 9999}]).subscribe(function (response) { + nfRegistryApi.createNewGroup(123, 'Group #1', [{ + identity: 'User #1', + identifier: 9999 + }]).subscribe(function (response) { expect(response.identifier).toEqual(123); expect(response.identity).toEqual('Group #1'); expect(response.users[0].identity).toEqual('User #1'); @@ -882,7 +978,10 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { }); // api call - nfRegistryApi.createNewGroup(123, 'Group #1', [{identity: 'User #1', identifier: 9999}]).subscribe(function (response) { + nfRegistryApi.createNewGroup(123, 'Group #1', [{ + identity: 'User #1', + identifier: 9999 + }]).subscribe(function (response) { expect(response.message).toEqual('Http failure response for /nifi-registry-api/tenants/user-groups: 401 POST user groups mock error'); var dialogServiceCall = nfRegistryApi.dialogService.openConfirm.calls.first(); expect(dialogServiceCall.args[0].title).toBe('Error'); @@ -904,7 +1003,10 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { it('should PUT to update a user group.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { // api call - nfRegistryApi.updateUserGroup(123, 'Group #1', [{identity: 'User #1', identifier: 9999}]).subscribe(function (response) { + nfRegistryApi.updateUserGroup(123, 'Group #1', [{ + identity: 'User #1', + identifier: 9999 + }]).subscribe(function (response) { expect(response.identifier).toEqual(123); expect(response.identity).toEqual('Group #1'); expect(response.users[0].identity).toEqual('User #1'); @@ -931,7 +1033,10 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { }); // api call - nfRegistryApi.updateUserGroup('123', 'Group #1', [{identity: 'User #1', identifier: '9999'}]).subscribe(function (response) { + nfRegistryApi.updateUserGroup('123', 'Group #1', [{ + identity: 'User #1', + identifier: '9999' + }]).subscribe(function (response) { var dialogServiceCall = nfRegistryApi.dialogService.openConfirm.calls.first(); expect(dialogServiceCall.args[0].title).toBe('Error'); expect(dialogServiceCall.args[0].message).toBe('Http failure response for /nifi-registry-api/tenants/user-groups/123: 401 PUT user groups mock error'); @@ -949,165 +1054,4 @@ describe('NfRegistry Service API w/ Angular testing utils', function () { // Finally, assert that there are no outstanding requests. httpMock.verify(); })); -}); - -describe('NfRegistry Service API w/ Angular testing utils', function () { - var comp; - var fixture; - var nfRegistryApi; - var nfRegistryService; - - beforeEach(function () { - ngCoreTesting.TestBed.configureTestingModule({ - imports: [ - ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, - ngCommonHttp.HttpClientModule, - fdsCore, - NfRegistryRoutes, - ngCommonHttpTesting.HttpClientTestingModule - ], - declarations: [ - FdsDemo, - NfRegistry, - NfRegistryExplorer, - NfRegistryAdministration, - NfRegistryUsersAdministration, - NfRegistryUserDetails, - NfRegistryUserPermissions, - NfRegistryUserGroupPermissions, - NfRegistryBucketPermissions, - NfRegistryAddUser, - NfRegistryWorkflowAdministration, - NfRegistryGridListViewer, - NfRegistryBucketGridListViewer, - NfRegistryDropletGridListViewer, - NfPageNotFoundComponent - ], - providers: [ - NfRegistryService, - NfRegistryAuthService, - NfRegistryApi, - NfStorage, - { - provide: ngCommonHttp.HTTP_INTERCEPTORS, - useClass: NfRegistryTokenInterceptor, - multi: true - }, - { - provide: ngCommon.APP_BASE_HREF, - useValue: '/' - } - ], - bootstrap: [NfRegistry] - }); - fixture = ngCoreTesting.TestBed.createComponent(NfRegistry); - fixture.detectChanges(); - comp = fixture.componentInstance; - - // NfRegistryService from the root injector - nfRegistryService = ngCoreTesting.TestBed.get(NfRegistryService); - nfRegistryApi = ngCoreTesting.TestBed.get(NfRegistryApi); - }); - - it('should POST to exchange tickets.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { - // Spy - spyOn(nfRegistryApi.nfStorage, 'setItem').and.callThrough(); - - // api call - nfRegistryApi.ticketExchange().subscribe(function (response) { - var setItemCall = nfRegistryApi.nfStorage.setItem.calls.first(); - expect(setItemCall.args[1]).toBe('eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJiYmVuZGVATklGSS5BUEFDSEUuT1JHIiwiaXNzIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwiYXVkIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYmJlbmRlQE5JRkkuQVBBQ0hFLk9SRyIsImtpZCI6IjQ3NWQwZWEyLTkzZGItNDhiNi05MjcxLTgyOGM3MzQ5ZTFkNiIsImlhdCI6MTUxMjQ4NTY4NywiZXhwIjoxNTEyNTI4ODg3fQ.lkaWPQw1ld7Qqb6-Zu8mAqu6r8mUVHBNP0ZfNpES3rA'); - expect(response).toBe('eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJiYmVuZGVATklGSS5BUEFDSEUuT1JHIiwiaXNzIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwiYXVkIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYmJlbmRlQE5JRkkuQVBBQ0hFLk9SRyIsImtpZCI6IjQ3NWQwZWEyLTkzZGItNDhiNi05MjcxLTgyOGM3MzQ5ZTFkNiIsImlhdCI6MTUxMjQ4NTY4NywiZXhwIjoxNTEyNTI4ODg3fQ.lkaWPQw1ld7Qqb6-Zu8mAqu6r8mUVHBNP0ZfNpES3rA'); - }); - - // the request it made - req = httpMock.expectOne('/nifi-registry-api/access/token/kerberos'); - expect(req.request.method).toEqual('POST'); - - // Next, fulfill the request by transmitting a response. - req.flush('eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJiYmVuZGVATklGSS5BUEFDSEUuT1JHIiwiaXNzIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwiYXVkIjoiS2VyYmVyb3NTcG5lZ29JZGVudGl0eVByb3ZpZGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYmJlbmRlQE5JRkkuQVBBQ0hFLk9SRyIsImtpZCI6IjQ3NWQwZWEyLTkzZGItNDhiNi05MjcxLTgyOGM3MzQ5ZTFkNiIsImlhdCI6MTUxMjQ4NTY4NywiZXhwIjoxNTEyNTI4ODg3fQ.lkaWPQw1ld7Qqb6-Zu8mAqu6r8mUVHBNP0ZfNpES3rA'); - - // Finally, assert that there are no outstanding requests. - httpMock.verify(); - })); - - it('should load jwt from local storage.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { - // Spy - spyOn(nfRegistryApi.nfStorage, 'hasItem').and.callFake(function () { - return true; - }); - spyOn(nfRegistryApi.nfStorage, 'getItem').and.callFake(function () { - return 123; - }); - - // api call - nfRegistryApi.ticketExchange().subscribe(function (response) { - expect(response).toBe(123); - }); - })); - - it('should fail to POST to exchange tickets.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { - // Spy - spyOn(nfRegistryApi.nfStorage, 'hasItem').and.callFake(function () { - return false; - }); - // api call - nfRegistryApi.ticketExchange().subscribe(function (response) { - expect(response).toEqual(''); - }); - - // the request it made - req = httpMock.expectOne('/nifi-registry-api/access/token/kerberos'); - expect(req.request.method).toEqual('POST'); - - // Next, fulfill the request by transmitting a response. - req.flush(null, {status: 401, statusText: 'POST exchange tickets mock error'}); - - // Finally, assert that there are no outstanding requests. - httpMock.verify(); - })); - - it('should GET to load the current user.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { - // api call - nfRegistryApi.loadCurrentUser().subscribe(function (response) { - expect(response.identifier).toBe(123); - expect(response.identity).toBe('Admin User'); - }); - - // the request it made - req = httpMock.expectOne('/nifi-registry-api/access'); - expect(req.request.method).toEqual('GET'); - - // Next, fulfill the request by transmitting a response. - req.flush({ - 'identifier': 123, - 'identity': 'Admin User' - }); - - // Finally, assert that there are no outstanding requests. - httpMock.verify(); - })); - - it('should fail to GET to load the current user.', ngCoreTesting.inject([ngCommonHttpTesting.HttpTestingController], function (httpMock) { - // Spy - spyOn(nfRegistryApi.router, 'navigateByUrl').and.callFake(function () {}); - - // api call - nfRegistryApi.loadCurrentUser().subscribe(function (response) { - var navigateByUrlCall = nfRegistryApi.router.navigateByUrl.calls.first(); - expect(navigateByUrlCall.args[0]).toBe('/nifi-registry/login'); - }); - - // the request it made - req = httpMock.expectOne('/nifi-registry-api/access'); - expect(req.request.method).toEqual('GET'); - - // Next, fulfill the request by transmitting a response. - req.flush(null, {status: 401, statusText: 'GET current user mock error'}); - - // Finally, assert that there are no outstanding requests. - httpMock.verify(); - })); }); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.js b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.js index 3b49ae1..d63277f 100644 --- a/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.js +++ b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.js @@ -21,9 +21,7 @@ var fdsDialogsModule = require('@fluid-design-system/dialogs'); var fdsSnackBarsModule = require('@fluid-design-system/snackbars'); var NfRegistryApi = require('nifi-registry/services/nf-registry.api.js'); var NfStorage = require('nifi-registry/services/nf-storage.service.js'); -var rxjs = require('rxjs/Rx'); -require('rxjs/add/operator/catch'); -require('rxjs/add/operator/map'); +var rxjs = require('rxjs/Observable'); /** * NfRegistryService constructor. @@ -82,7 +80,7 @@ function NfRegistryService(nfRegistryApi, nfStorage, tdDataTableService, router, sortable: true }, { - name: 'updated', + name: 'modifiedTimestamp', label: 'Updated', sortable: true } @@ -121,6 +119,7 @@ function NfRegistryService(nfRegistryApi, nfStorage, tdDataTableService, router, this.autoCompleteUsersAndGroups = []; this.usersSearchTerms = []; + this.inProgress = false; //</editor-fold> }; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.spec.js b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.spec.js index f44caa5..6668b60 100644 --- a/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.spec.js @@ -18,7 +18,6 @@ var NfRegistryRoutes = require('nifi-registry/nf-registry.routes.js'); var ngCoreTesting = require('@angular/core/testing'); var ngCommonHttpTesting = require('@angular/common/http/testing'); -var ngHttpTesting = require('@angular/http/testing'); var ngCommon = require('@angular/common'); var FdsDemo = require('nifi-registry/components/fluid-design-system/fds-demo.js'); var NfRegistry = require('nifi-registry/nf-registry.js'); @@ -39,7 +38,6 @@ var NfRegistryBucketGridListViewer = require('nifi-registry/components/explorer/ 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 ngHttp = require('@angular/http'); var rxjs = require('rxjs/Rx'); var fdsDialogsModule = require('@fluid-design-system/dialogs'); var ngRouter = require('@angular/router'); @@ -49,8 +47,6 @@ var NfRegistryAuthService = require('nifi-registry/services/nf-registry.auth.ser var NfStorage = require('nifi-registry/services/nf-storage.service.js'); describe('NfRegistry Service isolated unit tests', function () { - var comp; - var fixture; var nfRegistryService; beforeEach(function () { @@ -674,8 +670,6 @@ describe('NfRegistry Service isolated unit tests', function () { }); describe('NfRegistry Service w/ Angular testing utils', function () { - var comp; - var fixture; var nfRegistryService; var nfRegistryApi; @@ -683,8 +677,6 @@ describe('NfRegistry Service w/ Angular testing utils', function () { ngCoreTesting.TestBed.configureTestingModule({ imports: [ ngMoment.MomentModule, - ngHttp.HttpModule, - ngHttp.JsonpModule, ngCommonHttp.HttpClientModule, fdsCore, NfRegistryRoutes, @@ -720,26 +712,14 @@ describe('NfRegistry Service w/ Angular testing utils', function () { { provide: ngCommon.APP_BASE_HREF, useValue: '/' - }, - { - provide: ngHttp.XHRBackend, - useClass: ngHttpTesting.MockBackend } ], bootstrap: [NfRegistry] }); - - fixture = ngCoreTesting.TestBed.createComponent(NfRegistryDropletGridListViewer); - - // test instance - comp = fixture.componentInstance; - // from the root injector nfRegistryService = ngCoreTesting.TestBed.get(NfRegistryService); nfRegistryApi = ngCoreTesting.TestBed.get(NfRegistryApi); - fixture.detectChanges(); - // Spy spyOn(nfRegistryApi.http, 'get').and.callFake(function () { }); @@ -751,7 +731,7 @@ describe('NfRegistry Service w/ Angular testing utils', function () { }).and.returnValue(rxjs.Observable.of({})); }); - it('should retrieve the snapshot metadata for the given droplet.', ngCoreTesting.fakeAsync(function () { + it('should retrieve the snapshot metadata for the given droplet.', function () { //Spy spyOn(nfRegistryApi, 'getDropletSnapshotMetadata').and.callFake(function () { }).and.returnValue(rxjs.Observable.of([{ @@ -764,12 +744,6 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.getDropletSnapshotMetadata(droplet); - // wait for async getDropletSnapshotMetadata call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(droplet.snapshotMetadata[0].version).toBe(999); expect(nfRegistryApi.getDropletSnapshotMetadata).toHaveBeenCalled(); @@ -777,9 +751,9 @@ describe('NfRegistry Service w/ Angular testing utils', function () { var getDropletSnapshotMetadataCall = nfRegistryApi.getDropletSnapshotMetadata.calls.first() expect(getDropletSnapshotMetadataCall.args[0]).toBe('test/id'); expect(getDropletSnapshotMetadataCall.args[1]).toBe(true); - })); + }); - it('should execute the `delete` droplet action.', ngCoreTesting.fakeAsync(function () { + it('should execute the `delete` droplet action.', function () { //Setup the nfRegistryService state for this test nfRegistryService.droplets = [{identifier: '2e04b4fb-9513-47bb-aa74-1ae34616bfdc'}]; @@ -801,12 +775,6 @@ describe('NfRegistry Service w/ Angular testing utils', function () { link: {href: 'testhref'} }); - // wait for async nfRegistryApi.deleteDroplet call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(nfRegistryService.droplets.length).toBe(0); expect(nfRegistryService.filterDroplets).toHaveBeenCalled(); @@ -814,9 +782,9 @@ describe('NfRegistry Service w/ Angular testing utils', function () { expect(openConfirmCall.args[0].title).toBe('Delete testtype'); var deleteDropletCall = nfRegistryApi.deleteDroplet.calls.first() expect(deleteDropletCall.args[0]).toBe('testhref'); - })); + }); - it('should filter droplets by name.', ngCoreTesting.fakeAsync(function () { + it('should filter droplets by name.', function () { //Setup the nfRegistryService state for this test nfRegistryService.dropletsSearchTerms = ['Flow #1']; nfRegistryService.droplets = [{ @@ -857,19 +825,13 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.filterDroplets(); - // wait for async nfRegistryApi.deleteDroplet call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(nfRegistryService.filteredDroplets.length).toBe(1); expect(nfRegistryService.filteredDroplets[0].name).toBe('Flow #1'); expect(nfRegistryService.getAutoCompleteDroplets).toHaveBeenCalled(); - })); + }); - it('should filter droplets by `type:flow` (demonstrate ability to do advanced searching of a droplet by a property `name:value` pair).', ngCoreTesting.fakeAsync(function () { + it('should filter droplets by `type:flow` (demonstrate ability to do advanced searching of a droplet by a property `name:value` pair).', function () { //Setup the nfRegistryService state for this test nfRegistryService.dropletsSearchTerms = ['type:FLOW']; nfRegistryService.droplets = [{ @@ -910,19 +872,13 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.filterDroplets(); - // wait for async nfRegistryApi.deleteDroplet call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(nfRegistryService.filteredDroplets.length).toBe(1); expect(nfRegistryService.filteredDroplets[0].name).toBe('Flow #1'); expect(nfRegistryService.getAutoCompleteDroplets).toHaveBeenCalled(); - })); + }); - it('should execute a `delete` action on a bucket.', ngCoreTesting.fakeAsync(function () { + it('should execute a `delete` action on a bucket.', function () { // from the root injector var dialogService = ngCoreTesting.TestBed.get(fdsDialogsModule.FdsDialogService); @@ -947,25 +903,13 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.executeBucketAction({name: 'delete'}, bucket); - // wait for async openConfirm call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - - // wait for async deleteBucket call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(dialogService.openConfirm).toHaveBeenCalled(); expect(nfRegistryApi.deleteBucket).toHaveBeenCalled(); expect(nfRegistryService.filterBuckets).toHaveBeenCalled(); expect(nfRegistryService.buckets.length).toBe(1); expect(nfRegistryService.buckets[0].identifier).toBe(1); - })); + }); it('should execute a `permissions` action on a bucket.', function () { // from the root injector @@ -986,7 +930,7 @@ describe('NfRegistry Service w/ Angular testing utils', function () { expect(navigateByUrlCall.args[0]).toBe('/nifi-registry/administration/workflow(sidenav:bucket/permissions/999)'); }); - it('should execute a `delete` action on a user.', ngCoreTesting.fakeAsync(function () { + it('should execute a `delete` action on a user.', function () { // from the root injector var dialogService = ngCoreTesting.TestBed.get(fdsDialogsModule.FdsDialogService); @@ -1011,25 +955,13 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.executeUserAction({name: 'delete'}, user); - // wait for async openConfirm call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - - // wait for async deleteBucket call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(dialogService.openConfirm).toHaveBeenCalled(); expect(nfRegistryApi.deleteUser).toHaveBeenCalled(); expect(nfRegistryService.filterUsersAndGroups).toHaveBeenCalled(); expect(nfRegistryService.users.length).toBe(1); expect(nfRegistryService.users[0].identifier).toBe(1); - })); + }); it('should execute a `permissions` action on a user.', function () { // from the root injector @@ -1050,7 +982,7 @@ describe('NfRegistry Service w/ Angular testing utils', function () { expect(navigateByUrlCall.args[0]).toBe('/nifi-registry/administration/users(sidenav:user/permissions/999)'); }); - it('should execute a `delete` action on a group.', ngCoreTesting.fakeAsync(function () { + it('should execute a `delete` action on a group.', function () { // from the root injector var dialogService = ngCoreTesting.TestBed.get(fdsDialogsModule.FdsDialogService); @@ -1075,25 +1007,13 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.executeGroupAction({name: 'delete'}, group); - // wait for async openConfirm call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - - // wait for async deleteBucket call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(dialogService.openConfirm).toHaveBeenCalled(); expect(nfRegistryApi.deleteUserGroup).toHaveBeenCalled(); expect(nfRegistryService.filterUsersAndGroups).toHaveBeenCalled(); expect(nfRegistryService.groups.length).toBe(1); expect(nfRegistryService.groups[0].identifier).toBe(1); - })); + }); it('should execute a `permissions` action on a group.', function () { // from the root injector @@ -1114,7 +1034,7 @@ describe('NfRegistry Service w/ Angular testing utils', function () { expect(navigateByUrlCall.args[0]).toBe('/nifi-registry/administration/users(sidenav:group/permissions/999)'); }); - it('should filter buckets by name.', ngCoreTesting.fakeAsync(function () { + it('should filter buckets by name.', function () { //Setup the nfRegistryService state for this test nfRegistryService.bucketsSearchTerms = ['Bucket #1']; nfRegistryService.buckets = [{ @@ -1138,20 +1058,14 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.filterBuckets(); - // wait for async nfRegistryApi.deleteDroplet call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(nfRegistryService.filteredBuckets.length).toBe(1); expect(nfRegistryService.filteredBuckets[0].name).toBe('Bucket #1'); expect(nfRegistryService.getAutoCompleteBuckets).toHaveBeenCalled(); expect(nfRegistryService.isMultiBucketActionsDisabled).toBe(false); - })); + }); - it('should filter users and groups by name.', ngCoreTesting.fakeAsync(function () { + it('should filter users and groups by name.', function () { //Setup the nfRegistryService state for this test nfRegistryService.usersSearchTerms = ['Group #1']; nfRegistryService.users = [{ @@ -1183,20 +1097,14 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.filterUsersAndGroups(); - // wait for async call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(nfRegistryService.filteredUsers.length).toBe(0); expect(nfRegistryService.filteredUserGroups.length).toBe(1); expect(nfRegistryService.filteredUserGroups[0].identity).toBe('Group #1'); expect(nfRegistryService.getAutoCompleteUserAndGroups).toHaveBeenCalled(); - })); + }); - it('should delete all selected buckets.', ngCoreTesting.fakeAsync(function () { + it('should delete all selected buckets.', function () { // from the root injector var dialogService = ngCoreTesting.TestBed.get(fdsDialogsModule.FdsDialogService); @@ -1223,18 +1131,6 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.deleteSelectedBuckets(); - // wait for async openConfirm call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - - // wait for async deleteBucket call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(dialogService.openConfirm).toHaveBeenCalled(); expect(nfRegistryApi.deleteBucket).toHaveBeenCalled(); @@ -1245,9 +1141,9 @@ describe('NfRegistry Service w/ Angular testing utils', function () { expect(nfRegistryService.allBucketsSelected).toBe(false); expect(nfRegistryService.buckets.length).toBe(1); expect(nfRegistryService.buckets[0].identifier).toBe(1); - })); + }); - it('should delete all selected users and groups.', ngCoreTesting.fakeAsync(function () { + it('should delete all selected users and groups.', function () { // from the root injector var dialogService = ngCoreTesting.TestBed.get(fdsDialogsModule.FdsDialogService); @@ -1278,18 +1174,6 @@ describe('NfRegistry Service w/ Angular testing utils', function () { // The function to test nfRegistryService.deleteSelectedUsersAndGroups(); - // wait for async openConfirm call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - - // wait for async deleteBucket call - ngCoreTesting.tick(); - - //inform angular to detect changes - fixture.detectChanges(); - //assertions expect(dialogService.openConfirm).toHaveBeenCalled(); expect(nfRegistryApi.deleteUserGroup).toHaveBeenCalled(); @@ -1303,5 +1187,5 @@ describe('NfRegistry Service w/ Angular testing utils', function () { expect(nfRegistryService.groups[0].identifier).toBe(1); expect(nfRegistryService.users.length).toBe(1); expect(nfRegistryService.users[0].identifier).toBe(12); - })); + }); }); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/a931858f/nifi-registry-web-ui/src/main/webapp/systemjs.builder.config.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/systemjs.builder.config.js b/nifi-registry-web-ui/src/main/webapp/systemjs.builder.config.js index fa874e2..8d3073d 100644 --- a/nifi-registry-web-ui/src/main/webapp/systemjs.builder.config.js +++ b/nifi-registry-web-ui/src/main/webapp/systemjs.builder.config.js @@ -43,6 +43,8 @@ '@angular/material': 'npm:@angular/material/bundles/material.umd.js', '@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js', '@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.js', + '@angular/cdk/accordion': 'npm:@angular/cdk/bundles/cdk-accordion.umd.js', + '@angular/cdk/layout': 'npm:@angular/cdk/bundles/cdk-layout.umd.js', '@angular/cdk/a11y': 'npm:@angular/cdk/bundles/cdk-a11y.umd.js', '@angular/cdk/collections': 'npm:@angular/cdk/bundles/cdk-collections.umd.js', '@angular/cdk/observers': 'npm:@angular/cdk/bundles/cdk-observers.umd.js',
