diff options
Diffstat (limited to 'vid-webpack-master/src/app/shared/components/model-information')
5 files changed, 78 insertions, 9 deletions
diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts index fea4c44c7..9401aca05 100644 --- a/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts @@ -1,5 +1,6 @@ import {Component, Input} from '@angular/core'; -import * as _ from 'lodash'; +import {ModelInformationService} from "./model-information.service"; + @Component({ selector: 'model-information', @@ -8,17 +9,21 @@ import * as _ from 'lodash'; }) export class ModelInformationComponent { - private _modelInformationItems: Array<ModelInformationItem>; + constructor(private _modelInformationService : ModelInformationService){} + + private _modelInformationItems: ModelInformationItem[]; + + @Input() itemClass: string = 'item'; //default class for item is "item" - get modelInformationItems(): Array<ModelInformationItem> { + get modelInformationItems(): ModelInformationItem[] { return this._modelInformationItems; } @Input() - set modelInformationItems(_modelInformationItems: Array<ModelInformationItem>) { + set modelInformationItems(_modelInformationItems: ModelInformationItem[]) { if (_modelInformationItems) { - this._modelInformationItems = _modelInformationItems.filter(x => x.mandatory || (!_.isEmpty(x.values) && !_.isEmpty(x.values[0]))); + this._modelInformationItems = this._modelInformationService.filterModelItems(_modelInformationItems); } } } @@ -27,11 +32,11 @@ export class ModelInformationComponent { export class ModelInformationItem { label: string; testsId: string; - values: Array<string>; + values: string[]; toolTipText: string; mandatory: boolean; - constructor(label: string, testsId: string, values: Array<any>, toolTipText: string = "", mandatory: boolean = false,nested:boolean=false) { + constructor(label: string, testsId: string, values: any[], toolTipText: string = "", mandatory: boolean = false) { this.label = label; this.testsId = testsId; this.values = values; @@ -39,4 +44,8 @@ export class ModelInformationItem { this.mandatory = mandatory; } + static createInstance(label: string, value: any):ModelInformationItem { + return new ModelInformationItem(label, label, [value]); + } + } diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.html b/vid-webpack-master/src/app/shared/components/model-information/model-information.html index 456dfdee4..78548b035 100644 --- a/vid-webpack-master/src/app/shared/components/model-information/model-information.html +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.html @@ -1,12 +1,12 @@ <div id="model-information"> - <div *ngFor="let item of modelInformationItems" class="item" attr.data-tests-id="model-item-{{item.label}}"> + <div *ngFor="let item of modelInformationItems" ngClass={{itemClass}} attr.data-tests-id="model-item-{{item.label}}"> <tooltip-content #a> <span> {{item.toolTipText}}</span> </tooltip-content> <div class="wrapper" [tooltip]="a" [tooltipDisabled]="!item.toolTipText" tooltipPlacement="top" [tooltipAnimation]="false"> <label attr.data-tests-id="model-item-label-{{item.testsId}}">{{item.label}}</label> - <div *ngFor="let value of item.values" attr.data-tests-id="model-item-value-{{item.testsId}}">{{value}}</div> + <div *ngFor="let value of item.values" class="model-item-value" attr.data-tests-id="model-item-value-{{item.testsId}}">{{value}}</div> </div> </div> </div> diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.service.spec.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.spec.ts new file mode 100644 index 000000000..418493f2b --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.spec.ts @@ -0,0 +1,32 @@ +import {ModelInformationService} from "./model-information.service"; +import {ModelInformationItem} from "./model-information.component"; + +describe('ModelInformationService', () => { + let underTest:ModelInformationService; + + beforeEach(() => { + underTest = new ModelInformationService(); + }); + + test('when call to filterModelItems then items with empty values are filtered', () =>{ + expect(underTest.filterModelItems([ + ModelInformationItem.createInstance("emptyValue", ""), + ModelInformationItem.createInstance("nullValue", null), + ModelInformationItem.createInstance("undefinedValue", undefined), + ModelInformationItem.createInstance("spacesValue", " "), + new ModelInformationItem("emptyArray", "id", [], "c", false) + ])).toHaveLength(0); + }); + + test('when call to filterModelItems then mandatory items with empty values are not filtered', () =>{ + const mandatoryItem:ModelInformationItem = new ModelInformationItem("a", "b", [""], "c", true); + expect(underTest.filterModelItems([mandatoryItem])).toEqual([mandatoryItem]); + }); + + test('when call to filterModelItems then items with values are not filtered', () =>{ + expect(underTest.filterModelItems([ + ModelInformationItem.createInstance("withString", "a"), + ModelInformationItem.createInstance("withNumber", 1), + ])).toHaveLength(2); + }); +}); diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.service.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.ts new file mode 100644 index 000000000..7c0a96b01 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.ts @@ -0,0 +1,16 @@ +import {Injectable} from "@angular/core"; +import * as _ from 'lodash'; +import {ModelInformationItem} from "./model-information.component"; + +@Injectable() +export class ModelInformationService { + + filterModelItems(_modelInformationItems: ModelInformationItem[]) { + return _modelInformationItems.filter(x => x.mandatory || ( + !_.isEmpty(x.values) + && !_.isNil(x.values[0]) + && x.values[0].toString().trim()!="" + )); + } +} + diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.spec.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.spec.ts new file mode 100644 index 000000000..cdba11f59 --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.spec.ts @@ -0,0 +1,12 @@ +import {ModelInformationItem} from "./model-information.component"; + +describe('ModelInformationItem', () => { + test('when use createInstance, values initialized as expected', () =>{ + const modelInformationItem:ModelInformationItem = ModelInformationItem.createInstance("aStr", 4); + expect(modelInformationItem.label).toEqual("aStr"); + expect(modelInformationItem.testsId).toEqual("aStr"); + expect(modelInformationItem.values).toEqual([4]); + expect(modelInformationItem.mandatory).toBeFalsy(); + expect(modelInformationItem.toolTipText).toEqual(""); + }); +}); |