Skip to content

Commit

Permalink
feat(ui): scenario actions detail view
Browse files Browse the repository at this point in the history
  • Loading branch information
bbortt committed May 14, 2024
1 parent 4fdc0ab commit 48efb5f
Show file tree
Hide file tree
Showing 8 changed files with 186 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<div class="table-responsive table-entities" id="entities" *ngIf="sortedActions && sortedActions.length > 0; else noParameters">
<table class="table table-striped" aria-describedby="page-heading">
<thead>
<tr jhiSort [(predicate)]="predicate" [(ascending)]="ascending" (sortChange)="sortActions()">
<th scope="col" jhiSortBy="actionId">
<div class="d-flex">
<span jhiTranslate="global.field.id">ID</span>
<fa-icon class="p-1" icon="sort"></fa-icon>
</div>
</th>
<th scope="col" jhiSortBy="name">
<div class="d-flex">
<span jhiTranslate="citrusSimulatorApp.scenarioAction.name">Name</span>
<fa-icon class="p-1" icon="sort"></fa-icon>
</div>
</th>
<th scope="col" jhiSortBy="startDate">
<div class="d-flex">
<span jhiTranslate="citrusSimulatorApp.scenarioAction.startDate">Start Date</span>
<fa-icon class="p-1" icon="sort"></fa-icon>
</div>
</th>
<th scope="col" jhiSortBy="endDate">
<div class="d-flex">
<span jhiTranslate="citrusSimulatorApp.scenarioAction.endDate">End Date</span>
<fa-icon class="p-1" icon="sort"></fa-icon>
</div>
</th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
<tr *ngFor="let scenarioAction of sortedActions; trackBy: trackId" data-cy="entityTable">
<td>
<a [routerLink]="['/scenario-action', scenarioAction.actionId, 'view']">{{ scenarioAction.actionId }}</a>
</td>
<td>{{ scenarioAction.name }}</td>
<td>{{ scenarioAction.startDate | formatMediumDatetime }}</td>
<td>{{ scenarioAction.endDate | formatMediumDatetime }}</td>
<td class="text-end">
<div class="btn-group">
<a [routerLink]="['/scenario-action', scenarioAction.actionId, 'view']">
<button type="submit" class="btn btn-info btn-sm" data-cy="entityDetailsButton">
<fa-icon icon="eye"></fa-icon>
<span class="d-none d-md-inline" jhiTranslate="entity.action.view">View</span>
</button>
</a>
</div>
</td>
</tr>
</tbody>
</table>
</div>

<ng-template #noParameters>
<div class="alert alert-warning" id="no-result">
<span jhiTranslate="citrusSimulatorApp.scenarioAction.home.notFound">No Scenario Actions found</span>
</div>
</ng-template>
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';

import * as operators from 'app/core/util/operators';

import { IScenarioAction } from 'app/entities/scenario-action/scenario-action.model';

import { ScenarioActionsTableComponent } from './scenario-actions-table.component';

import SpyInstance = jest.SpyInstance;

describe('Message Table Component', () => {
let sortSpy: SpyInstance;

let fixture: ComponentFixture<ScenarioActionsTableComponent>;
let component: ScenarioActionsTableComponent;

beforeEach(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule.withRoutes([{ path: 'message', component: ScenarioActionsTableComponent }]),
HttpClientTestingModule,
ScenarioActionsTableComponent,
],
providers: [],
})
.overrideTemplate(ScenarioActionsTableComponent, '')
.compileComponents();

fixture = TestBed.createComponent(ScenarioActionsTableComponent);
component = fixture.componentInstance;

sortSpy = jest.spyOn(operators, 'sort');
sortSpy.mockClear();
});

describe('ngOnInit', () => {
it('sorts actions', () => {
expectSortBeingCalled(() => component.ngOnInit());
});
});

describe('set actions', () => {
it('sets the action list and calls sort', () => {
const actions = [{ actionId: 1234 }] as IScenarioAction[];

component.actions = actions;

expect(component.sortedActions).toEqual(actions);
expect(sortSpy).toHaveBeenCalledWith(actions, 'actionId', true);
});
});

it('sorts actions', () => {
expectSortBeingCalled(() => component.sortActions());
});

const expectSortBeingCalled = (whenFunction: () => void): void => {
const actions = [{ actionId: 1234 }] as IScenarioAction[];
component.sortedActions = actions;

whenFunction();

expect(sortSpy).toHaveBeenCalledWith(actions, 'actionId', true);
};
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { Component, Input, OnInit } from '@angular/core';
import { RouterModule } from '@angular/router';

import { sort } from 'app/core/util/operators';

