Added more tests and comments

This commit is contained in:
Giuseppe Digilio
2019-03-28 19:33:40 +01:00
parent 6616d759cb
commit 7b63d145d8
33 changed files with 1326 additions and 87 deletions

View File

@@ -1,7 +1,7 @@
<ds-item-list-preview *ngIf="workFlow"
[item]="(workFlow.item | async)?.payload"
<ds-item-list-preview *ngIf="workflowitem"
[item]="(workflowitem.item | async)?.payload"
[object]="object"
[showSubmitter]="showSubmitter"
[status]="status"></ds-item-list-preview>
<ds-claimed-task-actions *ngIf="workFlow" [object]="dso"></ds-claimed-task-actions>
<ds-claimed-task-actions *ngIf="workflowitem" [object]="dso"></ds-claimed-task-actions>

View File

@@ -0,0 +1,89 @@
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model';
import { ClaimedMyDSpaceResultListElementComponent } from './claimed-my-dspace-result-list-element.component';
import { ClaimedTaskMyDSpaceResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model';
import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model';
import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { Workflowitem } from '../../../../core/submission/models/workflowitem.model';
let component: ClaimedMyDSpaceResultListElementComponent;
let fixture: ComponentFixture<ClaimedMyDSpaceResultListElementComponent>;
const compIndex = 1;
const mockResultObject: ClaimedTaskMyDSpaceResult = new ClaimedTaskMyDSpaceResult();
mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), {
bitstreams: observableOf({}),
metadata: {
'dc.title': [
{
language: 'en_US',
value: 'This is just another title'
}
],
'dc.type': [
{
language: null,
value: 'Article'
}
],
'dc.contributor.author': [
{
language: 'en_US',
value: 'Smith, Donald'
}
],
'dc.date.issued': [
{
language: null,
value: '2015-06-26'
}
]
}
});
const rdItem = new RemoteData(false, false, true, null, item);
const workflowitem = Object.assign(new Workflowitem(), { item: observableOf(rdItem) });
const rdWorkflowitem = new RemoteData(false, false, true, null, workflowitem);
mockResultObject.dspaceObject = Object.assign(new ClaimedTask(), { workflowitem: observableOf(rdWorkflowitem) });
describe('ClaimedMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [ClaimedMyDSpaceResultListElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ClaimedMyDSpaceResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(ClaimedMyDSpaceResultListElementComponent);
component = fixture.componentInstance;
}));
beforeEach(() => {
component.dso = mockResultObject.dspaceObject;
fixture.detectChanges();
});
it('should init item properly', () => {
expect(component.workflowitem).toEqual(workflowitem);
});
it('should have properly status', () => {
expect(component.status).toEqual(MyDspaceItemStatusType.VALIDATION);
});
});

View File

