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,6 +1,8 @@
<ds-item-detail-preview *ngIf="workFlow"
[item]="(workFlow.item | async)?.payload"
<ds-item-detail-preview *ngIf="workflowitem"
[item]="(workflowitem.item | async)?.payload"
[object]="object"
[status]="status"></ds-item-detail-preview>
[showSubmitter]="showSubmitter"
[status]="status">
</ds-item-detail-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 { ClaimedMyDSpaceResultDetailElementComponent } from './claimed-my-dspace-result-detail-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: ClaimedMyDSpaceResultDetailElementComponent;
let fixture: ComponentFixture<ClaimedMyDSpaceResultDetailElementComponent>;
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('ClaimedMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [ClaimedMyDSpaceResultDetailElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ClaimedMyDSpaceResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(ClaimedMyDSpaceResultDetailElementComponent);
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

@@ -11,47 +11,56 @@ import { ListableObject } from '../../../object-collection/shared/listable-objec
import { Workflowitem } from '../../../../core/submission/models/workflowitem.model';
import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model';
import { ClaimedTaskMyDSpaceResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model';
import { ClaimedTaskDataService } from '../../../../core/tasks/claimed-task-data.service';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common';
import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
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 detail view.
*/
@Component({
selector: 'ds-claimed-my-dspace-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss'],
templateUrl: './claimed-my-dspace-result-detail-element.component.html',
providers: [Location, {provide: LocationStrategy, useClass: PathLocationStrategy}]
templateUrl: './claimed-my-dspace-result-detail-element.component.html'
})
@renderElementsFor(ClaimedTaskMyDSpaceResult, ViewMode.Detail)
@renderElementsFor(ClaimedTask, ViewMode.Detail)
export class ClaimedMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<ClaimedTaskMyDSpaceResult, ClaimedTask> {
/**
* A boolean representing if to show submitter information
*/
public showSubmitter = true;
/**
* Represent item's status
*/
public status = MyDspaceItemStatusType.VALIDATION;
public workFlow: Workflowitem;
public rejectForm: FormGroup;
constructor(private ctDataService: ClaimedTaskDataService,
private modalService: NgbModal,
private formBuilder: FormBuilder,
@Inject('objectElementProvider') public listable: ListableObject) {
/**
* The workflowitem object that belonging to the result object
*/
public workflowitem: Workflowitem;
constructor(@Inject('objectElementProvider') public listable: ListableObject) {
super(listable);
this.rejectForm = this.formBuilder.group({
reason: ['', Validators.required]
});
}
/**
* 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

@@ -24,35 +24,4 @@
</div>
</div>
</div>
<!--<ng-container @fadeInOut>
<ng-container *ngIf="status">
<ds-item-status [status]="status"></ds-item-status>
</ng-container>
<ds-item-page-title-field [item]="item"></ds-item-page-title-field>
<div class="row mb-1">
<div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper>
<ds-thumbnail [thumbnail]="item.getThumbnail()"></ds-thumbnail>
</ds-metadata-field-wrapper>
<ds-item-page-file-section [item]="item"></ds-item-page-file-section>
<ds-item-page-date-field [item]="item"></ds-item-page-date-field>
<ds-item-page-author-field [item]="item"></ds-item-page-author-field>
</div>
<div class="col-xs-12 col-md-6">
<ds-item-page-abstract-field [item]="item"></ds-item-page-abstract-field>
<ds-item-page-uri-field [item]="item"></ds-item-page-uri-field>
<ds-item-page-collections [item]="item" *ngIf="item.owner"></ds-item-page-collections>
<div>
<ng-content></ng-content>
</div>
</div>
</div>
</ng-container>-->
<ds-item-submitter *ngIf="showSubmitter" [object]="object.dspaceObject"></ds-item-submitter>

View File

@@ -0,0 +1,90 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { of as observableOf } from 'rxjs';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TruncatePipe } from '../../../utils/truncate.pipe';
import { Item } from '../../../../core/shared/item.model';
import { ItemDetailPreviewComponent } from './item-detail-preview.component';
import { MockTranslateLoader } from '../../../mocks/mock-translate-loader';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
let component: ItemDetailPreviewComponent;
let fixture: ComponentFixture<ItemDetailPreviewComponent>;
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('ItemDetailPreviewComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: MockTranslateLoader
}
}),
],
declarations: [ItemDetailPreviewComponent, TruncatePipe],
providers: [
{ provide: 'objectElementProvider', useValue: { mockItemWithAuthorAndDate } }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ItemDetailPreviewComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(ItemDetailPreviewComponent);
component = fixture.componentInstance;
}));
beforeEach(() => {
component.object = { hitHighlights: {} };
component.item = mockItemWithAuthorAndDate;
fixture.detectChanges();
});
it('should init thumbnail on init', () => {
expect(component.thumbnail$).toBeDefined();
});
});

View File

@@ -7,25 +7,46 @@ import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspa
import { fadeInOut } from '../../../animations/fade';
import { Bitstream } from '../../../../core/shared/bitstream.model';
/**
* This component show metadata for the given item object in the detail view.
*/
@Component({
selector: 'ds-item-detail-preview',
styleUrls: ['./item-detail-preview.component.scss'],
templateUrl: './item-detail-preview.component.html',
animations: [fadeInOut]
})
export class ItemDetailPreviewComponent<T> {
export class ItemDetailPreviewComponent {
/**
* The item to display
*/
@Input() item: Item;
/**
* The mydspace result object
*/
@Input() object: any;
/**
* Represent item's status
*/
@Input() status: MyDspaceItemStatusType;
public ALL_STATUS = [];
/**
* A boolean representing if to show submitter information
*/
@Input() showSubmitter = false;
/**
* The item's thumbnail
*/
public thumbnail$: Observable<Bitstream>;
/**
* Initialize all instance variables
*/
ngOnInit() {
Object.keys(MyDspaceItemStatusType).forEach((s) => {
this.ALL_STATUS.push(MyDspaceItemStatusType[s]);
});
this.thumbnail$ = this.item.getThumbnail();
}

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 { ItemMyDSpaceResultDetailElementComponent } from './item-my-dspace-result-detail-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: ItemMyDSpaceResultDetailElementComponent;
let fixture: ComponentFixture<ItemMyDSpaceResultDetailElementComponent>;
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('ItemMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [ItemMyDSpaceResultDetailElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ItemMyDSpaceResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(ItemMyDSpaceResultDetailElementComponent);
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 { ItemMyDSpaceResult } from '../../../object-collection/shared/item-my-ds
import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
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 detail view.
*/
@Component({
selector: 'ds-workspaceitem-my-dspace-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss', './item-my-dspace-result-detail-element.component.scss'],
@@ -16,6 +19,9 @@ import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspa
@renderElementsFor(ItemMyDSpaceResult, ViewMode.Detail)
export class ItemMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<ItemMyDSpaceResult, Item> {
/**
* Represent item's status
*/
public status = MyDspaceItemStatusType.ACCEPTED;
}

View File

@@ -1,6 +1,7 @@
<ds-item-detail-preview *ngIf="workFlow"
[item]="(workFlow.item | async)?.payload"
<ds-item-detail-preview *ngIf="workflowitem"
[item]="(workflowitem.item | async)?.payload"
[object]="object"
[showSubmitter]="showSubmitter"
[status]="status"></ds-item-detail-preview>
<ds-pool-task-actions *ngIf="workFlow" [object]="dso"></ds-pool-task-actions>
<ds-pool-task-actions *ngIf="workflowitem" [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 { PoolMyDSpaceResultDetailElementComponent } from './pool-my-dspace-result-detail-lement.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: PoolMyDSpaceResultDetailElementComponent;
let fixture: ComponentFixture<PoolMyDSpaceResultDetailElementComponent>;
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('PoolMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [PoolMyDSpaceResultDetailElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(PoolMyDSpaceResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(PoolMyDSpaceResultDetailElementComponent);
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 { PoolTaskMyDSpaceResult } from '../../../object-collection/shared/pool-t
import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
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 detail view.
*/
@Component({
selector: 'ds-pool-my-dspace-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss'],
@@ -23,23 +26,41 @@ import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspa
@renderElementsFor(PoolTaskMyDSpaceResult, ViewMode.Detail)
@renderElementsFor(PoolTask, ViewMode.Detail)
export class PoolMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<PoolTaskMyDSpaceResult, PoolTask> {
/**
* 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) {
super(listable);
}
/**
* 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 { WorkflowitemMyDSpaceResultDetailElementComponent } from './workflowitem-my-dspace-result-detail-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: WorkflowitemMyDSpaceResultDetailElementComponent;
let fixture: ComponentFixture<WorkflowitemMyDSpaceResultDetailElementComponent>;
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('WorkflowitemMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [WorkflowitemMyDSpaceResultDetailElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(WorkflowitemMyDSpaceResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(WorkflowitemMyDSpaceResultDetailElementComponent);
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 { RemoteData } from '../../../../core/data/remote-data';
import { find } from 'rxjs/operators';
import { isNotUndefined } from '../../../empty.util';
/**
* This component renders workflowitem object for the mydspace result in the detail view.
*/
@Component({
selector: 'ds-workflowitem-my-dspace-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss'],
@@ -23,17 +26,30 @@ import { isNotUndefined } from '../../../empty.util';
@renderElementsFor(Workflowitem, ViewMode.Detail)
export class WorkflowitemMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<WorkflowitemMyDSpaceResult, Workflowitem> {
/**
* The item object that belonging to the result object
*/
public item: Item;
/**
* Represent item's status
*/
public status = MyDspaceItemStatusType.WORKFLOW;
constructor(@Inject('objectElementProvider') public listable: ListableObject) {
super(listable);
}
/**
* 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 { WorkspaceitemMyDSpaceResultDetailElementComponent } from './workspaceitem-my-dspace-result-detail-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: WorkspaceitemMyDSpaceResultDetailElementComponent;
let fixture: ComponentFixture<WorkspaceitemMyDSpaceResultDetailElementComponent>;
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('WorkspaceitemMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NoopAnimationsModule],
declarations: [WorkspaceitemMyDSpaceResultDetailElementComponent],
providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) }
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(WorkspaceitemMyDSpaceResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents();
}));
beforeEach(async(() => {
fixture = TestBed.createComponent(WorkspaceitemMyDSpaceResultDetailElementComponent);
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

@@ -14,6 +14,9 @@ import { ListableObject } from '../../../object-collection/shared/listable-objec
import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
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 detail view.
*/
@Component({
selector: 'ds-workspaceitem-my-dspace-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss', './workspaceitem-my-dspace-result-detail-element.component.scss'],
@@ -23,17 +26,31 @@ import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspa
@renderElementsFor(WorkspaceitemMyDSpaceResult, ViewMode.Detail)
@renderElementsFor(Workspaceitem, ViewMode.Detail)
export class WorkspaceitemMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<WorkspaceitemMyDSpaceResult, Workspaceitem> {
/**
* The item object that belonging to the result object
*/
public item: Item;
/**
* Represent item's status
*/
status = MyDspaceItemStatusType.IN_PROGRESS;
constructor(@Inject('objectElementProvider') public listable: ListableObject) {
super(listable);
}
/**
* 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

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

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,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

@@ -1,21 +1,39 @@
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';
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;
/**

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))

View File

@@ -126,7 +126,7 @@ import { ItemSearchResultListElementComponent } from './object-list/search-resul
import { EditItemSelectorComponent } from './dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component';
import { EditCommunitySelectorComponent } from './dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component';
import { EditCollectionSelectorComponent } from './dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component';
import { ItemListPreviewComponent } from './object-list/item-list-preview/item-list-preview.component';
import { ItemListPreviewComponent } from './object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component';
import { ItemPageAuthorFieldComponent } from '../+item-page/simple/field-components/specific-field/author/item-page-author-field.component';
import { ItemPageDateFieldComponent } from '../+item-page/simple/field-components/specific-field/date/item-page-date-field.component';
import { ItemPageAbstractFieldComponent } from '../+item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component';