diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.html index 134b85523e..d4ecaaa332 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.html @@ -1,6 +1,8 @@ - + [showSubmitter]="showSubmitter" + [status]="status"> + - + diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.spec.ts new file mode 100644 index 0000000000..38c4f461cd --- /dev/null +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.ts index 4a5367d2a0..29e8e907ad 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component.ts @@ -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 { + + /** + * 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>); } + /** + * Retrieve workflowitem from result object + */ initWorkflowItem(wfi$: Observable>) { wfi$.pipe( find((rd: RemoteData) => (rd.hasSucceeded && isNotUndefined(rd.payload))) ).subscribe((rd: RemoteData) => { - this.workFlow = rd.payload; + this.workflowitem = rd.payload; }); } diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html index 4f9d8f3e94..3cb4665884 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html @@ -24,35 +24,4 @@ - - - - - - + diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.spec.ts new file mode 100644 index 0000000000..5823e9969b --- /dev/null +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.spec.ts @@ -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; + +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(); + }); +}); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts index 9b42bb2268..9f92f79859 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts @@ -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 { +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; + /** + * Initialize all instance variables + */ ngOnInit() { - Object.keys(MyDspaceItemStatusType).forEach((s) => { - this.ALL_STATUS.push(MyDspaceItemStatusType[s]); - }); this.thumbnail$ = this.item.getThumbnail(); } diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.spec.ts new file mode 100644 index 0000000000..c48d755d61 --- /dev/null +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.ts index 75bfb30939..a55d911581 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.ts @@ -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 { + /** + * Represent item's status + */ public status = MyDspaceItemStatusType.ACCEPTED; } diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-element.component.html index 8d808815c2..96ef68e3f8 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-element.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-element.component.html @@ -1,6 +1,7 @@ - - + diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-element.component.spec.ts new file mode 100644 index 0000000000..b108d48c33 --- /dev/null +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-lement.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-lement.component.ts index 1917a5f1af..fbc37c9525 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-lement.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-lement.component.ts @@ -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 { + + /** + * 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>); } + /** + * Retrieve workflowitem from result object + */ initWorkflowItem(wfi$: Observable>) { wfi$.pipe( find((rd: RemoteData) => (rd.hasSucceeded && isNotUndefined(rd.payload))) ).subscribe((rd: RemoteData) => { - this.workFlow = rd.payload; + this.workflowitem = rd.payload; }); } diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-detail-element.component.spec.ts new file mode 100644 index 0000000000..3c6505218e --- /dev/null +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-detail-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-detail-element.component.ts index c76ad84b22..32e005309d 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-detail-element.component.ts @@ -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 { + /** + * 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>); } + /** + * Retrieve item from result object + */ initItem(item$: Observable>) { item$.pipe( find((rd: RemoteData) => rd.hasSucceeded && isNotUndefined(rd.payload)) diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-detail-element.component.spec.ts new file mode 100644 index 0000000000..830ab80cf1 --- /dev/null +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-detail-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-detail-element.component.ts index 4a1635ec5d..ca6ed59c12 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-detail-element.component.ts @@ -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 { + + /** + * 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>); } + /** + * Retrieve item from result object + */ initItem(item$: Observable>) { item$.pipe( find((rd: RemoteData) => rd.hasSucceeded && isNotUndefined(rd.payload)) diff --git a/src/app/shared/object-list/item-list-preview/item-list-preview.component.scss b/src/app/shared/object-list/item-list-preview/item-list-preview.component.scss deleted file mode 100644 index 8d0339f264..0000000000 --- a/src/app/shared/object-list/item-list-preview/item-list-preview.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -@import '../../../../styles/_variables.scss'; - -.h3-title { - color: $link-color; -} diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.html index 5ec6e59f95..5ec4c9a5b5 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.html @@ -1,7 +1,7 @@ - - + diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.spec.ts new file mode 100644 index 0000000000..c79812d10b --- /dev/null +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.ts index c37973ae11..5f2cd2495e 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component.ts @@ -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 { - 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>); } + /** + * Retrieve workflowitem from result object + */ initWorkflowItem(wfi$: Observable>) { wfi$.pipe( find((rd: RemoteData) => (rd.hasSucceeded && isNotUndefined(rd.payload))) ).subscribe((rd: RemoteData) => { - this.workFlow = rd.payload; + this.workflowitem = rd.payload; }); } } diff --git a/src/app/shared/object-list/item-list-preview/item-list-preview.component.html b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html similarity index 100% rename from src/app/shared/object-list/item-list-preview/item-list-preview.component.html rename to src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.scss b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.scss new file mode 100644 index 0000000000..949e96d484 --- /dev/null +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.scss @@ -0,0 +1,5 @@ +@import '../../../../../styles/variables'; + +.h3-title { + color: $link-color; +} diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts new file mode 100644 index 0000000000..9b917b56e4 --- /dev/null +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts @@ -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; + +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(); + }); + }); +}); diff --git a/src/app/shared/object-list/item-list-preview/item-list-preview.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts similarity index 69% rename from src/app/shared/object-list/item-list-preview/item-list-preview.component.ts rename to src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts index 0a853b9c5e..5112069071 100644 --- a/src/app/shared/object-list/item-list-preview/item-list-preview.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts @@ -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; /** diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.spec.ts new file mode 100644 index 0000000000..bcd323ae2a --- /dev/null +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.ts index 484ca9af11..faeeed8ea2 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.ts @@ -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 { + /** + * Represent item's status + */ public status = MyDspaceItemStatusType.ACCEPTED; } diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.html index b6771db087..5f0f1bb6d4 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.html @@ -1,7 +1,7 @@ - diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.spec.ts new file mode 100644 index 0000000000..3b2545e069 --- /dev/null +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.ts index 443d5d7e8c..36b95271c7 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component.ts @@ -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 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>); } + /** + * Retrieve workflowitem from result object + */ initWorkflowItem(wfi$: Observable>) { wfi$.pipe( find((rd: RemoteData) => (rd.hasSucceeded && isNotUndefined(rd.payload))) ).subscribe((rd: RemoteData) => { - this.workFlow = rd.payload; + this.workflowitem = rd.payload; }); } } diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-list-element.component.spec.ts new file mode 100644 index 0000000000..de2dfd73f4 --- /dev/null +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-list-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-list-element.component.ts index 7fad9d7677..ebce79c2b8 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-list-element.component.ts @@ -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 { + + /** + * 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>); } + /** + * Retrieve item from result object + */ initItem(item$: Observable>) { item$.pipe( find((rd: RemoteData) => rd.hasSucceeded && isNotUndefined(rd.payload)) diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-list-element.component.spec.ts new file mode 100644 index 0000000000..f47c05c9e9 --- /dev/null +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-list-element.component.spec.ts @@ -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; + +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); + }); +}); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-list-element.component.ts index b0df02c64c..c60b742ae0 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-list-element.component.ts @@ -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 { + /** + * 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>); } + /** + * Retrieve item from result object + */ initItem(item$: Observable>) { item$.pipe( find((rd: RemoteData) => rd.hasSucceeded && isNotUndefined(rd.payload)) diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 94d9e73e5c..a5a426f1a7 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -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';