Browse Source

Got Karma tests working. Had to update everything to the latest versions, so still need to fix things on the webpack side. Also had to fix places in code where the new typescript compiler was being more strict.

jalbr74 7 years ago
parent
commit
edc812f3b9

+ 29 - 10
client/karma.conf.js

@@ -21,12 +21,19 @@
  */
  */
 
 
 var webpack = require('webpack');
 var webpack = require('webpack');
-var webpackConfig = require('./webpack.test.js');
+// var webpackConfig = require('./webpack.test.js');
 var path = require("path");
 var path = require("path");
 var os = require('os');
 var os = require('os');
 
 
 module.exports = function (config) {
 module.exports = function (config) {
     config.set({
     config.set({
+        karmaTypescriptConfig: {
+            // tsconfig: "tsconfig.json",
+            files: [
+                "src/temp.ts"
+            ]
+        },
+
         // base path that will be used to resolve all patterns (eg. files, exclude)
         // base path that will be used to resolve all patterns (eg. files, exclude)
         basePath: '',
         basePath: '',
 
 
@@ -34,15 +41,16 @@ module.exports = function (config) {
         // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
         // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
         frameworks: [ 'jasmine' ],
         frameworks: [ 'jasmine' ],
 
 
+        // 'node_modules/angular/angular.js',
+        // 'node_modules/angular-mocks/angular-mocks.js',
+        // 'node_modules/angular-translate/dist/angular-translate.js',
+        // 'vendor/angular-ui-router.js',
+        // 'src/main.ts',
+
         // list of files / patterns to load in the browser
         // list of files / patterns to load in the browser
-        // Don't forget to add this to webpack.dev.js
         files: [
         files: [
-            // 'node_modules/angular/angular.js',
-            // 'node_modules/angular-mocks/angular-mocks.js',
-            // 'node_modules/angular-translate/dist/angular-translate.js',
-            // 'vendor/angular-ui-router.js',
-            // 'src/main.ts',
-            'src/**/*.test.ts'
+            // 'src/**/*.test.ts'
+            'src/peoplesearch/orgchart.component.test.ts'
         ],
         ],
 
 
         exclude: [
         exclude: [
@@ -60,8 +68,19 @@ module.exports = function (config) {
         },
         },
 
 
         webpack: {
         webpack: {
-            resolve: webpackConfig.resolve,
-            module: webpackConfig.module,
+            // resolve: webpackConfig.resolve,
+            // module: webpackConfig.module,
+            resolve: {
+                extensions: [".ts", ".js"]
+            },
+            module: {
+                rules: [
+                    {
+                        test: /\.ts$/,
+                        loader: 'ts-loader'
+                    }
+                ]
+            },
             plugins: [
             plugins: [
                 new webpack.SourceMapDevToolPlugin({
                 new webpack.SourceMapDevToolPlugin({
                     filename: null, // if no value is provided the sourcemap is inlined
                     filename: null, // if no value is provided the sourcemap is inlined

File diff suppressed because it is too large
+ 692 - 110
client/package-lock.json


+ 49 - 48
client/package.json

@@ -8,65 +8,66 @@
     "npm": ">=3.9"
     "npm": ">=3.9"
   },
   },
   "scripts": {
   "scripts": {
-    "build": "webpack --config=webpack.build.js --NODE_ENV=production",
+    "build": "webpack --config=webpack.build.js",
     "clean": "rimraf dist/",
     "clean": "rimraf dist/",
-    "test": "karma start --NODE_ENV=test",
-    "test-single-run": "karma start --NODE_ENV=test --singleRun --no-auto-watch",
-    "start": "webpack-dev-server --config=webpack.dev.js --NODE_ENV=dev --colors",
-    "sync": "webpack --config=webpack.build.js --NODE_ENV=production --output-path=../server/target/pwm-1.8.0-SNAPSHOT/public/resources/webjars/pwm-client --watch --colors"
+    "test": "karma start",
+    "test-single-run": "karma start --singleRun --no-auto-watch",
+    "start": "webpack-dev-server --config=webpack.dev.js --colors",
+    "sync": "webpack --config=webpack.build.js --output-path=../server/target/pwm-1.8.0-SNAPSHOT/public/resources/webjars/pwm-client --watch --colors"
   },
   },
   "author": "",
   "author": "",
   "license": "ISC",
   "license": "ISC",
   "dependencies": {},
   "dependencies": {},
   "devDependencies": {
   "devDependencies": {
-    "@types/angular": "1.6.6",
-    "@types/angular-mocks": "1.5.5",
-    "@types/angular-translate": "2.4.33",
-    "@types/angular-ui-router": "1.1.34",
-    "@types/jasmine": "2.5.35",
-    "@types/node": "6.0.45",
-    "@uirouter/angularjs": "1.0.5",
-    "angular": "1.6.5",
-    "angular-mocks": "1.6.5",
-    "angular-translate": "2.15.2",
-    "autoprefixer": "6.5.3",
-    "copy-webpack-plugin": "3.0.1",
-    "css-loader": "0.25.0",
-    "file-loader": "0.9.0",
+    "@types/angular": "1.6.42",
+    "@types/angular-mocks": "1.5.11",
+    "@types/angular-translate": "2.15.1",
+    "@types/angular-ui-router": "1.1.40",
+    "@types/jasmine": "2.8.6",
+    "@types/node": "9.4.2",
+    "@uirouter/angularjs": "1.0.14",
+    "angular": "1.6.9",
+    "angular-mocks": "1.6.9",
+    "angular-translate": "2.17.0",
+    "autoprefixer": "7.2.5",
+    "copy-webpack-plugin": "4.4.1",
+    "css-loader": "0.28.9",
+    "file-loader": "1.1.6",
     "fontgen-loader": "0.2.1",
     "fontgen-loader": "0.2.1",
-    "html-loader": "0.4.4",
-    "html-webpack-plugin": "2.22.0",
+    "html-loader": "0.5.5",
+    "html-webpack-plugin": "2.30.1",
     "ignore-loader": "0.1.2",
     "ignore-loader": "0.1.2",
-    "jasmine": "2.5.2",
-    "jshint": "2.9.3",
-    "jshint-loader": "0.8.3",
-    "json-loader": "0.5.4",
-    "karma": "0.13.19",
-    "karma-jasmine": "1.0.2",
-    "karma-jasmine-html-reporter": "0.2.2",
+    "jasmine": "3.0.0",
+    "jasmine-core": "^2.99.1",
+    "jshint": "2.9.5",
+    "jshint-loader": "0.8.4",
+    "json-loader": "0.5.7",
+    "karma": "2.0.0",
     "karma-chrome-launcher": "2.2.0",
     "karma-chrome-launcher": "2.2.0",
-    "karma-phantomjs-launcher": "0.2.3",
-    "karma-sourcemap-loader": "0.3.6",
+    "karma-jasmine": "1.1.1",
+    "karma-jasmine-html-reporter": "0.2.2",
+    "karma-phantomjs-launcher": "1.0.4",
+    "karma-sourcemap-loader": "0.3.7",
     "karma-spec-reporter": "0.0.32",
     "karma-spec-reporter": "0.0.32",
-    "karma-webpack": "1.7.0",
-    "ngtemplate-loader": "1.3.1",
-    "node-sass": "3.10.1",
+    "karma-webpack": "2.0.9",
+    "ngtemplate-loader": "2.0.1",
+    "node-sass": "4.7.2",
     "phantomjs": "2.1.7",
     "phantomjs": "2.1.7",
-    "phantomjs-prebuilt": "2.1.13",
-    "postcss-loader": "1.0.0",
+    "phantomjs-prebuilt": "2.1.16",
+    "postcss-loader": "2.1.0",
     "raw-loader": "0.5.1",
     "raw-loader": "0.5.1",
-    "rimraf": "2.5.4",
-    "sass-loader": "4.0.2",
-    "string-replace-loader": "1.0.5",
-    "style-loader": "0.13.1",
-    "ts-loader": "0.9.1",
-    "tslint": "^3.15.1",
-    "tslint-loader": "2.1.5",
-    "typescript": "2.3.4",
-    "url-loader": "0.5.7",
-    "webpack": "1.13.2",
-    "webpack-dev-server": "1.16.2",
-    "webpack-merge": "0.14.1",
-    "write-file-webpack-plugin": "3.3.0"
+    "rimraf": "2.6.2",
+    "sass-loader": "6.0.6",
+    "string-replace-loader": "1.3.0",
+    "style-loader": "0.20.1",
+    "ts-loader": "3.5.0",
+    "tslint": "^5.9.1",
+    "tslint-loader": "3.5.3",
+    "typescript": "2.7.1",
+    "url-loader": "0.6.2",
+    "webpack": "3.10.0",
+    "webpack-dev-server": "2.11.1",
+    "webpack-merge": "4.1.1",
+    "write-file-webpack-plugin": "4.2.0"
   }
   }
 }
 }

+ 7 - 7
client/src/helpdesk/helpdesk-detail.component.ts

@@ -23,7 +23,7 @@
 
 
 import {Component} from '../component';
 import {Component} from '../component';
 import {IButtonInfo, IHelpDeskService, ISuccessResponse} from '../services/helpdesk.service';
 import {IButtonInfo, IHelpDeskService, ISuccessResponse} from '../services/helpdesk.service';
-import {IScope, ui} from '@types/angular';
+import {IScope, ui} from 'angular';
 import {IQService, noop} from 'angular';
 import {IQService, noop} from 'angular';
 import {IHelpDeskConfigService, PASSWORD_UI_MODES} from '../services/helpdesk-config.service';
 import {IHelpDeskConfigService, PASSWORD_UI_MODES} from '../services/helpdesk-config.service';
 import DialogService from '../ux/ias-dialog.service';
 import DialogService from '../ux/ias-dialog.service';
@@ -129,7 +129,7 @@ export default class HelpDeskDetailComponent {
                     '$scope',
                     '$scope',
                     'HelpDeskService',
                     'HelpDeskService',
                     'translateFilter',
                     'translateFilter',
-                    function ($scope: IScope,
+                    function ($scope: IScope | any,
                               helpDeskService: IHelpDeskService,
                               helpDeskService: IHelpDeskService,
                               translateFilter: (id: string) => string) {
                               translateFilter: (id: string) => string) {
                         $scope.status = STATUS_WAIT;
                         $scope.status = STATUS_WAIT;
@@ -208,7 +208,7 @@ export default class HelpDeskDetailComponent {
                     '$scope',
                     '$scope',
                     'HelpDeskService',
                     'HelpDeskService',
                     'translateFilter',
                     'translateFilter',
-                    function ($scope: IScope,
+                    function ($scope: IScope | any,
                               helpDeskService: IHelpDeskService,
                               helpDeskService: IHelpDeskService,
                               translateFilter: (id: string) => string) {
                               translateFilter: (id: string) => string) {
                         $scope.status = STATUS_CONFIRM;
                         $scope.status = STATUS_CONFIRM;
@@ -241,7 +241,7 @@ export default class HelpDeskDetailComponent {
                     '$scope',
                     '$scope',
                     'HelpDeskService',
                     'HelpDeskService',
                     'translateFilter',
                     'translateFilter',
-                    function ($scope: IScope,
+                    function ($scope: IScope | any,
                               helpDeskService: IHelpDeskService,
                               helpDeskService: IHelpDeskService,
                               translateFilter: (id: string) => string) {
                               translateFilter: (id: string) => string) {
                         $scope.status = STATUS_CONFIRM;
                         $scope.status = STATUS_CONFIRM;
@@ -272,7 +272,7 @@ export default class HelpDeskDetailComponent {
                     '$scope',
                     '$scope',
                     'HelpDeskService',
                     'HelpDeskService',
                     'translateFilter',
                     'translateFilter',
-                    function ($scope: IScope,
+                    function ($scope: IScope | any,
                               helpDeskService: IHelpDeskService,
                               helpDeskService: IHelpDeskService,
                               translateFilter: (id: string) => string) {
                               translateFilter: (id: string) => string) {
                         $scope.status = STATUS_CONFIRM;
                         $scope.status = STATUS_CONFIRM;
@@ -310,7 +310,7 @@ export default class HelpDeskDetailComponent {
                     'HelpDeskService',
                     'HelpDeskService',
                     'IasDialogService',
                     'IasDialogService',
                     'translateFilter',
                     'translateFilter',
-                    function ($scope: IScope,
+                    function ($scope: IScope | any,
                               helpDeskService: IHelpDeskService,
                               helpDeskService: IHelpDeskService,
                               IasDialogService: DialogService,
                               IasDialogService: DialogService,
                               translateFilter: (id: string) => string) {
                               translateFilter: (id: string) => string) {
@@ -384,7 +384,7 @@ export default class HelpDeskDetailComponent {
                     '$scope',
                     '$scope',
                     'HelpDeskService',
                     'HelpDeskService',
                     'translateFilter',
                     'translateFilter',
-                    function ($scope: IScope,
+                    function ($scope: IScope | any,
                               helpDeskService: IHelpDeskService,
                               helpDeskService: IHelpDeskService,
                               translateFilter: (id: string) => string) {
                               translateFilter: (id: string) => string) {
                         $scope.status = STATUS_CONFIRM;
                         $scope.status = STATUS_CONFIRM;

+ 0 - 1
client/src/peoplesearch/orgchart.component.test.ts

@@ -31,6 +31,5 @@ describe('testing OrgChartComponent', () => {
 
 
     it('should fail', () => {
     it('should fail', () => {
         expect('foo').not.toEqual('bar');
         expect('foo').not.toEqual('bar');
-        expect('foo').not.toEqual('bar');
     });
     });
 });
 });

+ 1 - 1
client/src/peoplesearch/peoplesearch-base.component.ts

@@ -155,7 +155,7 @@ abstract class PeopleSearchBaseComponent {
 
 
     abstract fetchData(): void;
     abstract fetchData(): void;
 
 
-    protected fetchSearchData(): IPromise<SearchResult> {
+    protected fetchSearchData(): IPromise<void | SearchResult> {
         this.abortPendingRequests();
         this.abortPendingRequests();
         this.searchResult = null;
         this.searchResult = null;
 
 

+ 7 - 7
client/src/peoplesearch/peoplesearch.module.ts

@@ -21,7 +21,7 @@
  */
  */
 
 
 
 
-import { module } from 'angular';
+import {IComponentOptions, module} from 'angular';
 import { HighlightFilter } from './string.filters';
 import { HighlightFilter } from './string.filters';
 import { FullNameFilter } from './person.filters';
 import { FullNameFilter } from './person.filters';
 import OrgChartComponent from './orgchart.component';
 import OrgChartComponent from './orgchart.component';
@@ -44,12 +44,12 @@ module(moduleName, [
 ])
 ])
     .filter('fullName', FullNameFilter)
     .filter('fullName', FullNameFilter)
     .filter('highlight', HighlightFilter)
     .filter('highlight', HighlightFilter)
-    .component('orgChart', OrgChartComponent)
-    .component('orgChartSearch', OrgChartSearchComponent)
-    .component('personCard', PersonCardComponent)
-    .component('peopleSearchTable', PeopleSearchTableComponent)
-    .component('peopleSearchCards', PeopleSearchCardsComponent)
-    .component('personDetailsDialogComponent', PersonDetailsDialogComponent)
+    .component('orgChart', OrgChartComponent as IComponentOptions)
+    .component('orgChartSearch', OrgChartSearchComponent as IComponentOptions)
+    .component('personCard', PersonCardComponent as IComponentOptions)
+    .component('peopleSearchTable', PeopleSearchTableComponent as IComponentOptions)
+    .component('peopleSearchCards', PeopleSearchCardsComponent as IComponentOptions)
+    .component('personDetailsDialogComponent', PersonDetailsDialogComponent as IComponentOptions)
     .service('PromiseService', PromiseService)
     .service('PromiseService', PromiseService)
     .service('LocalStorageService', LocalStorageService);
     .service('LocalStorageService', LocalStorageService);
 
 

+ 4 - 2
client/src/ux/ias-dialog.service.ts

@@ -28,6 +28,7 @@ import {
     IControllerService,
     IControllerService,
     IDeferred,
     IDeferred,
     IDocumentService,
     IDocumentService,
+    IHttpResponse,
     IHttpService,
     IHttpService,
     IPromise,
     IPromise,
     IQService,
     IQService,
@@ -112,7 +113,8 @@ export default class DialogService {
         let self = this;
         let self = this;
 
 
         // Initialize scope
         // Initialize scope
-        let scope = options.scope ? options.scope.$new(false) : <IDialogScope>(this.$rootScope.$new(true));
+        let scope: IScope | any = options.scope ? options.scope.$new(false) : <IDialogScope>(this.$rootScope
+            .$new(true));
         scope.cancel = () => { self.cancel(); };
         scope.cancel = () => { self.cancel(); };
         scope.cancelText = options.cancel;
         scope.cancelText = options.cancel;
         scope.close = () => { self.close(scope.data.response); };
         scope.close = () => { self.close(scope.data.response); };
@@ -166,7 +168,7 @@ export default class DialogService {
 
 
             return this.$http
             return this.$http
                 .get(options.templateUrl)
                 .get(options.templateUrl)
-                .then((response) => {
+                .then((response: IHttpResponse<any>) => {
                     self.$templateCache.put(options.templateUrl, response.data);
                     self.$templateCache.put(options.templateUrl, response.data);
                     return response.data;
                     return response.data;
                 });
                 });

+ 9 - 9
client/src/ux/ux.module.ts

@@ -21,7 +21,7 @@
  */
  */
 
 
 
 
-import { module } from 'angular';
+import {IComponentOptions, module} from 'angular';
 import AppBarComponent from './app-bar.component';
 import AppBarComponent from './app-bar.component';
 import AutoCompleteComponent from './auto-complete.component';
 import AutoCompleteComponent from './auto-complete.component';
 import ButtonComponent from './button.component';
 import ButtonComponent from './button.component';
@@ -40,14 +40,14 @@ import DialogService from './ias-dialog.service';
 var moduleName = 'peoplesearch.ux';
 var moduleName = 'peoplesearch.ux';
 
 
 module(moduleName, [ ])
 module(moduleName, [ ])
-    .component('iasDialog', IasDialogComponent)
-    .component('mfAppBar', AppBarComponent)
-    .component('mfAutoComplete', AutoCompleteComponent)
-    .component('mfButton', ButtonComponent)
-    .component('mfDialog', DialogComponent)
-    .component('mfIconButton', IconButtonComponent)
-    .component('mfIcon', IconComponent)
-    .component('mfSearchBar', SearchBarComponent)
+    .component('iasDialog', IasDialogComponent as IComponentOptions)
+    .component('mfAppBar', AppBarComponent as IComponentOptions)
+    .component('mfAutoComplete', AutoCompleteComponent as IComponentOptions)
+    .component('mfButton', ButtonComponent as IComponentOptions)
+    .component('mfDialog', DialogComponent as IComponentOptions)
+    .component('mfIconButton', IconButtonComponent as IComponentOptions)
+    .component('mfIcon', IconComponent as IComponentOptions)
+    .component('mfSearchBar', SearchBarComponent as IComponentOptions)
     .directive('mfTable', TableDirectiveFactory)
     .directive('mfTable', TableDirectiveFactory)
     .directive('mfTableColumn', TableColumnDirectiveFactory)
     .directive('mfTableColumn', TableColumnDirectiveFactory)
     .directive('mfTabset', TabsetDirective)
     .directive('mfTabset', TabsetDirective)

+ 19 - 18
client/tsconfig.json

@@ -1,21 +1,22 @@
 {
 {
-  "compilerOptions": {
-    "baseUrl": "./",
-    "experimentalDecorators": true,
-    "lib": ["es2015", "es2015.iterable", "dom"],
-    "module": "commonjs",
-    "removeComments": true,
-    "sourceMap": true,
-    "target": "es5",
-    "types": [
-      "node"
+    "compilerOptions": {
+        "baseUrl": "./",
+        "experimentalDecorators": true,
+        "lib": [
+            "es2015",
+            "es2015.iterable",
+            "dom"
+        ],
+        "module": "commonjs",
+        "removeComments": true,
+        "sourceMap": true,
+        "target": "es5"
+    },
+    "files": [
+        "src/main.ts"
+    ],
+    "exclude": [
+        "dist",
+        "node_modules"
     ]
     ]
-  },
-  "files": [
-    "src/main.ts"
-  ],
-  "exclude": [
-    "dist",
-    "node_modules"
-  ]
 }
 }

Some files were not shown because too many files changed in this diff