@@ -14,6 +14,9 @@ import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.m
import { ClaimedTaskMyDSpaceResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
/**
* This component renders claimed task object for the mydspace result in the list view.
*/
@Component({
selector: 'ds-claimed-my-dspace-result-list-element',
styleUrls: ['../my-dspace-result-list-element.component.scss'],
@@ -24,19 +27,37 @@ import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspa
@renderElementsFor(ClaimedTaskMyDSpaceResult, ViewMode.List)
@renderElementsFor(ClaimedTask, ViewMode.List)
export class ClaimedMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<ClaimedTaskMyDSpaceResult, ClaimedTask> {
public showSubmitter = true;
public status = MyDspaceItemStatusType.VALIDATION;
public workFlow: Workflowitem;
/**
* A boolean representing if to show submitter information
*/
public showSubmitter = true;
/**
* Represent item's status
*/
public status = MyDspaceItemStatusType.VALIDATION;
/**
* The workflowitem object that belonging to the result object
*/
public workflowitem: Workflowitem;
/**
* Initialize all instance variables
*/
ngOnInit() {
this.initWorkflowItem(this.dso.workflowitem as Observable<RemoteData<Workflowitem>>);
}
/**
* Retrieve workflowitem from result object
*/
initWorkflowItem(wfi$: Observable<RemoteData<Workflowitem>>) {
wfi$.pipe(
find((rd: RemoteData<Workflowitem>) => (rd.hasSucceeded && isNotUndefined(rd.payload)))
).subscribe((rd: RemoteData<Workflowitem>) => {
this.workFlow = rd.payload;
this.workflowitem = rd.payload;
});
}
}

View File

@@ -0,0 +1,32 @@
<ng-container *ngIf="item" @fadeInOut>
<ng-container *ngIf="status">
<ds-mydspace-item-status [status]="status"></ds-mydspace-item-status>
</ng-container>
<ds-truncatable [id]="item.id">
<h3 class="h3-title" [innerHTML]="firstMetadataValue('dc.title') || ('mydspace.results.no-title' | translate)" [ngClass]="{'lead': true,'text-muted': !firstMetadataValue('dc.title')}"></h3>
<div>
<span class="text-muted">
<ds-truncatable-part [id]="item.id" [minLines]="1">
(<span *ngIf="item.hasMetadata('dc.publisher')" class="item-list-publisher"
[innerHTML]="firstMetadataValue('dc.publisher') + ', '"></span>
<span class="item-list-date" [innerHTML]="firstMetadataValue('dc.date.issued') || ('mydspace.results.no-date' | translate)"></span>)
<span *ngIf="item.hasMetadata(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']);"
class="item-list-authors">
<span *ngIf="allMetadataValues(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']).length === 0">{{'mydspace.results.no-authors' | translate}}</span>
<span *ngFor="let author of allMetadataValues(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']); let last=last;">
<span [innerHTML]="author"><span [innerHTML]="author"></span></span>
</span>
</span>
</ds-truncatable-part>
</span>
<ds-truncatable-part [id]="item.id" [minLines]="1" class="item-list-abstract">
<span [ngClass]="{'text-muted': !firstMetadataValue('dc.description.abstract')}"
[innerHTML]="(firstMetadataValue('dc.description.abstract')) || ('mydspace.results.no-abstract' | translate)"></span>
</ds-truncatable-part>
</div>
</ds-truncatable>
<ds-item-submitter *ngIf="showSubmitter" [object]="object.dspaceObject"></ds-item-submitter>
</ng-container>

View File

@@ -0,0 +1,5 @@
@import '../../../../../styles/variables';
.h3-title {
color: $link-color;
}

View File

@@ -0,0 +1,131 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { By } from '@angular/platform-browser';
import { of as observableOf } from 'rxjs';
import { TruncatePipe } from '../../../utils/truncate.pipe';
import { Item } from '../../../../core/shared/item.model';
import { ItemListPreviewComponent } from './item-list-preview.component';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { MockTranslateLoader } from '../../../mocks/mock-translate-loader';
let component: ItemListPreviewComponent;
let fixture: ComponentFixture<ItemListPreviewComponent>;
const mockItemWithAuthorAndDate: Item = Object.assign(new Item(), {
bitstreams: observableOf({}),
metadata: {
'dc.contributor.author': [
{
language: 'en_US',
value: 'Smith, Donald'
}
],
'dc.date.issued': [
{
language: null,
value: '2015-06-26'
}
]
}
});
const mockItemWithoutAuthorAndDate: Item = Object.assign(new Item(), {
bitstreams: observableOf({}),
metadata: {
'dc.title': [
{
language: 'en_US',
value: 'This is just another title'
}
],
'dc.type': [
{
language: null,
value: 'Article'
}
]
}
});
describe('ItemListPreviewComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: MockTranslateLoader
}
}),
],
declarations: [ItemListPreviewComponent, TruncatePipe],
providers: [
{ provide: 'objectElementProvider', useValue: { mockItemWithAuthorAndDate } }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ItemListPreviewComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(ItemListPreviewComponent);
component = fixture.componentInstance;
}));
beforeEach(() => {
component.object = { hitHighlights: {} };
});
describe('When the item has an author', () => {
beforeEach(() => {
component.item = mockItemWithAuthorAndDate;
fixture.detectChanges();
});
it('should show the author paragraph', () => {
const itemAuthorField = fixture.debugElement.query(By.css('span.item-list-authors'));
expect(itemAuthorField).not.toBeNull();
});
});
describe('When the item has no author', () => {
beforeEach(() => {
component.item = mockItemWithoutAuthorAndDate;
fixture.detectChanges();
});
it('should not show the author paragraph', () => {
const itemAuthorField = fixture.debugElement.query(By.css('span.item-list-authors'));
expect(itemAuthorField).toBeNull();
});
});
describe('When the item has an issuedate', () => {
beforeEach(() => {
component.item = mockItemWithAuthorAndDate;
fixture.detectChanges();
});
it('should show the issuedate span', () => {
const dateField = fixture.debugElement.query(By.css('span.item-list-date'));
expect(dateField).not.toBeNull();
});
});
describe('When the item has no issuedate', () => {
beforeEach(() => {
component.item = mockItemWithoutAuthorAndDate;
fixture.detectChanges();
});
it('should show the issuedate empty placeholder', () => {
const dateField = fixture.debugElement.query(By.css('span.item-list-date'));
expect(dateField).not.toBeNull();
});
});
});

