GNM-132 FE Unittest erstellen
diff --git a/karma.conf.js b/karma.conf.js
index 589e10a..ce83f8c 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -11,15 +11,15 @@
       require('karma-jasmine-html-reporter'),
       require('karma-coverage-istanbul-reporter'),
       require('karma-junit-reporter'),
-      require('@angular/cli/plugins/karma')      
+      require('@angular/cli/plugins/karma')
     ],
     client: {
       clearContext: false // leave Jasmine Spec Runner output visible in browser
     },
     files: [{
-        pattern: './src/test.ts',
-        watched: false
-      }
+      pattern: './src/test.ts',
+      watched: false
+    }
       //{ pattern: './node_modules/bootstrap/dist/js/bootstrap.min.js', included: false, watched: false },
       //{ pattern: './node_modules/jquery/dist/jquery.min.js', included: false, watched: false }
     ],
@@ -43,15 +43,15 @@
       outputDir: 'unittests',
       outputFile: 'test-results.xml'
     },
-    port: 9877,
+    port: 9876,
     colors: true,
-    logLevel: config.LOG_DEBUG,
+    logLevel: config.LOG_INFO,
     autoWatch: true,
     browsers: ['ChromeDebugging'],
     customLaunchers: {
       ChromeDebugging: {
         base: 'Chrome',
-        flags: ['--remote-debugging-port=9334']
+        flags: ['--remote-debugging-port=9333']
       }
     },
     singleRun: false
diff --git a/src/app/pages/module-grid/module-grid.component.spec.ts b/src/app/pages/module-grid/module-grid.component.spec.ts
index ebde444..90e52ac 100644
--- a/src/app/pages/module-grid/module-grid.component.spec.ts
+++ b/src/app/pages/module-grid/module-grid.component.spec.ts
@@ -24,8 +24,7 @@
 import { UserModule } from '../../model/user-module';
 import { UserModuleService } from '../../services/user-module.service';
 import { ModuleGridComponent } from './module-grid.component';
-import { USER_MODULES } from '../../testing/user-module';
-import { ONE_USER_MODULE } from '../../testing/user-module';
+import { USER_MODULES, ONE_USER_MODULE, PGM_MODULE } from '../../testing/user-module';
 import { AuthenticationService } from '../../services/authentication.service';
 import { AbstractMockObservableService } from '../../common/abstract-mock-observable.service';
 
@@ -36,7 +35,7 @@
 }
 
 describe('ModuleGridComponent', () => {
-  const sessionContext: SessionContext = new SessionContext();  
+  const sessionContext: SessionContext = new SessionContext();
   let component: ModuleGridComponent;
   let fixture: ComponentFixture<ModuleGridComponent>;
   let router: Router;
@@ -44,12 +43,12 @@
 
   class MockAuthService extends AbstractMockObservableService {
 
-    logout() {  
-      return this;    
+    logout() {
+      return this;
     }
 
-    checkAuth() {  
-      return this;    
+    checkAuth() {
+      return this;
     }
 
   }
@@ -126,4 +125,45 @@
       expect(window.location.href.endsWith('/elogbookFE')).toBeTruthy();
     });
   }));
