diff --git a/src/app/+item-page/field-components/metadata-uri-values/metadata-uri-values.component.html b/src/app/+item-page/field-components/metadata-uri-values/metadata-uri-values.component.html
index cc618bcd50..10676e93c0 100644
--- a/src/app/+item-page/field-components/metadata-uri-values/metadata-uri-values.component.html
+++ b/src/app/+item-page/field-components/metadata-uri-values/metadata-uri-values.component.html
@@ -1,5 +1,5 @@
-
- {{ linktext || metadatum.value }}
+
+ {{ linktext || metadatum.value }}
diff --git a/src/app/+item-page/field-components/metadata-uri-values/metadata-uri-values.component.spec.ts b/src/app/+item-page/field-components/metadata-uri-values/metadata-uri-values.component.spec.ts
new file mode 100644
index 0000000000..f2ec0bedbc
--- /dev/null
+++ b/src/app/+item-page/field-components/metadata-uri-values/metadata-uri-values.component.spec.ts
@@ -0,0 +1,97 @@
+import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
+import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { MockTranslateLoader } from '../../../shared/mocks/mock-translate-loader';
+import { By } from '@angular/platform-browser';
+import { MetadataUriValuesComponent } from './metadata-uri-values.component';
+import { isNotEmpty } from '../../../shared/empty.util';
+
+let comp: MetadataUriValuesComponent;
+let fixture: ComponentFixture;
+
+const mockMetadata = [
+ {
+ key: 'dc.identifier.uri',
+ language: 'en_US',
+ value: 'http://fakelink.org'
+ },
+ {
+ key: 'dc.identifier.uri',
+ language: 'en_US',
+ value: 'http://another.fakelink.org'
+ }];
+const mockSeperator = '
';
+const mockLabel = 'fake.message';
+const mockLinkText = 'fake link text';
+
+describe('MetadataUriValuesComponent', () => {
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [TranslateModule.forRoot({
+ loader: {
+ provide: TranslateLoader,
+ useClass: MockTranslateLoader
+ }
+ })],
+ declarations: [MetadataUriValuesComponent],
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(MetadataUriValuesComponent, {
+ set: {changeDetection: ChangeDetectionStrategy.Default}
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(MetadataUriValuesComponent);
+ comp = fixture.componentInstance;
+ comp.values = mockMetadata;
+ comp.separator = mockSeperator;
+ comp.label = mockLabel;
+ fixture.detectChanges();
+ }));
+
+ it('should display all metadata values', () => {
+ const innerHTML = fixture.nativeElement.innerHTML;
+ for (const metadatum of mockMetadata) {
+ expect(innerHTML).toContain(metadatum.value);
+ }
+ });
+
+ it('should contain the correct hrefs', () => {
+ const links = fixture.debugElement.queryAll(By.css('.metadata-value-links'));
+ for (const metadatum of mockMetadata) {
+ expect(containsHref(links, metadatum.value)).toBeTruthy();
+ }
+ });
+
+ it('should contain separators equal to the amount of metadata values minus one', () => {
+ const separators = fixture.debugElement.queryAll(By.css('.metadata-value-separator'));
+ expect(separators.length).toBe(mockMetadata.length - 1);
+ });
+
+ describe('when linktext is defined', () => {
+
+ beforeEach(() => {
+ comp.linktext = mockLinkText;
+ fixture.detectChanges();
+ });
+
+ it('should replace the metadata value with the linktext', () => {
+ const link = fixture.debugElement.query(By.css('.metadata-value-links'));
+ expect(link.nativeElement.textContent).toContain(mockLinkText);
+ });
+
+ });
+
+});
+
+function containsHref(links: DebugElement[], href: string): boolean {
+ for (const link of links) {
+ const hrefAtt = link.properties.href;
+ if (isNotEmpty(hrefAtt)) {
+ if (hrefAtt === href) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
diff --git a/src/app/+item-page/field-components/metadata-values/metadata-values.component.html b/src/app/+item-page/field-components/metadata-values/metadata-values.component.html
index f16655c63c..c85699b092 100644
--- a/src/app/+item-page/field-components/metadata-values/metadata-values.component.html
+++ b/src/app/+item-page/field-components/metadata-values/metadata-values.component.html
@@ -1,5 +1,5 @@
- {{metadatum.value}}
+ {{metadatum.value}}
diff --git a/src/app/+item-page/field-components/metadata-values/metadata-values.component.spec.ts b/src/app/+item-page/field-components/metadata-values/metadata-values.component.spec.ts
new file mode 100644
index 0000000000..fdcf6679cc
--- /dev/null
+++ b/src/app/+item-page/field-components/metadata-values/metadata-values.component.spec.ts
@@ -0,0 +1,67 @@
+import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
+import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { MockTranslateLoader } from '../../../shared/mocks/mock-translate-loader';
+import { MetadataValuesComponent } from './metadata-values.component';
+import { By } from '@angular/platform-browser';
+
+let comp: MetadataValuesComponent;
+let fixture: ComponentFixture;
+
+const mockMetadata = [
+ {
+ key: 'journal.identifier.issn',
+ language: 'en_US',
+ value: '1234'
+ },
+ {
+ key: 'journal.publisher',
+ language: 'en_US',
+ value: 'Atmire'
+ },
+ {
+ key: 'journal.identifier.description',
+ language: 'en_US',
+ value: 'desc'
+ }];
+const mockSeperator = '
';
+const mockLabel = 'fake.message';
+
+describe('MetadataValuesComponent', () => {
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [TranslateModule.forRoot({
+ loader: {
+ provide: TranslateLoader,
+ useClass: MockTranslateLoader
+ }
+ })],
+ declarations: [MetadataValuesComponent],
+ schemas: [NO_ERRORS_SCHEMA]
+ }).overrideComponent(MetadataValuesComponent, {
+ set: {changeDetection: ChangeDetectionStrategy.Default}
+ }).compileComponents();
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(MetadataValuesComponent);
+ comp = fixture.componentInstance;
+ comp.values = mockMetadata;
+ comp.separator = mockSeperator;
+ comp.label = mockLabel;
+ fixture.detectChanges();
+ }));
+
+ it('should display all metadata values', () => {
+ const innerHTML = fixture.nativeElement.innerHTML;
+ for (const metadatum of mockMetadata) {
+ expect(innerHTML).toContain(metadatum.value);
+ }
+ });
+
+ it('should contain separators equal to the amount of metadata values minus one', () => {
+ const separators = fixture.debugElement.queryAll(By.css('.metadata-value-separator'));
+ expect(separators.length).toBe(mockMetadata.length - 1);
+ });
+
+});