View File

@@ -0,0 +1,59 @@
import { Component, Input } from '@angular/core';
import { Item } from '../../../../core/shared/item.model';
import { fadeInOut } from '../../../animations/fade';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { Metadata } from '../../../../core/shared/metadata.utils';
/**
* This component show metadata for the given item object in the list view.
*/
@Component({
selector: 'ds-item-list-preview',
styleUrls: ['item-list-preview.component.scss'],
templateUrl: 'item-list-preview.component.html',
animations: [fadeInOut]
})
export class ItemListPreviewComponent {
/**
* The item to display
*/
@Input() item: Item;
/**
* The mydspace result object
*/
@Input() object: any;
/**
* Represent item's status
*/
@Input() status: MyDspaceItemStatusType;
/**
* A boolean representing if to show submitter information
*/
@Input() showSubmitter = false;
/**
* Gets all matching metadata string values from hitHighlights or dso metadata, preferring hitHighlights.
*
* @param {string|string[]} keyOrKeys The metadata key(s) in scope. Wildcards are supported; see [[Metadata]].
* @returns {string[]} the matching string values or an empty array.
*/
allMetadataValues(keyOrKeys: string | string[]): string[] {
return Metadata.allValues([this.object.hitHighlights, this.item.metadata], keyOrKeys);
}
/**
* Gets the first matching metadata string value from hitHighlights or dso metadata, preferring hitHighlights.
*
* @param {string|string[]} keyOrKeys The metadata key(s) in scope. Wildcards are supported; see [[Metadata]].
* @returns {string} the first matching string value, or `undefined`.
*/
firstMetadataValue(keyOrKeys: string | string[]): string {
return Metadata.firstValue([this.object.hitHighlights, this.item.metadata], keyOrKeys);
}
}

View File