import SharedModule from 'app/shared/shared.module';
import { DurationPipe, FormatMediumDatePipe } from 'app/shared/date';
import FormatMediumDatetimePipe from 'app/shared/date/format-medium-datetime.pipe';
import SortDirective from 'app/shared/sort/sort.directive';
import SortByDirective from 'app/shared/sort/sort-by.directive';

import { IScenarioAction } from 'app/entities/scenario-action/scenario-action.model';
import { ScenarioActionService } from 'app/entities/scenario-action/service/scenario-action.service';

@Component({
standalone: true,
selector: 'app-scenario-actions-table',
templateUrl: './scenario-actions-table.component.html',
imports: [RouterModule, SharedModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe, SortDirective, SortByDirective],
})
export class ScenarioActionsTableComponent implements OnInit {
@Input()
ascending = true;

@Input()
predicate = 'actionId';

sortedActions: IScenarioAction[] | null = null;

constructor(protected scenarioActionService: ScenarioActionService) {}

ngOnInit(): void {
this.sortActions();
}

@Input() set actions(actions: IScenarioAction[] | null) {
this.sortedActions = actions ? actions.slice() : [];
this.sortActions();
}

trackId = (_index: number, item: IScenarioAction): number => this.scenarioActionService.getScenarioActionIdentifier(item);

sortActions(): void {
sort(this.sortedActions, this.predicate, this.ascending);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ <h3 class="mb-3">
</h3>

<app-scenario-parameters-table
[scenarioParameters]="scenarioExecution.scenarioParameters ?? []"
[parameters]="scenarioExecution.scenarioParameters ?? []"
predicate="createdDate"
></app-scenario-parameters-table>

Expand All @@ -73,6 +73,12 @@ <h3 class="mb-3">
predicate="createdDate"
></app-scenario-messages-table>

<h3 class="mb-3">
<span jhiTranslate="citrusSimulatorApp.scenarioAction.home.title">Scenario Actions</span>
</h3>

<app-scenario-actions-table [actions]="scenarioExecution.scenarioActions ?? []" predicate="createdDate"></app-scenario-actions-table>

<button type="button" (click)="previousState()" class="btn btn-info mt-3">
<fa-icon icon="arrow-left"></fa-icon>&nbsp;<span jhiTranslate="entity.action.back">Back</span>
</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ActivatedRoute, RouterModule } from '@angular/router';
import SharedModule from 'app/shared/shared.module';
import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date';

import { ScenarioActionsTableComponent } from './scenario-actions-table.component';
import { ScenarioMessagesTableComponent } from './scenario-messages-table.component';
import { ScenarioParametersTableComponent } from './scenario-parameters-table.component';

Expand All @@ -19,6 +20,7 @@ import { IScenarioExecution } from '../scenario-execution.model';
DurationPipe,
FormatMediumDatetimePipe,
FormatMediumDatePipe,
ScenarioActionsTableComponent,
ScenarioMessagesTableComponent,
ScenarioParametersTableComponent,
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ describe('Message Table Component', () => {
it('sets the parameter list and calls sort', () => {
const parameters = [{ parameterId: 1234 }] as IScenarioParameter[];

component.scenarioParameters = parameters;
component.parameters = parameters;

expect(component.sortedParameters).toEqual(parameters);
expect(sortSpy).toHaveBeenCalledWith(parameters, 'parameterId', true);
Expand All @@ -58,7 +58,7 @@ describe('Message Table Component', () => {

const expectSortBeingCalled = (whenFunction: () => void): void => {
const parameters = [{ parameterId: 1234 }] as IScenarioParameter[];
component.scenarioParameters = parameters;
component.parameters = parameters;

whenFunction();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export class ScenarioParametersTableComponent implements OnInit {
this.sortParameters();
}

@Input() set scenarioParameters(parameters: IScenarioParameter[] | null) {
@Input() set parameters(parameters: IScenarioParameter[] | null) {
this.sortedParameters = parameters ? parameters.slice() : [];
this.sortParameters();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import dayjs from 'dayjs/esm';

import { IMessage } from 'app/entities/message/message.model';
import { IScenarioAction } from 'app/entities/scenario-action/scenario-action.model';
import { IScenarioParameter } from 'app/entities/scenario-parameter/scenario-parameter.model';
import { ITestResult } from 'app/entities/test-result/test-result.model';

Expand All @@ -10,6 +11,7 @@ export interface IScenarioExecution {
endDate?: dayjs.Dayjs | null;
scenarioName?: string | null;
testResult?: ITestResult | null;
scenarioActions?: IScenarioAction[] | null;
scenarioMessages?: IMessage[] | null;
scenarioParameters?: IScenarioParameter[] | null;
}

0 comments on commit 48efb5f

Please sign in to comment.