+
+  it('should check if the user has the rights for the roles', async(() => {
+
+    component.roles = ['planned-policies-normaluser', 'planned-policies-access',
+      'offline_access', 'uma_authorization', 'elogbook-access', 'elogbook-normaluser'];
+
+    /* tslint:disable:max-line-length */
+    sessionContext.setAccessToken('eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJodVl0eVByUEVLQ1phY3FfMW5sOGZscENETnFHdmZEZHctYUxGQXNoWHZVIn0.eyJqdGkiOiJhNTkzMWYzMS1lYjgzLTQ1Y2YtYWIwMy1kY2E2ODc5Y2M2YjgiLCJleHAiOjE1MjM5NTk5MTcsIm5iZiI6MCwiaWF0IjoxNTIzOTU5NjE3LCJpc3MiOiJodHRwOi8vZW50amF2YTAwMjo4MDgwL2F1dGgvcmVhbG1zL2Vsb2dib29rIiwiYXVkIjoiZWxvZ2Jvb2stYmFja2VuZCIsInN1YiI6ImMyZTlkN2FlLTJiZmEtNDU3OC1iMDllLWY1ZGM1ZjA5YTg3OSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImVsb2dib29rLWJhY2tlbmQiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiIzZTM1ODg0OC0wNDY0LTQ2YjMtYmNlNC0wNDgyZDZkNWViY2QiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbIioiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImVsb2dib29rLWFjY2VzcyIsImVsb2dib29rLW5vcm1hbHVzZXIiLCJwbGFubmVkLXBvbGljaWVzLWFjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwicGxhbm5lZC1wb2xpY2llcy1ub3JtYWx1c2VyIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwicm9sZXMiOiJbcGxhbm5lZC1wb2xpY2llcy1ub3JtYWx1c2VyLCBwbGFubmVkLXBvbGljaWVzLWFjY2Vzcywgb2ZmbGluZV9hY2Nlc3MsIHVtYV9hdXRob3JpemF0aW9uLCBlbG9nYm9vay1hY2Nlc3MsIGVsb2dib29rLW5vcm1hbHVzZXJdIiwibmFtZSI6Ik90dG8gTm9ybWFsdmVyYnJhdWNoZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJvdHRvIiwiZ2l2ZW5fbmFtZSI6Ik90dG8iLCJmYW1pbHlfbmFtZSI6Ik5vcm1hbHZlcmJyYXVjaGVyIn0.rKZdROPPD6xkSoNU9oY2vWYvTQnPKbHFh25o3PdOFEkEk1jmagEZCayKg2NH7TwVqJRZQfkyBy0PCfj9ReaQFfrKweTQZHUEi5bJuvzL4dR-TdDa_yGafCgnDvdM6vgshAdlvb5_8rPz5IEYfeszsC3RoLFBR13hRzu88MIFT2LJBaLLS4A386SznoN8T0wcC6q7uzfJRL-QAQoUkqjvSK1HM4yN4wzjj9IC-1MIye1uqcMfvd3qDHlzWlLM1vO9adcd5GZ8aaYg87a7m-vznJd1VtvaQ-l8TqYXa59z0Wgoyzr1UC3r_-1UlP9W6K0abiYTRDxvfIsvfdim4HozaA');
+    component.userModules = USER_MODULES;
+
+    component.setModulesForRole(USER_MODULES);
+
+    expect(component.moduleRights).toBeTruthy();
+
+  }));
+
+  it('should check if the module list is empty', async(() => {
+
+    component.roles = ['planned-policies-normaluser', 'planned-policies-access',
+      'offline_access', 'uma_authorization', 'elogbook-access', 'elogbook-normaluser'];
+
+    /* tslint:disable:max-line-length */
+    sessionContext.setAccessToken('eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJodVl0eVByUEVLQ1phY3FfMW5sOGZscENETnFHdmZEZHctYUxGQXNoWHZVIn0.eyJqdGkiOiJhNTkzMWYzMS1lYjgzLTQ1Y2YtYWIwMy1kY2E2ODc5Y2M2YjgiLCJleHAiOjE1MjM5NTk5MTcsIm5iZiI6MCwiaWF0IjoxNTIzOTU5NjE3LCJpc3MiOiJodHRwOi8vZW50amF2YTAwMjo4MDgwL2F1dGgvcmVhbG1zL2Vsb2dib29rIiwiYXVkIjoiZWxvZ2Jvb2stYmFja2VuZCIsInN1YiI6ImMyZTlkN2FlLTJiZmEtNDU3OC1iMDllLWY1ZGM1ZjA5YTg3OSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImVsb2dib29rLWJhY2tlbmQiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiIzZTM1ODg0OC0wNDY0LTQ2YjMtYmNlNC0wNDgyZDZkNWViY2QiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbIioiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImVsb2dib29rLWFjY2VzcyIsImVsb2dib29rLW5vcm1hbHVzZXIiLCJwbGFubmVkLXBvbGljaWVzLWFjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwicGxhbm5lZC1wb2xpY2llcy1ub3JtYWx1c2VyIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwicm9sZXMiOiJbcGxhbm5lZC1wb2xpY2llcy1ub3JtYWx1c2VyLCBwbGFubmVkLXBvbGljaWVzLWFjY2Vzcywgb2ZmbGluZV9hY2Nlc3MsIHVtYV9hdXRob3JpemF0aW9uLCBlbG9nYm9vay1hY2Nlc3MsIGVsb2dib29rLW5vcm1hbHVzZXJdIiwibmFtZSI6Ik90dG8gTm9ybWFsdmVyYnJhdWNoZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJvdHRvIiwiZ2l2ZW5fbmFtZSI6Ik90dG8iLCJmYW1pbHlfbmFtZSI6Ik5vcm1hbHZlcmJyYXVjaGVyIn0.rKZdROPPD6xkSoNU9oY2vWYvTQnPKbHFh25o3PdOFEkEk1jmagEZCayKg2NH7TwVqJRZQfkyBy0PCfj9ReaQFfrKweTQZHUEi5bJuvzL4dR-TdDa_yGafCgnDvdM6vgshAdlvb5_8rPz5IEYfeszsC3RoLFBR13hRzu88MIFT2LJBaLLS4A386SznoN8T0wcC6q7uzfJRL-QAQoUkqjvSK1HM4yN4wzjj9IC-1MIye1uqcMfvd3qDHlzWlLM1vO9adcd5GZ8aaYg87a7m-vznJd1VtvaQ-l8TqYXa59z0Wgoyzr1UC3r_-1UlP9W6K0abiYTRDxvfIsvfdim4HozaA');
+    component.userModules = [];
+
+    component.setModulesForRole(USER_MODULES);
+    expect(component.moduleRights).toBeFalsy();
+
+  }));
+
+  fit('should create elogbookLink token string', async(() => {
+
+    /* tslint:disable:max-line-length */
+    sessionContext.setAccessToken('eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJodVl0eVByUEVLQ1phY3FfMW5sOGZscENETnFHdmZEZHctYUxGQXNoWHZVIn0.eyJqdGkiOiJhNTkzMWYzMS1lYjgzLTQ1Y2YtYWIwMy1kY2E2ODc5Y2M2YjgiLCJleHAiOjE1MjM5NTk5MTcsIm5iZiI6MCwiaWF0IjoxNTIzOTU5NjE3LCJpc3MiOiJodHRwOi8vZW50amF2YTAwMjo4MDgwL2F1dGgvcmVhbG1zL2Vsb2dib29rIiwiYXVkIjoiZWxvZ2Jvb2stYmFja2VuZCIsInN1YiI6ImMyZTlkN2FlLTJiZmEtNDU3OC1iMDllLWY1ZGM1ZjA5YTg3OSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImVsb2dib29rLWJhY2tlbmQiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiIzZTM1ODg0OC0wNDY0LTQ2YjMtYmNlNC0wNDgyZDZkNWViY2QiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbIioiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImVsb2dib29rLWFjY2VzcyIsImVsb2dib29rLW5vcm1hbHVzZXIiLCJwbGFubmVkLXBvbGljaWVzLWFjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIiwicGxhbm5lZC1wb2xpY2llcy1ub3JtYWx1c2VyIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwicm9sZXMiOiJbcGxhbm5lZC1wb2xpY2llcy1ub3JtYWx1c2VyLCBwbGFubmVkLXBvbGljaWVzLWFjY2Vzcywgb2ZmbGluZV9hY2Nlc3MsIHVtYV9hdXRob3JpemF0aW9uLCBlbG9nYm9vay1hY2Nlc3MsIGVsb2dib29rLW5vcm1hbHVzZXJdIiwibmFtZSI6Ik90dG8gTm9ybWFsdmVyYnJhdWNoZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJvdHRvIiwiZ2l2ZW5fbmFtZSI6Ik90dG8iLCJmYW1pbHlfbmFtZSI6Ik5vcm1hbHZlcmJyYXVjaGVyIn0.rKZdROPPD6xkSoNU9oY2vWYvTQnPKbHFh25o3PdOFEkEk1jmagEZCayKg2NH7TwVqJRZQfkyBy0PCfj9ReaQFfrKweTQZHUEi5bJuvzL4dR-TdDa_yGafCgnDvdM6vgshAdlvb5_8rPz5IEYfeszsC3RoLFBR13hRzu88MIFT2LJBaLLS4A386SznoN8T0wcC6q7uzfJRL-QAQoUkqjvSK1HM4yN4wzjj9IC-1MIye1uqcMfvd3qDHlzWlLM1vO9adcd5GZ8aaYg87a7m-vznJd1VtvaQ-l8TqYXa59z0Wgoyzr1UC3r_-1UlP9W6K0abiYTRDxvfIsvfdim4HozaA');
+
+    component.goToElogbookIfValid(PGM_MODULE);
+    expect(component.goToElogbookIfValid(PGM_MODULE)).toHaveBeenCalled;
+
+  }));
+
+
 });
