From 8c8e32e5a8491d3eb384d2c7c3e29bef52122087 Mon Sep 17 00:00:00 2001 From: paf <paf@titelfrei.de> Date: Wed, 16 Sep 2020 14:25:28 +0200 Subject: [PATCH] don't attempt to update testState before test-id exists or after test is locked rename TERMINATING to TERMINATED wo have the one reported to backend/monitor to be TERMINATED and teh internale state (former TERMINATED) wich cames when locking was successful to FINISHED (not LOCKED because possible future confusion) --- src/app/test-controller/backend.service.ts | 6 ------ src/app/test-controller/command.service.ts | 2 +- .../test-controller-route-guards.ts | 6 ++++-- .../test-controller.component.ts | 14 ++++++++----- .../test-controller.interfaces.ts | 2 +- .../test-controller.service.ts | 20 +++++++++---------- src/environments/environment.dev.ts | 2 +- src/environments/environment.prod.ts | 2 +- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/app/test-controller/backend.service.ts b/src/app/test-controller/backend.service.ts index c15433a6..b41638ef 100644 --- a/src/app/test-controller/backend.service.ts +++ b/src/app/test-controller/backend.service.ts @@ -87,12 +87,6 @@ export class BackendService { } updateTestState(testId: string, newState: StateReportEntry[]): Subscription { - - if (!testId) { // TODO find out why does this happen at tst start and get rid of it - console.warn('called without testID', newState); - return of().subscribe(); - } - return this.http .patch(this.serverUrl + `test/${testId}/state`, newState) .subscribe({error: (err: ApiError) => console.error(`updateTestState Api-Error: ${err.code} ${err.info}`)}); diff --git a/src/app/test-controller/command.service.ts b/src/app/test-controller/command.service.ts index 546535e6..f8934880 100644 --- a/src/app/test-controller/command.service.ts +++ b/src/app/test-controller/command.service.ts @@ -59,7 +59,7 @@ export class CommandService extends WebsocketBackendService<Command[]> implement if ((testStatus === TestControllerState.RUNNING) || (testStatus === TestControllerState.PAUSED)) { return 'started'; } - if ((testStatus === TestControllerState.TERMINATED) || (testStatus === TestControllerState.ERROR)) { + if ((testStatus === TestControllerState.FINISHED) || (testStatus === TestControllerState.ERROR)) { return 'terminated'; } return ''; diff --git a/src/app/test-controller/test-controller-route-guards.ts b/src/app/test-controller/test-controller-route-guards.ts index f6436798..3f990b72 100644 --- a/src/app/test-controller/test-controller-route-guards.ts +++ b/src/app/test-controller/test-controller-route-guards.ts @@ -19,7 +19,7 @@ export class TestControllerDeactivateGuard implements CanDeactivate<TestControll if (this.tcs.testMode.saveResponses) { const testStatus: TestControllerState = this.tcs.testStatus$.getValue(); - if ((testStatus !== TestControllerState.ERROR) && (testStatus !== TestControllerState.TERMINATED)) { + if ((testStatus !== TestControllerState.ERROR) && (testStatus !== TestControllerState.FINISHED)) { if (this.tcs.bookletConfig.unit_menu !== 'OFF' || this.tcs.testMode.showUnitMenu) { this.tcs.setUnitNavigationRequest(UnitNavigationTarget.MENU); } else { @@ -48,7 +48,9 @@ export class TestControllerErrorPausedActivateGuard implements CanActivate { canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean { const testStatus: TestControllerState = this.tcs.testStatus$.getValue(); - return (testStatus !== TestControllerState.ERROR) && (testStatus !== TestControllerState.TERMINATED) && (testStatus !== TestControllerState.PAUSED) + return (testStatus !== TestControllerState.ERROR) + && (testStatus !== TestControllerState.FINISHED) + && (testStatus !== TestControllerState.PAUSED); } } diff --git a/src/app/test-controller/test-controller.component.ts b/src/app/test-controller/test-controller.component.ts index 95cf7898..ed430fe7 100644 --- a/src/app/test-controller/test-controller.component.ts +++ b/src/app/test-controller/test-controller.component.ts @@ -319,11 +319,15 @@ export class TestControllerComponent implements OnInit, OnDestroy { } this.tcs.testStatus$.next(TestControllerState.ERROR); }); - this.testStatusSubscription = this.tcs.testStatus$.subscribe(ts => { - this.bs.updateTestState(this.tcs.testId, [<StateReportEntry>{ - key: TestStateKey.CONTROLLER, timeStamp: Date.now(), content: ts - }]); - switch (ts) { + this.testStatusSubscription = this.tcs.testStatus$.subscribe(testContollerState => { + + if ([TestControllerState.FINISHED, TestControllerState.INIT].indexOf(testContollerState) === -1) { + this.bs.updateTestState(this.tcs.testId, [<StateReportEntry>{ + key: TestStateKey.CONTROLLER, timeStamp: Date.now(), content: testContollerState + }]); + } + + switch (testContollerState) { case TestControllerState.ERROR: this.tcs.loadProgressValue = 0; this.tcs.setUnitNavigationRequest(UnitNavigationTarget.ERROR); diff --git a/src/app/test-controller/test-controller.interfaces.ts b/src/app/test-controller/test-controller.interfaces.ts index 02059874..c79b66a1 100644 --- a/src/app/test-controller/test-controller.interfaces.ts +++ b/src/app/test-controller/test-controller.interfaces.ts @@ -49,8 +49,8 @@ export enum TestControllerState { INIT = 'INIT', LOADING = 'LOADING', RUNNING = 'RUNNING', - TERMINATING = 'TERMINATING', TERMINATED = 'TERMINATED', + FINISHED = 'FINISHED', PAUSED = 'PAUSED', ERROR = 'ERROR' } diff --git a/src/app/test-controller/test-controller.service.ts b/src/app/test-controller/test-controller.service.ts index cb73c706..6d0be715 100644 --- a/src/app/test-controller/test-controller.service.ts +++ b/src/app/test-controller/test-controller.service.ts @@ -273,15 +273,15 @@ export class TestControllerService { public terminateTest(logEntryKey: string) { if (this.testMode.saveResponses) { - if (this.testStatus$.getValue() !== TestControllerState.TERMINATING) { - this.testStatus$.next(TestControllerState.TERMINATING); // sometimes terminateTest get called two times from player + if (this.testStatus$.getValue() !== TestControllerState.TERMINATED) { + this.testStatus$.next(TestControllerState.TERMINATED); // sometimes terminateTest get called two times from player this.bs.lockTest(this.testId, Date.now(), logEntryKey).subscribe(bsOk => { - this.testStatus$.next(bsOk ? TestControllerState.TERMINATED : TestControllerState.ERROR); + this.testStatus$.next(bsOk ? TestControllerState.FINISHED : TestControllerState.ERROR); this.router.navigate(['/'], {state: {force: true}}); }); } } else { - this.testStatus$.next(TestControllerState.TERMINATED); + this.testStatus$.next(TestControllerState.FINISHED); this.router.navigate(['/'], {state: {force: true}}); } } @@ -335,13 +335,13 @@ export class TestControllerService { if (!navOk) { const navTarget = Number(navString); if (!isNaN(navTarget)) { - let startWith = this.currentUnitSequenceId; - if (startWith < this.minUnitSequenceId) { - startWith = this.minUnitSequenceId - 1; + let unitSequenceId = this.currentUnitSequenceId; + if (unitSequenceId < this.minUnitSequenceId) { + unitSequenceId = this.minUnitSequenceId - 1; } - const nextUnitSequenceId = this.rootTestlet.getNextUnlockedUnitSequenceId(startWith); - if (nextUnitSequenceId > 0 && nextUnitSequenceId !== navTarget) { - this.router.navigate([`/t/${this.testId}/u/${nextUnitSequenceId}`], + const unitSequenceIdNext = this.rootTestlet.getNextUnlockedUnitSequenceId(unitSequenceId); + if (unitSequenceIdNext > 0 && unitSequenceIdNext !== navTarget) { + this.router.navigate([`/t/${this.testId}/u/${unitSequenceIdNext}`], {state: {force: force}}); } } diff --git a/src/environments/environment.dev.ts b/src/environments/environment.dev.ts index 9c0ce523..b32c9024 100644 --- a/src/environments/environment.dev.ts +++ b/src/environments/environment.dev.ts @@ -6,6 +6,6 @@ export const environment = { production: false, testcenterUrl: '/api/', appPublisher: 'IQB - Institut zur Qualitätsentwicklung im Bildungswesen', - apiVersionExpected: '7.0.0', + apiVersionExpected: '7.1.0', veronaApiVersionSupported: '2.1.0' }; diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 34407785..b55c1e8f 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -4,6 +4,6 @@ export const environment = { production: true, testcenterUrl: '/api/', appPublisher: 'IQB - Institut zur Qualitätsentwicklung im Bildungswesen', - apiVersionExpected: '7.0.0', + apiVersionExpected: '7.1.0', veronaApiVersionSupported: '2.1.0' }; -- GitLab