@@ -0,0 +1,78 @@
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model';
import { ItemMyDSpaceResultListElementComponent } from './item-my-dspace-result-list-element.component';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { ItemMyDSpaceResult } from '../../../object-collection/shared/item-my-dspace-result.model';
let component: ItemMyDSpaceResultListElementComponent;
let fixture: ComponentFixture<ItemMyDSpaceResultListElementComponent>;
const compIndex = 1;
const mockResultObject: ItemMyDSpaceResult = new ItemMyDSpaceResult();
mockResultObject.hitHighlights = {};
mockResultObject.dspaceObject = Object.assign(new Item(), {
bitstreams: observableOf({}),
metadata: {
'dc.title': [
{
language: 'en_US',
value: 'This is just another title'
}
],
'dc.type': [
{
language: null,
value: 'Article'
}
],
'dc.contributor.author': [
{
language: 'en_US',
value: 'Smith, Donald'
}
],
'dc.date.issued': [
{
language: null,
value: '2015-06-26'
}
]
}
});
describe('ItemMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [ItemMyDSpaceResultListElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ItemMyDSpaceResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(ItemMyDSpaceResultListElementComponent);
component = fixture.componentInstance;
}));
beforeEach(() => {
component.dso = mockResultObject.dspaceObject;
fixture.detectChanges();
});
it('should have properly status', () => {
expect(component.status).toEqual(MyDspaceItemStatusType.ACCEPTED);
});
});

View File

@@ -7,6 +7,9 @@ import { Item } from '../../../../core/shared/item.model';
import { ItemMyDSpaceResult } from '../../../object-collection/shared/item-my-dspace-result.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
/**
* This component renders item object for the mydspace result in the list view.
*/
@Component({
selector: 'ds-workspaceitem-my-dspace-result-list-element',
styleUrls: ['../my-dspace-result-list-element.component.scss', './item-my-dspace-result-list-element.component.scss'],
@@ -16,6 +19,9 @@ import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspa
@renderElementsFor(ItemMyDSpaceResult, ViewMode.List)
export class ItemMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<ItemMyDSpaceResult, Item> {
/**
* Represent item's status
*/
public status = MyDspaceItemStatusType.ACCEPTED;
}

View File

@@ -1,7 +1,7 @@
<ds-item-list-preview *ngIf="workFlow"
[item]="(workFlow.item | async)?.payload"
<ds-item-list-preview *ngIf="workflowitem"
[item]="(workflowitem.item | async)?.payload"
[object]="object"
[showSubmitter]="true"
[showSubmitter]="showSubmitter"
[status]="status"></ds-item-list-preview>
<ds-pool-task-actions [object]="dso"></ds-pool-task-actions>

View File

@@ -0,0 +1,89 @@
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model';
import { PoolMyDSpaceResultListElementComponent } from './pool-my-dspace-result-list-element.component';
import { PoolTaskMyDSpaceResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model';
import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { Workflowitem } from '../../../../core/submission/models/workflowitem.model';
let component: PoolMyDSpaceResultListElementComponent;
let fixture: ComponentFixture<PoolMyDSpaceResultListElementComponent>;
const compIndex = 1;
const mockResultObject: PoolTaskMyDSpaceResult = new PoolTaskMyDSpaceResult();
mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), {
bitstreams: observableOf({}),
metadata: {
'dc.title': [
{
language: 'en_US',
value: 'This is just another title'
}
],
'dc.type': [
{
language: null,
value: 'Article'
}
],
'dc.contributor.author': [
{
language: 'en_US',
value: 'Smith, Donald'
}
],
'dc.date.issued': [
{
language: null,
value: '2015-06-26'
}
]
}
});
const rdItem = new RemoteData(false, false, true, null, item);
const workflowitem = Object.assign(new Workflowitem(), { item: observableOf(rdItem) });
const rdWorkflowitem = new RemoteData(false, false, true, null, workflowitem);
mockResultObject.dspaceObject = Object.assign(new PoolTask(), { workflowitem: observableOf(rdWorkflowitem) });
describe('PoolMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [PoolMyDSpaceResultListElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(PoolMyDSpaceResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(PoolMyDSpaceResultListElementComponent);
component = fixture.componentInstance;
}));
beforeEach(() => {
component.dso = mockResultObject.dspaceObject;
fixture.detectChanges();
});
it('should init item properly', () => {
expect(component.workflowitem).toEqual(workflowitem);
});
it('should have properly status', () => {
expect(component.status).toEqual(MyDspaceItemStatusType.WAITING_CONTROLLER);
});
});