diff --git a/src/app/pages/module-grid/module-grid.component.ts b/src/app/pages/module-grid/module-grid.component.ts
index 80edcd1..9fc325b 100644
--- a/src/app/pages/module-grid/module-grid.component.ts
+++ b/src/app/pages/module-grid/module-grid.component.ts
@@ -38,9 +38,9 @@
     this.getUserModules();
   }
 
-  private goToElogbookIfValid(userModule: UserModule): void {
+  goToElogbookIfValid(userModule: UserModule): void {
     const elogbookLink = userModule.link + '?accessToken=' + this.sessionContext.getAccessToken();
-    
+
     this.authService.checkAuth().subscribe(res => {
       window.open(elogbookLink, '_blank');
     },
diff --git a/src/app/testing/user-module.ts b/src/app/testing/user-module.ts
index cf98739..b6b7f01 100644
--- a/src/app/testing/user-module.ts
+++ b/src/app/testing/user-module.ts
@@ -21,10 +21,10 @@
         cols: 1,
         rows: 1,
         color: '#ffffff',
-        link: '/elogbookFE', 
+        link: '/elogbookFE',
         pictureLink: 'https://www.openkonsequenz.de/medien/cache/main_image/m_logbuch_2443636.jpg',
         requiredRole: 'elogbook_access'
-    },     
+    },
     {
         name: 'Bereitschaftsplanung',
         cols: 1,
@@ -33,7 +33,7 @@
         link: 'https://www.openkonsequenz.de/anwender/11-geplante-projekte/94-bereitschaftsplan',
         pictureLink: 'https://www.openkonsequenz.de/medien/cache/main_image/l_bereitschaftsplan_57882047.jpg',
         requiredRole: 'planning_access'
-    },    
+    },
     {
         name: 'Einspeisemanagement',
         cols: 1,
@@ -51,7 +51,7 @@
         link: 'https://www.openkonsequenz.de/anwender/11-geplante-projekte/64-geplante-netzmassnahme',
         // tslint:disable-next-line:max-line-length
         pictureLink: 'https://www.openkonsequenz.de//components/com_flexicontent/librairies/phpthumb/phpThumb.php?src=/medien/cache/main_image/l_ok_module5.jpg',
-        requiredRole: 'planned_policies_access'        
+        requiredRole: 'planned_policies_access'
     }
 ];
 
@@ -65,4 +65,17 @@
         pictureLink: 'https://www.openkonsequenz.de/medien/cache/main_image/m_logbuch_2443636.jpg',
         requiredRole: 'elogbook_access'
     }
-];
\ No newline at end of file
+];
+
+export const PGM_MODULE: UserModule =
+    {
+        name: 'Geplante Maßnahmen',
+        cols: 1,
+        rows: 1,
+        color: '#ffffff',
+        link: 'http://localhost:4220',
+        // tslint:disable-next-line:max-line-length
+        pictureLink: 'https://www.openkonsequenz.de//components/com_flexicontent/librairies/phpthumb/phpThumb.php?src=/medien/cache/main_image/l_ok_module5.jpg',
+        requiredRole: 'planned_policies_access'
+    }
+    ;
\ No newline at end of file