mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
fixed existing tests and added linkType
This commit is contained in:
@@ -216,9 +216,9 @@ describe('ItemMetadataComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('it should call reinstateFieldUpdates on the objectUpdatesService with the correct url and metadata', () => {
|
it('it should call reinstateFieldUpdates on the objectUpdatesService with the correct url and metadata', () => {
|
||||||
expect(objectUpdatesService.getUpdatedFields).toHaveBeenCalledWith(url, comp.object.metadataAsList);
|
expect(objectUpdatesService.getUpdatedFields).toHaveBeenCalledWith(url, comp.item.metadataAsList);
|
||||||
expect(itemService.update).toHaveBeenCalledWith(Object.assign(comp.object, { metadata: Metadata.toMetadataMap(comp.object.metadataAsList) }));
|
expect(itemService.update).toHaveBeenCalledWith(Object.assign(comp.item, { metadata: Metadata.toMetadataMap(comp.item.metadataAsList) }));
|
||||||
expect(objectUpdatesService.getFieldUpdates).toHaveBeenCalledWith(url, comp.object.metadataAsList);
|
expect(objectUpdatesService.getFieldUpdates).toHaveBeenCalledWith(url, comp.item.metadataAsList);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -5,7 +5,6 @@ import { ObjectUpdatesService } from '../../../../core/data/object-updates/objec
|
|||||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { EditRelationshipComponent } from './edit-relationship.component';
|
import { EditRelationshipComponent } from './edit-relationship.component';
|
||||||
import { RelationshipType } from '../../../../core/shared/item-relationships/relationship-type.model';
|
import { RelationshipType } from '../../../../core/shared/item-relationships/relationship-type.model';
|
||||||
import { ResourceType } from '../../../../core/shared/resource-type';
|
|
||||||
import { Relationship } from '../../../../core/shared/item-relationships/relationship.model';
|
import { Relationship } from '../../../../core/shared/item-relationships/relationship.model';
|
||||||
import { RemoteData } from '../../../../core/data/remote-data';
|
import { RemoteData } from '../../../../core/data/remote-data';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
@@ -113,7 +112,7 @@ describe('EditRelationshipComponent', () => {
|
|||||||
|
|
||||||
comp.url = url;
|
comp.url = url;
|
||||||
comp.fieldUpdate = fieldUpdate1;
|
comp.fieldUpdate = fieldUpdate1;
|
||||||
comp.object = item;
|
comp.item = item;
|
||||||
|
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
|
@@ -32,7 +32,7 @@ describe('ModifyItemOverviewComponent', () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(ModifyItemOverviewComponent);
|
fixture = TestBed.createComponent(ModifyItemOverviewComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = mockItem;
|
comp.item = mockItem;
|
||||||
|
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
|
@@ -31,7 +31,7 @@ describe('ItemPageAbstractFieldComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(ItemPageAbstractFieldComponent);
|
fixture = TestBed.createComponent(ItemPageAbstractFieldComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
comp.item = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@@ -32,7 +32,7 @@ describe('ItemPageAuthorFieldComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(ItemPageAuthorFieldComponent);
|
fixture = TestBed.createComponent(ItemPageAuthorFieldComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = mockItemWithMetadataFieldAndValue(field, mockValue);
|
comp.item = mockItemWithMetadataFieldAndValue(field, mockValue);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@ describe('ItemPageDateFieldComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(ItemPageDateFieldComponent);
|
fixture = TestBed.createComponent(ItemPageDateFieldComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
comp.item = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@@ -33,7 +33,7 @@ describe('GenericItemPageFieldComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(GenericItemPageFieldComponent);
|
fixture = TestBed.createComponent(GenericItemPageFieldComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
comp.item = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
||||||
comp.fields = mockFields;
|
comp.fields = mockFields;
|
||||||
comp.label = mockLabel;
|
comp.label = mockLabel;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@@ -4,12 +4,9 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader';
|
import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader';
|
||||||
import { Observable } from 'rxjs';
|
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
import { RemoteData } from '../../../../core/data/remote-data';
|
|
||||||
import { ItemPageFieldComponent } from './item-page-field.component';
|
import { ItemPageFieldComponent } from './item-page-field.component';
|
||||||
import { MetadataValuesComponent } from '../../../field-components/metadata-values/metadata-values.component';
|
import { MetadataValuesComponent } from '../../../field-components/metadata-values/metadata-values.component';
|
||||||
import { of as observableOf } from 'rxjs';
|
|
||||||
import { MetadataMap, MetadataValue } from '../../../../core/shared/metadata.models';
|
import { MetadataMap, MetadataValue } from '../../../../core/shared/metadata.models';
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
||||||
|
|
||||||
@@ -40,7 +37,7 @@ describe('ItemPageFieldComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(ItemPageFieldComponent);
|
fixture = TestBed.createComponent(ItemPageFieldComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
comp.item = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
||||||
comp.fields = mockFields;
|
comp.fields = mockFields;
|
||||||
comp.label = mockLabel;
|
comp.label = mockLabel;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@@ -31,7 +31,7 @@ describe('ItemPageTitleFieldComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(ItemPageTitleFieldComponent);
|
fixture = TestBed.createComponent(ItemPageTitleFieldComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
comp.item = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@ describe('ItemPageUriFieldComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(ItemPageUriFieldComponent);
|
fixture = TestBed.createComponent(ItemPageUriFieldComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
comp.object = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
comp.item = mockItemWithMetadataFieldAndValue(mockField, mockValue);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@@ -3,19 +3,16 @@ import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
|||||||
import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader';
|
import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader';
|
||||||
import { GenericItemPageFieldComponent } from '../../field-components/specific-field/generic/generic-item-page-field.component';
|
import { GenericItemPageFieldComponent } from '../../field-components/specific-field/generic/generic-item-page-field.component';
|
||||||
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
import { ITEM } from '../../../../shared/items/switcher/listable-object-component-loader.component';
|
|
||||||
import { ItemDataService } from '../../../../core/data/item-data.service';
|
import { ItemDataService } from '../../../../core/data/item-data.service';
|
||||||
import { SearchFixedFilterService } from '../../../../+search-page/search-filters/search-filter/search-fixed-filter.service';
|
import { SearchFixedFilterService } from '../../../../+search-page/search-filters/search-filter/search-fixed-filter.service';
|
||||||
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { RemoteData } from '../../../../core/data/remote-data';
|
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { createRelationshipsObservable } from '../shared/item.component.spec';
|
import { createRelationshipsObservable } from '../shared/item.component.spec';
|
||||||
import { PublicationComponent } from './publication.component';
|
import { PublicationComponent } from './publication.component';
|
||||||
import { of as observableOf } from 'rxjs';
|
|
||||||
import { MetadataMap } from '../../../../core/shared/metadata.models';
|
import { MetadataMap } from '../../../../core/shared/metadata.models';
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
||||||
|
|
||||||
@@ -45,7 +42,6 @@ describe('PublicationComponent', () => {
|
|||||||
})],
|
})],
|
||||||
declarations: [PublicationComponent, GenericItemPageFieldComponent, TruncatePipe],
|
declarations: [PublicationComponent, GenericItemPageFieldComponent, TruncatePipe],
|
||||||
providers: [
|
providers: [
|
||||||
{provide: ITEM, useValue: mockItem},
|
|
||||||
{provide: ItemDataService, useValue: {}},
|
{provide: ItemDataService, useValue: {}},
|
||||||
{provide: SearchFixedFilterService, useValue: searchFixedFilterServiceStub},
|
{provide: SearchFixedFilterService, useValue: searchFixedFilterServiceStub},
|
||||||
{provide: TruncatableService, useValue: {}}
|
{provide: TruncatableService, useValue: {}}
|
||||||
@@ -60,6 +56,7 @@ describe('PublicationComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(PublicationComponent);
|
fixture = TestBed.createComponent(PublicationComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
|
comp.object = mockItem;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@@ -7,17 +7,14 @@ import { ItemDataService } from '../../../../core/data/item-data.service';
|
|||||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
||||||
import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader';
|
import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader';
|
||||||
import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
|
import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { ITEM } from '../../../../shared/items/switcher/listable-object-component-loader.component';
|
|
||||||
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
import { isNotEmpty } from '../../../../shared/empty.util';
|
import { isNotEmpty } from '../../../../shared/empty.util';
|
||||||
import { SearchFixedFilterService } from '../../../../+search-page/search-filters/search-filter/search-fixed-filter.service';
|
import { SearchFixedFilterService } from '../../../../+search-page/search-filters/search-filter/search-fixed-filter.service';
|
||||||
import { RelationshipType } from '../../../../core/shared/item-relationships/relationship-type.model';
|
import { RelationshipType } from '../../../../core/shared/item-relationships/relationship-type.model';
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { RemoteData } from '../../../../core/data/remote-data';
|
|
||||||
import { Relationship } from '../../../../core/shared/item-relationships/relationship.model';
|
import { Relationship } from '../../../../core/shared/item-relationships/relationship.model';
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
import { ItemComponent } from './item.component';
|
import { ItemComponent } from './item.component';
|
||||||
import { of as observableOf } from 'rxjs';
|
|
||||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
import { VarDirective } from '../../../../shared/utils/var.directive';
|
import { VarDirective } from '../../../../shared/utils/var.directive';
|
||||||
import { Observable } from 'rxjs/internal/Observable';
|
import { Observable } from 'rxjs/internal/Observable';
|
||||||
@@ -56,7 +53,6 @@ export function getItemPageFieldsTest(mockItem: Item, component) {
|
|||||||
})],
|
})],
|
||||||
declarations: [component, GenericItemPageFieldComponent, TruncatePipe],
|
declarations: [component, GenericItemPageFieldComponent, TruncatePipe],
|
||||||
providers: [
|
providers: [
|
||||||
{provide: ITEM, useValue: mockItem},
|
|
||||||
{provide: ItemDataService, useValue: {}},
|
{provide: ItemDataService, useValue: {}},
|
||||||
{provide: SearchFixedFilterService, useValue: searchFixedFilterServiceStub},
|
{provide: SearchFixedFilterService, useValue: searchFixedFilterServiceStub},
|
||||||
{provide: TruncatableService, useValue: {}}
|
{provide: TruncatableService, useValue: {}}
|
||||||
@@ -71,6 +67,7 @@ export function getItemPageFieldsTest(mockItem: Item, component) {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(component);
|
fixture = TestBed.createComponent(component);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
|
comp.object = mockItem;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@@ -386,10 +383,6 @@ describe('ItemComponent', () => {
|
|||||||
}
|
}
|
||||||
}), BrowserAnimationsModule],
|
}), BrowserAnimationsModule],
|
||||||
declarations: [ItemComponent, VarDirective],
|
declarations: [ItemComponent, VarDirective],
|
||||||
providers: [
|
|
||||||
{provide: ITEM, useValue: mockItem}
|
|
||||||
],
|
|
||||||
|
|
||||||
schemas: [NO_ERRORS_SCHEMA]
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
}).overrideComponent(ItemComponent, {
|
}).overrideComponent(ItemComponent, {
|
||||||
set: {changeDetection: ChangeDetectionStrategy.Default}
|
set: {changeDetection: ChangeDetectionStrategy.Default}
|
||||||
@@ -399,6 +392,7 @@ describe('ItemComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(ItemComponent);
|
fixture = TestBed.createComponent(ItemComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
|
comp.object = mockItem;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
representations = comp.buildRepresentations('bogus', metadataField);
|
representations = comp.buildRepresentations('bogus', metadataField);
|
||||||
}));
|
}));
|
||||||
|
@@ -33,7 +33,7 @@ describe('MetadataRepresentationListComponent', () => {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
it(`should load ${representations.length} item-type-switcher components`, () => {
|
it(`should load ${representations.length} item-type-switcher components`, () => {
|
||||||
const fields = fixture.debugElement.queryAll(By.css('ds-listable-object-component-loader'));
|
const fields = fixture.debugElement.queryAll(By.css('ds-metadata-representation-loader'));
|
||||||
expect(fields.length).toBe(representations.length);
|
expect(fields.length).toBe(representations.length);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -38,7 +38,7 @@ describe('RelatedEntitiesSearchComponent', () => {
|
|||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
fixedFilterService = (comp as any).fixedFilterService;
|
fixedFilterService = (comp as any).fixedFilterService;
|
||||||
comp.relationType = mockRelationType;
|
comp.relationType = mockRelationType;
|
||||||
comp.object = mockItem;
|
comp.item = mockItem;
|
||||||
comp.relationEntityType = mockRelationEntityType;
|
comp.relationEntityType = mockRelationEntityType;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
|
@@ -12,7 +12,7 @@ import { ClaimedSearchResultListElementComponent } from '../shared/object-list/m
|
|||||||
import { PoolSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component';
|
import { PoolSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component';
|
||||||
import { MyDSpaceNewSubmissionComponent } from './my-dspace-new-submission/my-dspace-new-submission.component';
|
import { MyDSpaceNewSubmissionComponent } from './my-dspace-new-submission/my-dspace-new-submission.component';
|
||||||
import { ItemSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component';
|
import { ItemSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component';
|
||||||
import { WorkspaceItemSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/workspace-item-my-dspace-result/workspace-item-search-result-detail-element.component';
|
import { WorkspaceItemSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component';
|
||||||
import { WorkflowItemSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component';
|
import { WorkflowItemSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component';
|
||||||
import { ClaimedTaskSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component';
|
import { ClaimedTaskSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component';
|
||||||
import { MyDSpaceGuard } from './my-dspace.guard';
|
import { MyDSpaceGuard } from './my-dspace.guard';
|
||||||
@@ -20,7 +20,7 @@ import { MyDSpaceConfigurationService } from './my-dspace-configuration.service'
|
|||||||
import { SearchResultListElementComponent } from '../shared/object-list/search-result-list-element/search-result-list-element.component';
|
import { SearchResultListElementComponent } from '../shared/object-list/search-result-list-element/search-result-list-element.component';
|
||||||
import { ItemSearchResultListElementSubmissionComponent } from '../shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component';
|
import { ItemSearchResultListElementSubmissionComponent } from '../shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component';
|
||||||
import { WorkflowItemSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component';
|
import { WorkflowItemSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component';
|
||||||
import { PoolSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-search-result-detail-element.component';
|
import { PoolSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
[config]="searchConfig.pagination"
|
[config]="searchConfig.pagination"
|
||||||
[sortConfig]="searchConfig.sort"
|
[sortConfig]="searchConfig.sort"
|
||||||
[objects]="searchResults"
|
[objects]="searchResults"
|
||||||
|
[linkType]="linkType"
|
||||||
[hideGear]="true">
|
[hideGear]="true">
|
||||||
</ds-viewable-collection></div>
|
</ds-viewable-collection></div>
|
||||||
<ds-loading *ngIf="hasNoValue(searchResults) || hasNoValue(searchResults.payload) || searchResults.isLoading" message="{{'loading.search-results' | translate}}"></ds-loading>
|
<ds-loading *ngIf="hasNoValue(searchResults) || hasNoValue(searchResults.payload) || searchResults.isLoading" message="{{'loading.search-results' | translate}}"></ds-loading>
|
||||||
|
@@ -8,6 +8,7 @@ import { PaginatedList } from '../../core/data/paginated-list';
|
|||||||
import { hasNoValue, isNotEmpty } from '../../shared/empty.util';
|
import { hasNoValue, isNotEmpty } from '../../shared/empty.util';
|
||||||
import { SortOptions } from '../../core/cache/models/sort-options.model';
|
import { SortOptions } from '../../core/cache/models/sort-options.model';
|
||||||
import { ViewMode } from '../../core/shared/view-mode.model';
|
import { ViewMode } from '../../core/shared/view-mode.model';
|
||||||
|
import { CollectionElementLinkType } from '../../shared/object-collection/collection-element-link.type';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-search-results',
|
selector: 'ds-search-results',
|
||||||
@@ -24,6 +25,8 @@ import { ViewMode } from '../../core/shared/view-mode.model';
|
|||||||
export class SearchResultsComponent {
|
export class SearchResultsComponent {
|
||||||
hasNoValue = hasNoValue;
|
hasNoValue = hasNoValue;
|
||||||
|
|
||||||
|
@Input() linkType: CollectionElementLinkType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The actual search result objects
|
* The actual search result objects
|
||||||
*/
|
*/
|
||||||
|
@@ -1 +1 @@
|
|||||||
<ds-journal-issue-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-journal-issue-search-result-grid-element>
|
<ds-journal-issue-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-journal-issue-search-result-grid-element>
|
@@ -1,15 +1,19 @@
|
|||||||
import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
|
import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { of as observableOf } from 'rxjs/internal/observable/of';
|
|
||||||
import { getEntityGridElementTestComponent } from '../../../../shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.spec';
|
import { getEntityGridElementTestComponent } from '../../../../shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.spec';
|
||||||
import { JournalIssueGridElementComponent } from './journal-issue-grid-element.component';
|
import { JournalIssueGridElementComponent } from './journal-issue-grid-element.component';
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
|
import { of as observableOf } from 'rxjs';
|
||||||
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
|
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
|
||||||
const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
|
const mockItem = Object.assign(new Item(), {
|
||||||
mockItemWithMetadata.hitHighlights = {};
|
|
||||||
mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -33,18 +37,43 @@ mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
|
describe('JournalIssueGridElementComponent',
|
||||||
mockItemWithoutMetadata.hitHighlights = {};
|
() => {
|
||||||
mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
let comp;
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
let fixture;
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('JournalIssueGridElementComponent', getEntityGridElementTestComponent(JournalIssueGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'journal-title']));
|
const truncatableServiceStub: any = {
|
||||||
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [NoopAnimationsModule],
|
||||||
|
declarations: [JournalIssueGridElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(JournalIssueGridElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
fixture = TestBed.createComponent(JournalIssueGridElementComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe(`when the journal issue is rendered`, () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a JournalIssueSearchResultGridElementComponent`, () => {
|
||||||
|
const journalIssueGridElement = fixture.debugElement.query(By.css(`ds-journal-issue-search-result-grid-element`));
|
||||||
|
expect(journalIssueGridElement).not.toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
@@ -1 +1 @@
|
|||||||
<ds-journal-volume-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-journal-volume-search-result-grid-element>
|
<ds-journal-volume-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-journal-volume-search-result-grid-element>
|
@@ -1,15 +1,19 @@
|
|||||||
import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
|
import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { of as observableOf } from 'rxjs/internal/observable/of';
|
|
||||||
import { getEntityGridElementTestComponent } from '../../../../shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.spec';
|
|
||||||
import { JournalVolumeGridElementComponent } from './journal-volume-grid-element.component';
|
import { JournalVolumeGridElementComponent } from './journal-volume-grid-element.component';
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
|
import { of as observableOf } from 'rxjs';
|
||||||
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
|
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
|
import { JournalIssueGridElementComponent } from '../journal-issue/journal-issue-grid-element.component';
|
||||||
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
|
||||||
const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
|
const mockItem = Object.assign(new Item(), {
|
||||||
mockItemWithMetadata.hitHighlights = {};
|
|
||||||
mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -33,18 +37,43 @@ mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
|
describe('JournalVolumeGridElementComponent',
|
||||||
mockItemWithoutMetadata.hitHighlights = {};
|
() => {
|
||||||
mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
let comp;
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
let fixture;
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('JournalVolumeGridElementComponent', getEntityGridElementTestComponent(JournalVolumeGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'description']));
|
const truncatableServiceStub: any = {
|
||||||
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [NoopAnimationsModule],
|
||||||
|
declarations: [JournalVolumeGridElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(JournalVolumeGridElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
fixture = TestBed.createComponent(JournalVolumeGridElementComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe(`when the journal volume is rendered`, () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a JournalVolumeSearchResultGridElementComponent`, () => {
|
||||||
|
const journalVolumeGridElement = fixture.debugElement.query(By.css(`ds-journal-volume-search-result-grid-element`));
|
||||||
|
expect(journalVolumeGridElement).not.toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@@ -1 +1 @@
|
|||||||
<ds-journal-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-journal-search-result-grid-element>
|
<ds-journal-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-journal-search-result-grid-element>
|
@@ -1,15 +1,18 @@
|
|||||||
import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
|
import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { of as observableOf } from 'rxjs/internal/observable/of';
|
import { of as observableOf } from 'rxjs/internal/observable/of';
|
||||||
import { getEntityGridElementTestComponent } from '../../../../shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.spec';
|
|
||||||
import { JournalGridElementComponent } from './journal-grid-element.component';
|
import { JournalGridElementComponent } from './journal-grid-element.component';
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
|
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
|
||||||
const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
|
const mockItem = Object.assign(new Item(), {
|
||||||
mockItemWithMetadata.hitHighlights = {};
|
|
||||||
mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -39,18 +42,43 @@ mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
|
describe('JournalGridElementComponent',
|
||||||
mockItemWithoutMetadata.hitHighlights = {};
|
() => {
|
||||||
mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
let comp;
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
let fixture;
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('JournalGridElementComponent', getEntityGridElementTestComponent(JournalGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['editor', 'publisher', 'description']));
|
const truncatableServiceStub: any = {
|
||||||
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [NoopAnimationsModule],
|
||||||
|
declarations: [JournalGridElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(JournalGridElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
fixture = TestBed.createComponent(JournalGridElementComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe(`when the journal is rendered`, () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a JournalGridElementComponent`, () => {
|
||||||
|
const journalGridElement = fixture.debugElement.query(By.css(`ds-journal-search-result-grid-element`));
|
||||||
|
expect(journalGridElement).not.toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@@ -1,15 +1,21 @@
|
|||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
||||||
<a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
||||||
<div>
|
<div>
|
||||||
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
</ds-grid-thumbnail>
|
</ds-grid-thumbnail>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None" class="card-img-top full-width">
|
||||||
|
<div>
|
||||||
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
|
</ds-grid-thumbnail>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
||||||
<h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
|
<h4 class="card-title" [innerHTML]="firstMetadataValue('dc.title')"></h4>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
<p *ngIf="dso.hasMetadata('creativework.datePublished')" class="item-date card-text text-muted">
|
<p *ngIf="dso.hasMetadata('creativework.datePublished')" class="item-date card-text text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
||||||
@@ -21,8 +27,8 @@
|
|||||||
<span [innerHTML]="firstMetadataValue('journal.title')"></span>
|
<span [innerHTML]="firstMetadataValue('journal.title')"></span>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</p>
|
</p>
|
||||||
<div class="text-center">
|
<div *ngIf="linkType != linkTypes.None" class="text-center">
|
||||||
<a [routerLink]="['/items/' + dso.id]"
|
<a [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]"
|
||||||
class="lead btn btn-primary viewButton">View</a>
|
class="lead btn btn-primary viewButton">View</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -46,4 +46,4 @@ mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('JournalIssueGridElementComponent', getEntityGridElementTestComponent(JournalIssueSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'journal-title']));
|
describe('JournalIssueSearchResultGridElementComponent', getEntityGridElementTestComponent(JournalIssueSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'journal-title']));
|
||||||
|
@@ -1,11 +1,17 @@
|
|||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
||||||
<a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
||||||
<div>
|
<div>
|
||||||
<ds-grid-thumbnail [thumbnail]="this.dso.getThumbnail() | async">
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
</ds-grid-thumbnail>
|
</ds-grid-thumbnail>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None" class="card-img-top full-width">
|
||||||
|
<div>
|
||||||
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
|
</ds-grid-thumbnail>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
||||||
@@ -21,8 +27,8 @@
|
|||||||
<span [innerHTML]="firstMetadataValue('dc.description')"></span>
|
<span [innerHTML]="firstMetadataValue('dc.description')"></span>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</p>
|
</p>
|
||||||
<div class="text-center">
|
<div *ngIf="linkType != linkTypes.None" class="text-center">
|
||||||
<a [routerLink]="['/items/' + dso.id]"
|
<a [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]"
|
||||||
class="lead btn btn-primary viewButton">View</a>
|
class="lead btn btn-primary viewButton">View</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -46,4 +46,4 @@ mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('JournalVolumeGridElementComponent', getEntityGridElementTestComponent(JournalVolumeSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'description']));
|
describe('JournalVolumeSearchResultGridElementComponent', getEntityGridElementTestComponent(JournalVolumeSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'description']));
|
||||||
|
@@ -1,23 +1,29 @@
|
|||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
||||||
<a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
||||||
<div>
|
<div>
|
||||||
<ds-grid-thumbnail [thumbnail]="this.dso.getThumbnail() | async">
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
</ds-grid-thumbnail>
|
</ds-grid-thumbnail>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None" class="card-img-top full-width">
|
||||||
|
<div>
|
||||||
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
|
</ds-grid-thumbnail>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
||||||
<h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
|
<h4 class="card-title" [innerHTML]="firstMetadataValue('dc.title')"></h4>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
<p *ngIf="dso.hasMetadata('creativework.editor')"
|
<p *ngIf="dso.hasMetadata('creativework.editor')"
|
||||||
class="item-publisher card-text text-muted">
|
class="item-publisher card-text text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
||||||
<span class="item-editor">{{dso.firstMetadataValue('creativework.editor')}}</span>
|
<span class="item-editor">{{firstMetadataValue('creativework.editor')}}</span>
|
||||||
<span *ngIf="dso.hasMetadata('creativework.publisher')" class="item-publisher">
|
<span *ngIf="dso.hasMetadata('creativework.publisher')" class="item-publisher">
|
||||||
<span>, </span>
|
<span>, </span>
|
||||||
{{dso.firstMetadataValue('creativework.publisher')}}
|
{{firstMetadataValue('creativework.publisher')}}
|
||||||
</span>
|
</span>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</p>
|
</p>
|
||||||
@@ -26,8 +32,8 @@
|
|||||||
<span [innerHTML]="firstMetadataValue('dc.description')"></span>
|
<span [innerHTML]="firstMetadataValue('dc.description')"></span>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</p>
|
</p>
|
||||||
<div class="text-center">
|
<div *ngIf="linkType != linkTypes.None" class="text-center">
|
||||||
<a [routerLink]="['/items/' + dso.id]"
|
<a [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]"
|
||||||
class="lead btn btn-primary viewButton">View</a>
|
class="lead btn btn-primary viewButton">View</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -52,4 +52,4 @@ mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('JournalGridElementComponent', getEntityGridElementTestComponent(JournalSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['editor', 'publisher', 'description']));
|
describe('JournalSearchResultGridElementComponent', getEntityGridElementTestComponent(JournalSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['editor', 'publisher', 'description']));
|
||||||
|
@@ -1 +1 @@
|
|||||||
<ds-journal-issue-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-journal-issue-search-result-list-element>
|
<ds-journal-issue-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-journal-issue-search-result-list-element>
|
@@ -1,4 +1,4 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { JournalIssueListElementComponent } from './journal-issue-list-element.component';
|
import { JournalIssueListElementComponent } from './journal-issue-list-element.component';
|
||||||
@@ -7,10 +7,7 @@ import { Item } from '../../../../core/shared/item.model';
|
|||||||
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
|
||||||
let journalIssueListElementComponent: JournalIssueListElementComponent;
|
const mockItem: Item = Object.assign(new Item(), {
|
||||||
let fixture: ComponentFixture<JournalIssueListElementComponent>;
|
|
||||||
|
|
||||||
const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
bitstreams: observableOf({}),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -33,83 +30,43 @@ const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const mockItemWithoutMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('JournalIssueListElementComponent', () => {
|
describe('JournalIssueListElementComponent',
|
||||||
beforeEach(async(() => {
|
() => {
|
||||||
TestBed.configureTestingModule({
|
let comp;
|
||||||
declarations: [ JournalIssueListElementComponent , TruncatePipe],
|
let fixture;
|
||||||
providers: [
|
|
||||||
{ provide: TruncatableService, useValue: {} }
|
|
||||||
],
|
|
||||||
|
|
||||||
schemas: [ NO_ERRORS_SCHEMA ]
|
const truncatableServiceStub: any = {
|
||||||
}).overrideComponent(JournalIssueListElementComponent, {
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
set: { changeDetection: ChangeDetectionStrategy.Default }
|
};
|
||||||
}).compileComponents();
|
|
||||||
}));
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(JournalIssueListElementComponent);
|
TestBed.configureTestingModule({
|
||||||
journalIssueListElementComponent = fixture.componentInstance;
|
declarations: [JournalIssueListElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(JournalIssueListElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
}));
|
beforeEach(async(() => {
|
||||||
|
fixture = TestBed.createComponent(JournalIssueListElementComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
describe('When the item has a journal identifier', () => {
|
describe(`when the journal issue is rendered`, () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
journalIssueListElementComponent.object = mockItemWithMetadata;
|
comp.object = mockItem;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a JournalIssueListElementComponent`, () => {
|
||||||
|
const journalIssueListElement = fixture.debugElement.query(By.css(`ds-journal-issue-search-result-list-element`));
|
||||||
|
expect(journalIssueListElement).not.toBeNull();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show the journal issues span', () => {
|
});
|
||||||
const journalIdentifierField = fixture.debugElement.query(By.css('span.item-list-journal-issues'));
|
|
||||||
expect(journalIdentifierField).not.toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the item has no journal identifier', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
journalIssueListElementComponent.object = mockItemWithoutMetadata;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not show the journal issues span', () => {
|
|
||||||
const journalIdentifierField = fixture.debugElement.query(By.css('span.item-list-journal-issues'));
|
|
||||||
expect(journalIdentifierField).toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the item has a journal number', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
journalIssueListElementComponent.object = mockItemWithMetadata;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should show the journal issue numbers span', () => {
|
|
||||||
const journalNumberField = fixture.debugElement.query(By.css('span.item-list-journal-issue-numbers'));
|
|
||||||
expect(journalNumberField).not.toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the item has no journal number', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
journalIssueListElementComponent.object = mockItemWithoutMetadata;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not show the journal issue numbers span', () => {
|
|
||||||
const journalNumberField = fixture.debugElement.query(By.css('span.item-list-journal-issue-numbers'));
|
|
||||||
expect(journalNumberField).toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -1 +1 @@
|
|||||||
<ds-journal-volume-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-journal-volume-search-result-list-element>
|
<ds-journal-volume-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-journal-volume-search-result-list-element>
|
@@ -1,4 +1,4 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { JournalVolumeListElementComponent } from './journal-volume-list-element.component';
|
import { JournalVolumeListElementComponent } from './journal-volume-list-element.component';
|
||||||
@@ -7,10 +7,7 @@ import { Item } from '../../../../core/shared/item.model';
|
|||||||
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
|
||||||
let journalVolumeListElementComponent: JournalVolumeListElementComponent;
|
const mockItem: Item = Object.assign(new Item(), {
|
||||||
let fixture: ComponentFixture<JournalVolumeListElementComponent>;
|
|
||||||
|
|
||||||
const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
bitstreams: observableOf({}),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -33,83 +30,42 @@ const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const mockItemWithoutMetadata: Item = Object.assign(new Item(), {
|
describe('JournalVolumeListElementComponent',
|
||||||
bitstreams: observableOf({}),
|
() => {
|
||||||
metadata: {
|
let comp;
|
||||||
'dc.title': [
|
let fixture;
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('JournalVolumeListElementComponent', () => {
|
const truncatableServiceStub: any = {
|
||||||
beforeEach(async(() => {
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
TestBed.configureTestingModule({
|
};
|
||||||
declarations: [ JournalVolumeListElementComponent , TruncatePipe],
|
|
||||||
providers: [
|
|
||||||
{ provide: TruncatableService, useValue: {} }
|
|
||||||
],
|
|
||||||
|
|
||||||
schemas: [ NO_ERRORS_SCHEMA ]
|
beforeEach(async(() => {
|
||||||
}).overrideComponent(JournalVolumeListElementComponent, {
|
TestBed.configureTestingModule({
|
||||||
set: { changeDetection: ChangeDetectionStrategy.Default }
|
declarations: [JournalVolumeListElementComponent, TruncatePipe],
|
||||||
}).compileComponents();
|
providers: [
|
||||||
}));
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(JournalVolumeListElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(JournalVolumeListElementComponent);
|
fixture = TestBed.createComponent(JournalVolumeListElementComponent);
|
||||||
journalVolumeListElementComponent = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
}));
|
describe(`when the journal volume is rendered`, () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
describe('When the item has a journal title', () => {
|
it(`should contain a JournalVolumeListElementComponent`, () => {
|
||||||
beforeEach(() => {
|
const journalVolumeListElement = fixture.debugElement.query(By.css(`ds-journal-volume-search-result-list-element`));
|
||||||
journalVolumeListElementComponent.object = mockItemWithMetadata;
|
expect(journalVolumeListElement).not.toBeNull();
|
||||||
fixture.detectChanges();
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show the journal title span', () => {
|
});
|
||||||
const journalTitleField = fixture.debugElement.query(By.css('span.item-list-journal-volumes'));
|
|
||||||
expect(journalTitleField).not.toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the item has no journal title', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
journalVolumeListElementComponent.object = mockItemWithoutMetadata;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not show the journal title span', () => {
|
|
||||||
const journalTitleField = fixture.debugElement.query(By.css('span.item-list-journal-volumes'));
|
|
||||||
expect(journalTitleField).toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the item has a journal identifier', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
journalVolumeListElementComponent.object = mockItemWithMetadata;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should show the journal identifiers span', () => {
|
|
||||||
const journalIdentifierField = fixture.debugElement.query(By.css('span.item-list-journal-volume-identifiers'));
|
|
||||||
expect(journalIdentifierField).not.toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the item has no journal identifier', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
journalVolumeListElementComponent.object = mockItemWithoutMetadata;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not show the journal identifiers span', () => {
|
|
||||||
const journalIdentifierField = fixture.debugElement.query(By.css('span.item-list-journal-volume-identifiers'));
|
|
||||||
expect(journalIdentifierField).toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -1 +1 @@
|
|||||||
<ds-journal-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-journal-search-result-list-element>
|
<ds-journal-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-journal-search-result-list-element>
|
@@ -1,17 +1,13 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { JournalListElementComponent } from './journal-list-element.component';
|
import { JournalListElementComponent } from './journal-list-element.component';
|
||||||
import { of as observableOf } from 'rxjs';
|
import { of as observableOf } from 'rxjs';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
import { ITEM } from '../../../../shared/items/switcher/listable-object-component-loader.component';
|
|
||||||
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
|
||||||
let journalListElementComponent: JournalListElementComponent;
|
const mockItem: Item = Object.assign(new Item(), {
|
||||||
let fixture: ComponentFixture<JournalListElementComponent>;
|
|
||||||
|
|
||||||
const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
bitstreams: observableOf({}),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -28,60 +24,44 @@ const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const mockItemWithoutMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('JournalListElementComponent', () => {
|
|
||||||
beforeEach(async(() => {
|
|
||||||
TestBed.configureTestingModule({
|
|
||||||
declarations: [ JournalListElementComponent , TruncatePipe],
|
|
||||||
providers: [
|
|
||||||
{ provide: ITEM, useValue: mockItemWithMetadata},
|
|
||||||
{ provide: TruncatableService, useValue: {} }
|
|
||||||
],
|
|
||||||
|
|
||||||
schemas: [ NO_ERRORS_SCHEMA ]
|
describe('JournalListElementComponent',
|
||||||
}).overrideComponent(JournalListElementComponent, {
|
() => {
|
||||||
set: { changeDetection: ChangeDetectionStrategy.Default }
|
let comp;
|
||||||
}).compileComponents();
|
let fixture;
|
||||||
}));
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
const truncatableServiceStub: any = {
|
||||||
fixture = TestBed.createComponent(JournalListElementComponent);
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
journalListElementComponent = fixture.componentInstance;
|
};
|
||||||
|
|
||||||
}));
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [JournalListElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(JournalListElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
describe('When the item has an issn', () => {
|
beforeEach(async(() => {
|
||||||
beforeEach(() => {
|
fixture = TestBed.createComponent(JournalListElementComponent);
|
||||||
journalListElementComponent.object = mockItemWithMetadata;
|
comp = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
}));
|
||||||
|
|
||||||
|
describe(`when the journal is rendered`, () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a JournalListElementComponent`, () => {
|
||||||
|
const journalListElement = fixture.debugElement.query(By.css(`ds-journal-search-result-list-element`));
|
||||||
|
expect(journalListElement).not.toBeNull();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show the journals span', () => {
|
});
|
||||||
const issnField = fixture.debugElement.query(By.css('span.item-list-journals'));
|
|
||||||
expect(issnField).not.toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the item has no issn', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
journalListElementComponent.object = mockItemWithoutMetadata;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not show the journals span', () => {
|
|
||||||
const issnField = fixture.debugElement.query(By.css('span.item-list-journals'));
|
|
||||||
expect(issnField).toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -1,8 +1,11 @@
|
|||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<a
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer"
|
||||||
[routerLink]="['/items/' + dso.id]" class="lead"
|
[routerLink]="['/items/' + dso.id]" class="lead"
|
||||||
[innerHTML]="firstMetadataValue('dc.title')"></a>
|
[innerHTML]="firstMetadataValue('dc.title')"></a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None"
|
||||||
|
class="lead"
|
||||||
|
[innerHTML]="firstMetadataValue('dc.title')"></span>
|
||||||
<span class="text-muted">
|
<span class="text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
||||||
<span *ngIf="dso.allMetadata(['publicationvolume.volumeNumber']).length > 0"
|
<span *ngIf="dso.allMetadata(['publicationvolume.volumeNumber']).length > 0"
|
||||||
|
@@ -55,7 +55,7 @@ const mockItemWithoutMetadata: ItemSearchResult = Object.assign(
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('JournalIssueListElementComponent', () => {
|
describe('JournalIssueSearchResultListElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [JournalIssueSearchResultListElementComponent, TruncatePipe],
|
declarations: [JournalIssueSearchResultListElementComponent, TruncatePipe],
|
||||||
|
@@ -1,8 +1,11 @@
|
|||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<a
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer"
|
||||||
[routerLink]="['/items/' + dso.id]" class="lead"
|
[routerLink]="['/items/' + dso.id]" class="lead"
|
||||||
[innerHTML]="firstMetadataValue('dc.title')"></a>
|
[innerHTML]="firstMetadataValue('dc.title')"></a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None"
|
||||||
|
class="lead"
|
||||||
|
[innerHTML]="firstMetadataValue('dc.title')"></span>
|
||||||
<span class="text-muted">
|
<span class="text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
||||||
<span *ngIf="dso.allMetadata(['journal.title']).length > 0"
|
<span *ngIf="dso.allMetadata(['journal.title']).length > 0"
|
||||||
|
@@ -54,7 +54,7 @@ const mockItemWithoutMetadata: ItemSearchResult = Object.assign(
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('JournalVolumeListElementComponent', () => {
|
describe('JournalVolumeSearchResultListElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [JournalVolumeSearchResultListElementComponent, TruncatePipe],
|
declarations: [JournalVolumeSearchResultListElementComponent, TruncatePipe],
|
||||||
|
@@ -1,8 +1,11 @@
|
|||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<a
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer"
|
||||||
[routerLink]="['/items/' + dso.id]" class="lead"
|
[routerLink]="['/items/' + dso.id]" class="lead"
|
||||||
[innerHTML]="firstMetadataValue('dc.title')"></a>
|
[innerHTML]="firstMetadataValue('dc.title')"></a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None"
|
||||||
|
class="lead"
|
||||||
|
[innerHTML]="firstMetadataValue('dc.title')"></span>
|
||||||
<span class="text-muted">
|
<span class="text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
||||||
<span *ngIf="dso.allMetadata(['creativeworkseries.issn']).length > 0"
|
<span *ngIf="dso.allMetadata(['creativeworkseries.issn']).length > 0"
|
||||||
|
@@ -50,7 +50,7 @@ const mockItemWithoutMetadata: ItemSearchResult = Object.assign(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
describe('JournalListElementComponent', () => {
|
describe('JournalSearchResultListElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [JournalSearchResultListElementComponent, TruncatePipe],
|
declarations: [JournalSearchResultListElementComponent, TruncatePipe],
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-4">
|
<div class="col-xs-12 col-md-4">
|
||||||
<ds-metadata-field-wrapper>
|
<ds-metadata-field-wrapper>
|
||||||
<ds-thumbnail [thumbnail]="this.object.getThumbnail() | async"></ds-thumbnail>
|
<ds-thumbnail [thumbnail]="object.getThumbnail() | async"></ds-thumbnail>
|
||||||
</ds-metadata-field-wrapper>
|
</ds-metadata-field-wrapper>
|
||||||
<ds-generic-item-page-field [item]="object"
|
<ds-generic-item-page-field [item]="object"
|
||||||
[fields]="['publicationvolume.volumeNumber']"
|
[fields]="['publicationvolume.volumeNumber']"
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-4">
|
<div class="col-xs-12 col-md-4">
|
||||||
<ds-metadata-field-wrapper>
|
<ds-metadata-field-wrapper>
|
||||||
<ds-thumbnail [thumbnail]="this.object.getThumbnail() | async"></ds-thumbnail>
|
<ds-thumbnail [thumbnail]="object.getThumbnail() | async"></ds-thumbnail>
|
||||||
</ds-metadata-field-wrapper>
|
</ds-metadata-field-wrapper>
|
||||||
<ds-generic-item-page-field [item]="object"
|
<ds-generic-item-page-field [item]="object"
|
||||||
[fields]="['publicationvolume.volumeNumber']"
|
[fields]="['publicationvolume.volumeNumber']"
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-4">
|
<div class="col-xs-12 col-md-4">
|
||||||
<ds-metadata-field-wrapper>
|
<ds-metadata-field-wrapper>
|
||||||
<ds-thumbnail [thumbnail]="this.object.getThumbnail() | async"></ds-thumbnail>
|
<ds-thumbnail [thumbnail]="object.getThumbnail() | async"></ds-thumbnail>
|
||||||
</ds-metadata-field-wrapper>
|
</ds-metadata-field-wrapper>
|
||||||
<ds-generic-item-page-field class="item-page-fields" [item]="object"
|
<ds-generic-item-page-field class="item-page-fields" [item]="object"
|
||||||
[fields]="['creativeworkseries.issn']"
|
[fields]="['creativeworkseries.issn']"
|
||||||
|
@@ -1,19 +1,16 @@
|
|||||||
import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
|
import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
import { ITEM } from '../../../../shared/items/switcher/listable-object-component-loader.component';
|
|
||||||
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
import { ItemDataService } from '../../../../core/data/item-data.service';
|
import { ItemDataService } from '../../../../core/data/item-data.service';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
||||||
import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader';
|
import { MockTranslateLoader } from '../../../../shared/mocks/mock-translate-loader';
|
||||||
import { RemoteData } from '../../../../core/data/remote-data';
|
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
import { isNotEmpty } from '../../../../shared/empty.util';
|
import { isNotEmpty } from '../../../../shared/empty.util';
|
||||||
import { JournalComponent } from './journal.component';
|
import { JournalComponent } from './journal.component';
|
||||||
import { of as observableOf } from 'rxjs';
|
|
||||||
import { GenericItemPageFieldComponent } from '../../../../+item-page/simple/field-components/specific-field/generic/generic-item-page-field.component';
|
import { GenericItemPageFieldComponent } from '../../../../+item-page/simple/field-components/specific-field/generic/generic-item-page-field.component';
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
||||||
|
|
||||||
@@ -55,7 +52,6 @@ describe('JournalComponent', () => {
|
|||||||
})],
|
})],
|
||||||
declarations: [JournalComponent, GenericItemPageFieldComponent, TruncatePipe],
|
declarations: [JournalComponent, GenericItemPageFieldComponent, TruncatePipe],
|
||||||
providers: [
|
providers: [
|
||||||
{provide: ITEM, useValue: mockItem},
|
|
||||||
{provide: ItemDataService, useValue: {}},
|
{provide: ItemDataService, useValue: {}},
|
||||||
{provide: TruncatableService, useValue: {}}
|
{provide: TruncatableService, useValue: {}}
|
||||||
],
|
],
|
||||||
@@ -69,6 +65,7 @@ describe('JournalComponent', () => {
|
|||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(JournalComponent);
|
fixture = TestBed.createComponent(JournalComponent);
|
||||||
comp = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
|
comp.object = mockItem;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@@ -1 +1 @@
|
|||||||
<ds-orgunit-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-orgunit-search-result-grid-element>
|
<ds-orgunit-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-orgunit-search-result-grid-element>
|
@@ -1,15 +1,17 @@
|
|||||||
import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
|
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { of as observableOf } from 'rxjs/internal/observable/of';
|
import { of as observableOf } from 'rxjs/internal/observable/of';
|
||||||
import { getEntityGridElementTestComponent } from '../../../../shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.spec';
|
|
||||||
import { OrgunitGridElementComponent } from './orgunit-grid-element.component';
|
import { OrgunitGridElementComponent } from './orgunit-grid-element.component';
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
|
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
|
||||||
const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
|
const mockItem = Object.assign(new Item(), {
|
||||||
mockItemWithMetadata.hitHighlights = {};
|
|
||||||
mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -39,18 +41,43 @@ mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
|
describe('OrgunitGridElementComponent',
|
||||||
mockItemWithoutMetadata.hitHighlights = {};
|
() => {
|
||||||
mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
let comp;
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
let fixture;
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('OrgunitGridElementComponent', getEntityGridElementTestComponent(OrgunitGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'country', 'city']));
|
const truncatableServiceStub: any = {
|
||||||
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [NoopAnimationsModule],
|
||||||
|
declarations: [OrgunitGridElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(OrgunitGridElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
fixture = TestBed.createComponent(OrgunitGridElementComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe(`when the org unit is rendered`, () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a OrgunitGridElementComponent`, () => {
|
||||||
|
const orgunitGridElement = fixture.debugElement.query(By.css(`ds-orgunit-search-result-grid-element`));
|
||||||
|
expect(orgunitGridElement).not.toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@@ -1 +1 @@
|
|||||||
<ds-person-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-person-search-result-grid-element>
|
<ds-person-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-person-search-result-grid-element>
|
@@ -1,15 +1,17 @@
|
|||||||
import { ItemSearchResult } from '../../../../shared/object-collection/shared/item-search-result.model';
|
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { of as observableOf } from 'rxjs/internal/observable/of';
|
import { of as observableOf } from 'rxjs/internal/observable/of';
|
||||||
import { getEntityGridElementTestComponent } from '../../../../shared/object-grid/item-grid-element/item-types/publication/publication-grid-element.component.spec';
|
|
||||||
import { PersonGridElementComponent } from './person-grid-element.component';
|
import { PersonGridElementComponent } from './person-grid-element.component';
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
|
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
|
||||||
const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
|
const mockItem = Object.assign(new Item(), {
|
||||||
mockItemWithMetadata.hitHighlights = {};
|
|
||||||
mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -33,18 +35,43 @@ mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
|
describe('PersonGridElementComponent',
|
||||||
mockItemWithoutMetadata.hitHighlights = {};
|
() => {
|
||||||
mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
let comp;
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
let fixture;
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('PersonGridElementComponent', getEntityGridElementTestComponent(PersonGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['email', 'jobtitle']));
|
const truncatableServiceStub: any = {
|
||||||
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [NoopAnimationsModule],
|
||||||
|
declarations: [PersonGridElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(PersonGridElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
fixture = TestBed.createComponent(PersonGridElementComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe(`when the person is rendered`, () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a PersonGridElementComponent`, () => {
|
||||||
|
const personGridElement = fixture.debugElement.query(By.css(`ds-person-search-result-grid-element`));
|
||||||
|
expect(personGridElement).not.toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@@ -1 +1 @@
|
|||||||
<ds-project-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-project-search-result-grid-element>
|
<ds-project-search-result-grid-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-project-search-result-grid-element>
|
@@ -6,10 +6,15 @@ import { ProjectGridElementComponent } from './project-grid-element.component';
|
|||||||
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/testing/utils';
|
||||||
import { PaginatedList } from '../../../../core/data/paginated-list';
|
import { PaginatedList } from '../../../../core/data/paginated-list';
|
||||||
import { PageInfo } from '../../../../core/shared/page-info.model';
|
import { PageInfo } from '../../../../core/shared/page-info.model';
|
||||||
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
|
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
|
import { PersonGridElementComponent } from '../person/person-grid-element.component';
|
||||||
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
|
||||||
const mockItemWithMetadata: ItemSearchResult = new ItemSearchResult();
|
const mockItem = Object.assign(new Item(), {
|
||||||
mockItemWithMetadata.hitHighlights = {};
|
|
||||||
mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -27,18 +32,43 @@ mockItemWithMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const mockItemWithoutMetadata: ItemSearchResult = new ItemSearchResult();
|
describe('ProjectGridElementComponent',
|
||||||
mockItemWithoutMetadata.hitHighlights = {};
|
() => {
|
||||||
mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
let comp;
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
let fixture;
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('ProjectGridElementComponent', getEntityGridElementTestComponent(ProjectGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['description']));
|
const truncatableServiceStub: any = {
|
||||||
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [NoopAnimationsModule],
|
||||||
|
declarations: [ProjectGridElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(ProjectGridElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
fixture = TestBed.createComponent(ProjectGridElementComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe(`when the project is rendered`, () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a ProjectGridElementComponent`, () => {
|
||||||
|
const projectGridElement = fixture.debugElement.query(By.css(`ds-project-search-result-grid-element`));
|
||||||
|
expect(projectGridElement).not.toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@@ -1,34 +1,40 @@
|
|||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
||||||
<a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
||||||
<div>
|
<div>
|
||||||
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
</ds-grid-thumbnail>
|
</ds-grid-thumbnail>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None" class="card-img-top full-width">
|
||||||
|
<div>
|
||||||
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
|
</ds-grid-thumbnail>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
||||||
<h4 class="card-title" [innerHTML]="dso.firstMetadataValue('organization.legalName')"></h4>
|
<h4 class="card-title" [innerHTML]="firstMetadataValue('organization.legalName')"></h4>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
<p *ngIf="dso.hasMetadata('organization.foundingDate')" class="dso-date card-text text-muted">
|
<p *ngIf="dso.hasMetadata('organization.foundingDate')" class="item-date card-text text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
||||||
<span [innerHTML]="firstMetadataValue('organization.foundingDate')"></span>
|
<span [innerHTML]="firstMetadataValue('organization.foundingDate')"></span>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</p>
|
</p>
|
||||||
<p *ngIf="dso.hasMetadata('organization.address.addressCountry')"
|
<p *ngIf="dso.hasMetadata('organization.address.addressCountry')"
|
||||||
class="dso-location card-text">
|
class="item-location card-text">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3">
|
||||||
<span class="dso-country">{{dso.firstMetadataValue('organization.address.addressCountry')}}</span>
|
<span class="item-country">{{firstMetadataValue('organization.address.addressCountry')}}</span>
|
||||||
<span *ngIf="dso.hasMetadata('organization.address.addressLocality')" class="dso-city">
|
<span *ngIf="dso.hasMetadata('organization.address.addressLocality')" class="item-city">
|
||||||
<span>, </span>
|
<span>, </span>
|
||||||
{{dso.firstMetadataValue('organization.address.addressLocality')}}
|
{{firstMetadataValue('organization.address.addressLocality')}}
|
||||||
</span>
|
</span>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</p>
|
</p>
|
||||||
<div class="text-center">
|
<div *ngIf="linkType != linkTypes.None" class="text-center">
|
||||||
<a [routerLink]="['/items/' + dso.id]"
|
<a [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]"
|
||||||
class="lead btn btn-primary viewButton">View</a>
|
class="lead btn btn-primary viewButton">View</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -52,4 +52,4 @@ mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('OrgunitGridElementComponent', getEntityGridElementTestComponent(OrgunitSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'country', 'city']));
|
describe('OrgunitSearchResultGridElementComponent', getEntityGridElementTestComponent(OrgunitSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['date', 'country', 'city']));
|
||||||
|
@@ -1,28 +1,35 @@
|
|||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
||||||
<a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]"
|
||||||
|
class="card-img-top full-width">
|
||||||
<div>
|
<div>
|
||||||
<ds-grid-thumbnail [thumbnail]="this.dso.getThumbnail() | async">
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
</ds-grid-thumbnail>
|
</ds-grid-thumbnail>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None" class="card-img-top full-width">
|
||||||
|
<div>
|
||||||
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
|
</ds-grid-thumbnail>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
||||||
<h4 class="card-title" [innerHTML]="dso.firstMetadataValue('person.familyName') + ', ' + dso.firstMetadataValue('person.givenName')"></h4>
|
<h4 class="card-title" [innerHTML]="firstMetadataValue('person.familyName') + ', ' + firstMetadataValue('person.givenName')"></h4>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
<p *ngIf="dso.hasMetadata('person.email')" class="dso-email card-text text-muted">
|
<p *ngIf="dso.hasMetadata('person.email')" class="item-email card-text text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
||||||
<span [innerHTML]="firstMetadataValue('person.email')"></span>
|
<span [innerHTML]="firstMetadataValue('person.email')"></span>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</p>
|
</p>
|
||||||
<p *ngIf="dso.hasMetadata('person.jobTitle')" class="dso-jobtitle card-text">
|
<p *ngIf="dso.hasMetadata('person.jobTitle')" class="item-jobtitle card-text">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3">
|
||||||
<span [innerHTML]="firstMetadataValue('person.jobTitle')"></span>
|
<span [innerHTML]="firstMetadataValue('person.jobTitle')"></span>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</p>
|
</p>
|
||||||
<div class="text-center">
|
<div *ngIf="linkType != linkTypes.None" class="text-center">
|
||||||
<a [routerLink]="['/items/' + dso.id]"
|
<a [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]"
|
||||||
class="lead btn btn-primary viewButton">View</a>
|
class="lead btn btn-primary viewButton">View</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -46,4 +46,4 @@ mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('PersonGridElementComponent', getEntityGridElementTestComponent(PersonSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['email', 'jobtitle']));
|
describe('PersonSearchResultGridElementComponent', getEntityGridElementTestComponent(PersonSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['email', 'jobtitle']));
|
||||||
|
@@ -1,23 +1,29 @@
|
|||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
|
||||||
<a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
|
||||||
<div>
|
<div>
|
||||||
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
</ds-grid-thumbnail>
|
</ds-grid-thumbnail>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None" class="card-img-top full-width">
|
||||||
|
<div>
|
||||||
|
<ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
|
||||||
|
</ds-grid-thumbnail>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
|
||||||
<h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
|
<h4 class="card-title" [innerHTML]="firstMetadataValue('dc.title')"></h4>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
<p *ngIf="dso.hasMetadata('dc.description')" class="dso-description card-text text-muted">
|
<p *ngIf="dso.hasMetadata('dc.description')" class="item-description card-text text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3">
|
||||||
<span [innerHTML]="firstMetadataValue('dc.description')"></span>
|
<span [innerHTML]="firstMetadataValue('dc.description')"></span>
|
||||||
</ds-truncatable-part>
|
</ds-truncatable-part>
|
||||||
</p>
|
</p>
|
||||||
<div class="text-center">
|
<div *ngIf="linkType != linkTypes.None" class="text-center">
|
||||||
<a [routerLink]="['/items/' + dso.id]"
|
<a [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/items/' + dso.id]"
|
||||||
class="lead btn btn-primary viewButton">View</a>
|
class="lead btn btn-primary viewButton">View</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -40,4 +40,4 @@ mockItemWithoutMetadata.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('ProjectGridElementComponent', getEntityGridElementTestComponent(ProjectSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['description']));
|
describe('ProjectSearchResultGridElementComponent', getEntityGridElementTestComponent(ProjectSearchResultGridElementComponent, mockItemWithMetadata, mockItemWithoutMetadata, ['description']));
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
<ng-template #descTemplate>
|
<ng-template #descTemplate>
|
||||||
<span class="text-muted">
|
<span class="text-muted">
|
||||||
<span *ngIf="object.allMetadata(['dc.description']).length > 0"
|
<span *ngIf="metadataRepresentation.allMetadata(['dc.description']).length > 0"
|
||||||
class="item-list-job-title">
|
class="item-list-job-title">
|
||||||
<span [innerHTML]="firstMetadataValue(['dc.description'])"></span>
|
<span [innerHTML]="metadataRepresentation.firstMetadataValue(['dc.description'])"></span>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
<ds-truncatable [id]="object.id">
|
<ds-truncatable [id]="metadataRepresentation.id">
|
||||||
<a [routerLink]="['/items/' + object.id]"
|
<a [routerLink]="['/items/' + metadataRepresentation.id]"
|
||||||
[innerHTML]="firstMetadataValue('organization.legalName')"
|
[innerHTML]="metadataRepresentation.firstMetadataValue('organization.legalName')"
|
||||||
[tooltip]="descTemplate"></a>
|
[tooltip]="descTemplate"></a>
|
||||||
</ds-truncatable>
|
</ds-truncatable>
|
||||||
|
@@ -1,8 +1,7 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
|
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
|
||||||
import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
|
import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
|
||||||
import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
|
import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
|
||||||
|
import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model';
|
||||||
|
|
||||||
@metadataRepresentationComponent('OrgUnit', MetadataRepresentationType.Item)
|
@metadataRepresentationComponent('OrgUnit', MetadataRepresentationType.Item)
|
||||||
@Component({
|
@Component({
|
||||||
@@ -12,5 +11,6 @@ import { MetadataRepresentationType } from '../../../../core/shared/metadata-rep
|
|||||||
/**
|
/**
|
||||||
* The component for displaying a list element for an item of the type OrgUnit
|
* The component for displaying a list element for an item of the type OrgUnit
|
||||||
*/
|
*/
|
||||||
export class OrgunitItemPageListElementComponent extends AbstractListableElementComponent<Item> {
|
export class OrgunitItemPageListElementComponent {
|
||||||
|
metadataRepresentation: ItemMetadataRepresentation;
|
||||||
}
|
}
|
||||||
|
@@ -1 +1 @@
|
|||||||
<ds-orgunit-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-orgunit-search-result-list-element>
|
<ds-orgunit-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-orgunit-search-result-list-element>
|
@@ -1,17 +1,13 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { OrgUnitListElementComponent } from './orgunit-list-element.component';
|
import { OrgUnitListElementComponent } from './orgunit-list-element.component';
|
||||||
import { of as observableOf } from 'rxjs';
|
import { of as observableOf } from 'rxjs';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
import { ITEM } from '../../../../shared/items/switcher/listable-object-component-loader.component';
|
|
||||||
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
|
||||||
let orgUnitListElementComponent: OrgUnitListElementComponent;
|
const mockItem: Item = Object.assign(new Item(), {
|
||||||
let fixture: ComponentFixture<OrgUnitListElementComponent>;
|
|
||||||
|
|
||||||
const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
bitstreams: observableOf({}),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -28,60 +24,43 @@ const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const mockItemWithoutMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('OrgUnitListElementComponent', () => {
|
describe('OrgunitListElementComponent',
|
||||||
beforeEach(async(() => {
|
() => {
|
||||||
TestBed.configureTestingModule({
|
let comp;
|
||||||
declarations: [ OrgUnitListElementComponent , TruncatePipe],
|
let fixture;
|
||||||
providers: [
|
|
||||||
{ provide: ITEM, useValue: mockItemWithMetadata},
|
|
||||||
{ provide: TruncatableService, useValue: {} }
|
|
||||||
],
|
|
||||||
|
|
||||||
schemas: [ NO_ERRORS_SCHEMA ]
|
const truncatableServiceStub: any = {
|
||||||
}).overrideComponent(OrgUnitListElementComponent, {
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
set: { changeDetection: ChangeDetectionStrategy.Default }
|
};
|
||||||
}).compileComponents();
|
|
||||||
}));
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(OrgUnitListElementComponent);
|
TestBed.configureTestingModule({
|
||||||
orgUnitListElementComponent = fixture.componentInstance;
|
declarations: [OrgUnitListElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(OrgUnitListElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
}));
|
beforeEach(async(() => {
|
||||||
|
fixture = TestBed.createComponent(OrgUnitListElementComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
describe('When the item has an orgunit description', () => {
|
describe(`when the orgunit is rendered`, () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
orgUnitListElementComponent.object = mockItemWithMetadata;
|
comp.object = mockItem;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a OrgUnitListElementComponent`, () => {
|
||||||
|
const orgunitListElement = fixture.debugElement.query(By.css(`ds-orgunit-search-result-list-element`));
|
||||||
|
expect(orgunitListElement).not.toBeNull();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show the description span', () => {
|
});
|
||||||
const orgunitDescriptionField = fixture.debugElement.query(By.css('span.item-list-orgunit-description'));
|
|
||||||
expect(orgunitDescriptionField).not.toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the item has no orgunit description', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
orgUnitListElementComponent.object = mockItemWithoutMetadata;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not show the description span', () => {
|
|
||||||
const orgunitDescriptionField = fixture.debugElement.query(By.css('span.item-list-orgunit-description'));
|
|
||||||
expect(orgunitDescriptionField).toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -1,15 +1,15 @@
|
|||||||
<ng-template #descTemplate>
|
<ng-template #descTemplate>
|
||||||
<span class="text-muted">
|
<span class="text-muted">
|
||||||
<span *ngIf="object.allMetadata(['person.jobTitle']).length > 0"
|
<span *ngIf="metadataRepresentation.allMetadata(['person.jobTitle']).length > 0"
|
||||||
class="item-list-job-title">
|
class="item-list-job-title">
|
||||||
<span *ngFor="let value of allMetadataValues(['person.jobTitle']); let last=last;">
|
<span *ngFor="let value of metadataRepresentation.allMetadataValues(['person.jobTitle']); let last=last;">
|
||||||
<span [innerHTML]="value"><span [innerHTML]="value"></span></span>
|
<span [innerHTML]="value"><span [innerHTML]="value"></span></span>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
<ds-truncatable [id]="object.id">
|
<ds-truncatable [id]="metadataRepresentation.id">
|
||||||
<a [routerLink]="['/items/' + object.id]"
|
<a [routerLink]="['/items/' + metadataRepresentation.id]"
|
||||||
[innerHTML]="firstMetadataValue('person.familyName') + ', ' + firstMetadataValue('person.givenName')"
|
[innerHTML]="metadataRepresentation.firstMetadataValue('person.familyName') + ', ' + metadataRepresentation.firstMetadataValue('person.givenName')"
|
||||||
[tooltip]="descTemplate"></a>
|
[tooltip]="descTemplate"></a>
|
||||||
</ds-truncatable>
|
</ds-truncatable>
|
||||||
|
@@ -3,6 +3,8 @@ import { AbstractListableElementComponent } from '../../../../shared/object-coll
|
|||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
|
import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
|
||||||
import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
|
import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
|
||||||
|
import { MetadataRepresentationListElementComponent } from '../../../../shared/object-list/metadata-representation-list-element/metadata-representation-list-element.component';
|
||||||
|
import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model';
|
||||||
|
|
||||||
@metadataRepresentationComponent('Person', MetadataRepresentationType.Item)
|
@metadataRepresentationComponent('Person', MetadataRepresentationType.Item)
|
||||||
@Component({
|
@Component({
|
||||||
@@ -12,5 +14,6 @@ import { MetadataRepresentationType } from '../../../../core/shared/metadata-rep
|
|||||||
/**
|
/**
|
||||||
* The component for displaying a list element for an item of the type Person
|
* The component for displaying a list element for an item of the type Person
|
||||||
*/
|
*/
|
||||||
export class PersonItemPageListElementComponent extends AbstractListableElementComponent<Item> {
|
export class PersonItemPageListElementComponent {
|
||||||
|
metadataRepresentation: ItemMetadataRepresentation;
|
||||||
}
|
}
|
||||||
|
@@ -1 +1 @@
|
|||||||
<ds-person-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-person-search-result-list-element>
|
<ds-person-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-person-search-result-list-element>
|
@@ -6,11 +6,9 @@ import { of as observableOf } from 'rxjs';
|
|||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
import { OrgUnitListElementComponent } from '../orgunit/orgunit-list-element.component';
|
||||||
|
|
||||||
let personListElementComponent: PersonListElementComponent;
|
const mockItem: Item = Object.assign(new Item(), {
|
||||||
let fixture: ComponentFixture<PersonListElementComponent>;
|
|
||||||
|
|
||||||
const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
bitstreams: observableOf({}),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -27,59 +25,43 @@ const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const mockItemWithoutMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('PersonListElementComponent', () => {
|
describe('PersonListElementComponent',
|
||||||
beforeEach(async(() => {
|
() => {
|
||||||
TestBed.configureTestingModule({
|
let comp;
|
||||||
declarations: [ PersonListElementComponent , TruncatePipe],
|
let fixture;
|
||||||
providers: [
|
|
||||||
{ provide: TruncatableService, useValue: {} }
|
|
||||||
],
|
|
||||||
|
|
||||||
schemas: [ NO_ERRORS_SCHEMA ]
|
const truncatableServiceStub: any = {
|
||||||
}).overrideComponent(PersonListElementComponent, {
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
set: { changeDetection: ChangeDetectionStrategy.Default }
|
};
|
||||||
}).compileComponents();
|
|
||||||
}));
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(PersonListElementComponent);
|
TestBed.configureTestingModule({
|
||||||
personListElementComponent = fixture.componentInstance;
|
declarations: [PersonListElementComponent, TruncatePipe],
|
||||||
|
providers: [
|
||||||
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(PersonListElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
}));
|
beforeEach(async(() => {
|
||||||
|
fixture = TestBed.createComponent(PersonListElementComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
describe('When the item has a job title', () => {
|
describe(`when the person is rendered`, () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
personListElementComponent.object = mockItemWithMetadata;
|
comp.object = mockItem;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should contain a PersonListElementComponent`, () => {
|
||||||
|
const personListElement = fixture.debugElement.query(By.css(`ds-person-search-result-list-element`));
|
||||||
|
expect(personListElement).not.toBeNull();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show the job title span', () => {
|
});
|
||||||
const jobTitleField = fixture.debugElement.query(By.css('span.item-list-job-title'));
|
|
||||||
expect(jobTitleField).not.toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('When the item has no job title', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
personListElementComponent.object = mockItemWithoutMetadata;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not show the job title span', () => {
|
|
||||||
const jobTitleField = fixture.debugElement.query(By.css('span.item-list-job-title'));
|
|
||||||
expect(jobTitleField).toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -1 +1 @@
|
|||||||
<ds-project-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }"></ds-project-search-result-list-element>
|
<ds-project-search-result-list-element [object]="{ indexableObject: object, hitHighlights: {} }" [linkType]="linkType"></ds-project-search-result-list-element>
|
@@ -1,17 +1,14 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, TestBed } from '@angular/core/testing';
|
||||||
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { ProjectListElementComponent } from './project-list-element.component';
|
|
||||||
import { of as observableOf } from 'rxjs';
|
import { of as observableOf } from 'rxjs';
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
import { TruncatePipe } from '../../../../shared/utils/truncate.pipe';
|
||||||
import { ITEM } from '../../../../shared/items/switcher/listable-object-component-loader.component';
|
|
||||||
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
import { TruncatableService } from '../../../../shared/truncatable/truncatable.service';
|
||||||
|
import { PersonListElementComponent } from '../person/person-list-element.component';
|
||||||
|
import { ProjectListElementComponent } from './project-list-element.component';
|
||||||
|
|
||||||
let projectListElementComponent: ProjectListElementComponent;
|
const mockItem: Item = Object.assign(new Item(), {
|
||||||
let fixture: ComponentFixture<ProjectListElementComponent>;
|
|
||||||
|
|
||||||
const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: observableOf({}),
|
bitstreams: observableOf({}),
|
||||||
metadata: {
|
metadata: {
|
||||||
'dc.title': [
|
'dc.title': [
|
||||||
@@ -28,60 +25,42 @@ const mockItemWithMetadata: Item = Object.assign(new Item(), {
|
|||||||
// ]
|
// ]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const mockItemWithoutMetadata: Item = Object.assign(new Item(), {
|
describe('ProjectListElementComponent',
|
||||||
bitstreams: observableOf({}),
|
() => {
|
||||||
metadata: {
|
let comp;
|
||||||
'dc.title': [
|
let fixture;
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'This is just another title'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('ProjectListElementComponent', () => {
|
const truncatableServiceStub: any = {
|
||||||
beforeEach(async(() => {
|
isCollapsed: (id: number) => observableOf(true),
|
||||||
TestBed.configureTestingModule({
|
};
|
||||||
declarations: [ ProjectListElementComponent , TruncatePipe],
|
|
||||||
providers: [
|
|
||||||
{ provide: ITEM, useValue: mockItemWithMetadata},
|
|
||||||
{ provide: TruncatableService, useValue: {} }
|
|
||||||
],
|
|
||||||
|
|
||||||
schemas: [ NO_ERRORS_SCHEMA ]
|
beforeEach(async(() => {
|
||||||
}).overrideComponent(ProjectListElementComponent, {
|
TestBed.configureTestingModule({
|
||||||
set: { changeDetection: ChangeDetectionStrategy.Default }
|
declarations: [ProjectListElementComponent, TruncatePipe],
|
||||||
}).compileComponents();
|
providers: [
|
||||||
}));
|
{ provide: TruncatableService, useValue: truncatableServiceStub },
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
}).overrideComponent(ProjectListElementComponent, {
|
||||||
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
fixture = TestBed.createComponent(ProjectListElementComponent);
|
fixture = TestBed.createComponent(ProjectListElementComponent);
|
||||||
projectListElementComponent = fixture.componentInstance;
|
comp = fixture.componentInstance;
|
||||||
|
}));
|
||||||
|
|
||||||
}));
|
describe(`when the project is rendered`, () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
comp.object = mockItem;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
// describe('When the item has a status', () => {
|
it(`should contain a ProjectListElementComponent`, () => {
|
||||||
// beforeEach(() => {
|
const projectListElement = fixture.debugElement.query(By.css(`ds-project-search-result-list-element`));
|
||||||
// projectListElementComponent.item = mockItemWithMetadata;
|
expect(projectListElement).not.toBeNull();
|
||||||
// fixture.detectChanges();
|
});
|
||||||
// });
|
});
|
||||||
//
|
|
||||||
// it('should show the status span', () => {
|
});
|
||||||
// const statusField = fixture.debugElement.query(By.css('span.item-list-status'));
|
|
||||||
// expect(statusField).not.toBeNull();
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// describe('When the item has no status', () => {
|
|
||||||
// beforeEach(() => {
|
|
||||||
// projectListElementComponent.item = mockItemWithoutMetadata;
|
|
||||||
// fixture.detectChanges();
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it('should not show the status span', () => {
|
|
||||||
// const statusField = fixture.debugElement.query(By.css('span.item-list-status'));
|
|
||||||
// expect(statusField).toBeNull();
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
});
|
|
@@ -1,8 +1,11 @@
|
|||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<a
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer"
|
||||||
[routerLink]="['/items/' + dso.id]" class="lead"
|
[routerLink]="['/items/' + dso.id]" class="lead"
|
||||||
[innerHTML]="firstMetadataValue('organization.legalName')"></a>
|
[innerHTML]="firstMetadataValue('organization.legalName')"></a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None"
|
||||||
|
class="lead"
|
||||||
|
[innerHTML]="firstMetadataValue('organization.legalName')"></span>
|
||||||
<span class="text-muted">
|
<span class="text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="3">
|
<ds-truncatable-part [id]="dso.id" [minLines]="3">
|
||||||
<span *ngIf="dso.allMetadata(['dc.description']).length > 0"
|
<span *ngIf="dso.allMetadata(['dc.description']).length > 0"
|
||||||
|
@@ -48,7 +48,7 @@ const mockItemWithoutMetadata: ItemSearchResult = Object.assign(
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('OrgUnitListElementComponent', () => {
|
describe('OrgUnitSearchResultListElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ OrgunitSearchResultListElementComponent , TruncatePipe],
|
declarations: [ OrgunitSearchResultListElementComponent , TruncatePipe],
|
||||||
|
@@ -1,8 +1,11 @@
|
|||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<a
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer"
|
||||||
[routerLink]="['/items/' + dso.id]" class="lead"
|
[routerLink]="['/items/' + dso.id]" class="lead"
|
||||||
[innerHTML]="firstMetadataValue('person.familyName') + ', ' + firstMetadataValue('person.givenName')"></a>
|
[innerHTML]="firstMetadataValue('person.familyName') + ', ' + firstMetadataValue('person.givenName')"></a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None"
|
||||||
|
class="lead"
|
||||||
|
[innerHTML]="firstMetadataValue('person.familyName') + ', ' + firstMetadataValue('person.givenName')"></span>
|
||||||
<span class="text-muted">
|
<span class="text-muted">
|
||||||
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
<ds-truncatable-part [id]="dso.id" [minLines]="1">
|
||||||
<span *ngIf="dso.allMetadata(['person.jobTitle']).length > 0"
|
<span *ngIf="dso.allMetadata(['person.jobTitle']).length > 0"
|
||||||
|
@@ -48,7 +48,7 @@ const mockItemWithoutMetadata: ItemSearchResult = Object.assign(
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('PersonListElementComponent', () => {
|
describe('PersonSearchResultListElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [PersonSearchResultListElementComponent, TruncatePipe],
|
declarations: [PersonSearchResultListElementComponent, TruncatePipe],
|
||||||
|
@@ -1,16 +1,19 @@
|
|||||||
<ds-truncatable [id]="dso.id">
|
<ds-truncatable [id]="dso.id">
|
||||||
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
<ds-item-type-badge [object]="dso"></ds-item-type-badge>
|
||||||
<a
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer"
|
||||||
[routerLink]="['/items/' + dso.id]" class="lead"
|
[routerLink]="['/items/' + dso.id]" class="lead"
|
||||||
[innerHTML]="firstMetadataValue('dc.title')"></a>
|
[innerHTML]="firstMetadataValue('dc.title')"></a>
|
||||||
<!--<span class="text-muted">-->
|
<span *ngIf="linkType == linkTypes.None"
|
||||||
<!--<ds-truncatable-part [id]="dso.id" [minLines]="1">-->
|
class="lead"
|
||||||
<!--<span *ngIf="dso.allMetadata(['project.identifier.status']).length > 0"-->
|
[innerHTML]="firstMetadataValue('dc.title')"></span>
|
||||||
<!--class="item-list-status">-->
|
<!--<span class="text-muted">-->
|
||||||
<!--<span *ngFor="let value of allMetadataValues(['project.identifier.status']); let last=last;">-->
|
<!--<ds-truncatable-part [id]="dso.id" [minLines]="1">-->
|
||||||
<!--<span [innerHTML]="value"><span [innerHTML]="value"></span></span>-->
|
<!--<span *ngIf="dso.allMetadata(['project.identifier.status']).length > 0"-->
|
||||||
<!--</span>-->
|
<!--class="item-list-status">-->
|
||||||
<!--</span>-->
|
<!--<span *ngFor="let value of allMetadataValues(['project.identifier.status']); let last=last;">-->
|
||||||
<!--</ds-truncatable-part>-->
|
<!--<span [innerHTML]="value"><span [innerHTML]="value"></span></span>-->
|
||||||
<!--</span>-->
|
<!--</span>-->
|
||||||
</ds-truncatable>
|
<!--</span>-->
|
||||||
|
<!--</ds-truncatable-part>-->
|
||||||
|
<!--</span>-->
|
||||||
|
</ds-truncatable>
|
||||||
|
@@ -48,7 +48,7 @@ const mockItemWithoutMetadata: ItemSearchResult = Object.assign(
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('ProjectListElementComponent', () => {
|
describe('ProjectSearchResultListElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ProjectSearchResultListElementComponent, TruncatePipe],
|
declarations: [ProjectSearchResultListElementComponent, TruncatePipe],
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-4">
|
<div class="col-xs-12 col-md-4">
|
||||||
<ds-metadata-field-wrapper>
|
<ds-metadata-field-wrapper>
|
||||||
<ds-thumbnail [thumbnail]="this.object.getThumbnail() | async" [defaultImage]="'assets/images/orgunit-placeholder.svg'"></ds-thumbnail>
|
<ds-thumbnail [thumbnail]="object.getThumbnail() | async" [defaultImage]="'assets/images/orgunit-placeholder.svg'"></ds-thumbnail>
|
||||||
</ds-metadata-field-wrapper>
|
</ds-metadata-field-wrapper>
|
||||||
<ds-generic-item-page-field [item]="object"
|
<ds-generic-item-page-field [item]="object"
|
||||||
[fields]="['organization.foundingDate']"
|
[fields]="['organization.foundingDate']"
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
<h2 class="item-page-title-field">
|
<h2 class="item-page-title-field">
|
||||||
{{'person.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="[item?.firstMetadata('person.familyName'), item?.firstMetadata('person.givenName')]" [separator]="', '"></ds-metadata-values>
|
{{'person.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="[object?.firstMetadata('person.familyName'), object?.firstMetadata('person.givenName')]" [separator]="', '"></ds-metadata-values>
|
||||||
</h2>
|
</h2>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-4">
|
<div class="col-xs-12 col-md-4">
|
||||||
<ds-metadata-field-wrapper>
|
<ds-metadata-field-wrapper>
|
||||||
<ds-thumbnail [thumbnail]="this.item.getThumbnail() | async" [defaultImage]="'assets/images/person-placeholder.svg'"></ds-thumbnail>
|
<ds-thumbnail [thumbnail]="this.object.getThumbnail() | async" [defaultImage]="'assets/images/person-placeholder.svg'"></ds-thumbnail>
|
||||||
</ds-metadata-field-wrapper>
|
</ds-metadata-field-wrapper>
|
||||||
<ds-generic-item-page-field [item]="item"
|
<ds-generic-item-page-field [item]="object"
|
||||||
[fields]="['person.email']"
|
[fields]="['person.email']"
|
||||||
[label]="'person.page.email'">
|
[label]="'person.page.email'">
|
||||||
</ds-generic-item-page-field>
|
</ds-generic-item-page-field>
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
<!--[fields]="['person.identifier.orcid']"-->
|
<!--[fields]="['person.identifier.orcid']"-->
|
||||||
<!--[label]="'person.page.orcid'">-->
|
<!--[label]="'person.page.orcid'">-->
|
||||||
<!--</ds-generic-item-page-field>-->
|
<!--</ds-generic-item-page-field>-->
|
||||||
<ds-generic-item-page-field [item]="item"
|
<ds-generic-item-page-field [item]="object"
|
||||||
[fields]="['person.birthDate']"
|
[fields]="['person.birthDate']"
|
||||||
[label]="'person.page.birthdate'">
|
[label]="'person.page.birthdate'">
|
||||||
</ds-generic-item-page-field>
|
</ds-generic-item-page-field>
|
||||||
@@ -32,26 +32,26 @@
|
|||||||
[items]="orgUnits$ | async"
|
[items]="orgUnits$ | async"
|
||||||
[label]="'relationships.isOrgUnitOf' | translate">
|
[label]="'relationships.isOrgUnitOf' | translate">
|
||||||
</ds-related-items>
|
</ds-related-items>
|
||||||
<ds-generic-item-page-field [item]="item"
|
<ds-generic-item-page-field [item]="object"
|
||||||
[fields]="['person.jobTitle']"
|
[fields]="['person.jobTitle']"
|
||||||
[label]="'person.page.jobtitle'">
|
[label]="'person.page.jobtitle'">
|
||||||
</ds-generic-item-page-field>
|
</ds-generic-item-page-field>
|
||||||
<ds-generic-item-page-field [item]="item"
|
<ds-generic-item-page-field [item]="object"
|
||||||
[fields]="['person.familyName']"
|
[fields]="['person.familyName']"
|
||||||
[label]="'person.page.lastname'">
|
[label]="'person.page.lastname'">
|
||||||
</ds-generic-item-page-field>
|
</ds-generic-item-page-field>
|
||||||
<ds-generic-item-page-field [item]="item"
|
<ds-generic-item-page-field [item]="object"
|
||||||
[fields]="['person.givenName']"
|
[fields]="['person.givenName']"
|
||||||
[label]="'person.page.firstname'">
|
[label]="'person.page.firstname'">
|
||||||
</ds-generic-item-page-field>
|
</ds-generic-item-page-field>
|
||||||
<div>
|
<div>
|
||||||
<a class="btn btn-outline-primary" [routerLink]="['/items/' + item.id + '/full']">
|
<a class="btn btn-outline-primary" [routerLink]="['/items/' + object.id + '/full']">
|
||||||
{{"item.page.link.full" | translate}}
|
{{"item.page.link.full" | translate}}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-5 w-100">
|
<div class="mt-5 w-100">
|
||||||
<ds-related-entities-search [item]="item"
|
<ds-related-entities-search [item]="object"
|
||||||
[relationType]="'isAuthorOfPublication'">
|
[relationType]="'isAuthorOfPublication'">
|
||||||
</ds-related-entities-search>
|
</ds-related-entities-search>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-4">
|
<div class="col-xs-12 col-md-4">
|
||||||
<ds-metadata-field-wrapper>
|
<ds-metadata-field-wrapper>
|
||||||
<ds-thumbnail [thumbnail]="this.object.getThumbnail() | async" [defaultImage]="'assets/images/project-placeholder.svg'"></ds-thumbnail>
|
<ds-thumbnail [thumbnail]="object.getThumbnail() | async" [defaultImage]="'assets/images/project-placeholder.svg'"></ds-thumbnail>
|
||||||
</ds-metadata-field-wrapper>
|
</ds-metadata-field-wrapper>
|
||||||
<!--<ds-generic-item-page-field [item]="item"-->
|
<!--<ds-generic-item-page-field [item]="item"-->
|
||||||
<!--[fields]="['project.identifier.status']"-->
|
<!--[fields]="['project.identifier.status']"-->
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<form #form="ngForm" (ngSubmit)="onSubmit(currentObject)"
|
<form #form="ngForm" (ngSubmit)="onSubmit(currentObject)"
|
||||||
[action]="action" (keydown)="onKeydown($event)"
|
[action]="action"
|
||||||
(keydown.arrowdown)="shiftFocusDown($event)"
|
(keydown.arrowdown)="shiftFocusDown($event)"
|
||||||
(keydown.arrowup)="shiftFocusUp($event)" (keydown.esc)="close()"
|
(keydown.arrowup)="shiftFocusUp($event)" (keydown.esc)="close()"
|
||||||
(dsClickOutside)="close();">
|
(dsClickOutside)="close();">
|
||||||
@@ -14,9 +14,7 @@
|
|||||||
<div class="dropdown-list">
|
<div class="dropdown-list">
|
||||||
<div *ngFor="let suggestionOption of suggestions">
|
<div *ngFor="let suggestionOption of suggestions">
|
||||||
<button class="d-block dropdown-item" (click)="onClickSuggestion(suggestionOption)" #suggestion>
|
<button class="d-block dropdown-item" (click)="onClickSuggestion(suggestionOption)" #suggestion>
|
||||||
<div class="click-blocker">
|
<ds-listable-object-component-loader [object]="suggestionOption" [viewMode]="viewMode" [linkType]="linkTypes.None"></ds-listable-object-component-loader>
|
||||||
</div>
|
|
||||||
<ds-listable-object-component-loader [object]="suggestionOption" [viewMode]="viewMode"></ds-listable-object-component-loader>
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -3,6 +3,7 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|||||||
import { InputSuggestionsComponent } from '../input-suggestions.component';
|
import { InputSuggestionsComponent } from '../input-suggestions.component';
|
||||||
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
|
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
|
||||||
import { ViewMode } from '../../../core/shared/view-mode.model';
|
import { ViewMode } from '../../../core/shared/view-mode.model';
|
||||||
|
import { CollectionElementLinkType } from '../../object-collection/collection-element-link.type';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-dso-input-suggestions',
|
selector: 'ds-dso-input-suggestions',
|
||||||
@@ -24,6 +25,7 @@ import { ViewMode } from '../../../core/shared/view-mode.model';
|
|||||||
*/
|
*/
|
||||||
export class DsoInputSuggestionsComponent extends InputSuggestionsComponent {
|
export class DsoInputSuggestionsComponent extends InputSuggestionsComponent {
|
||||||
viewMode = ViewMode.ListElement;
|
viewMode = ViewMode.ListElement;
|
||||||
|
linkTypes = CollectionElementLinkType;
|
||||||
/**
|
/**
|
||||||
* The suggestions that should be shown
|
* The suggestions that should be shown
|
||||||
*/
|
*/
|
||||||
|
@@ -5,19 +5,9 @@
|
|||||||
white-space: normal;
|
white-space: normal;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
padding: $input-padding-y $input-padding-x;
|
padding: $input-padding-y $input-padding-x;
|
||||||
position: relative;
|
|
||||||
|
|
||||||
&:focus {
|
&:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.click-blocker {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -0,0 +1,3 @@
|
|||||||
|
export enum CollectionElementLinkType {
|
||||||
|
None, Link, ExternalLink
|
||||||
|
}
|
@@ -3,6 +3,7 @@
|
|||||||
[objects]="objects"
|
[objects]="objects"
|
||||||
[hasBorder]="hasBorder"
|
[hasBorder]="hasBorder"
|
||||||
[hideGear]="hideGear"
|
[hideGear]="hideGear"
|
||||||
|
[linkType]="linkType"
|
||||||
[context]="context"
|
[context]="context"
|
||||||
(paginationChange)="onPaginationChange($event)"
|
(paginationChange)="onPaginationChange($event)"
|
||||||
(pageChange)="onPageChange($event)"
|
(pageChange)="onPageChange($event)"
|
||||||
@@ -16,6 +17,7 @@
|
|||||||
[sortConfig]="sortConfig"
|
[sortConfig]="sortConfig"
|
||||||
[objects]="objects"
|
[objects]="objects"
|
||||||
[hideGear]="hideGear"
|
[hideGear]="hideGear"
|
||||||
|
[linkType]="linkType"
|
||||||
[context]="context"
|
[context]="context"
|
||||||
(paginationChange)="onPaginationChange($event)"
|
(paginationChange)="onPaginationChange($event)"
|
||||||
(pageChange)="onPageChange($event)"
|
(pageChange)="onPageChange($event)"
|
||||||
@@ -29,6 +31,7 @@
|
|||||||
[sortConfig]="sortConfig"
|
[sortConfig]="sortConfig"
|
||||||
[objects]="objects"
|
[objects]="objects"
|
||||||
[hideGear]="hideGear"
|
[hideGear]="hideGear"
|
||||||
|
[linkType]="linkType"
|
||||||
[context]="context"
|
[context]="context"
|
||||||
*ngIf="(currentMode$ | async) === viewModeEnum.DetailedListElement">
|
*ngIf="(currentMode$ | async) === viewModeEnum.DetailedListElement">
|
||||||
</ds-object-detail>
|
</ds-object-detail>
|
||||||
|
@@ -11,6 +11,9 @@ import { SortDirection, SortOptions } from '../../core/cache/models/sort-options
|
|||||||
import { ListableObject } from './shared/listable-object.model';
|
import { ListableObject } from './shared/listable-object.model';
|
||||||
import { isNotEmpty } from '../empty.util';
|
import { isNotEmpty } from '../empty.util';
|
||||||
import { ViewMode } from '../../core/shared/view-mode.model';
|
import { ViewMode } from '../../core/shared/view-mode.model';
|
||||||
|
import { CollectionElementLinkType } from './collection-element-link.type';
|
||||||
|
import { PaginatedList } from '../../core/data/paginated-list';
|
||||||
|
import { Context } from '../../core/shared/context.model';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-viewable-collection',
|
selector: 'ds-viewable-collection',
|
||||||
@@ -19,12 +22,13 @@ import { ViewMode } from '../../core/shared/view-mode.model';
|
|||||||
})
|
})
|
||||||
export class ObjectCollectionComponent implements OnInit {
|
export class ObjectCollectionComponent implements OnInit {
|
||||||
|
|
||||||
@Input() objects: RemoteData<ListableObject[]>;
|
@Input() objects: RemoteData<PaginatedList<ListableObject>>;
|
||||||
@Input() config?: PaginationComponentOptions;
|
@Input() config?: PaginationComponentOptions;
|
||||||
@Input() sortConfig: SortOptions;
|
@Input() sortConfig: SortOptions;
|
||||||
@Input() hasBorder = false;
|
@Input() hasBorder = false;
|
||||||
@Input() hideGear = false;
|
@Input() hideGear = false;
|
||||||
@Input() context: string;
|
@Input() linkType: CollectionElementLinkType;
|
||||||
|
@Input() context: Context;
|
||||||
pageInfo: Observable<PageInfo>;
|
pageInfo: Observable<PageInfo>;
|
||||||
/**
|
/**
|
||||||
* An event fired when the page is changed.
|
* An event fired when the page is changed.
|
||||||
|
@@ -1,90 +0,0 @@
|
|||||||
import { ListableObjectComponentLoaderComponent } from './listable-object-component-loader.component';
|
|
||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|
||||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
|
||||||
import { PageInfo } from '../../../core/shared/page-info.model';
|
|
||||||
import { Item } from '../../../core/shared/item.model';
|
|
||||||
import { PaginatedList } from '../../../core/data/paginated-list';
|
|
||||||
import * as decorator from '../item-type-decorator';
|
|
||||||
import { getComponentByItemType} from '../item-type-decorator';
|
|
||||||
import { ItemMetadataRepresentation } from '../../../core/shared/metadata-representation/item/item-metadata-representation.model';
|
|
||||||
import { createSuccessfulRemoteDataObject$ } from '../../testing/utils';
|
|
||||||
import createSpy = jasmine.createSpy;
|
|
||||||
import { ViewMode } from '../../../core/shared/view-mode.model';
|
|
||||||
|
|
||||||
const relationType = 'type';
|
|
||||||
const mockItem: Item = Object.assign(new Item(), {
|
|
||||||
bitstreams: createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [])),
|
|
||||||
metadata: {
|
|
||||||
'dc.title': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: 'test item'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'relationship.type': [
|
|
||||||
{
|
|
||||||
language: 'en_US',
|
|
||||||
value: relationType
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const mockItemMetadataRepresentation = Object.assign(new ItemMetadataRepresentation(), mockItem);
|
|
||||||
let viewMode = ViewMode.StandalonePage;
|
|
||||||
|
|
||||||
describe('ItemTypeSwitcherComponent', () => {
|
|
||||||
let comp: ListableObjectComponentLoaderComponent;
|
|
||||||
let fixture: ComponentFixture<ListableObjectComponentLoaderComponent>;
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
|
||||||
TestBed.configureTestingModule({
|
|
||||||
declarations: [ ListableObjectComponentLoaderComponent ],
|
|
||||||
schemas: [ NO_ERRORS_SCHEMA ]
|
|
||||||
}).compileComponents(); // compile template and css
|
|
||||||
}));
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
|
||||||
fixture = TestBed.createComponent(ListableObjectComponentLoaderComponent);
|
|
||||||
comp = fixture.componentInstance;
|
|
||||||
comp.object = mockItem;
|
|
||||||
comp.viewMode = viewMode;
|
|
||||||
spyOnProperty(decorator, 'getComponentByItemType').and.returnValue(createSpy('getComponentByItemType'))
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('when the injected object is of type Item', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
viewMode = ViewMode.StandalonePage;
|
|
||||||
comp.object = mockItem;
|
|
||||||
comp.viewMode = viewMode;
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('when calling getComponent', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
(comp as any).getComponent();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should call getComponentByItemType with parameters type and viewMode', () => {
|
|
||||||
expect(decorator.getComponentByItemType).toHaveBeenCalledWith(relationType, viewMode);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('when the injected object is of type MetadataRepresentation', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
viewMode = ViewMode.MetadataField;
|
|
||||||
comp.object = mockItemMetadataRepresentation;
|
|
||||||
comp.viewMode = viewMode;
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('when calling getComponent', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
(comp as any).getComponent();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should call getComponentByItemType with parameters type, viewMode and representationType', () => {
|
|
||||||
expect(decorator.getComponentByItemType).toHaveBeenCalledWith(relationType, viewMode, mockItemMetadataRepresentation.representationType);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
@@ -5,6 +5,7 @@ import { Context } from '../../../../core/shared/context.model';
|
|||||||
import { getListableObjectComponent } from './listable-object.decorator';
|
import { getListableObjectComponent } from './listable-object.decorator';
|
||||||
import { GenericConstructor } from '../../../../core/shared/generic-constructor';
|
import { GenericConstructor } from '../../../../core/shared/generic-constructor';
|
||||||
import { ListableObjectDirective } from './listable-object.directive';
|
import { ListableObjectDirective } from './listable-object.directive';
|
||||||
|
import { CollectionElementLinkType } from '../../collection-element-link.type';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-listable-object-component-loader',
|
selector: 'ds-listable-object-component-loader',
|
||||||
@@ -28,6 +29,7 @@ export class ListableObjectComponentLoaderComponent implements OnInit {
|
|||||||
@Input() viewMode: ViewMode;
|
@Input() viewMode: ViewMode;
|
||||||
|
|
||||||
@Input() context: Context;
|
@Input() context: Context;
|
||||||
|
@Input() linkType: CollectionElementLinkType;
|
||||||
@ViewChild(ListableObjectDirective) listableObjectDirective: ListableObjectDirective;
|
@ViewChild(ListableObjectDirective) listableObjectDirective: ListableObjectDirective;
|
||||||
|
|
||||||
constructor(private componentFactoryResolver: ComponentFactoryResolver) {
|
constructor(private componentFactoryResolver: ComponentFactoryResolver) {
|
||||||
@@ -42,6 +44,7 @@ export class ListableObjectComponentLoaderComponent implements OnInit {
|
|||||||
const componentRef = viewContainerRef.createComponent(componentFactory);
|
const componentRef = viewContainerRef.createComponent(componentFactory);
|
||||||
(<Component>componentRef.instance as any).object = this.object;
|
(<Component>componentRef.instance as any).object = this.object;
|
||||||
(<Component>componentRef.instance as any).index = this.index;
|
(<Component>componentRef.instance as any).index = this.index;
|
||||||
|
(<Component>componentRef.instance as any).linkType = this.linkType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -38,7 +38,6 @@ export function getListableObjectComponent(types: string[], viewMode: ViewMode,
|
|||||||
const typeModeMap = typeMap.get(viewMode);
|
const typeModeMap = typeMap.get(viewMode);
|
||||||
if (hasValue(typeModeMap)) {
|
if (hasValue(typeModeMap)) {
|
||||||
if (hasValue(typeModeMap.get(context))) {
|
if (hasValue(typeModeMap.get(context))) {
|
||||||
console.log(typeModeMap.get(context));
|
|
||||||
return typeModeMap.get(context);
|
return typeModeMap.get(context);
|
||||||
}
|
}
|
||||||
if (bestMatchValue < 2 && hasValue(typeModeMap.get(DEFAULT_CONTEXT))) {
|
if (bestMatchValue < 2 && hasValue(typeModeMap.get(DEFAULT_CONTEXT))) {
|
||||||
@@ -52,6 +51,5 @@ export function getListableObjectComponent(types: string[], viewMode: ViewMode,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log(bestMatch);
|
|
||||||
return bestMatch;
|
return bestMatch;
|
||||||
}
|
}
|
@@ -1,6 +1,6 @@
|
|||||||
import { Component, Inject, Input } from '@angular/core';
|
import { Component, Input } from '@angular/core';
|
||||||
import { ListableObject } from '../listable-object.model';
|
import { ListableObject } from '../listable-object.model';
|
||||||
import { ViewMode } from '../../../../core/shared/view-mode.model';
|
import { CollectionElementLinkType } from '../../collection-element-link.type';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-abstract-object-element',
|
selector: 'ds-abstract-object-element',
|
||||||
@@ -8,4 +8,6 @@ import { ViewMode } from '../../../../core/shared/view-mode.model';
|
|||||||
})
|
})
|
||||||
export class AbstractListableElementComponent<T extends ListableObject> {
|
export class AbstractListableElementComponent<T extends ListableObject> {
|
||||||
@Input() object: T;
|
@Input() object: T;
|
||||||
|
@Input() linkType: CollectionElementLinkType;
|
||||||
|
linkTypes = CollectionElementLinkType;
|
||||||
}
|
}
|
||||||
|
@@ -6,12 +6,11 @@ import { of as observableOf } from 'rxjs';
|
|||||||
|
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { ClaimedTaskSearchResultDetailElementComponent } from './claimed-task-search-result-detail-element.component';
|
import { ClaimedTaskSearchResultDetailElementComponent } from './claimed-task-search-result-detail-element.component';
|
||||||
import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model';
|
|
||||||
import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.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 { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
|
||||||
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
|
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
|
||||||
import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
|
import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
|
||||||
|
import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model';
|
||||||
|
|
||||||
let component: ClaimedTaskSearchResultDetailElementComponent;
|
let component: ClaimedTaskSearchResultDetailElementComponent;
|
||||||
let fixture: ComponentFixture<ClaimedTaskSearchResultDetailElementComponent>;
|
let fixture: ComponentFixture<ClaimedTaskSearchResultDetailElementComponent>;
|
||||||
@@ -55,15 +54,11 @@ const workflowitem = Object.assign(new WorkflowItem(), { item: observableOf(rdIt
|
|||||||
const rdWorkflowitem = createSuccessfulRemoteDataObject(workflowitem);
|
const rdWorkflowitem = createSuccessfulRemoteDataObject(workflowitem);
|
||||||
mockResultObject.indexableObject = Object.assign(new ClaimedTask(), { workflowitem: observableOf(rdWorkflowitem) });
|
mockResultObject.indexableObject = Object.assign(new ClaimedTask(), { workflowitem: observableOf(rdWorkflowitem) });
|
||||||
|
|
||||||
describe('ClaimedMyDSpaceResultDetailElementComponent', () => {
|
describe('ClaimedTaskSearchResultDetailElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [NoopAnimationsModule],
|
imports: [NoopAnimationsModule],
|
||||||
declarations: [ClaimedTaskSearchResultDetailElementComponent],
|
declarations: [ClaimedTaskSearchResultDetailElementComponent],
|
||||||
providers: [
|
|
||||||
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
|
|
||||||
{ provide: 'indexElementProvider', useValue: (compIndex) }
|
|
||||||
],
|
|
||||||
schemas: [NO_ERRORS_SCHEMA]
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
}).overrideComponent(ClaimedTaskSearchResultDetailElementComponent, {
|
}).overrideComponent(ClaimedTaskSearchResultDetailElementComponent, {
|
||||||
set: { changeDetection: ChangeDetectionStrategy.Default }
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
<ng-container *ngVar="(bitstreams$ | async) as bitstreams">
|
<ng-container *ngVar="(bitstreams$ | async) as bitstreams">
|
||||||
<ds-metadata-field-wrapper [label]="('item.page.files' | translate)">
|
<ds-metadata-field-wrapper [label]="('item.page.files' | translate)">
|
||||||
<div *ngIf="bitstreams?.length > 0" class="file-section">
|
<div *ngIf="bitstreams?.length > 0" class="file-section">
|
||||||
<a *ngFor="let file of bitstreams; let last=last;" [href]="file?.content" target="_blank" [download]="file?.name">
|
<a *ngFor="let file of bitstreams; let last=last;" [href]="file?.content" target="_blank" rel="noopener noreferrer" [download]="file?.name">
|
||||||
<span>{{file?.name}}</span>
|
<span>{{file?.name}}</span>
|
||||||
<span>({{(file?.sizeBytes) | dsFileSize }})</span>
|
<span>({{(file?.sizeBytes) | dsFileSize }})</span>
|
||||||
<span *ngIf="!last" innerHTML="{{separator}}"></span>
|
<span *ngIf="!last" innerHTML="{{separator}}"></span>
|
||||||
|
@@ -72,7 +72,7 @@ describe('ItemDetailPreviewComponent', () => {
|
|||||||
fixture = TestBed.createComponent(ItemDetailPreviewComponent);
|
fixture = TestBed.createComponent(ItemDetailPreviewComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
component.object = { hitHighlights: {} } as any;
|
component.object = { hitHighlights: {} } as any;
|
||||||
component.object = mockItem;
|
component.item = mockItem;
|
||||||
component.separator = ', ';
|
component.separator = ', ';
|
||||||
spyOn(component.item, 'getFiles').and.returnValue(mockItem.bitstreams);
|
spyOn(component.item, 'getFiles').and.returnValue(mockItem.bitstreams);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@@ -47,15 +47,11 @@ mockResultObject.indexableObject = Object.assign(new Item(), {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('ItemMyDSpaceResultDetailElementComponent', () => {
|
describe('ItemSearchResultDetailElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [NoopAnimationsModule],
|
imports: [NoopAnimationsModule],
|
||||||
declarations: [ItemSearchResultDetailElementComponent],
|
declarations: [ItemSearchResultDetailElementComponent],
|
||||||
providers: [
|
|
||||||
{ provide: 'objectElementProvider', useValue: (mockResultObject) },
|
|
||||||
{ provide: 'indexElementProvider', useValue: (compIndex) }
|
|
||||||
],
|
|
||||||
schemas: [NO_ERRORS_SCHEMA]
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
}).overrideComponent(ItemSearchResultDetailElementComponent, {
|
}).overrideComponent(ItemSearchResultDetailElementComponent, {
|
||||||
set: { changeDetection: ChangeDetectionStrategy.Default }
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
||||||
|
@@ -5,12 +5,12 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
|||||||
import { of as observableOf } from 'rxjs';
|
import { of as observableOf } from 'rxjs';
|
||||||
|
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { PoolSearchResultDetailElementComponent } from './pool-my-dspace-result-detail-element.component';
|
|
||||||
import { PoolTaskSearchResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model';
|
|
||||||
import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
|
import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
|
||||||
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
|
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
|
||||||
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
|
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
|
||||||
import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
|
import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
|
||||||
|
import { PoolSearchResultDetailElementComponent } from './pool-search-result-detail-element.component';
|
||||||
|
import { PoolTaskSearchResult } from '../../../object-collection/shared/pool-task-search-result.model';
|
||||||
|
|
||||||
let component: PoolSearchResultDetailElementComponent;
|
let component: PoolSearchResultDetailElementComponent;
|
||||||
let fixture: ComponentFixture<PoolSearchResultDetailElementComponent>;
|
let fixture: ComponentFixture<PoolSearchResultDetailElementComponent>;
|
||||||
@@ -54,7 +54,7 @@ const workflowitem = Object.assign(new WorkflowItem(), { item: observableOf(rdIt
|
|||||||
const rdWorkflowitem = createSuccessfulRemoteDataObject(workflowitem);
|
const rdWorkflowitem = createSuccessfulRemoteDataObject(workflowitem);
|
||||||
mockResultObject.indexableObject = Object.assign(new PoolTask(), { workflowitem: observableOf(rdWorkflowitem) });
|
mockResultObject.indexableObject = Object.assign(new PoolTask(), { workflowitem: observableOf(rdWorkflowitem) });
|
||||||
|
|
||||||
describe('PoolMyDSpaceResultDetailElementComponent', () => {
|
describe('PoolSearchResultDetailElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [NoopAnimationsModule],
|
imports: [NoopAnimationsModule],
|
@@ -6,11 +6,10 @@ import { of as observableOf } from 'rxjs';
|
|||||||
|
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { WorkflowItemSearchResultDetailElementComponent } from './workflow-item-search-result-detail-element.component';
|
import { WorkflowItemSearchResultDetailElementComponent } from './workflow-item-search-result-detail-element.component';
|
||||||
import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflowitem-my-dspace-result.model';
|
|
||||||
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.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';
|
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
|
||||||
import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
|
import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
|
||||||
|
import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflowitem-search-result.model';
|
||||||
|
|
||||||
let component: WorkflowItemSearchResultDetailElementComponent;
|
let component: WorkflowItemSearchResultDetailElementComponent;
|
||||||
let fixture: ComponentFixture<WorkflowItemSearchResultDetailElementComponent>;
|
let fixture: ComponentFixture<WorkflowItemSearchResultDetailElementComponent>;
|
||||||
@@ -52,7 +51,7 @@ const item = Object.assign(new Item(), {
|
|||||||
const rd = createSuccessfulRemoteDataObject(item);
|
const rd = createSuccessfulRemoteDataObject(item);
|
||||||
mockResultObject.indexableObject = Object.assign(new WorkflowItem(), { item: observableOf(rd) });
|
mockResultObject.indexableObject = Object.assign(new WorkflowItem(), { item: observableOf(rd) });
|
||||||
|
|
||||||
describe('WorkflowitemMyDSpaceResultDetailElementComponent', () => {
|
describe('WorkflowItemSearchResultDetailElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [NoopAnimationsModule],
|
imports: [NoopAnimationsModule],
|
||||||
|
@@ -6,11 +6,10 @@ import { of as observableOf } from 'rxjs';
|
|||||||
|
|
||||||
import { Item } from '../../../../core/shared/item.model';
|
import { Item } from '../../../../core/shared/item.model';
|
||||||
import { WorkspaceItemSearchResultDetailElementComponent } from './workspace-item-search-result-detail-element.component';
|
import { WorkspaceItemSearchResultDetailElementComponent } from './workspace-item-search-result-detail-element.component';
|
||||||
import { WorkflowItemSearchResult } from '../../../object-collection/shared/workspaceitem-my-dspace-result.model';
|
|
||||||
import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.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';
|
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
|
||||||
import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
|
import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
|
||||||
|
import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflowitem-search-result.model';
|
||||||
|
|
||||||
let component: WorkspaceItemSearchResultDetailElementComponent;
|
let component: WorkspaceItemSearchResultDetailElementComponent;
|
||||||
let fixture: ComponentFixture<WorkspaceItemSearchResultDetailElementComponent>;
|
let fixture: ComponentFixture<WorkspaceItemSearchResultDetailElementComponent>;
|
||||||
@@ -52,7 +51,7 @@ const item = Object.assign(new Item(), {
|
|||||||
const rd = createSuccessfulRemoteDataObject(item);
|
const rd = createSuccessfulRemoteDataObject(item);
|
||||||
mockResultObject.indexableObject = Object.assign(new WorkspaceItem(), { item: observableOf(rd) });
|
mockResultObject.indexableObject = Object.assign(new WorkspaceItem(), { item: observableOf(rd) });
|
||||||
|
|
||||||
describe('WorkspaceitemMyDSpaceResultDetailElementComponent', () => {
|
describe('WorkspaceItemSearchResultDetailElementComponent', () => {
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [NoopAnimationsModule],
|
imports: [NoopAnimationsModule],
|
@@ -17,6 +17,7 @@ import { ListableObject } from '../object-collection/shared/listable-object.mode
|
|||||||
import { PaginationComponentOptions } from '../pagination/pagination-component-options.model';
|
import { PaginationComponentOptions } from '../pagination/pagination-component-options.model';
|
||||||
import { ViewMode } from '../../core/shared/view-mode.model';
|
import { ViewMode } from '../../core/shared/view-mode.model';
|
||||||
import { Context } from '../../core/shared/context.model';
|
import { Context } from '../../core/shared/context.model';
|
||||||
|
import { CollectionElementLinkType } from '../object-collection/collection-element-link.type';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This component renders a paginated set of results in the detail view.
|
* This component renders a paginated set of results in the detail view.
|
||||||
@@ -51,6 +52,7 @@ export class ObjectDetailComponent {
|
|||||||
* A boolean representing if to hide pagination when there is only a page
|
* A boolean representing if to hide pagination when there is only a page
|
||||||
*/
|
*/
|
||||||
@Input() hidePagerWhenSinglePage = true;
|
@Input() hidePagerWhenSinglePage = true;
|
||||||
|
@Input() linkType: CollectionElementLinkType;
|
||||||
@Input() context: Context;
|
@Input() context: Context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,14 +1,17 @@
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<a [routerLink]="['/collections/', object.id]" class="card-img-top">
|
<a *ngIf="linkType != linkTypes.None" [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/collections/', object.id]" class="card-img-top">
|
||||||
<ds-grid-thumbnail [thumbnail]="object.logo">
|
<ds-grid-thumbnail [thumbnail]="object.logo">
|
||||||
</ds-grid-thumbnail>
|
</ds-grid-thumbnail>
|
||||||
</a>
|
</a>
|
||||||
|
<span *ngIf="linkType == linkTypes.None" class="card-img-top">
|
||||||
|
<ds-grid-thumbnail [thumbnail]="object.logo">
|
||||||
|
</ds-grid-thumbnail>
|
||||||
|
</span>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h4 class="card-title">{{object.name}}</h4>
|
<h4 class="card-title">{{object.name}}</h4>
|
||||||
<p *ngIf="object.shortDescription" class="card-text">{{object.shortDescription}}</p>
|
<p *ngIf="object.shortDescription" class="card-text">{{object.shortDescription}}</p>
|
||||||
<div class="text-center">
|
<div *ngIf="linkType != linkTypes.None" class="text-center">
|
||||||
<a [routerLink]="['/collections/', object.id]" class="lead btn btn-primary viewButton">View</a>
|
<a [target]="(linkType == linkTypes.ExternalLink) ? '_blank' : '_self'" rel="noopener noreferrer" [routerLink]="['/collections/', object.id]" class="lead btn btn-primary viewButton">View</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user