Skip to content

Commit

Permalink
use environment variable to config demonstrator
Browse files Browse the repository at this point in the history
  • Loading branch information
janschulte committed Feb 17, 2020
1 parent 6e0e4aa commit 2e443de
Show file tree
Hide file tree
Showing 9 changed files with 150 additions and 8 deletions.
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.editorconfig
.git
.gitignore
.idea
README.md
coverage
dist
node_modules
16 changes: 14 additions & 2 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { APP_INITIALIZER, NgModule } from '@angular/core';
import { FlexLayoutModule } from '@angular/flex-layout';
import { FormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
Expand Down Expand Up @@ -29,13 +29,18 @@ import { LastUpdateTimeComponent } from './components/last-update-time/last-upda
import { SearchResultListComponent } from './components/search-result-list/search-result-list.component';
import { GeojsonMapComponent } from './components/visualizations/geojson-map/geojson-map.component';
import { WmsMapComponent } from './components/visualizations/wms-map/wms-map.component';
import { SettingsInitializerService } from './services/settings-initializer.service';
import { DetailsComponent } from './views/details/details.component';
import { SearchComponent } from './views/search/search.component';
import { VisualizationSupporterComponent } from './views/visualization-supporter/visualization-supporter.component';
import { CategoryGroupComponent } from './vis-resolver/components/category-group/category-group.component';
import { VisResolverComponent } from './vis-resolver/components/vis-resolver/vis-resolver.component';
import { ScorePipePipe } from './vis-resolver/score-pipe.pipe';

export function initSettings(settingsInitializerService: SettingsInitializerService) {
return () => settingsInitializerService.initializeSettings();
}

@NgModule({
declarations: [
AppComponent,
Expand Down Expand Up @@ -76,7 +81,14 @@ import { ScorePipePipe } from './vis-resolver/score-pipe.pipe';
MatToolbarModule,
MatTreeModule,
],
providers: [],
providers: [
{
provide: APP_INITIALIZER,
useFactory: initSettings,
deps: [SettingsInitializerService],
multi: true,
},
],
bootstrap: [AppComponent]
})
export class AppModule { }
12 changes: 6 additions & 6 deletions src/app/mcloud-interface.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ import { HttpClient, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';

import { SettingsService } from './services/settings.service';
import { Dataset, DistributionType } from './shared/dataset';
import { Info } from './shared/info';

const mcloudUrl = 'http://localhost:3000/';

@Injectable({ providedIn: 'root' })
export class DatasetInterface {

constructor(
private http: HttpClient
private http: HttpClient,
private settingsSrvc: SettingsService
) { }

public getDatasets(searchTerm: string = '', distributionTypes: DistributionType[] = []): Observable<Dataset[]> {
Expand All @@ -22,15 +22,15 @@ export class DatasetInterface {
if (distributionTypes && distributionTypes.length > 0) {
params = params.set('distributionType', distributionTypes.join(','));
}
return this.http.get<Dataset[]>(`${mcloudUrl}dataset`, { params });
return this.http.get<Dataset[]>(`${this.settingsSrvc.settings.mvizServerUrl}dataset`, { params });
}

public getDataset(id: string): Observable<Dataset> {
return this.http.get<Dataset>(`${mcloudUrl}dataset/${id}`);
return this.http.get<Dataset>(`${this.settingsSrvc.settings.mvizServerUrl}dataset/${id}`);
}

public getInfo(): Observable<Info> {
return this.http.get<Info>(`${mcloudUrl}info`);
return this.http.get<Info>(`${this.settingsSrvc.settings.mvizServerUrl}info`);
}

}
3 changes: 3 additions & 0 deletions src/app/models/settings.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export interface Settings {
mvizServerUrl: string;
}
67 changes: 67 additions & 0 deletions src/app/services/settings-initializer.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import {
HttpClientTestingModule,
HttpTestingController,
} from '@angular/common/http/testing';
import { TestBed } from '@angular/core/testing';
import { Settings } from '../models/settings';

import { SettingsInitializerService } from './settings-initializer.service';
import { SettingsService } from './settings.service';

describe('SettingsInitializerService', () => {
let service: SettingsInitializerService;
let httpMock: HttpTestingController;
let settingsService: SettingsService;

const testSettings: Settings = {
mvizServerUrl: 'baseUrl',
};

beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
});

service = TestBed.get(SettingsInitializerService);
httpMock = TestBed.get(HttpTestingController);
settingsService = TestBed.get(SettingsService);
});

afterEach(() => {
httpMock.verify();
});

it('should be created', () => {
expect(service).toBeTruthy();
});

it('should initialize settings', (done) => {
service.initializeSettings().then(() => {
expect(settingsService.settings).toEqual(testSettings);
done();
});

const request = httpMock.expectOne('assets/settings.json');
expect(request.request.method).toBe('GET');
request.flush(testSettings);
});

it('should not initialize settings if get settings.json failed', (done) => {
service
.initializeSettings()
.then(() => {
done.fail(new Error('this was expected to fail'));
})
.catch(() => {
expect(settingsService.settings).toBeUndefined();
done();
});

const request = httpMock.expectOne('assets/settings.json');
expect(request.request.method).toBe('GET');
request.flush(testSettings, {
status: 500,
statusText: 'Some Weird Server Error',
});
});
});
27 changes: 27 additions & 0 deletions src/app/services/settings-initializer.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

import { Settings } from '../models/settings';
import { SettingsService } from './settings.service';

@Injectable({
providedIn: 'root',
})
export class SettingsInitializerService {
constructor(
private http: HttpClient,
private settings: SettingsService
) { }

initializeSettings(): Promise<any> {
return new Promise((resolve, reject) => {
this.http.get('assets/settings.json').subscribe(
(response) => {
this.settings.settings = response as Settings;
resolve();
},
(error) => reject(error),
);
});
}
}
12 changes: 12 additions & 0 deletions src/app/services/settings.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { TestBed } from '@angular/core/testing';

import { SettingsService } from './settings.service';

describe('SettingsService', () => {
beforeEach(() => TestBed.configureTestingModule({}));

it('should be created', () => {
const service: SettingsService = TestBed.get(SettingsService);
expect(service).toBeTruthy();
});
});
10 changes: 10 additions & 0 deletions src/app/services/settings.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Injectable } from '@angular/core';

import { Settings } from '../models/settings';

@Injectable({
providedIn: 'root',
})
export class SettingsService {
settings: Settings;
}
3 changes: 3 additions & 0 deletions src/assets/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"mvizServerUrl": "http://localhost:3001/"
}

0 comments on commit 2e443de

Please sign in to comment.