--- /dev/null
+import { TestBed, getTestBed } from '@angular/core/testing';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+
+import { VorgangService } from './vorgang.service';
+import { Vorgang } from './vorgang';
+
+describe('VorgangService', () => {
+ let service: VorgangService;
+ let httpMock: HttpTestingController;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [ HttpClientTestingModule ],
+ providers: [ VorgangService ]
+ });
+ service = TestBed.inject(VorgangService);
+ httpMock = TestBed.inject(HttpTestingController);
+ });
+
+ afterEach(() => {
+ // After every test, assert that there are no more pending requests.
+ httpMock.verify();
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+
+ describe('#getUrlSave', () => {
+ it ('should reate valid url for save', () => {
+ const expectedUrl = 'http://localhost:1991/las/VBID/save';
+
+ expect(service.getUrlSave('VBID')).toBe(expectedUrl);
+ });
+ });
+
+ describe('#create', () => {
+ it('should return Vorgang', () => {
+ const expectedVorgang = require('../mock/vorgang.json');
+
+ service.create({ type: null, vbId: 'greetings', vorgangId: '1' , zustand: 'Hello world!'}).subscribe(
+ vorgang => expect(vorgang).toEqual(expectedVorgang),
+ fail
+ );
+
+ const req = httpMock.expectOne(service.getUrlSave(expectedVorgang.vbId));
+ expect(req.request.method).toBe('POST');
+ req.flush(expectedVorgang);
+ });
+ });
+});
--- /dev/null
+import { Injectable } from '@angular/core';
+import { Observable, of, EMPTY } from 'rxjs';
+import { Vorgang } from './vorgang';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { catchError, tap } from 'rxjs/operators';
+
+
+@Injectable({
+ providedIn: 'root'
+})
+export class VorgangService {
+
+ gpsUrl = 'http://localhost:1991/las/'; // URL to web api
+ httpOptions = {
+ headers: new HttpHeaders({
+ 'Content-Type': 'text/plain',
+ 'Accept': 'application/json'
+ })
+ };
+
+ constructor(private http: HttpClient) { }
+
+ /** POST: Einen neuen Vorgang erzeugen */
+ create(vorgang: Vorgang): Observable<Vorgang> {
+ return this
+ .http
+ .post<Vorgang>(
+ this.getUrlSave(vorgang.vbId),
+ vorgang.zustand,
+ this.httpOptions)
+ .pipe(
+ tap((result: Vorgang) => this.log(`Result for ${JSON.stringify(vorgang)}: ${JSON.stringify(result)}`)),
+ catchError(this.handleError<Vorgang>('create')));
+ }
+
+ getUrlSave(vbId: string): string {
+ return this.gpsUrl + vbId + '/save';
+ }
+
+ /**
+ * Handle Http operation that failed.
+ * Let the app continue.
+ * @param operation - name of the operation that failed
+ * @param result - optional value to return as the observable result
+ */
+ private handleError<T>(operation = 'operation', result?: T) {
+ return (error: any): Observable<T> => {
+
+ // TODO: send the error to remote logging infrastructure
+ console.error(error); // log to console instead
+
+ // TODO: better job of transforming error for user consumption
+ this.log(`${operation} failed: ${error.message}`);
+
+ // Let the app keep running by returning an empty result.
+ if (result === undefined) {
+ return EMPTY as Observable<T>;
+ } else {
+ return of(result as T);
+ }
+ };
+ }
+
+ private log(message: string) {
+ console.log(message);
+ }
+}
--- /dev/null
+export enum Type {
+ SUCCESS = 'SUCCESS',
+ FAILURE = 'FAILURE'
+}
+
+export interface Vorgang {
+ type?: Type;
+ vbId: string;
+ vorgangId: string;
+ zustand: any;
+}
--- /dev/null
+{
+ "type": "SUCCESS",
+ "vbId": "greetings",
+ "vorgangId": 1,
+ "zustand": {
+ "dlz": "1|vbId=greetings|1, rand=8: Hallo Welt!",
+ "produkt": "1|vbId=greetings|1, rand=1: Hallo Welt!"
+ }
+}