/* eslint-disable max-classes-per-file */ import { Component, Input, } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync, } from '@angular/core/testing'; import { MetadataFieldWrapperComponent } from './metadata-field-wrapper.component'; @Component({ selector: 'ds-component-without-content', template: '<ds-metadata-field-wrapper [hideIfNoTextContent]="hideIfNoTextContent" [label]="\'test label\'">\n' + '</ds-metadata-field-wrapper>', standalone: true, imports: [MetadataFieldWrapperComponent], }) class NoContentComponent { public hideIfNoTextContent = true; } @Component({ selector: 'ds-component-with-empty-spans', template: '<ds-metadata-field-wrapper [hideIfNoTextContent]="hideIfNoTextContent" [label]="\'test label\'">\n' + ' <span></span>\n' + ' <span></span>\n' + '</ds-metadata-field-wrapper>', standalone: true, imports: [MetadataFieldWrapperComponent], }) class SpanContentComponent { @Input() hideIfNoTextContent = true; } @Component({ selector: 'ds-component-with-text', template: '<ds-metadata-field-wrapper [hideIfNoTextContent]="hideIfNoTextContent" [label]="\'test label\'">\n' + ' <span>The quick brown fox jumps over the lazy dog</span>\n' + '</ds-metadata-field-wrapper>', standalone: true, imports: [MetadataFieldWrapperComponent], }) class TextContentComponent { @Input() hideIfNoTextContent = true; } describe('MetadataFieldWrapperComponent', () => { let component: MetadataFieldWrapperComponent; let fixture: ComponentFixture<MetadataFieldWrapperComponent>; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [MetadataFieldWrapperComponent, NoContentComponent, SpanContentComponent, TextContentComponent], }).compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(MetadataFieldWrapperComponent); component = fixture.componentInstance; }); const wrapperSelector = '.simple-view-element'; it('should create', () => { expect(component).toBeDefined(); }); describe('with hideIfNoTextContent=true', () => { it('should not show the component when there is no content', () => { const parentFixture = TestBed.createComponent(NoContentComponent); parentFixture.detectChanges(); const parentNative = parentFixture.nativeElement; const nativeWrapper = parentNative.querySelector(wrapperSelector); expect(nativeWrapper.classList.contains('d-none')).toBe(true); }); it('should not show the component when there is no text content', () => { const parentFixture = TestBed.createComponent(SpanContentComponent); parentFixture.detectChanges(); const parentNative = parentFixture.nativeElement; const nativeWrapper = parentNative.querySelector(wrapperSelector); expect(nativeWrapper.classList.contains('d-none')).toBe(true); }); it('should show the component when there is text content', () => { const parentFixture = TestBed.createComponent(TextContentComponent); parentFixture.detectChanges(); const parentNative = parentFixture.nativeElement; const nativeWrapper = parentNative.querySelector(wrapperSelector); parentFixture.detectChanges(); expect(nativeWrapper.classList.contains('d-none')).toBe(false); }); }); describe('with hideIfNoTextContent=false', () => { it('should show the component when there is no content', () => { const parentFixture = TestBed.createComponent(NoContentComponent); parentFixture.componentInstance.hideIfNoTextContent = false; parentFixture.detectChanges(); const parentNative = parentFixture.nativeElement; const nativeWrapper = parentNative.querySelector(wrapperSelector); expect(nativeWrapper.classList.contains('d-none')).toBe(false); }); it('should show the component when there is no text content', () => { const parentFixture = TestBed.createComponent(SpanContentComponent); parentFixture.componentInstance.hideIfNoTextContent = false; parentFixture.detectChanges(); const parentNative = parentFixture.nativeElement; const nativeWrapper = parentNative.querySelector(wrapperSelector); expect(nativeWrapper.classList.contains('d-none')).toBe(false); }); it('should show the component when there is text content', () => { const parentFixture = TestBed.createComponent(TextContentComponent); parentFixture.componentInstance.hideIfNoTextContent = false; parentFixture.detectChanges(); const parentNative = parentFixture.nativeElement; const nativeWrapper = parentNative.querySelector(wrapperSelector); parentFixture.detectChanges(); expect(nativeWrapper.classList.contains('d-none')).toBe(false); }); }); });