View File

@@ -14,6 +14,9 @@ import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
import { PoolTaskMyDSpaceResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
/**
* This component renders pool task object for the mydspace result in the list view.
*/
@Component({
selector: 'ds-pool-my-dspace-result-list-element',
styleUrls: ['../my-dspace-result-list-element.component.scss'],
@@ -23,23 +26,42 @@ import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspa
@renderElementsFor(PoolTaskMyDSpaceResult, ViewMode.List)
@renderElementsFor(PoolTask, ViewMode.List)
export class PoolMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<PoolTaskMyDSpaceResult, PoolTask> implements OnInit {
/**
* A boolean representing if to show submitter information
*/
public showSubmitter = true;
/**
* Represent item's status
*/
public status = MyDspaceItemStatusType.WAITING_CONTROLLER;
public workFlow: Workflowitem;
/**
* The workflowitem object that belonging to the result object
*/
public workflowitem: Workflowitem;
constructor(@Inject('objectElementProvider') public listable: ListableObject,
@Inject('indexElementProvider') public index: number) {
super(listable, index);
}
/**
* Initialize all instance variables
*/
ngOnInit() {
this.initWorkflowItem(this.dso.workflowitem as Observable<RemoteData<Workflowitem>>);
}
/**
* Retrieve workflowitem from result object
*/
initWorkflowItem(wfi$: Observable<RemoteData<Workflowitem>>) {
wfi$.pipe(
find((rd: RemoteData<Workflowitem>) => (rd.hasSucceeded && isNotUndefined(rd.payload)))
).subscribe((rd: RemoteData<Workflowitem>) => {
this.workFlow = rd.payload;
this.workflowitem = rd.payload;
});
}
}

View File

@@ -0,0 +1,86 @@
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model';
import { WorkflowitemMyDSpaceResultListElementComponent } from './workflowitem-my-dspace-result-list-element.component';
import { WorkflowitemMyDSpaceResult } from '../../../object-collection/shared/workflowitem-my-dspace-result.model';
import { Workflowitem } from '../../../../core/submission/models/workflowitem.model';
import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
let component: WorkflowitemMyDSpaceResultListElementComponent;
let fixture: ComponentFixture<WorkflowitemMyDSpaceResultListElementComponent>;
const compIndex = 1;
const mockResultObject: WorkflowitemMyDSpaceResult = new WorkflowitemMyDSpaceResult();
mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), {
bitstreams: observableOf({}),
metadata: {
'dc.title': [
{
language: 'en_US',
value: 'This is just another title'
}
],
'dc.type': [
{
language: null,
value: 'Article'
}
],
'dc.contributor.author': [
{
language: 'en_US',
value: 'Smith, Donald'
}
],
'dc.date.issued': [
{
language: null,
value: '2015-06-26'
}
]
}
});
const rd = new RemoteData(false, false, true, null, item);
mockResultObject.dspaceObject = Object.assign(new Workflowitem(), { item: observableOf(rd) });
describe('WorkflowitemMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [WorkflowitemMyDSpaceResultListElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(WorkflowitemMyDSpaceResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(WorkflowitemMyDSpaceResultListElementComponent);
component = fixture.componentInstance;
}));
beforeEach(() => {
component.dso = mockResultObject.dspaceObject;
fixture.detectChanges();
});
it('should init item properly', () => {
expect(component.item).toEqual(item);
});
it('should have properly status', () => {
expect(component.status).toEqual(MyDspaceItemStatusType.WORKFLOW);
});
});

View File

