From d7b38b2a7871fbf9e4b8ad31d8afee8374928835 Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 08:24:37 +0100 Subject: [PATCH 1/4] Fixed issues with new badges --- ...min-search-result-list-element.component.html | 3 +-- ...stable-object-component-loader.component.html | 8 -------- ...listable-object-component-loader.component.ts | 16 +--------------- ...listable-object-component-loader.component.ts | 3 +-- 4 files changed, 3 insertions(+), 27 deletions(-) diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html index b34868f736..3bf756b9cd 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html @@ -2,6 +2,5 @@ [viewMode]="viewModes.ListElement" [index]="index" [linkType]="linkType" - [listID]="listID" - [hideBadges]="true"> + [listID]="listID"> diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html index 9ed4e9eaa8..58561f0277 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html @@ -1,9 +1 @@ -
-
- {{ "item.badge.private" | translate }} -
-
- {{ "item.badge.withdrawn" | translate }} -
-
diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts index 39183d7fc3..168c696034 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -74,22 +74,11 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ @Input() value: string; - /** - * Whether or not informational badges (e.g. Private, Withdrawn) should be hidden - */ - @Input() hideBadges = false; - /** * Directive hook used to place the dynamic child component */ @ViewChild(ListableObjectDirective, {static: true}) listableObjectDirective: ListableObjectDirective; - /** - * View on the badges template, to be passed on to the loaded component (which will place the badges in the desired - * location, or on top if not specified) - */ - @ViewChild('badges', { static: true }) badges: ElementRef; - /** * Emit when the listable object has been reloaded. */ @@ -160,10 +149,7 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges this.compRef = viewContainerRef.createComponent( componentFactory, 0, - undefined, - [ - [this.badges.nativeElement], - ]); + undefined); this.connectInputsAndOutputs(); diff --git a/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts index 44836fe2fc..33f8df7030 100644 --- a/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts @@ -16,7 +16,7 @@ import { CollectionElementLinkType } from '../../collection-element-link.type'; }) export class ThemedListableObjectComponentLoaderComponent extends ThemedComponent { protected inAndOutputNames: (keyof ListableObjectComponentLoaderComponent & keyof this)[] = [ - 'object', 'index', 'viewMode', 'context', 'linkType', 'listID', 'linkType', 'showLabel', 'value', 'hideBadges', 'contentChange']; + 'object', 'index', 'viewMode', 'context', 'linkType', 'listID', 'linkType', 'showLabel', 'value', 'contentChange']; @Input() object: ListableObject; @Input() index: number; @@ -26,7 +26,6 @@ export class ThemedListableObjectComponentLoaderComponent extends ThemedComponen @Input() listID: string; @Input() showLabel = true; @Input() value: string; - @Input() hideBadges = false; @Output() contentChange = new EventEmitter(); protected getComponentName(): string { From 1f2897664a18a741fac1cd1a88c345e73bba0d7e Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 09:30:45 +0100 Subject: [PATCH 2/4] Fixing tests --- ...arch-result-grid-element.component.spec.ts | 5 +- ...top-level-community-list.component.spec.ts | 3 +- ...-object-component-loader.component.spec.ts | 58 ------------- .../object-list/badges/badges.component.html | 8 +- .../status-badge/status-badge.component.html | 8 +- .../status-badge.component.spec.ts | 87 +++++++++++-------- .../type-badge/type-badge.component.html | 4 +- .../item-list-preview.component.spec.ts | 4 +- .../search-form/search-form.component.spec.ts | 32 ++++--- 9 files changed, 84 insertions(+), 125 deletions(-) diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts index 2cb0413bbc..9a28fd745f 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts @@ -14,6 +14,8 @@ import { By } from '@angular/platform-browser'; import { RouterTestingModule } from '@angular/router/testing'; import { getCollectionEditRoute } from '../../../../../collection-page/collection-page-routing-paths'; import { LinkService } from '../../../../../core/cache/builders/link.service'; +import { ThemeService } from '../../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; describe('CollectionAdminSearchResultGridElementComponent', () => { let component: CollectionAdminSearchResultGridElementComponent; @@ -45,7 +47,8 @@ describe('CollectionAdminSearchResultGridElementComponent', () => { providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, { provide: BitstreamDataService, useValue: {} }, - { provide: LinkService, useValue: linkService } + { provide: LinkService, useValue: linkService }, + { provide: ThemeService, useValue: getMockThemeService() }, ] }) .compileComponents(); diff --git a/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts b/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts index 00408e4696..c9e8f37ee9 100644 --- a/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts +++ b/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts @@ -26,7 +26,7 @@ import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; import { ThemeService } from '../../shared/theme-support/theme.service'; import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub'; -describe('TopLevelCommunityList Component', () => { +fdescribe('TopLevelCommunityList Component', () => { let comp: TopLevelCommunityListComponent; let fixture: ComponentFixture; let communityDataServiceStub: any; @@ -131,7 +131,6 @@ describe('TopLevelCommunityList Component', () => { { provide: SelectableListService, useValue: {} }, { provide: ThemeService, useValue: themeService }, ], - schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); })); diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts index edf0b3ea7c..4a63a256b6 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts @@ -72,64 +72,6 @@ describe('ListableObjectComponentLoaderComponent', () => { }); }); - describe('when the object is an item and viewMode is a list', () => { - beforeEach(() => { - comp.object = Object.assign(new Item()); - comp.viewMode = ViewMode.ListElement; - }); - - describe('when the item is not withdrawn', () => { - beforeEach(() => { - (comp.object as any).isWithdrawn = false; - comp.initBadges(); - fixture.detectChanges(); - }); - - it('should not show the withdrawn badge', () => { - const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); - expect(badge).toBeNull(); - }); - }); - - describe('when the item is withdrawn', () => { - beforeEach(() => { - (comp.object as any).isWithdrawn = true; - comp.initBadges(); - fixture.detectChanges(); - }); - - it('should show the withdrawn badge', () => { - const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); - expect(badge).not.toBeNull(); - }); - }); - - describe('when the item is not private', () => { - beforeEach(() => { - (comp.object as any).isDiscoverable = true; - comp.initBadges(); - fixture.detectChanges(); - }); - it('should not show the private badge', () => { - const badge = fixture.debugElement.query(By.css('div.private-badge')); - expect(badge).toBeNull(); - }); - }); - - describe('when the item is private', () => { - beforeEach(() => { - (comp.object as any).isDiscoverable = false; - comp.initBadges(); - fixture.detectChanges(); - }); - - it('should show the private badge', () => { - const badge = fixture.debugElement.query(By.css('div.private-badge')); - expect(badge).not.toBeNull(); - }); - }); - }); - describe('When a reloadedObject is emitted', () => { let listableComponent; let reloadedObject: any; diff --git a/src/app/shared/object-list/badges/badges.component.html b/src/app/shared/object-list/badges/badges.component.html index 2a5704970c..1e59ca3660 100644 --- a/src/app/shared/object-list/badges/badges.component.html +++ b/src/app/shared/object-list/badges/badges.component.html @@ -1,6 +1,2 @@ -
- -
-
- -
+ + diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.html b/src/app/shared/object-list/badges/status-badge/status-badge.component.html index 1f28aedf34..c864f22afa 100644 --- a/src/app/shared/object-list/badges/status-badge/status-badge.component.html +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.html @@ -1,6 +1,6 @@ - +
{{ "item.badge.private" | translate }} - - +
+
{{ "item.badge.withdrawn" | translate }} - +
diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts index 09bc7ea585..4cfa0e2341 100644 --- a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts @@ -6,37 +6,17 @@ import { TruncatePipe } from '../../../utils/truncate.pipe'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { StatusBadgeComponent } from './status-badge.component'; +import { ViewMode } from '../../../../core/shared/view-mode.model'; let comp: StatusBadgeComponent; let fixture: ComponentFixture; -const type = 'authorOfPublication'; +let withdrawnItem = Object.assign(new Item(), { isWithdrawn: true }); +let notWithdrawnItem = Object.assign(new Item(), { isWithdrawn: false }); +let privateItem = Object.assign(new Item(), { isDiscoverable: false }); +let notPrivateItem = Object.assign(new Item(), { isDiscoverable: true }); -const mockItemWithEntityType = Object.assign(new Item(), { - bundles: observableOf({}), - metadata: { - 'dspace.entity.type': [ - { - language: 'en_US', - value: type - } - ] - } -}); - -const mockItemWithoutEntityType = Object.assign(new Item(), { - bundles: observableOf({}), - metadata: { - 'dc.title': [ - { - language: 'en_US', - value: 'This is just another title' - } - ] - } -}); - -describe('ItemTypeBadgeComponent', () => { +describe('ItemStatusBadgeComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TranslateModule.forRoot()], @@ -45,34 +25,69 @@ describe('ItemTypeBadgeComponent', () => { }).overrideComponent(StatusBadgeComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); + init(); })); + function init() { + withdrawnItem = Object.assign(new Item(), { isWithdrawn: true }); + notWithdrawnItem = Object.assign(new Item(), { isWithdrawn: false }); + privateItem = Object.assign(new Item(), { isDiscoverable: false }); + notPrivateItem = Object.assign(new Item(), { isDiscoverable: true }); + } beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(StatusBadgeComponent); comp = fixture.componentInstance; })); - describe('When the item has an entity type', () => { + + describe('when the item is not withdrawn', () => { beforeEach(() => { - comp.object = mockItemWithEntityType; + comp.object = notWithdrawnItem; + comp.ngOnInit(); fixture.detectChanges(); }); - it('should show the entity type badge', () => { - const badge = fixture.debugElement.query(By.css('span.badge')); - expect(badge.nativeElement.textContent).toContain(type.toLowerCase()); + it('should not show the withdrawn badge', () => { + const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); + expect(badge).toBeNull(); }); }); - describe('When the item has no entity type', () => { + describe('when the item is withdrawn', () => { beforeEach(() => { - comp.object = mockItemWithoutEntityType; + comp.object = withdrawnItem; + comp.ngOnInit(); fixture.detectChanges(); }); - it('should show an item badge', () => { - const badge = fixture.debugElement.query(By.css('span.badge')); - expect(badge.nativeElement.textContent).toContain('item'); + it('should show the withdrawn badge', () => { + const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); + expect(badge).not.toBeNull(); + }); + }); + + describe('when the item is not private', () => { + beforeEach(() => { + comp.object = notPrivateItem; + comp.ngOnInit(); + fixture.detectChanges(); + }); + it('should not show the private badge', () => { + const badge = fixture.debugElement.query(By.css('div.private-badge')); + expect(badge).toBeNull(); + }); + }); + + describe('when the item is private', () => { + beforeEach(() => { + comp.object = privateItem; + comp.ngOnInit(); + fixture.detectChanges(); + }); + + it('should show the private badge', () => { + const badge = fixture.debugElement.query(By.css('div.private-badge')); + expect(badge).not.toBeNull(); }); }); }); diff --git a/src/app/shared/object-list/badges/type-badge/type-badge.component.html b/src/app/shared/object-list/badges/type-badge/type-badge.component.html index 119702c375..0c2bd7544e 100644 --- a/src/app/shared/object-list/badges/type-badge/type-badge.component.html +++ b/src/app/shared/object-list/badges/type-badge/type-badge.component.html @@ -1,3 +1,3 @@ - +
{{ typeMessage | translate }} - +
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts index 023b51a8dd..65147f17d4 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts @@ -154,8 +154,8 @@ describe('ItemListPreviewComponent', () => { fixture.detectChanges(); }); - it('should show the entity type span', () => { - const entityField = fixture.debugElement.query(By.css('ds-type-badge')); + it('should show the badges', () => { + const entityField = fixture.debugElement.query(By.css('ds-themed-badges')); expect(entityField).not.toBeNull(); }); }); diff --git a/src/app/shared/search-form/search-form.component.spec.ts b/src/app/shared/search-form/search-form.component.spec.ts index 20c9435eb4..f1c05d47df 100644 --- a/src/app/shared/search-form/search-form.component.spec.ts +++ b/src/app/shared/search-form/search-form.component.spec.ts @@ -36,7 +36,9 @@ describe('SearchFormComponent', () => { { provide: SearchConfigurationService, useValue: searchConfigService }, { provide: DSpaceObjectDataService, useValue: { findById: () => createSuccessfulRemoteDataObject$(undefined)} } ], - declarations: [SearchFormComponent] + declarations: [ + SearchFormComponent, + ] }).compileComponents(); })); @@ -47,21 +49,23 @@ describe('SearchFormComponent', () => { el = de.nativeElement; }); - it('should not display scopes when empty', () => { - fixture.detectChanges(); - const select = de.query(By.css('select')); - expect(select).toBeNull(); - }); - - it('should not display scopes when scopeSelectable is false', () => { - comp.scopeSelectable = false; - comp.scopes = objects; - comp.scope = objects[1].id; + it('should not display scopes when showScopeSelector is false', fakeAsync(() => { + comp.showScopeSelector = false; fixture.detectChanges(); - const select = de.query(By.css('select')); - expect(select).toBeNull(); - }); + tick(); + + expect(de.query(By.css('.scope-button'))).toBeFalsy(); + })); + + it('should display scopes when showScopeSelector is true', fakeAsync(() => { + comp.showScopeSelector = true; + + fixture.detectChanges(); + tick(); + + expect(de.query(By.css('.scope-button'))).toBeTruthy(); + })); it('should display set query value in input field', fakeAsync(() => { const testString = 'This is a test query'; From 906c26bbe4d816a9e34a77a238c8ef8fee524b0d Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 09:51:33 +0100 Subject: [PATCH 3/4] Revert "Made ListableObjectComponentLoaderComponent themeable" This reverts commit a4679ca7 --- ...-search-result-list-element.component.html | 4 +- ...admin-workflow-list-element.component.html | 4 +- .../item-delete/item-delete.component.html | 8 ++-- .../edit-relationship.component.html | 4 +- .../virtual-metadata.component.html | 4 +- .../item-page/simple/item-page.component.html | 2 +- .../related-items.component.html | 4 +- .../related-items.component.spec.ts | 2 +- .../shared/browse-by/browse-by.component.html | 2 +- .../dso-selector/dso-selector.component.html | 4 +- ...sting-relation-list-element.component.html | 2 +- .../dso-input-suggestions.component.html | 2 +- ...table-object-component-loader.component.ts | 42 ------------------- .../object-detail.component.html | 2 +- .../object-grid/object-grid.component.html | 2 +- .../item-metadata-list-element.component.html | 2 +- ...em-metadata-list-element.component.spec.ts | 2 +- .../object-list/object-list.component.html | 4 +- src/app/shared/shared.module.ts | 2 - ...ble-object-component-loader.component.html | 0 ...ble-object-component-loader.component.scss | 0 ...table-object-component-loader.component.ts | 13 ------ src/themes/custom/theme.module.ts | 2 - 23 files changed, 27 insertions(+), 86 deletions(-) delete mode 100644 src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts delete mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html delete mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss delete mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html index 3bf756b9cd..991508335f 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html @@ -1,6 +1,6 @@ - + [listID]="listID"> diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html index 909882361a..192cc751f2 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html @@ -1,10 +1,10 @@
{{ "admin.workflow.item.workflow" | translate }}
- + [listID]="listID"> diff --git a/src/app/item-page/edit-item-page/item-delete/item-delete.component.html b/src/app/item-page/edit-item-page/item-delete/item-delete.component.html index fb8acb61f3..df50e13b48 100644 --- a/src/app/item-page/edit-item-page/item-delete/item-delete.component.html +++ b/src/app/item-page/edit-item-page/item-delete/item-delete.component.html @@ -31,11 +31,11 @@ class="d-flex flex-row"> - - +