@@ -13,6 +13,9 @@ import { Workflowitem } from '../../../../core/submission/models/workflowitem.mo
import { Item } from '../../../../core/shared/item.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
/**
* This component renders workflowitem object for the mydspace result in the list view.
*/
@Component({
selector: 'ds-workflowitem-my-dspace-result-list-element',
styleUrls: ['../my-dspace-result-list-element.component.scss'],
@@ -22,13 +25,27 @@ import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspa
@renderElementsFor(WorkflowitemMyDSpaceResult, ViewMode.List)
@renderElementsFor(Workflowitem, ViewMode.List)
export class WorkflowitemMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<WorkflowitemMyDSpaceResult, Workflowitem> {
/**
* The item object that belonging to the result object
*/
public item: Item;
/**
* Represent item's status
*/
public status = MyDspaceItemStatusType.WORKFLOW;
/**
* Initialize all instance variables
*/
ngOnInit() {
this.initItem(this.dso.item as Observable<RemoteData<Item>>);
}
/**
* Retrieve item from result object
*/
initItem(item$: Observable<RemoteData<Item>>) {
item$.pipe(
find((rd: RemoteData<Item>) => rd.hasSucceeded && isNotUndefined(rd.payload))

View File

@@ -0,0 +1,86 @@
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model';
import { WorkspaceitemMyDSpaceResultListElementComponent } from './workspaceitem-my-dspace-result-list-element.component';
import { WorkspaceitemMyDSpaceResult } from '../../../object-collection/shared/workspaceitem-my-dspace-result.model';
import { Workspaceitem } from '../../../../core/submission/models/workspaceitem.model';
import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
let component: WorkspaceitemMyDSpaceResultListElementComponent;
let fixture: ComponentFixture<WorkspaceitemMyDSpaceResultListElementComponent>;
const compIndex = 1;
const mockResultObject: WorkspaceitemMyDSpaceResult = new WorkspaceitemMyDSpaceResult();
mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), {
bitstreams: observableOf({}),
metadata: {
'dc.title': [
{
language: 'en_US',
value: 'This is just another title'
}
],
'dc.type': [
{
language: null,
value: 'Article'
}
],
'dc.contributor.author': [
{
language: 'en_US',
value: 'Smith, Donald'
}
],
'dc.date.issued': [
{
language: null,
value: '2015-06-26'
}
]
}
});
const rd = new RemoteData(false, false, true, null, item);
mockResultObject.dspaceObject = Object.assign(new Workspaceitem(), { item: observableOf(rd) });
describe('WorkspaceitemMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [WorkspaceitemMyDSpaceResultListElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(WorkspaceitemMyDSpaceResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(WorkspaceitemMyDSpaceResultListElementComponent);
component = fixture.componentInstance;
}));
beforeEach(() => {
component.dso = mockResultObject.dspaceObject;
fixture.detectChanges();
});
it('should init item properly', () => {
expect(component.item).toEqual(item);
});
it('should have properly status', () => {
expect(component.status).toEqual(MyDspaceItemStatusType.IN_PROGRESS);
});
});

View File

@@ -13,6 +13,9 @@ import { isNotUndefined } from '../../../empty.util';
import { Item } from '../../../../core/shared/item.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
/**
* This component renders workspaceitem object for the mydspace result in the list view.
*/
@Component({
selector: 'ds-workspaceitem-my-dspace-result-list-element',
styleUrls: ['../my-dspace-result-list-element.component.scss', './workspaceitem-my-dspace-result-list-element.component.scss'],
@@ -22,13 +25,26 @@ import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspa
@renderElementsFor(WorkspaceitemMyDSpaceResult, ViewMode.List)
export class WorkspaceitemMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<WorkspaceitemMyDSpaceResult, Workspaceitem> {
/**
* The item object that belonging to the result object
*/
item: Item;
/**
* Represent item's status
*/
status = MyDspaceItemStatusType.IN_PROGRESS;
/**
* Initialize all instance variables
*/
ngOnInit() {
this.initItem(this.dso.item as Observable<RemoteData<Item>>);
}
/**
* Retrieve item from result object
*/
initItem(item$: Observable<RemoteData<Item>>) {
item$.pipe(
find((rd: RemoteData<Item>) => rd.hasSucceeded && isNotUndefined(rd.payload))