mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-09 18:03:21 +00:00
[ACS-8582] Introduce UnitTestingUtils class and transform existing tests in core library (#10571)
* [ACS-8582] Add UnitTestingUtils class, adapt first batch of unit tests * [ACS-8582] Extend UnitTestingUtils, cover second batch of unit tests * [ACS-8582] Extend UnitTestingUtils, cover third batch of unit tests * [ACS-8582] Extend UnitTestingUtils, cover final batch of unit tests * [ci:force] * [ci:force] * [ACS-8582] CR fixes * [ACS-8582] CR fixes
This commit is contained in:
@@ -20,7 +20,7 @@ import { Component } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { provideMockFeatureFlags } from '../mocks/features-service-mock.factory';
|
||||
import { FeaturesDirective } from './features.directive';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { UnitTestingUtils } from '../../../../src/lib/testing/unit-testing-utils';
|
||||
|
||||
@Component({
|
||||
template: `
|
||||
@@ -46,6 +46,7 @@ class TestWithDisabledFlagComponent {
|
||||
describe('FeaturesDirective', () => {
|
||||
let enabledFixture: ComponentFixture<TestWithEnabledFlagComponent>;
|
||||
let disabledFixture: ComponentFixture<TestWithDisabledFlagComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -66,16 +67,20 @@ describe('FeaturesDirective', () => {
|
||||
disabledFixture = TestBed.createComponent(TestWithDisabledFlagComponent);
|
||||
disabledFixture.detectChanges();
|
||||
|
||||
testingUtils = new UnitTestingUtils(enabledFixture.debugElement);
|
||||
|
||||
await enabledFixture.whenStable();
|
||||
await disabledFixture.whenStable();
|
||||
});
|
||||
|
||||
it('should render the element with enabled features', () => {
|
||||
expect(enabledFixture.debugElement.query(By.css('#underFeatureFlag'))).toBeDefined();
|
||||
expect(enabledFixture.debugElement.query(By.css('#underFeatureFlag')).nativeElement).toBeDefined();
|
||||
const enabledFixtureElement = testingUtils.getByCSS('#underFeatureFlag');
|
||||
expect(enabledFixtureElement).toBeDefined();
|
||||
expect(enabledFixtureElement.nativeElement).toBeDefined();
|
||||
});
|
||||
|
||||
it('should not render the element with disabled features', () => {
|
||||
expect(disabledFixture.debugElement.query(By.css('#underFeatureFlag'))).toBeNull();
|
||||
testingUtils.setDebugElement(disabledFixture.debugElement);
|
||||
expect(testingUtils.getByCSS('#underFeatureFlag')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { Component } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { provideMockFeatureFlags } from '../mocks/features-service-mock.factory';
|
||||
import { NotFeaturesDirective } from './not-features.directive';
|
||||
import { UnitTestingUtils } from '../../../../src/lib/testing/unit-testing-utils';
|
||||
|
||||
@Component({
|
||||
template: `
|
||||
@@ -47,6 +47,7 @@ class TestWithDisabledFlagComponent {
|
||||
describe('NotFeaturesDirective', () => {
|
||||
let enabledFixture: ComponentFixture<TestWithEnabledFlagComponent>;
|
||||
let disabledFixture: ComponentFixture<TestWithDisabledFlagComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -66,14 +67,18 @@ describe('NotFeaturesDirective', () => {
|
||||
|
||||
disabledFixture = TestBed.createComponent(TestWithDisabledFlagComponent);
|
||||
disabledFixture.detectChanges();
|
||||
|
||||
testingUtils = new UnitTestingUtils(disabledFixture.debugElement);
|
||||
});
|
||||
|
||||
it('should render the element with disabled features', () => {
|
||||
expect(disabledFixture.debugElement.query(By.css('#underFeatureFlag'))).toBeDefined();
|
||||
expect(disabledFixture.debugElement.query(By.css('#underFeatureFlag')).nativeElement).toBeDefined();
|
||||
const disabledFixtureElement = testingUtils.getByCSS('#underFeatureFlag');
|
||||
expect(disabledFixtureElement).toBeDefined();
|
||||
expect(disabledFixtureElement.nativeElement).toBeDefined();
|
||||
});
|
||||
|
||||
it('should not render the element with enabled features', () => {
|
||||
expect(enabledFixture.debugElement.query(By.css('#underFeatureFlag'))).toBeNull();
|
||||
testingUtils.setDebugElement(enabledFixture.debugElement);
|
||||
expect(testingUtils.getByCSS('#underFeatureFlag')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -15,12 +15,14 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { AvatarComponent } from '@alfresco/adf-core';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { AvatarComponent } from './avatar.component';
|
||||
|
||||
describe('AvatarComponent', () => {
|
||||
let component: AvatarComponent;
|
||||
let fixture: ComponentFixture<AvatarComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
@@ -29,15 +31,17 @@ describe('AvatarComponent', () => {
|
||||
|
||||
fixture = TestBed.createComponent(AvatarComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
const getAvatarImageElement = (): HTMLImageElement => fixture.nativeElement.querySelector('.adf-avatar__image');
|
||||
const getAvatarImageElement = (): HTMLImageElement => testingUtils.getByCSS('.adf-avatar__image').nativeElement;
|
||||
const getAvatarInitialsElement = (): HTMLDivElement => testingUtils.getByCSS('.adf-avatar__initials').nativeElement;
|
||||
|
||||
it('should display initials when src is not provided', () => {
|
||||
component.src = '';
|
||||
fixture.detectChanges();
|
||||
const avatarElement: HTMLElement = fixture.nativeElement.querySelector('.adf-avatar__initials');
|
||||
const avatarElement = getAvatarInitialsElement();
|
||||
expect(avatarElement.textContent).toContain(component.initials);
|
||||
});
|
||||
|
||||
@@ -49,14 +53,14 @@ describe('AvatarComponent', () => {
|
||||
|
||||
it('should use default initials when not provided', () => {
|
||||
fixture.detectChanges();
|
||||
const avatarElement: HTMLElement = fixture.nativeElement.querySelector('.adf-avatar__initials');
|
||||
const avatarElement = getAvatarInitialsElement();
|
||||
expect(avatarElement.textContent).toContain('U');
|
||||
});
|
||||
|
||||
it('should use custom initials', () => {
|
||||
component.initials = 'DV';
|
||||
fixture.detectChanges();
|
||||
const avatarElement: HTMLElement = fixture.nativeElement.querySelector('.adf-avatar__initials');
|
||||
const avatarElement = getAvatarInitialsElement();
|
||||
expect(avatarElement.textContent).toContain('DV');
|
||||
});
|
||||
|
||||
|
||||
+20
-35
@@ -19,14 +19,11 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { of } from 'rxjs';
|
||||
import { CardViewArrayItemComponent } from './card-view-arrayitem.component';
|
||||
import { CardViewArrayItemModel, CardViewArrayItem } from '../../models/card-view-arrayitem.model';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CardViewUpdateService } from '../../services/card-view-update.service';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatChipHarness, MatChipListboxHarness } from '@angular/material/chips/testing';
|
||||
import { MatButtonHarness } from '@angular/material/button/testing';
|
||||
import { MatIconHarness } from '@angular/material/icon/testing';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('CardViewArrayItemComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
@@ -34,6 +31,7 @@ describe('CardViewArrayItemComponent', () => {
|
||||
let fixture: ComponentFixture<CardViewArrayItemComponent>;
|
||||
let service: CardViewUpdateService;
|
||||
let serviceSpy: jasmine.Spy;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const mockData = [
|
||||
{ icon: 'person', value: 'Zlatan' },
|
||||
@@ -58,6 +56,7 @@ describe('CardViewArrayItemComponent', () => {
|
||||
component = fixture.componentInstance;
|
||||
component.property = new CardViewArrayItemModel(mockDefaultProps);
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -76,25 +75,17 @@ describe('CardViewArrayItemComponent', () => {
|
||||
});
|
||||
|
||||
it('should call service on chip click', async () => {
|
||||
const chip = await loader.getHarness(MatChipHarness);
|
||||
await (await chip.host()).click();
|
||||
|
||||
await testingUtils.clickMatChip('card-arrayitem-chip-Zlatan');
|
||||
expect(serviceSpy).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should call service on edit icon click', async () => {
|
||||
const button = await loader.getHarness(
|
||||
MatButtonHarness.with({ selector: `[data-automation-id="card-array-item-clickable-icon-array"]` })
|
||||
);
|
||||
await button.click();
|
||||
|
||||
await testingUtils.clickMatButtonByDataAutomationId('card-array-item-clickable-icon-array');
|
||||
expect(serviceSpy).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should NOT call service on chip list container click', async () => {
|
||||
const chipList = await loader.getHarness(MatChipListboxHarness);
|
||||
await (await chipList.host()).click();
|
||||
|
||||
await testingUtils.clickMatChipListbox('card-arrayitem-chip-list-container');
|
||||
expect(serviceSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
@@ -103,9 +94,7 @@ describe('CardViewArrayItemComponent', () => {
|
||||
it('should render the label', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Array of items');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-property-label')).toBe('Array of items');
|
||||
});
|
||||
|
||||
it('should render chip list', async () => {
|
||||
@@ -115,7 +104,7 @@ describe('CardViewArrayItemComponent', () => {
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
const chipListBox = await loader.getAllHarnesses(MatChipHarness);
|
||||
const chipListBox = await testingUtils.getMatChips();
|
||||
expect(chipListBox).not.toBeNull();
|
||||
expect(chipListBox.length).toBe(4);
|
||||
|
||||
@@ -132,12 +121,12 @@ describe('CardViewArrayItemComponent', () => {
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
const chipListBox = await loader.getAllHarnesses(MatChipHarness);
|
||||
const chipListBox = await testingUtils.getMatChips();
|
||||
expect(chipListBox).not.toBeNull();
|
||||
expect(chipListBox.length).toBe(4);
|
||||
|
||||
const chip1Icon = await loader.getHarness(MatIconHarness.with({ ancestor: `[data-automation-id="card-arrayitem-chip-Zlatan"]` }));
|
||||
const chip2Icon = await loader.getHarness(MatIconHarness.with({ ancestor: `[data-automation-id="card-arrayitem-chip-Lionel Messi"]` }));
|
||||
const chip1Icon = await testingUtils.getMatIconWithAncestorByDataAutomationId('card-arrayitem-chip-Zlatan');
|
||||
const chip2Icon = await testingUtils.getMatIconWithAncestorByDataAutomationId('card-arrayitem-chip-Lionel Messi');
|
||||
const firstChipText = await chipListBox[0].getText();
|
||||
const secondChipText = await chipListBox[1].getText();
|
||||
|
||||
@@ -147,15 +136,14 @@ describe('CardViewArrayItemComponent', () => {
|
||||
expect(await chip2Icon.getName()).toBe('group');
|
||||
});
|
||||
|
||||
it('should render defined icon if clickable set to true', () => {
|
||||
it('should render defined icon if clickable set to true', async () => {
|
||||
component.property = new CardViewArrayItemModel({
|
||||
...mockDefaultProps,
|
||||
clickable: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
const editIcon = fixture.nativeElement.querySelector('[data-automation-id="card-array-item-clickable-icon-array"]');
|
||||
expect(editIcon).toBeDefined();
|
||||
expect(editIcon.innerText).toBe('edit');
|
||||
const editIcon = await testingUtils.getMatIconWithAncestorByDataAutomationId('card-array-item-clickable-icon-array');
|
||||
expect(await editIcon.getName()).toBe('edit');
|
||||
});
|
||||
|
||||
it('should not render defined icon if clickable set to false', async () => {
|
||||
@@ -164,19 +152,16 @@ describe('CardViewArrayItemComponent', () => {
|
||||
clickable: false
|
||||
});
|
||||
fixture.detectChanges();
|
||||
const editExists = await loader.hasHarness(
|
||||
MatButtonHarness.with({ selector: `[data-automation-id="card-array-item-clickable-icon-array"]` })
|
||||
);
|
||||
expect(editExists).toBe(false);
|
||||
|
||||
expect(await testingUtils.checkIfMatButtonExistsWithDataAutomationId('card-array-item-clickable-icon-array')).toBe(false);
|
||||
});
|
||||
|
||||
it('should render all values if noOfItemsToDisplay is not defined', async () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const chipList = await loader.getAllHarnesses(MatChipHarness);
|
||||
const chipList = await testingUtils.getMatChips();
|
||||
|
||||
const moreElement = fixture.debugElement.query(By.css('[data-automation-id="card-arrayitem-more-chip"]'));
|
||||
expect(moreElement).toBeNull();
|
||||
expect(await testingUtils.checkIfMatChipExistsWithDataAutomationId('card-arrayitem-more-chip')).toBeFalse();
|
||||
expect(chipList.length).toBe(4);
|
||||
});
|
||||
|
||||
@@ -187,7 +172,7 @@ describe('CardViewArrayItemComponent', () => {
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
const chipList = await loader.getAllHarnesses(MatChipHarness);
|
||||
const chipList = await testingUtils.getMatChips();
|
||||
|
||||
expect(chipList.length).toBe(3);
|
||||
expect(await chipList[2].getText()).toBe('2 CORE.CARDVIEW.MORE');
|
||||
|
||||
+46
-48
@@ -16,16 +16,20 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';
|
||||
import { MatCheckboxChange } from '@angular/material/checkbox';
|
||||
import { CardViewUpdateService } from '../../services/card-view-update.service';
|
||||
import { CardViewBoolItemComponent } from './card-view-boolitem.component';
|
||||
import { CardViewBoolItemModel } from '../../models/card-view-boolitem.model';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
|
||||
describe('CardViewBoolItemComponent', () => {
|
||||
let fixture: ComponentFixture<CardViewBoolItemComponent>;
|
||||
let component: CardViewBoolItemComponent;
|
||||
let loader: HarnessLoader;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -40,24 +44,25 @@ describe('CardViewBoolItemComponent', () => {
|
||||
default: false,
|
||||
editable: false
|
||||
});
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
});
|
||||
|
||||
const getPropertyLabel = () => testingUtils.getByCSS('.adf-property-label');
|
||||
const getPropertyValue = () => testingUtils.getByCSS('.adf-property-value');
|
||||
|
||||
describe('Rendering', () => {
|
||||
it('should render the label and value if the property is editable', () => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const label = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(label).not.toBeNull();
|
||||
expect(label.nativeElement.innerText).toBe('Boolean label');
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(getPropertyLabel().nativeElement.innerText).toBe('Boolean label');
|
||||
expect(getPropertyValue()).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should NOT render the label and value if the property is NOT editable and has no proper boolean value set', () => {
|
||||
@@ -66,11 +71,8 @@ describe('CardViewBoolItemComponent', () => {
|
||||
component.property.editable = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const label = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(label).toBeNull();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).toBeNull();
|
||||
expect(getPropertyLabel()).toBeNull();
|
||||
expect(getPropertyValue()).toBeNull();
|
||||
});
|
||||
|
||||
it('should render the label and value if the property is NOT editable but has a proper boolean value set', () => {
|
||||
@@ -79,86 +81,83 @@ describe('CardViewBoolItemComponent', () => {
|
||||
component.property.editable = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const label = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(label).not.toBeNull();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(getPropertyLabel()).not.toBeNull();
|
||||
expect(getPropertyValue()).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should render ticked checkbox if property value is true', () => {
|
||||
it('should render ticked checkbox if property value is true', async () => {
|
||||
component.property.value = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value input[type="checkbox"]'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.checked).toBe(true);
|
||||
const checkbox = await testingUtils.getMatCheckboxByDataAutomationId('card-boolean-boolKey');
|
||||
expect(checkbox).toBeDefined();
|
||||
expect(await checkbox.isChecked()).toBeTrue();
|
||||
});
|
||||
|
||||
it('should render ticked checkbox if property value is not set but default is true and editable', () => {
|
||||
it('should render ticked checkbox if property value is not set but default is true and editable', async () => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
component.property.value = undefined;
|
||||
component.property.default = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value input[type="checkbox"]'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.checked).toBe(true);
|
||||
const checkbox = await testingUtils.getMatCheckboxByDataAutomationId('card-boolean-boolKey');
|
||||
expect(checkbox).toBeDefined();
|
||||
expect(await checkbox.isChecked()).toBeTrue();
|
||||
});
|
||||
|
||||
it('should render un-ticked checkbox if property value is false', () => {
|
||||
it('should render un-ticked checkbox if property value is false', async () => {
|
||||
component.property.value = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value input[type="checkbox"]'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.checked).toBe(false);
|
||||
const checkbox = await testingUtils.getMatCheckboxByDataAutomationId('card-boolean-boolKey');
|
||||
expect(checkbox).toBeDefined();
|
||||
expect(await checkbox.isChecked()).toBeFalse();
|
||||
});
|
||||
|
||||
it('should render un-ticked checkbox if property value is not set but default is false and editable', () => {
|
||||
it('should render un-ticked checkbox if property value is not set but default is false and editable', async () => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
component.property.value = undefined;
|
||||
component.property.default = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value input[type="checkbox"]'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.checked).toBe(false);
|
||||
const checkbox = await testingUtils.getMatCheckboxByDataAutomationId('card-boolean-boolKey');
|
||||
expect(checkbox).toBeDefined();
|
||||
expect(await checkbox.isChecked()).toBeFalse();
|
||||
});
|
||||
|
||||
it('should render enabled checkbox if property and component are both editable', () => {
|
||||
it('should render enabled checkbox if property and component are both editable', async () => {
|
||||
component.editable = true;
|
||||
component.property.editable = true;
|
||||
component.property.value = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value input[type="checkbox"]'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.hasAttribute('disabled')).toBe(false);
|
||||
const checkbox = await testingUtils.getMatCheckboxByDataAutomationId('card-boolean-boolKey');
|
||||
expect(checkbox).toBeDefined();
|
||||
expect(await checkbox.isDisabled()).toBeFalse();
|
||||
});
|
||||
|
||||
it('should render disabled checkbox if property is not editable', () => {
|
||||
it('should render disabled checkbox if property is not editable', async () => {
|
||||
component.editable = true;
|
||||
component.property.editable = false;
|
||||
component.property.value = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value input[type="checkbox"]'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.hasAttribute('disabled')).toBe(true);
|
||||
const checkbox = await testingUtils.getMatCheckboxByDataAutomationId('card-boolean-boolKey');
|
||||
expect(checkbox).toBeDefined();
|
||||
expect(await checkbox.isDisabled()).toBeTrue();
|
||||
});
|
||||
|
||||
it('should render disabled checkbox if component is not editable', () => {
|
||||
it('should render disabled checkbox if component is not editable', async () => {
|
||||
component.editable = false;
|
||||
component.property.editable = true;
|
||||
component.property.value = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value input[type="checkbox"]'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.hasAttribute('disabled')).toBe(true);
|
||||
const checkbox = await testingUtils.getMatCheckboxByDataAutomationId('card-boolean-boolKey');
|
||||
expect(checkbox).toBeDefined();
|
||||
expect(await checkbox.isDisabled()).toBeTrue();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -204,8 +203,7 @@ describe('CardViewBoolItemComponent', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
const labelElement = fixture.debugElement.query(By.directive(MatCheckbox)).nativeElement.querySelector('label');
|
||||
labelElement.click();
|
||||
testingUtils.clickByDataAutomationId('card-boolean-label-boolKey');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+27
-46
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CardViewDateItemModel } from '../../models/card-view-dateitem.model';
|
||||
import { CardViewUpdateService } from '../../services/card-view-update.service';
|
||||
import { CardViewDateItemComponent } from './card-view-dateitem.component';
|
||||
@@ -26,15 +25,16 @@ import { AppConfigService } from '../../../app-config/app-config.service';
|
||||
import { MatDatetimepickerInputEvent } from '@mat-datetimepicker/core';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatChipHarness } from '@angular/material/chips/testing';
|
||||
import { addMinutes } from 'date-fns';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('CardViewDateItemComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let fixture: ComponentFixture<CardViewDateItemComponent>;
|
||||
let component: CardViewDateItemComponent;
|
||||
let appConfigService: AppConfigService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -59,20 +59,19 @@ describe('CardViewDateItemComponent', () => {
|
||||
});
|
||||
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => fixture.destroy());
|
||||
|
||||
const getPropertyLabel = (): string => testingUtils.getInnerTextByCSS('.adf-property-label');
|
||||
const getPropertyValue = (): string => testingUtils.getInnerTextByCSS('.adf-property-value');
|
||||
|
||||
it('should render the label and value', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Date label');
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('Jul 10, 2017');
|
||||
expect(getPropertyLabel()).toBe('Date label');
|
||||
expect(getPropertyValue().trim()).toBe('Jul 10, 2017');
|
||||
});
|
||||
|
||||
it('should NOT render the default as value if the value is empty, editable:false and displayEmpty is false', () => {
|
||||
@@ -88,9 +87,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.displayEmpty = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('');
|
||||
expect(getPropertyValue().trim()).toBe('');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty, editable:false and displayEmpty is true', () => {
|
||||
@@ -106,9 +103,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.displayEmpty = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
expect(getPropertyValue().trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty and editable:true', () => {
|
||||
@@ -124,9 +119,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
expect(getPropertyValue().trim()).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render value when editable:true', () => {
|
||||
@@ -135,9 +128,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('Jul 10, 2017');
|
||||
expect(getPropertyValue().trim()).toBe('Jul 10, 2017');
|
||||
});
|
||||
|
||||
it('should render the picker and toggle in case of editable:true', () => {
|
||||
@@ -145,8 +136,8 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const datePicker = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-${component.property.key}"]`));
|
||||
const datePickerToggle = fixture.debugElement.query(By.css(`[data-automation-id="datepickertoggle-${component.property.key}"]`));
|
||||
const datePicker = testingUtils.getByDataAutomationId(`datepicker-${component.property.key}`);
|
||||
const datePickerToggle = testingUtils.getByDataAutomationId(`datepickertoggle-${component.property.key}`);
|
||||
expect(datePicker).not.toBeNull('Datepicker should be in DOM');
|
||||
expect(datePickerToggle).not.toBeNull('Datepicker toggle should be shown');
|
||||
});
|
||||
@@ -155,8 +146,8 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.property.editable = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const datePicker = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-${component.property.key}"]`));
|
||||
const datePickerToggle = fixture.debugElement.query(By.css(`[data-automation-id="datepickertoggle-${component.property.key}"]`));
|
||||
const datePicker = testingUtils.getByDataAutomationId(`datepicker-${component.property.key}`);
|
||||
const datePickerToggle = testingUtils.getByDataAutomationId(`datepickertoggle-${component.property.key}`);
|
||||
expect(datePicker).toBeNull('Datepicker should NOT be in DOM');
|
||||
expect(datePickerToggle).toBeNull('Datepicker toggle should NOT be shown');
|
||||
});
|
||||
@@ -167,8 +158,8 @@ describe('CardViewDateItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.isEditable).toBe(false);
|
||||
const datePicker = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-${component.property.key}"]`));
|
||||
const datePickerToggle = fixture.debugElement.query(By.css(`[data-automation-id="datepickertoggle-${component.property.key}"]`));
|
||||
const datePicker = testingUtils.getByDataAutomationId(`datepicker-${component.property.key}`);
|
||||
const datePickerToggle = testingUtils.getByDataAutomationId(`datepickertoggle-${component.property.key}`);
|
||||
expect(datePicker).toBeNull('Datepicker should NOT be in DOM');
|
||||
expect(datePickerToggle).toBeNull('Datepicker toggle should NOT be shown');
|
||||
});
|
||||
@@ -179,8 +170,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
spyOn(component.datepicker, 'open');
|
||||
|
||||
const datePickerLabelToggle = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-label-toggle-${component.property.key}"]`));
|
||||
datePickerLabelToggle.triggerEventHandler('click', {});
|
||||
testingUtils.getByDataAutomationId(`datepicker-label-toggle-${component.property.key}`).nativeElement.click();
|
||||
|
||||
expect(component.datepicker.open).toHaveBeenCalled();
|
||||
});
|
||||
@@ -223,8 +213,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.editable = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const doubleClickEl = fixture.debugElement.query(By.css(`[data-automation-id="card-dateitem-${component.property.key}"]`));
|
||||
doubleClickEl.triggerEventHandler('dblclick', new MouseEvent('dblclick'));
|
||||
testingUtils.doubleClickByDataAutomationId(`card-dateitem-${component.property.key}`);
|
||||
|
||||
fixture.detectChanges();
|
||||
expect(clipboardService.copyContentToClipboard).toHaveBeenCalledWith('Jul 10, 2017', 'CORE.METADATA.ACCESSIBILITY.COPY_TO_CLIPBOARD_MESSAGE');
|
||||
@@ -237,9 +226,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.property.value = new Date('Jul 10 2017');
|
||||
fixture.detectChanges();
|
||||
|
||||
const datePickerClearToggle = fixture.debugElement.query(
|
||||
By.css(`[data-automation-id="datepicker-date-clear-${component.property.key}"]`)
|
||||
);
|
||||
const datePickerClearToggle = testingUtils.getByDataAutomationId(`datepicker-date-clear-${component.property.key}`);
|
||||
expect(datePickerClearToggle).not.toBeNull('Clean Icon should be in DOM');
|
||||
});
|
||||
|
||||
@@ -249,9 +236,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.property.value = null;
|
||||
fixture.detectChanges();
|
||||
|
||||
const datePickerClearToggle = fixture.debugElement.query(
|
||||
By.css(`[data-automation-id="datepicker-date-clear--${component.property.key}"]`)
|
||||
);
|
||||
const datePickerClearToggle = testingUtils.getByDataAutomationId(`datepicker-date-clear-${component.property.key}`);
|
||||
expect(datePickerClearToggle).toBeNull('Clean Icon should not be in DOM');
|
||||
});
|
||||
|
||||
@@ -262,9 +247,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
component.property.value = new Date('Jul 10 2017');
|
||||
fixture.detectChanges();
|
||||
|
||||
const datePickerClearToggle = fixture.debugElement.query(
|
||||
By.css(`[data-automation-id="datepicker-date-clear--${component.property.key}"]`)
|
||||
);
|
||||
const datePickerClearToggle = testingUtils.getByDataAutomationId(`datepicker-date-clear-${component.property.key}`);
|
||||
expect(datePickerClearToggle).toBeNull('Clean Icon should not be in DOM');
|
||||
});
|
||||
|
||||
@@ -329,9 +312,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
const element = fixture.debugElement.nativeElement.querySelector('span[data-automation-id="card-date-value-fake-key"]');
|
||||
expect(element).toBeDefined();
|
||||
expect(element.innerText).toEqual('Jul 10, 2017');
|
||||
expect(testingUtils.getInnerTextByDataAutomationId('card-date-value-fake-key')).toEqual('Jul 10, 2017');
|
||||
component.onDateChanged({ value: expectedDate } as MatDatetimepickerInputEvent<Date>);
|
||||
|
||||
fixture.detectChanges();
|
||||
@@ -350,7 +331,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const chips = await loader.getAllHarnesses(MatChipHarness);
|
||||
const chips = await testingUtils.getMatChips();
|
||||
expect(chips.length).toBe(3);
|
||||
expect(await chips[0].getText()).toBe('Jul 10, 2017');
|
||||
expect(await chips[1].getText()).toBe('Jul 11, 2017');
|
||||
@@ -369,7 +350,7 @@ describe('CardViewDateItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const chips = await loader.getAllHarnesses(MatChipHarness);
|
||||
const chips = await testingUtils.getMatChips();
|
||||
expect(chips.length).toBe(3);
|
||||
expect(await chips[0].getText()).toBe('Jul 10, 2017, 0:01');
|
||||
expect(await chips[1].getText()).toBe('Jul 11, 2017, 0:01');
|
||||
|
||||
+8
-6
@@ -19,10 +19,10 @@
|
||||
|
||||
import { Component, Input, SimpleChange } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CardViewItem } from '../../interfaces/card-view-item.interface';
|
||||
import { CardItemTypeService } from '../../services/card-item-types.service';
|
||||
import { CardViewItemDispatcherComponent } from './card-view-item-dispatcher.component';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
@Component({
|
||||
selector: 'whatever-you-want-to-have',
|
||||
@@ -38,6 +38,7 @@ describe('CardViewItemDispatcherComponent', () => {
|
||||
let fixture: ComponentFixture<CardViewItemDispatcherComponent>;
|
||||
let cardItemTypeService: CardItemTypeService;
|
||||
let component: CardViewItemDispatcherComponent;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
cardItemTypeService = new CardItemTypeService();
|
||||
@@ -67,6 +68,7 @@ describe('CardViewItemDispatcherComponent', () => {
|
||||
};
|
||||
component.editable = true;
|
||||
component.displayEmpty = true;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
fixture.detectChanges();
|
||||
component.ngOnChanges({});
|
||||
@@ -79,7 +81,7 @@ describe('CardViewItemDispatcherComponent', () => {
|
||||
|
||||
describe('Sub-component creation', () => {
|
||||
it('should load the CardViewShinyCustomElementItemComponent', () => {
|
||||
const innerElement = fixture.debugElement.query(By.css('[data-automation-id="found-me"]'));
|
||||
const innerElement = testingUtils.getByDataAutomationId('found-me');
|
||||
expect(innerElement).not.toBeNull();
|
||||
});
|
||||
|
||||
@@ -89,13 +91,13 @@ describe('CardViewItemDispatcherComponent', () => {
|
||||
component.ngOnChanges({});
|
||||
fixture.detectChanges();
|
||||
|
||||
const shinyCustomElementItemComponent = fixture.debugElement.queryAll(By.css('whatever-you-want-to-have'));
|
||||
const shinyCustomElementItemComponent = testingUtils.getAllByCSS('whatever-you-want-to-have');
|
||||
|
||||
expect(shinyCustomElementItemComponent.length).toEqual(1);
|
||||
});
|
||||
|
||||
it('should pass through the property, editable and displayEmpty parameters', () => {
|
||||
const shinyCustomElementItemComponent = fixture.debugElement.query(By.css('whatever-you-want-to-have')).componentInstance;
|
||||
const shinyCustomElementItemComponent = testingUtils.getByCSS('whatever-you-want-to-have').componentInstance;
|
||||
|
||||
expect(shinyCustomElementItemComponent.property).toBe(component.property);
|
||||
expect(shinyCustomElementItemComponent.editable).toBe(component.editable);
|
||||
@@ -121,7 +123,7 @@ describe('CardViewItemDispatcherComponent', () => {
|
||||
displayLabelForChips: new SimpleChange(false, expectedDisplayLabel, false)
|
||||
});
|
||||
|
||||
const shinyCustomElementItemComponent = fixture.debugElement.query(By.css('whatever-you-want-to-have')).componentInstance;
|
||||
const shinyCustomElementItemComponent = testingUtils.getByCSS('whatever-you-want-to-have').componentInstance;
|
||||
expect(shinyCustomElementItemComponent.property).toBe(expectedProperty);
|
||||
expect(shinyCustomElementItemComponent.editable).toBe(expectedEditable);
|
||||
expect(shinyCustomElementItemComponent.displayEmpty).toBe(expectedDisplayEmpty);
|
||||
@@ -147,7 +149,7 @@ describe('CardViewItemDispatcherComponent', () => {
|
||||
];
|
||||
|
||||
beforeEach(() => {
|
||||
shinyCustomElementItemComponent = fixture.debugElement.query(By.css('whatever-you-want-to-have')).componentInstance;
|
||||
shinyCustomElementItemComponent = testingUtils.getByCSS('whatever-you-want-to-have').componentInstance;
|
||||
});
|
||||
|
||||
it('should call through the life-cycle methods', () => {
|
||||
|
||||
+20
-19
@@ -16,16 +16,20 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CardViewKeyValuePairsItemModel } from '../../models/card-view-keyvaluepairs.model';
|
||||
import { CardViewKeyValuePairsItemComponent } from './card-view-keyvaluepairsitem.component';
|
||||
import { CardViewUpdateService } from '../../services/card-view-update.service';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
|
||||
describe('CardViewKeyValuePairsItemComponent', () => {
|
||||
let fixture: ComponentFixture<CardViewKeyValuePairsItemComponent>;
|
||||
let component: CardViewKeyValuePairsItemComponent;
|
||||
let cardViewUpdateService: CardViewUpdateService;
|
||||
let loader: HarnessLoader;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
const mockEmptyData = [{ name: '', value: '' }];
|
||||
const mockData = [{ name: 'test-name', value: 'test-value' }];
|
||||
|
||||
@@ -35,6 +39,8 @@ describe('CardViewKeyValuePairsItemComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(CardViewKeyValuePairsItemComponent);
|
||||
cardViewUpdateService = TestBed.inject(CardViewUpdateService);
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
component = fixture.componentInstance;
|
||||
component.property = new CardViewKeyValuePairsItemModel({
|
||||
label: 'Key Value Pairs',
|
||||
@@ -53,9 +59,7 @@ describe('CardViewKeyValuePairsItemComponent', () => {
|
||||
it('should render the label', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Key Value Pairs');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-property-label')).toBe('Key Value Pairs');
|
||||
});
|
||||
|
||||
it('should render readOnly table is editable property is FALSE', () => {
|
||||
@@ -70,47 +74,44 @@ describe('CardViewKeyValuePairsItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.isEditable).toBe(false);
|
||||
const table = fixture.debugElement.query(By.css('.adf-card-view__key-value-pairs__read-only'));
|
||||
const form = fixture.debugElement.query(By.css('.adf-card-view__key-value-pairs'));
|
||||
const table = testingUtils.getByCSS('.adf-card-view__key-value-pairs__read-only');
|
||||
const form = testingUtils.getByCSS('.adf-card-view__key-value-pairs');
|
||||
|
||||
expect(table).not.toBeNull();
|
||||
expect(form).toBeNull();
|
||||
});
|
||||
|
||||
it('should add new item on ADD button click', () => {
|
||||
it('should add new item on ADD button click', async () => {
|
||||
component.ngOnChanges();
|
||||
fixture.detectChanges();
|
||||
|
||||
const addButton = fixture.debugElement.query(By.css('.adf-card-view__key-value-pairs__add-btn'));
|
||||
addButton.triggerEventHandler('click', null);
|
||||
await testingUtils.clickMatButtonByDataAutomationId('card-key-value-pairs-button-key-value-pairs');
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(JSON.stringify(component.values)).toBe(JSON.stringify(mockEmptyData));
|
||||
|
||||
const content = fixture.debugElement.query(By.css('.adf-card-view__key-value-pairs'));
|
||||
const content = testingUtils.getByCSS('.adf-card-view__key-value-pairs');
|
||||
expect(content).not.toBeNull();
|
||||
|
||||
const nameInput = fixture.debugElement.query(By.css(`[data-automation-id="card-${component.property.key}-name-input-0"]`));
|
||||
const valueInput = fixture.debugElement.query(By.css(`[data-automation-id="card-${component.property.key}-value-input-0"]`));
|
||||
const nameInput = testingUtils.getByDataAutomationId(`card-${component.property.key}-name-input-0`);
|
||||
const valueInput = testingUtils.getByDataAutomationId(`card-${component.property.key}-value-input-0`);
|
||||
expect(nameInput).not.toBeNull();
|
||||
expect(valueInput).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should remove an item from list on REMOVE button click', () => {
|
||||
it('should remove an item from list on REMOVE button click', async () => {
|
||||
spyOn(cardViewUpdateService, 'update');
|
||||
component.ngOnChanges();
|
||||
fixture.detectChanges();
|
||||
|
||||
const addButton = fixture.debugElement.query(By.css('.adf-card-view__key-value-pairs__add-btn'));
|
||||
addButton.triggerEventHandler('click', null);
|
||||
await testingUtils.clickMatButtonByDataAutomationId('card-key-value-pairs-button-key-value-pairs');
|
||||
fixture.detectChanges();
|
||||
|
||||
const removeButton = fixture.debugElement.query(By.css('.adf-property-col-delete'));
|
||||
removeButton.triggerEventHandler('click', null);
|
||||
await testingUtils.clickMatButtonByCSS('.adf-property-col-delete');
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.values.length).toBe(0);
|
||||
const content = fixture.debugElement.query(By.css('.adf-card-view__key-value-pairs'));
|
||||
const content = testingUtils.getByCSS('.adf-card-view__key-value-pairs');
|
||||
expect(content).toBeNull();
|
||||
|
||||
expect(cardViewUpdateService.update).toHaveBeenCalled();
|
||||
|
||||
+14
-30
@@ -15,21 +15,18 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { DebugElement } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CardViewMapItemModel } from '../../models/card-view-mapitem.model';
|
||||
import { CardViewUpdateService } from '../../services/card-view-update.service';
|
||||
import { CardViewMapItemComponent } from './card-view-mapitem.component';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('CardViewMapItemComponent', () => {
|
||||
let service: CardViewUpdateService;
|
||||
|
||||
let fixture: ComponentFixture<CardViewMapItemComponent>;
|
||||
let component: CardViewMapItemComponent;
|
||||
let debug: DebugElement;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -38,14 +35,16 @@ describe('CardViewMapItemComponent', () => {
|
||||
fixture = TestBed.createComponent(CardViewMapItemComponent);
|
||||
service = TestBed.inject(CardViewUpdateService);
|
||||
component = fixture.componentInstance;
|
||||
debug = fixture.debugElement;
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
});
|
||||
|
||||
const getPropertyLabel = (): string => testingUtils.getInnerTextByCSS('.adf-property-label');
|
||||
const getPropertyValue = (): string => testingUtils.getInnerTextByDataAutomationId(`card-mapitem-value-${component.property.key}`);
|
||||
|
||||
it('should render the default if the value is empty and displayEmpty is true', () => {
|
||||
component.property = new CardViewMapItemModel({
|
||||
label: 'Map label',
|
||||
@@ -57,13 +56,8 @@ describe('CardViewMapItemComponent', () => {
|
||||
component.displayEmpty = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const labelValue = debug.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Map label');
|
||||
|
||||
const value = debug.query(By.css(`[data-automation-id="card-mapitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('Fake default');
|
||||
expect(getPropertyLabel()).toBe('Map label');
|
||||
expect(getPropertyValue().trim()).toBe('Fake default');
|
||||
});
|
||||
|
||||
it('should NOT render the default if the value is empty and displayEmpty is false', () => {
|
||||
@@ -77,12 +71,8 @@ describe('CardViewMapItemComponent', () => {
|
||||
component.displayEmpty = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const labelValue = debug.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).toBeNull();
|
||||
|
||||
const value = debug.query(By.css(`[data-automation-id="card-mapitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('');
|
||||
expect(testingUtils.getByCSS('.adf-property-label')).toBeNull();
|
||||
expect(getPropertyValue().trim()).toBe('');
|
||||
});
|
||||
|
||||
it('should render the label and value', () => {
|
||||
@@ -95,13 +85,8 @@ describe('CardViewMapItemComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const labelValue = debug.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Map label');
|
||||
|
||||
const value = debug.query(By.css(`[data-automation-id="card-mapitem-value-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText.trim()).toBe('fakeProcessName');
|
||||
expect(getPropertyLabel()).toBe('Map label');
|
||||
expect(getPropertyValue().trim()).toBe('fakeProcessName');
|
||||
});
|
||||
|
||||
it('should render a clickable value', (done) => {
|
||||
@@ -114,7 +99,6 @@ describe('CardViewMapItemComponent', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
const value: any = element.querySelector('.adf-mapitem-clickable-value');
|
||||
|
||||
const disposableUpdate = service.itemClicked$.subscribe((response) => {
|
||||
expect(response.target).not.toBeNull();
|
||||
@@ -125,6 +109,6 @@ describe('CardViewMapItemComponent', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
value.click();
|
||||
testingUtils.clickByCSS('.adf-mapitem-clickable-value');
|
||||
});
|
||||
});
|
||||
|
||||
+22
-45
@@ -16,19 +16,17 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CardViewSelectItemModel } from '../../models/card-view-selectitem.model';
|
||||
import { CardViewSelectItemComponent } from './card-view-selectitem.component';
|
||||
import { of } from 'rxjs';
|
||||
import { AppConfigService } from '../../../app-config/app-config.service';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatSelectHarness } from '@angular/material/select/testing';
|
||||
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
||||
import { CardViewUpdateService, NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
|
||||
import { MatAutocompleteHarness } from '@angular/material/autocomplete/testing';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
import { CardViewUpdateService } from '../../services/card-view-update.service';
|
||||
|
||||
describe('CardViewSelectItemComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
@@ -36,6 +34,7 @@ describe('CardViewSelectItemComponent', () => {
|
||||
let component: CardViewSelectItemComponent;
|
||||
let appConfig: AppConfigService;
|
||||
let cardViewUpdateService: CardViewUpdateService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
const mockData = [
|
||||
{ key: 'one', label: 'One' },
|
||||
{ key: 'two', label: 'Two' },
|
||||
@@ -71,6 +70,7 @@ describe('CardViewSelectItemComponent', () => {
|
||||
cardViewUpdateService = TestBed.inject(CardViewUpdateService);
|
||||
component.property = new CardViewSelectItemModel(mockDefaultProps);
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -84,9 +84,7 @@ describe('CardViewSelectItemComponent', () => {
|
||||
editable: false
|
||||
});
|
||||
fixture.detectChanges();
|
||||
const labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Select box label');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-property-label')).toBe('Select box label');
|
||||
});
|
||||
|
||||
it('should render readOnly value is editable property is FALSE', () => {
|
||||
@@ -98,8 +96,8 @@ describe('CardViewSelectItemComponent', () => {
|
||||
component.ngOnChanges({});
|
||||
fixture.detectChanges();
|
||||
|
||||
const readOnly = fixture.debugElement.query(By.css('[data-automation-class="read-only-value"]'));
|
||||
const selectBox = fixture.debugElement.query(By.css('[data-automation-class="select-box"]'));
|
||||
const readOnly = testingUtils.getByDataAutomationClass('read-only-value');
|
||||
const selectBox = testingUtils.getByDataAutomationClass('select-box');
|
||||
|
||||
expect(readOnly).not.toBeNull();
|
||||
expect(selectBox).toBeNull();
|
||||
@@ -118,10 +116,7 @@ describe('CardViewSelectItemComponent', () => {
|
||||
expect(component.value).toEqual('two');
|
||||
expect(component.isEditable).toBe(true);
|
||||
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
|
||||
const options = await select.getOptions();
|
||||
const options = await testingUtils.getMatSelectOptions();
|
||||
expect(options.length).toEqual(4);
|
||||
await options[1].click();
|
||||
|
||||
@@ -141,10 +136,7 @@ describe('CardViewSelectItemComponent', () => {
|
||||
expect(component.value).toEqual(2);
|
||||
expect(component.isEditable).toBe(true);
|
||||
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
|
||||
const options = await select.getOptions();
|
||||
const options = await testingUtils.getMatSelectOptions();
|
||||
|
||||
expect(options.length).toEqual(4);
|
||||
await options[1].click();
|
||||
@@ -164,10 +156,8 @@ describe('CardViewSelectItemComponent', () => {
|
||||
|
||||
expect(component.isEditable).toBe(true);
|
||||
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
const options = await testingUtils.getMatSelectOptions();
|
||||
|
||||
const options = await select.getOptions();
|
||||
expect(await options[0].getText()).toBe('CORE.CARDVIEW.NONE');
|
||||
});
|
||||
|
||||
@@ -176,7 +166,7 @@ describe('CardViewSelectItemComponent', () => {
|
||||
component.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(await loader.hasHarness(MatSelectHarness)).toBe(true);
|
||||
expect(await testingUtils.checkIfMatSelectExists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should not have label twice', async () => {
|
||||
@@ -184,7 +174,7 @@ describe('CardViewSelectItemComponent', () => {
|
||||
component.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const field = await loader.getHarness(MatFormFieldHarness.with({ selector: '.adf-property-value' }));
|
||||
const field = await testingUtils.getMatFormFieldByCSS('.adf-property-value');
|
||||
|
||||
expect(await field.hasLabel()).toBeFalse();
|
||||
});
|
||||
@@ -204,17 +194,11 @@ describe('CardViewSelectItemComponent', () => {
|
||||
component.ngOnChanges({});
|
||||
fixture.detectChanges();
|
||||
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
|
||||
let options = await select.getOptions();
|
||||
let options = await testingUtils.getMatSelectOptions();
|
||||
expect(options.length).toBe(3);
|
||||
|
||||
const filterInput = fixture.debugElement.query(By.css('.adf-select-filter-input input'));
|
||||
filterInput.nativeElement.value = mockData[0].label;
|
||||
filterInput.nativeElement.dispatchEvent(new Event('input'));
|
||||
|
||||
options = await select.getOptions();
|
||||
testingUtils.fillInputByCSS('.adf-select-filter-input input', mockData[0].label);
|
||||
options = await testingUtils.getMatSelectOptions(true);
|
||||
expect(options.length).toBe(1);
|
||||
expect(await options[0].getText()).toEqual(mockData[0].label);
|
||||
});
|
||||
@@ -232,11 +216,9 @@ describe('CardViewSelectItemComponent', () => {
|
||||
component.ngOnChanges({});
|
||||
fixture.detectChanges();
|
||||
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
|
||||
const filterInput = fixture.debugElement.query(By.css('.adf-select-filter-input'));
|
||||
expect(filterInput).toBe(null);
|
||||
await testingUtils.openMatSelect();
|
||||
const filterInput = testingUtils.getInputByCSS('.adf-select-filter-input input');
|
||||
expect(filterInput).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should show filter if options are greater then limit', async () => {
|
||||
@@ -252,10 +234,9 @@ describe('CardViewSelectItemComponent', () => {
|
||||
component.ngOnChanges({});
|
||||
fixture.detectChanges();
|
||||
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
await testingUtils.openMatSelect();
|
||||
|
||||
const filterInput = fixture.debugElement.query(By.css('.adf-select-filter-input'));
|
||||
const filterInput = testingUtils.getInputByCSS('.adf-select-filter-input input');
|
||||
expect(filterInput).not.toBe(null);
|
||||
});
|
||||
});
|
||||
@@ -339,11 +320,7 @@ describe('CardViewSelectItemComponent', () => {
|
||||
component.ngOnChanges({});
|
||||
fixture.detectChanges();
|
||||
|
||||
const autocomplete = await loader.getHarness(MatAutocompleteHarness);
|
||||
await autocomplete.enterText('Op');
|
||||
fixture.detectChanges();
|
||||
|
||||
const options = await autocomplete.getOptions();
|
||||
const options = await testingUtils.typeAndGetOptionsForMatAutoComplete(fixture, 'Op');
|
||||
expect(options.length).toBe(2);
|
||||
expect(await options[0].getText()).toContain('Option 1');
|
||||
expect(await options[1].getText()).toContain('Option 2');
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { SelectFilterInputComponent } from './select-filter-input.component';
|
||||
import { MatSelect, MatSelectModule } from '@angular/material/select';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../../testing/noop-translate.module';
|
||||
|
||||
describe('SelectFilterInputComponent', () => {
|
||||
let fixture: ComponentFixture<SelectFilterInputComponent>;
|
||||
@@ -78,7 +78,7 @@ describe('SelectFilterInputComponent', () => {
|
||||
component.onModelChange('some-search-term');
|
||||
expect(component.term).toBe('some-search-term');
|
||||
|
||||
component.selectFilterInput.nativeElement.dispatchEvent(new KeyboardEvent('keydown', { code: 'Escape' } as any));
|
||||
component.selectFilterInput.nativeElement.dispatchEvent(new KeyboardEvent('keydown', { code: 'Escape' }));
|
||||
fixture.detectChanges();
|
||||
expect(component.term).toBe('');
|
||||
});
|
||||
|
||||
+110
-115
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CardViewTextItemModel } from '../../models/card-view-textitem.model';
|
||||
import { CardViewUpdateService } from '../../services/card-view-update.service';
|
||||
import { CardViewTextItemComponent } from './card-view-textitem.component';
|
||||
@@ -30,36 +29,38 @@ import { DebugElement, SimpleChange } from '@angular/core';
|
||||
import { CardViewItemValidator } from '../../interfaces/card-view-item-validator.interface';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatChipHarness, MatChipGridHarness } from '@angular/material/chips/testing';
|
||||
import { MatInputHarness } from '@angular/material/input/testing';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
|
||||
describe('CardViewTextItemComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let fixture: ComponentFixture<CardViewTextItemComponent>;
|
||||
let component: CardViewTextItemComponent;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const expectedErrorMessages = [{ message: 'Something went wrong' } as CardViewItemValidator];
|
||||
|
||||
const getTextField = (key: string): HTMLInputElement =>
|
||||
fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-value-${key}"]`)).nativeElement;
|
||||
const getTextField = (key: string): Promise<MatInputHarness> => testingUtils.getMatInputByDataAutomationId(`card-textitem-value-${key}`);
|
||||
|
||||
const updateTextField = (key: string, value) => {
|
||||
const editInput = getTextField(key);
|
||||
editInput.value = value;
|
||||
editInput.dispatchEvent(new Event('input'));
|
||||
const getTextFieldValue = async (key: string): Promise<string> => {
|
||||
const textField = await getTextField(key);
|
||||
return textField.getValue();
|
||||
};
|
||||
|
||||
const updateTextField = async (key: string, value: string) => {
|
||||
await testingUtils.fillMatInputByDataAutomationId(`card-textitem-value-${key}`, value);
|
||||
fixture.detectChanges();
|
||||
};
|
||||
|
||||
const getTextFieldValue = (key: string): string => {
|
||||
const textItemInput = getTextField(key);
|
||||
expect(textItemInput).not.toBeNull();
|
||||
return textItemInput.value;
|
||||
const updateTextFieldWithNumber = (key: string, value: number) => {
|
||||
testingUtils.fillInputByDataAutomationId(`card-textitem-value-${key}`, value);
|
||||
fixture.detectChanges();
|
||||
};
|
||||
|
||||
const getErrorElements = (key: string, includeItems = false): DebugElement[] =>
|
||||
fixture.debugElement.queryAll(By.css(`[data-automation-id="card-textitem-error-${key}"]${includeItems ? ' li' : ''}`));
|
||||
testingUtils.getAllByCSS(`[data-automation-id="card-textitem-error-${key}"]${includeItems ? ' li' : ''}`);
|
||||
|
||||
const getTextFieldError = (key: string): string => {
|
||||
const textItemInputErrors = getErrorElements(key, true);
|
||||
@@ -103,7 +104,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const valueChips = await loader.getAllHarnesses(MatChipHarness);
|
||||
const valueChips = await testingUtils.getMatChips();
|
||||
expect(valueChips.length).toBe(length);
|
||||
expect(await valueChips[0].getText()).toBe(param1);
|
||||
expect(await valueChips[1].getText()).toBe(param2);
|
||||
@@ -117,6 +118,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
fixture = TestBed.createComponent(CardViewTextItemComponent);
|
||||
component = fixture.componentInstance;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -140,12 +142,8 @@ describe('CardViewTextItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('Text label');
|
||||
|
||||
const value = getTextFieldValue(component.property.key);
|
||||
expect(value).toBe('Lorem ipsum');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-property-label')).toBe('Text label');
|
||||
expect(await getTextFieldValue(component.property.key)).toBe('Lorem ipsum');
|
||||
});
|
||||
|
||||
it('should render the displayName as value when available', async () => {
|
||||
@@ -157,8 +155,8 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.ngOnChanges({ property: new SimpleChange(null, null, true) });
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const value = getTextFieldValue(component.property.key);
|
||||
expect(value).toBe('User Name');
|
||||
|
||||
expect(await getTextFieldValue(component.property.key)).toBe('User Name');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty, editable is false and displayEmpty is true', async () => {
|
||||
@@ -173,8 +171,8 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.ngOnChanges({ property: new SimpleChange(null, null, true) });
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const value = getTextFieldValue(component.property.key);
|
||||
expect(value).toBe('FAKE-DEFAULT-KEY');
|
||||
|
||||
expect(await getTextFieldValue(component.property.key)).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty and editable true', async () => {
|
||||
@@ -189,8 +187,8 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.ngOnChanges({ property: new SimpleChange(null, null, true) });
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const value = getTextFieldValue(component.property.key);
|
||||
expect(value).toBe('FAKE-DEFAULT-KEY');
|
||||
|
||||
expect(await getTextFieldValue(component.property.key)).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render value when editable:true', async () => {
|
||||
@@ -198,8 +196,8 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.property.editable = true;
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const value = getTextFieldValue(component.property.key);
|
||||
expect(value).toBe('Lorem ipsum');
|
||||
|
||||
expect(await getTextFieldValue(component.property.key)).toBe('Lorem ipsum');
|
||||
});
|
||||
|
||||
it('should NOT render the picker and toggle in case of editable:true but (general) editable:false', async () => {
|
||||
@@ -208,8 +206,10 @@ describe('CardViewTextItemComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const editIcon = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-edit-icon-${component.property.key}"]`));
|
||||
expect(editIcon).toBeNull('Edit icon should NOT be shown');
|
||||
const editIcon = await testingUtils.checkIfMatIconExistsWithAncestorByDataAutomationId(
|
||||
`card-textitem-clickable-icon-${component.property.key}`
|
||||
);
|
||||
expect(editIcon).toBeFalse();
|
||||
});
|
||||
|
||||
it('should render chips for multivalue properties when chips are enabled', async () => {
|
||||
@@ -259,19 +259,19 @@ describe('CardViewTextItemComponent', () => {
|
||||
await renderChipsForMultiValuedProperties(cardViewTextItemFloatObject, true, 3, '10', '20.2', '35.8');
|
||||
const floatValidator: CardViewItemValidator = new CardViewItemFloatValidator();
|
||||
component.property.validators = [floatValidator];
|
||||
const inputElement = fixture.debugElement.query(By.css('[data-automation-id="card-textitem-editchipinput-textkey"]')).nativeElement;
|
||||
const inputElement = testingUtils.getByDataAutomationId('card-textitem-editchipinput-textkey').nativeElement;
|
||||
component.addValueToList({ value: 'abcd', chipInput: inputElement } as MatChipInputEvent);
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(getTextFieldError('textkey')).toBe('CORE.CARDVIEW.VALIDATORS.FLOAT_VALIDATION_ERROR');
|
||||
let valueChips = await loader.getAllHarnesses(MatChipHarness);
|
||||
let valueChips = await testingUtils.getMatChips();
|
||||
expect(valueChips.length).toBe(3);
|
||||
|
||||
component.addValueToList({ value: '22.1', chipInput: inputElement } as MatChipInputEvent);
|
||||
fixture.detectChanges();
|
||||
|
||||
verifyNoErrors('textkey');
|
||||
valueChips = await loader.getAllHarnesses(MatChipHarness);
|
||||
valueChips = await testingUtils.getMatChips();
|
||||
expect(valueChips.length).toBe(4);
|
||||
});
|
||||
|
||||
@@ -290,9 +290,9 @@ describe('CardViewTextItemComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const value = getTextFieldValue(component.property.key);
|
||||
expect(value).toBe('item1,item2,item3');
|
||||
expect(await loader.hasHarness(MatChipGridHarness)).toBe(false);
|
||||
|
||||
expect(await getTextFieldValue(component.property.key)).toBe('item1,item2,item3');
|
||||
expect(await testingUtils.checkIfMatChipGridExists()).toBe(false);
|
||||
});
|
||||
|
||||
it('should display the label for multi-valued chips if displayLabelForChips is true', async () => {
|
||||
@@ -313,9 +313,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const labelElement = fixture.debugElement.query(By.css(`.adf-property-label`));
|
||||
expect(labelElement).not.toBeNull();
|
||||
expect(labelElement.nativeElement.innerText).toBe('Text label');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-property-label')).toBe('Text label');
|
||||
});
|
||||
|
||||
it('should NOT display the label for multi-valued chips if displayLabelForChips is false', async () => {
|
||||
@@ -336,8 +334,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const labelElement = fixture.debugElement.query(By.css(`.adf-property-label`));
|
||||
expect(labelElement).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-property-label')).toBeNull();
|
||||
});
|
||||
|
||||
it('should return true when editable is true, and property.editable is false', () => {
|
||||
@@ -375,8 +372,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const value = getTextFieldValue(component.property.key);
|
||||
expect(value).toBe('FAKE-DEFAULT-KEY');
|
||||
expect(await getTextFieldValue(component.property.key)).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty and clickable true', async () => {
|
||||
@@ -385,8 +381,8 @@ describe('CardViewTextItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
const value = getTextFieldValue(component.property.key);
|
||||
expect(value).toBe('FAKE-DEFAULT-KEY');
|
||||
|
||||
expect(await getTextFieldValue(component.property.key)).toBe('FAKE-DEFAULT-KEY');
|
||||
});
|
||||
|
||||
it('should not render the edit icon in case of clickable true but edit false', async () => {
|
||||
@@ -395,8 +391,11 @@ describe('CardViewTextItemComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
const value = fixture.debugElement.query(By.css('.adf-textitem-edit-icon'));
|
||||
expect(value).toBeNull();
|
||||
|
||||
const editIcon = await testingUtils.checkIfMatIconExistsWithAncestorByDataAutomationId(
|
||||
`card-textitem-clickable-icon-${component.property.key}`
|
||||
);
|
||||
expect(editIcon).toBeFalse();
|
||||
});
|
||||
|
||||
it('should not render the clickable icon in case editable set to false', async () => {
|
||||
@@ -408,8 +407,10 @@ describe('CardViewTextItemComponent', () => {
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-clickable-icon-${component.property.key}"]`));
|
||||
expect(value).toBeNull('icon should NOT be shown');
|
||||
const editIcon = await testingUtils.checkIfMatIconExistsWithAncestorByDataAutomationId(
|
||||
`card-textitem-clickable-icon-${component.property.key}`
|
||||
);
|
||||
expect(editIcon).toBeFalse();
|
||||
});
|
||||
|
||||
it('should render the defined clickable icon in case of clickable true and editable input set to true', async () => {
|
||||
@@ -422,9 +423,9 @@ describe('CardViewTextItemComponent', () => {
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-clickable-icon-${component.property.key}"]`));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText).toBe('FAKE_ICON');
|
||||
const editIcon = await testingUtils.getMatIconWithAncestorByDataAutomationId(`card-textitem-clickable-icon-${component.property.key}`);
|
||||
expect(editIcon).not.toBeNull();
|
||||
expect(await editIcon.getName()).toBe('FAKE_ICON');
|
||||
});
|
||||
|
||||
it('should not render clickable icon in case of clickable true and icon undefined', async () => {
|
||||
@@ -435,8 +436,10 @@ describe('CardViewTextItemComponent', () => {
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-clickable-icon-${component.property.key}"]`));
|
||||
expect(value).toBeNull('icon should NOT be shown');
|
||||
const editIcon = await testingUtils.checkIfMatIconExistsWithAncestorByDataAutomationId(
|
||||
`card-textitem-clickable-icon-${component.property.key}`
|
||||
);
|
||||
expect(editIcon).toBeFalse();
|
||||
});
|
||||
|
||||
it('should not render the edit icon in case of clickable false and icon defined', async () => {
|
||||
@@ -447,8 +450,10 @@ describe('CardViewTextItemComponent', () => {
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-edit-icon-${component.property.icon}"]`));
|
||||
expect(value).toBeNull('Edit icon should NOT be shown');
|
||||
const editIcon = await testingUtils.checkIfMatIconExistsWithAncestorByDataAutomationId(
|
||||
`card-textitem-clickable-icon-${component.property.key}`
|
||||
);
|
||||
expect(editIcon).toBeFalse();
|
||||
});
|
||||
|
||||
it('should call back function when clickable property enabled', async () => {
|
||||
@@ -463,9 +468,9 @@ describe('CardViewTextItemComponent', () => {
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-clickable-icon-${component.property.key}"]`));
|
||||
expect(value.nativeElement.innerText).toBe('FAKE_ICON');
|
||||
value.nativeElement.click();
|
||||
const editIcon = await testingUtils.getMatIconWithAncestorByDataAutomationId(`card-textitem-clickable-icon-${component.property.key}`);
|
||||
expect(await editIcon.getName()).toBe('FAKE_ICON');
|
||||
await testingUtils.clickMatIconWithAncestorByDataAutomationId(`card-textitem-clickable-icon-${component.property.key}`);
|
||||
fixture.detectChanges();
|
||||
expect(callBackSpy).toHaveBeenCalled();
|
||||
});
|
||||
@@ -483,8 +488,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const value = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-toggle-${component.property.key}"]`));
|
||||
value.nativeElement.click();
|
||||
testingUtils.clickByDataAutomationId(`card-textitem-toggle-${component.property.key}`);
|
||||
fixture.detectChanges();
|
||||
expect(cardViewUpdateService.clicked).toHaveBeenCalled();
|
||||
});
|
||||
@@ -497,7 +501,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.property.isValid = () => true;
|
||||
const expectedText = 'changed text';
|
||||
|
||||
updateTextField(component.property.key, expectedText);
|
||||
await updateTextField(component.property.key, expectedText);
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(itemUpdatedSpy).toHaveBeenCalledWith({
|
||||
@@ -506,7 +510,8 @@ describe('CardViewTextItemComponent', () => {
|
||||
textkey: expectedText
|
||||
}
|
||||
});
|
||||
expect(getTextFieldValue(component.property.key)).toEqual(expectedText);
|
||||
|
||||
expect(await getTextFieldValue(component.property.key)).toEqual(expectedText);
|
||||
});
|
||||
|
||||
it('should copy value to clipboard on double click', async () => {
|
||||
@@ -521,10 +526,9 @@ describe('CardViewTextItemComponent', () => {
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const doubleClickEl = fixture.debugElement.query(By.css(`[data-automation-id="card-textitem-value-${component.property.key}"]`));
|
||||
doubleClickEl.triggerEventHandler('dblclick', new MouseEvent('dblclick'));
|
||||
|
||||
testingUtils.doubleClickByDataAutomationId(`card-textitem-value-${component.property.key}`);
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(clipboardService.copyContentToClipboard).toHaveBeenCalledWith(
|
||||
'myValueToCopy',
|
||||
'CORE.METADATA.ACCESSIBILITY.COPY_TO_CLIPBOARD_MESSAGE'
|
||||
@@ -537,9 +541,8 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.ngOnChanges({});
|
||||
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
const inputHarness = await loader.getHarness(
|
||||
MatInputHarness.with({ selector: `[data-automation-id="card-textitem-value-${component.property.key}"]` })
|
||||
);
|
||||
testingUtils.setLoader(loader);
|
||||
const inputHarness = await testingUtils.getMatInputByDataAutomationId(`card-textitem-value-${component.property.key}`);
|
||||
|
||||
expect(component.isEditable).toBe(false);
|
||||
expect(await inputHarness.isReadonly()).toBe(true);
|
||||
@@ -563,7 +566,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
it('should call the isValid method with the edited value', async () => {
|
||||
spyOn(component.property, 'isValid');
|
||||
|
||||
updateTextField(component.property.key, 'updated-value');
|
||||
await updateTextField(component.property.key, 'updated-value');
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(component.property.isValid).toHaveBeenCalledWith('updated-value');
|
||||
@@ -574,7 +577,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
spyOn(cardViewUpdateService, 'update');
|
||||
component.property.isValid = () => true;
|
||||
|
||||
updateTextField(component.property.key, 'updated-value');
|
||||
await updateTextField(component.property.key, 'updated-value');
|
||||
await fixture.whenStable();
|
||||
|
||||
const property = { ...component.property };
|
||||
@@ -586,7 +589,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
spyOn(cardViewUpdateService, 'update');
|
||||
component.property.isValid = () => false;
|
||||
|
||||
updateTextField(component.property.key, '@invalid-value');
|
||||
await updateTextField(component.property.key, '@invalid-value');
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(cardViewUpdateService.update).not.toHaveBeenCalled();
|
||||
@@ -597,7 +600,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
spyOn(cardViewUpdateService, 'update');
|
||||
component.property.isValid = () => true;
|
||||
|
||||
updateTextField(component.property.key, 'valid-value');
|
||||
await updateTextField(component.property.key, 'valid-value');
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(cardViewUpdateService.update).toHaveBeenCalled();
|
||||
@@ -607,7 +610,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.property.isValid = () => false;
|
||||
component.property.getValidationErrors = () => expectedErrorMessages;
|
||||
|
||||
updateTextField(component.property.key, 'updated-value');
|
||||
await updateTextField(component.property.key, 'updated-value');
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(component.errors).toBe(expectedErrorMessages);
|
||||
@@ -616,7 +619,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
it('should set the errorMessages properly if the editedValue is valid', async () => {
|
||||
component.property.isValid = () => true;
|
||||
|
||||
updateTextField(component.property.key, 'updated-value');
|
||||
await updateTextField(component.property.key, 'updated-value');
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(component.errors).toEqual([]);
|
||||
@@ -627,8 +630,8 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const errorMessage: HTMLElement = fixture.debugElement.nativeElement.querySelector('.adf-textitem-error');
|
||||
expect(errorMessage.textContent).toBe(expectedErrorMessages[0].message);
|
||||
const errorMessages = getErrorElements(component.property.key, true);
|
||||
expect(errorMessages[0].nativeElement.textContent).toBe(expectedErrorMessages[0].message);
|
||||
});
|
||||
|
||||
it('should NOT display error when exiting editable mode', () => {
|
||||
@@ -636,14 +639,14 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.editable = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
let errorMessage: HTMLElement = fixture.debugElement.nativeElement.querySelector('.adf-textitem-error');
|
||||
expect(errorMessage.textContent).toBe(expectedErrorMessages[0].message);
|
||||
let errorMessages = getErrorElements(component.property.key, true);
|
||||
expect(errorMessages[0].nativeElement.textContent).toBe(expectedErrorMessages[0].message);
|
||||
|
||||
component.editable = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
errorMessage = fixture.debugElement.nativeElement.querySelector('.adf-textitem-error');
|
||||
expect(errorMessage).toBeNull();
|
||||
errorMessages = getErrorElements(component.property.key, false);
|
||||
expect(errorMessages).toEqual([]);
|
||||
});
|
||||
|
||||
it('should update the property value after a successful update attempt', async () => {
|
||||
@@ -659,7 +662,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.property.isValid = () => true;
|
||||
const expectedText = 'changed text';
|
||||
|
||||
updateTextField(component.property.key, expectedText);
|
||||
await updateTextField(component.property.key, expectedText);
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(itemUpdatedSpy).toHaveBeenCalledWith({
|
||||
@@ -670,33 +673,30 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should update the value using the updateItem$ subject', () => {
|
||||
it('should update the value using the updateItem$ subject', async () => {
|
||||
const cardViewUpdateService = TestBed.inject(CardViewUpdateService);
|
||||
component.property.isValid = () => true;
|
||||
const expectedText = 'changed text';
|
||||
|
||||
let value = getTextFieldValue(component.property.key);
|
||||
expect(value).toEqual('Lorem ipsum');
|
||||
expect(await getTextFieldValue(component.property.key)).toEqual('Lorem ipsum');
|
||||
expect(component.property.value).toBe('Lorem ipsum');
|
||||
|
||||
cardViewUpdateService.updateElement({ key: component.property.key, value: expectedText } as any);
|
||||
component.ngOnChanges({ property: new SimpleChange(value, expectedText, false) });
|
||||
component.ngOnChanges({ property: new SimpleChange(await getTextFieldValue(component.property.key), expectedText, false) });
|
||||
fixture.detectChanges();
|
||||
|
||||
value = getTextFieldValue(component.property.key);
|
||||
expect(value).toEqual(expectedText);
|
||||
expect(await getTextFieldValue(component.property.key)).toEqual(expectedText);
|
||||
expect(component.property.value).toBe(expectedText);
|
||||
});
|
||||
|
||||
it('should render the default as value if the value is empty, clickable is true and displayEmpty is true', () => {
|
||||
it('should render the default as value if the value is empty, clickable is true and displayEmpty is true', async () => {
|
||||
component.property.value = '';
|
||||
component.property.clickable = true;
|
||||
component.displayEmpty = true;
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const inputField = getTextFieldValue(component.property.key);
|
||||
expect(inputField).toBe('Lorem ipsum');
|
||||
expect(await getTextFieldValue(component.property.key)).toBe('Lorem ipsum');
|
||||
});
|
||||
|
||||
it('should update multiline input the value on input updated', async () => {
|
||||
@@ -707,7 +707,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
component.property.multiline = true;
|
||||
const expectedText = 'changed text';
|
||||
|
||||
updateTextField(component.property.key, expectedText);
|
||||
await updateTextField(component.property.key, expectedText);
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(itemUpdatedSpy).toHaveBeenCalledWith({
|
||||
@@ -718,7 +718,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
expect(component.update).toHaveBeenCalled();
|
||||
expect(getTextFieldValue(component.property.key)).toEqual(expectedText);
|
||||
expect(await getTextFieldValue(component.property.key)).toEqual(expectedText);
|
||||
expect(component.property.value).toBe(expectedText);
|
||||
});
|
||||
|
||||
@@ -754,7 +754,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
it('should show validation error when string passed', async () => {
|
||||
updateTextField(component.property.key, 'update number');
|
||||
await updateTextField(component.property.key, 'update number');
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -763,7 +763,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
it('should NOT show validation error for empty string', async () => {
|
||||
updateTextField(component.property.key, '');
|
||||
await updateTextField(component.property.key, '');
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -771,17 +771,16 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
it('should NOT show validation error for null', async () => {
|
||||
updateTextField(component.property.key, null);
|
||||
await updateTextField(component.property.key, null);
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const inputElement = getTextField('textkey');
|
||||
expect(inputElement.value).toBe('');
|
||||
expect(await getTextFieldValue('textkey')).toBe('');
|
||||
verifyNoErrors('textkey');
|
||||
});
|
||||
|
||||
it('should show validation error for only spaces string', async () => {
|
||||
updateTextField(component.property.key, ' ');
|
||||
await updateTextField(component.property.key, ' ');
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -790,7 +789,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
it('should show validation error for float number', async () => {
|
||||
updateTextField(component.property.key, 123.456);
|
||||
updateTextFieldWithNumber(component.property.key, 123.456);
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -800,7 +799,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
it('should show validation error for exceed the number limit (2147483648)', async () => {
|
||||
updateTextField(component.property.key, 2147483648);
|
||||
updateTextFieldWithNumber(component.property.key, 2147483648);
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -810,7 +809,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
it('should not show validation error for below the number limit (2147483647)', async () => {
|
||||
updateTextField(component.property.key, 2147483647);
|
||||
updateTextFieldWithNumber(component.property.key, 2147483647);
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -823,7 +822,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
const itemUpdatedSpy = spyOn(cardViewUpdateService.itemUpdated$, 'next');
|
||||
spyOn(component, 'update').and.callThrough();
|
||||
|
||||
updateTextField(component.property.key, expectedNumber);
|
||||
updateTextFieldWithNumber(component.property.key, expectedNumber);
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(itemUpdatedSpy).toHaveBeenCalledWith({
|
||||
@@ -834,7 +833,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
verifyNoErrors(component.property.key);
|
||||
expect(getTextFieldValue(component.property.key)).toEqual(expectedNumber.toString());
|
||||
expect(await getTextFieldValue(component.property.key)).toEqual(expectedNumber.toString());
|
||||
expect(component.property.value).toBe(expectedNumber.toString());
|
||||
});
|
||||
});
|
||||
@@ -859,23 +858,19 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
it('should show validation error when string passed', async () => {
|
||||
updateTextField(component.property.key, 'hello there');
|
||||
await updateTextField(component.property.key, 'hello there');
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const error = getTextFieldError(component.property.key);
|
||||
expect(error).toEqual('CORE.CARDVIEW.VALIDATORS.FLOAT_VALIDATION_ERROR');
|
||||
expect(component.property.value).toBe(floatValue);
|
||||
expect(getTextFieldError(component.property.key)).toEqual('CORE.CARDVIEW.VALIDATORS.FLOAT_VALIDATION_ERROR');
|
||||
});
|
||||
|
||||
it('should show validation error for empty string (float)', async () => {
|
||||
updateTextField(component.property.key, ' ');
|
||||
await updateTextField(component.property.key, ' ');
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const error = getTextFieldError(component.property.key);
|
||||
expect(error).toEqual('CORE.CARDVIEW.VALIDATORS.FLOAT_VALIDATION_ERROR');
|
||||
expect(component.property.value).toBe(floatValue);
|
||||
expect(getTextFieldError(component.property.key)).toEqual('CORE.CARDVIEW.VALIDATORS.FLOAT_VALIDATION_ERROR');
|
||||
});
|
||||
|
||||
it('should update input the value on input updated', async () => {
|
||||
@@ -883,7 +878,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
const itemUpdatedSpy = spyOn(cardViewUpdateService.itemUpdated$, 'next');
|
||||
spyOn(component, 'update').and.callThrough();
|
||||
|
||||
updateTextField(component.property.key, expectedNumber);
|
||||
updateTextFieldWithNumber(component.property.key, expectedNumber);
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(itemUpdatedSpy).toHaveBeenCalledWith({
|
||||
@@ -894,7 +889,7 @@ describe('CardViewTextItemComponent', () => {
|
||||
});
|
||||
|
||||
verifyNoErrors(component.property.key);
|
||||
expect(getTextFieldValue(component.property.key)).toEqual(expectedNumber.toString());
|
||||
expect(await getTextFieldValue(component.property.key)).toEqual(expectedNumber.toString());
|
||||
expect(component.property.value).toBe(expectedNumber.toString());
|
||||
});
|
||||
});
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CardViewDateItemModel } from '../../models/card-view-dateitem.model';
|
||||
import { CardViewTextItemModel } from '../../models/card-view-textitem.model';
|
||||
import { CardViewComponent } from './card-view.component';
|
||||
@@ -27,9 +26,9 @@ import { CardViewItem } from '../../interfaces/card-view-item.interface';
|
||||
import { CardViewItemDispatcherComponent } from '../card-view-item-dispatcher/card-view-item-dispatcher.component';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatSelectHarness } from '@angular/material/select/testing';
|
||||
import { MatDialogModule } from '@angular/material/dialog';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
||||
|
||||
@@ -37,6 +36,7 @@ describe('CardViewComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let fixture: ComponentFixture<CardViewComponent>;
|
||||
let component: CardViewComponent;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -46,25 +46,27 @@ describe('CardViewComponent', () => {
|
||||
fixture = TestBed.createComponent(CardViewComponent);
|
||||
component = fixture.componentInstance;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fixture.destroy();
|
||||
});
|
||||
|
||||
const getPropertyLabel = (): string => testingUtils.getInnerTextByCSS('.adf-property-label');
|
||||
const getPropertyValue = (): string => testingUtils.getByCSS('.adf-property-value').nativeElement.value;
|
||||
const getPropertyValueText = (): string => testingUtils.getInnerTextByCSS('.adf-property-value');
|
||||
const getPropertyValueByDataAutomationId = (dataAutomationId: string): string =>
|
||||
testingUtils.getByDataAutomationId(dataAutomationId).nativeElement.value;
|
||||
|
||||
it('should render the label and value', async () => {
|
||||
component.properties = [new CardViewTextItemModel({ label: 'My label', value: 'My value', key: 'some key' })];
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('My label');
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.value).toBe('My value');
|
||||
expect(getPropertyLabel()).toBe('My label');
|
||||
expect(getPropertyValue()).toBe('My value');
|
||||
});
|
||||
|
||||
it('should pass through editable property to the items', () => {
|
||||
@@ -80,8 +82,7 @@ describe('CardViewComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const datePicker = fixture.debugElement.query(By.css(`[data-automation-id="datepicker-some-key"]`));
|
||||
expect(datePicker).not.toBeNull('Datepicker should be in DOM');
|
||||
expect(testingUtils.getByDataAutomationId('datepicker-some-key')).not.toBeNull('Datepicker should be in DOM');
|
||||
});
|
||||
|
||||
it('should render the date in the correct format', async () => {
|
||||
@@ -97,13 +98,8 @@ describe('CardViewComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('My date label');
|
||||
|
||||
const value = fixture.debugElement.query(By.css('.adf-property-value'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.innerText).toBe('6/14/17, 12:00 AM');
|
||||
expect(getPropertyLabel()).toBe('My date label');
|
||||
expect(getPropertyValueText()).toBe('6/14/17, 12:00 AM');
|
||||
});
|
||||
|
||||
it('should render the default value if the value is empty, not editable and displayEmpty is true', async () => {
|
||||
@@ -122,13 +118,8 @@ describe('CardViewComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('My default label');
|
||||
|
||||
const value = fixture.debugElement.query(By.css('[data-automation-id="card-textitem-value-some-key"]'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.value).toBe('default value');
|
||||
expect(getPropertyLabel()).toBe('My default label');
|
||||
expect(getPropertyValueByDataAutomationId('card-textitem-value-some-key')).toBe('default value');
|
||||
});
|
||||
|
||||
it('should render the default value if the value is empty and is editable', async () => {
|
||||
@@ -147,13 +138,8 @@ describe('CardViewComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const labelValue = fixture.debugElement.query(By.css('.adf-property-label'));
|
||||
expect(labelValue).not.toBeNull();
|
||||
expect(labelValue.nativeElement.innerText).toBe('My default label');
|
||||
|
||||
const value = fixture.debugElement.query(By.css('[data-automation-id="card-textitem-value-some-key"]'));
|
||||
expect(value).not.toBeNull();
|
||||
expect(value.nativeElement.value).toBe('default value');
|
||||
expect(getPropertyLabel()).toBe('My default label');
|
||||
expect(getPropertyValueByDataAutomationId('card-textitem-value-some-key')).toBe('default value');
|
||||
});
|
||||
|
||||
it('should render the select element with the None option when not set in the properties', async () => {
|
||||
@@ -177,10 +163,7 @@ describe('CardViewComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
|
||||
const currentOptions = await select.getOptions();
|
||||
const currentOptions = await testingUtils.getMatSelectOptions();
|
||||
expect(currentOptions.length).toBe(3);
|
||||
expect(await currentOptions[0].getText()).toContain('CORE.CARDVIEW.NONE');
|
||||
expect(await currentOptions[1].getText()).toContain(options[0].label);
|
||||
@@ -209,10 +192,7 @@ describe('CardViewComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
|
||||
const currentOptions = await select.getOptions();
|
||||
const currentOptions = await testingUtils.getMatSelectOptions();
|
||||
expect(currentOptions.length).toBe(3);
|
||||
expect(await currentOptions[0].getText()).toContain('CORE.CARDVIEW.NONE');
|
||||
expect(await currentOptions[1].getText()).toContain(options[0].label);
|
||||
@@ -241,10 +221,7 @@ describe('CardViewComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
|
||||
const currentOptions = await select.getOptions();
|
||||
const currentOptions = await testingUtils.getMatSelectOptions();
|
||||
expect(currentOptions.length).toBe(2);
|
||||
expect(await currentOptions[0].getText()).toContain(options[0].label);
|
||||
expect(await currentOptions[1].getText()).toContain(options[1].label);
|
||||
@@ -276,7 +253,7 @@ describe('CardViewComponent', () => {
|
||||
* @returns the dispatcher component instance
|
||||
*/
|
||||
function getCardViewItemDispatcherComponent(): CardViewItemDispatcherComponent {
|
||||
const cardViewItemDispatcherDebugElement = fixture.debugElement.query(By.directive(CardViewItemDispatcherComponent));
|
||||
const cardViewItemDispatcherDebugElement = testingUtils.getByDirective(CardViewItemDispatcherComponent);
|
||||
return cardViewItemDispatcherDebugElement.componentInstance as CardViewItemDispatcherComponent;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -20,12 +20,15 @@ import { ComponentFixture, TestBed, tick, fakeAsync } from '@angular/core/testin
|
||||
import { ClipboardService } from './clipboard.service';
|
||||
import { ClipboardDirective } from './clipboard.directive';
|
||||
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
import { HarnessLoader, TestKey } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-test-component',
|
||||
template: `
|
||||
<button clipboard-notification="copy success" [adf-clipboard] [target]="ref">copy</button>
|
||||
<button mat-button clipboard-notification="copy success" [adf-clipboard] [target]="ref">copy</button>
|
||||
|
||||
<input #ref />
|
||||
`
|
||||
@@ -35,6 +38,8 @@ class TestTargetClipboardComponent {}
|
||||
describe('ClipboardDirective', () => {
|
||||
let fixture: ComponentFixture<TestTargetClipboardComponent>;
|
||||
let clipboardService: ClipboardService;
|
||||
let loader: HarnessLoader;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -43,21 +48,23 @@ describe('ClipboardDirective', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(TestTargetClipboardComponent);
|
||||
clipboardService = TestBed.inject(ClipboardService);
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should notify copy target value on button click event', () => {
|
||||
it('should notify copy target value on button click event', async () => {
|
||||
spyOn(clipboardService, 'copyToClipboard');
|
||||
fixture.nativeElement.querySelector('input').value = 'some value';
|
||||
fixture.nativeElement.querySelector('button').dispatchEvent(new MouseEvent('click'));
|
||||
testingUtils.fillInputByCSS('input', 'some value');
|
||||
await testingUtils.clickMatButton();
|
||||
|
||||
expect(clipboardService.copyToClipboard).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should notify copy target value on keydown event', () => {
|
||||
it('should notify copy target value on keydown event', async () => {
|
||||
spyOn(clipboardService, 'copyToClipboard');
|
||||
fixture.nativeElement.querySelector('input').value = 'some value';
|
||||
fixture.nativeElement.querySelector('button').dispatchEvent(new KeyboardEvent('keydown', { code: 'Enter', key: 'Enter' }));
|
||||
testingUtils.fillInputByCSS('input', 'some value');
|
||||
await testingUtils.sendKeysToMatButton([TestKey.ENTER]);
|
||||
|
||||
expect(clipboardService.copyToClipboard).toHaveBeenCalled();
|
||||
});
|
||||
@@ -77,7 +84,7 @@ describe('CopyClipboardDirective', () => {
|
||||
}
|
||||
|
||||
let fixture: ComponentFixture<TestCopyClipboardComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -85,53 +92,45 @@ describe('CopyClipboardDirective', () => {
|
||||
declarations: [TestCopyClipboardComponent]
|
||||
});
|
||||
fixture = TestBed.createComponent(TestCopyClipboardComponent);
|
||||
element = fixture.debugElement.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should show tooltip when hover element', () => {
|
||||
const spanHTMLElement = element.querySelector<HTMLInputElement>('span');
|
||||
spanHTMLElement.dispatchEvent(new Event('mouseenter'));
|
||||
testingUtils.hoverOverByCSS('span');
|
||||
fixture.detectChanges();
|
||||
expect(fixture.debugElement.nativeElement.querySelector('.adf-copy-tooltip')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-copy-tooltip')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should not show tooltip when element it is not hovered', () => {
|
||||
const spanHTMLElement = element.querySelector<HTMLInputElement>('span');
|
||||
spanHTMLElement.dispatchEvent(new Event('mouseenter'));
|
||||
testingUtils.hoverOverByCSS('span');
|
||||
fixture.detectChanges();
|
||||
expect(fixture.debugElement.nativeElement.querySelector('.adf-copy-tooltip')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-copy-tooltip')).not.toBeNull();
|
||||
|
||||
spanHTMLElement.dispatchEvent(new Event('mouseleave'));
|
||||
testingUtils.mouseLeaveByCSS('span');
|
||||
fixture.detectChanges();
|
||||
expect(fixture.debugElement.nativeElement.querySelector('.adf-copy-tooltip')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-copy-tooltip')).toBeNull();
|
||||
});
|
||||
|
||||
it('should copy the content of element when click it', fakeAsync(() => {
|
||||
const spanHTMLElement = element.querySelector<HTMLInputElement>('span');
|
||||
fixture.detectChanges();
|
||||
spyOn(navigator.clipboard, 'writeText');
|
||||
spanHTMLElement.dispatchEvent(new Event('click'));
|
||||
testingUtils.clickByCSS('span');
|
||||
tick();
|
||||
fixture.detectChanges();
|
||||
expect(navigator.clipboard.writeText).toHaveBeenCalledWith('text to copy');
|
||||
}));
|
||||
|
||||
it('should copy the content of element on keydown event', fakeAsync(() => {
|
||||
const spanHTMLElement = element.querySelector<HTMLInputElement>('span');
|
||||
fixture.detectChanges();
|
||||
spyOn(navigator.clipboard, 'writeText');
|
||||
spanHTMLElement.dispatchEvent(new KeyboardEvent('keydown', { code: 'Enter', key: 'Enter' }));
|
||||
testingUtils.keyBoardEventByCSS('span', 'keydown', 'Enter', 'Enter');
|
||||
tick();
|
||||
fixture.detectChanges();
|
||||
expect(navigator.clipboard.writeText).toHaveBeenCalledWith('text to copy');
|
||||
}));
|
||||
|
||||
it('should not copy the content of element when click it', fakeAsync(() => {
|
||||
const spanHTMLElement = element.querySelector<HTMLInputElement>('span');
|
||||
fixture.detectChanges();
|
||||
spyOn(navigator.clipboard, 'writeText');
|
||||
spanHTMLElement.dispatchEvent(new Event('mouseleave'));
|
||||
testingUtils.mouseLeaveByCSS('span');
|
||||
tick();
|
||||
fixture.detectChanges();
|
||||
expect(navigator.clipboard.writeText).not.toHaveBeenCalled();
|
||||
|
||||
@@ -18,16 +18,16 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { CommentModel } from '../../models/comment.model';
|
||||
import { CommentListComponent } from './comment-list.component';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { commentUserNoPictureDefined, commentUserPictureDefined, mockCommentOne, testUser } from './mocks/comment-list.mock';
|
||||
import { CommentListServiceMock } from './mocks/comment-list.service.mock';
|
||||
import { ADF_COMMENTS_SERVICE } from '../interfaces/comments.token';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../testing/unit-testing-utils';
|
||||
|
||||
describe('CommentListComponent', () => {
|
||||
let commentList: CommentListComponent;
|
||||
let fixture: ComponentFixture<CommentListComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -41,8 +41,8 @@ describe('CommentListComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(CommentListComponent);
|
||||
commentList = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
@@ -62,15 +62,14 @@ describe('CommentListComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const comment = fixture.debugElement.query(By.css('.adf-comment-list-item'));
|
||||
comment.triggerEventHandler('click', null);
|
||||
testingUtils.clickByCSS('.adf-comment-list-item');
|
||||
});
|
||||
|
||||
it('should not show comment list if no input is given', async () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('adf-datatable')).toBeNull();
|
||||
expect(testingUtils.getByCSS('adf-datatable')).toBeNull();
|
||||
});
|
||||
|
||||
it('should show comment message when input is given', async () => {
|
||||
@@ -79,10 +78,10 @@ describe('CommentListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const elements = fixture.nativeElement.querySelectorAll('.adf-comment-message');
|
||||
const elements = testingUtils.getAllByCSS('.adf-comment-message');
|
||||
expect(elements.length).toBe(1);
|
||||
expect(elements[0].innerText).toBe(mockCommentOne.message);
|
||||
expect(fixture.nativeElement.querySelector('.adf-comment-message:empty')).toBeNull();
|
||||
expect(elements[0].nativeElement.innerText).toBe(mockCommentOne.message);
|
||||
expect(testingUtils.getByCSS('.adf-comment-message:empty')).toBeNull();
|
||||
});
|
||||
|
||||
it('should show comment user when input is given', async () => {
|
||||
@@ -91,10 +90,10 @@ describe('CommentListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const elements = fixture.nativeElement.querySelectorAll('.adf-comment-user-name');
|
||||
const elements = testingUtils.getAllByCSS('.adf-comment-user-name');
|
||||
expect(elements.length).toBe(1);
|
||||
expect(elements[0].innerText).toBe(mockCommentOne.userDisplayName);
|
||||
expect(fixture.nativeElement.querySelector('.adf-comment-user-name:empty')).toBeNull();
|
||||
expect(elements[0].nativeElement.innerText).toBe(mockCommentOne.userDisplayName);
|
||||
expect(testingUtils.getByCSS('.adf-comment-user-name:empty')).toBeNull();
|
||||
});
|
||||
|
||||
it('comment date time should start with few seconds ago when comment date is few seconds ago', async () => {
|
||||
@@ -106,8 +105,7 @@ describe('CommentListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
element = fixture.nativeElement.querySelector('.adf-comment-message-time');
|
||||
expect(element.innerText).toContain('less than a minute ago');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-comment-message-time')).toContain('less than a minute ago');
|
||||
});
|
||||
|
||||
it('comment date time should start with Yesterday when comment date is yesterday', async () => {
|
||||
@@ -118,8 +116,7 @@ describe('CommentListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
element = fixture.nativeElement.querySelector('.adf-comment-message-time');
|
||||
expect(element.innerText).toContain('1 day ago');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-comment-message-time')).toContain('1 day ago');
|
||||
});
|
||||
|
||||
it('comment date time should not start with Today/Yesterday when comment date is before yesterday', async () => {
|
||||
@@ -130,9 +127,9 @@ describe('CommentListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
element = fixture.nativeElement.querySelector('.adf-comment-message-time');
|
||||
expect(element.innerText).not.toContain('Today');
|
||||
expect(element.innerText).not.toContain('Yesterday');
|
||||
const msgTime = testingUtils.getInnerTextByCSS('.adf-comment-message-time');
|
||||
expect(msgTime).not.toContain('Today');
|
||||
expect(msgTime).not.toContain('Yesterday');
|
||||
});
|
||||
|
||||
it('should show user icon when input is given', async () => {
|
||||
@@ -141,10 +138,10 @@ describe('CommentListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const elements = fixture.nativeElement.querySelectorAll('.adf-comment-img-container');
|
||||
const elements = testingUtils.getAllByCSS('.adf-comment-img-container');
|
||||
expect(elements.length).toBe(1);
|
||||
expect(elements[0].innerText).toContain(mockCommentOne.userInitials);
|
||||
expect(fixture.nativeElement.querySelector('.adf-comment-img-container:empty')).toBeNull();
|
||||
expect(elements[0].nativeElement.innerText).toContain(mockCommentOne.userInitials);
|
||||
expect(testingUtils.getByCSS('.adf-comment-img-container:empty')).toBeNull();
|
||||
});
|
||||
|
||||
it('should return picture when is a user with a picture', async () => {
|
||||
@@ -153,7 +150,7 @@ describe('CommentListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const elements = fixture.nativeElement.querySelectorAll('.adf-people-img');
|
||||
const elements = testingUtils.getAllByCSS('.adf-people-img');
|
||||
expect(elements.length).toBe(1);
|
||||
});
|
||||
|
||||
@@ -163,7 +160,7 @@ describe('CommentListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const elements = fixture.nativeElement.querySelectorAll('.adf-comment-user-icon');
|
||||
const elements = testingUtils.getAllByCSS('.adf-comment-user-icon');
|
||||
expect(elements.length).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -23,7 +23,8 @@ import { of, throwError } from 'rxjs';
|
||||
import { ADF_COMMENTS_SERVICE } from './interfaces/comments.token';
|
||||
import { CommentsService } from './interfaces/comments-service.interface';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
describe('CommentsComponent', () => {
|
||||
let component: CommentsComponent;
|
||||
@@ -31,6 +32,7 @@ describe('CommentsComponent', () => {
|
||||
let getCommentSpy: jasmine.Spy;
|
||||
let addCommentSpy: jasmine.Spy;
|
||||
let commentsService: CommentsService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -44,6 +46,7 @@ describe('CommentsComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(CommentsComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
commentsService = TestBed.inject<CommentsService>(ADF_COMMENTS_SERVICE);
|
||||
|
||||
@@ -64,7 +67,7 @@ describe('CommentsComponent', () => {
|
||||
|
||||
it('should emit an error when an error occurs loading comments', () => {
|
||||
const emitSpy = spyOn(component.error, 'emit');
|
||||
getCommentSpy.and.returnValue(throwError({}));
|
||||
getCommentSpy.and.returnValue(throwError(() => new Error('error')));
|
||||
|
||||
const change = new SimpleChange(null, '123', true);
|
||||
component.ngOnChanges({ id: change });
|
||||
@@ -84,8 +87,8 @@ describe('CommentsComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(fixture.nativeElement.querySelectorAll('.adf-comment-message').length).toBe(3);
|
||||
expect(fixture.nativeElement.querySelector('.adf-comment-message:empty')).toBeNull();
|
||||
expect(testingUtils.getAllByCSS('.adf-comment-message').length).toBe(3);
|
||||
expect(testingUtils.getByCSS('.adf-comment-message:empty')).toBeNull();
|
||||
});
|
||||
|
||||
it('should display comments count when the entity has comments', async () => {
|
||||
@@ -95,8 +98,7 @@ describe('CommentsComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const element = fixture.nativeElement.querySelector('#comment-header');
|
||||
expect(element.innerText).toBe('COMMENTS.HEADER');
|
||||
expect(testingUtils.getInnerTextByCSS('#comment-header')).toBe('COMMENTS.HEADER');
|
||||
});
|
||||
|
||||
it('should not display comments when the entity has no comments', async () => {
|
||||
@@ -106,7 +108,7 @@ describe('CommentsComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('#comment-container')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#comment-container')).toBeNull();
|
||||
});
|
||||
|
||||
it('should display comments input by default', async () => {
|
||||
@@ -116,7 +118,7 @@ describe('CommentsComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('#comment-input')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#comment-input')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should not display comments input when the entity is readonly', async () => {
|
||||
@@ -125,7 +127,7 @@ describe('CommentsComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('#comment-input')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#comment-input')).toBeNull();
|
||||
});
|
||||
|
||||
describe('Change detection id', () => {
|
||||
@@ -161,9 +163,8 @@ describe('CommentsComponent', () => {
|
||||
});
|
||||
|
||||
it('should normalize comment when user input contains spaces sequence', async () => {
|
||||
const element = fixture.nativeElement.querySelector('.adf-comments-input-add');
|
||||
component.message = 'test comment';
|
||||
element.dispatchEvent(new Event('click'));
|
||||
testingUtils.clickByCSS('.adf-comments-input-add');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
@@ -184,39 +185,32 @@ describe('CommentsComponent', () => {
|
||||
addCommentSpy.and.returnValue(commentsResponseMock.addComment(commentText));
|
||||
|
||||
component.message = commentText;
|
||||
const addButton = fixture.nativeElement.querySelector('.adf-comments-input-add');
|
||||
addButton.dispatchEvent(new Event('click'));
|
||||
testingUtils.clickByCSS('.adf-comments-input-add');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(addCommentSpy).toHaveBeenCalledWith('123', commentText);
|
||||
|
||||
const messageElement = fixture.nativeElement.querySelector('.adf-comment-message');
|
||||
expect(messageElement.innerText).toBe(commentText);
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-comment-message')).toBe(commentText);
|
||||
});
|
||||
|
||||
it('should call service to add a comment when add button is pressed', async () => {
|
||||
const element = fixture.nativeElement.querySelector('.adf-comments-input-add');
|
||||
|
||||
component.message = 'Test Comment';
|
||||
addCommentSpy.and.returnValue(commentsResponseMock.addComment(component.message));
|
||||
|
||||
element.dispatchEvent(new Event('click'));
|
||||
testingUtils.clickByCSS('.adf-comments-input-add');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(addCommentSpy).toHaveBeenCalled();
|
||||
const elements = fixture.nativeElement.querySelectorAll('.adf-comment-message');
|
||||
const elements = testingUtils.getAllByCSS('.adf-comment-message');
|
||||
expect(elements.length).toBe(1);
|
||||
expect(elements[0].innerText).toBe('Test Comment');
|
||||
expect(elements[0].nativeElement.innerText).toBe('Test Comment');
|
||||
});
|
||||
|
||||
it('should not call service to add a comment when comment is empty', async () => {
|
||||
const element = fixture.nativeElement.querySelector('.adf-comments-input-add');
|
||||
component.message = '';
|
||||
element.dispatchEvent(new Event('click'));
|
||||
testingUtils.clickByCSS('.adf-comments-input-add');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
@@ -225,27 +219,25 @@ describe('CommentsComponent', () => {
|
||||
});
|
||||
|
||||
it('should clear comment when escape key is pressed', async () => {
|
||||
const event = new KeyboardEvent('keydown', { key: 'Escape' });
|
||||
let element = fixture.nativeElement.querySelector('#comment-input');
|
||||
element.dispatchEvent(event);
|
||||
testingUtils.keyBoardEventByCSS('#comment-input', 'keydown', 'Escape', 'Escape');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
element = fixture.nativeElement.querySelector('#comment-input');
|
||||
expect(element.value).toBe('');
|
||||
const input = testingUtils.getByCSS('#comment-input');
|
||||
expect(input.nativeElement.value).toBe('');
|
||||
});
|
||||
|
||||
it('should emit an error when an error occurs adding the comment', () => {
|
||||
const emitSpy = spyOn(component.error, 'emit');
|
||||
addCommentSpy.and.returnValue(throwError({}));
|
||||
addCommentSpy.and.returnValue(throwError(() => new Error('error')));
|
||||
component.message = 'Test comment';
|
||||
component.addComment();
|
||||
expect(emitSpy).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should set beingAdded variable back to false when an error occurs adding the comment', () => {
|
||||
addCommentSpy.and.returnValue(throwError({}));
|
||||
addCommentSpy.and.returnValue(throwError(() => new Error('error')));
|
||||
component.addComment();
|
||||
expect(component.beingAdded).toBeFalse();
|
||||
});
|
||||
|
||||
@@ -20,8 +20,8 @@ import { TestBed, ComponentFixture } from '@angular/core/testing';
|
||||
import { CONTEXT_MENU_DIRECTIVES } from './context-menu.module';
|
||||
import { CoreTestingModule } from '../testing/core.testing.module';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { MatIconHarness } from '@angular/material/icon/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-test-component',
|
||||
@@ -114,6 +114,7 @@ const testCases = [
|
||||
testCases.forEach((testCase) => {
|
||||
describe(`ContextMenuDirective ${testCase.description}`, () => {
|
||||
let fixture: ComponentFixture<TestComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -123,12 +124,12 @@ testCases.forEach((testCase) => {
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
fixture.componentInstance.isEnabled = false;
|
||||
fixture.componentInstance.actions = testCase.actions;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should not show menu on mouse contextmenu event when context menu is disabled', () => {
|
||||
const targetElement = fixture.debugElement.nativeElement.querySelector('#target');
|
||||
targetElement.dispatchEvent(new CustomEvent('contextmenu'));
|
||||
testingUtils.dispatchCustomEventByCSS('#target', 'contextmenu');
|
||||
fixture.detectChanges();
|
||||
|
||||
const contextMenu = document.querySelector('.adf-context-menu');
|
||||
@@ -136,15 +137,13 @@ testCases.forEach((testCase) => {
|
||||
});
|
||||
|
||||
describe('Events', () => {
|
||||
let targetElement: HTMLElement;
|
||||
let contextMenu: HTMLElement | null;
|
||||
|
||||
beforeEach(() => {
|
||||
fixture.componentInstance.isEnabled = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
targetElement = fixture.debugElement.nativeElement.querySelector('#target');
|
||||
targetElement.dispatchEvent(new CustomEvent('contextmenu'));
|
||||
testingUtils.dispatchCustomEventByCSS('#target', 'contextmenu');
|
||||
fixture.detectChanges();
|
||||
contextMenu = document.querySelector('.adf-context-menu');
|
||||
});
|
||||
@@ -171,7 +170,6 @@ testCases.forEach((testCase) => {
|
||||
});
|
||||
|
||||
describe('Contextmenu list', () => {
|
||||
let targetElement: HTMLElement;
|
||||
let contextMenu: HTMLElement | null;
|
||||
let loader: HarnessLoader;
|
||||
|
||||
@@ -179,11 +177,11 @@ testCases.forEach((testCase) => {
|
||||
fixture.componentInstance.isEnabled = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
targetElement = fixture.debugElement.nativeElement.querySelector('#target');
|
||||
targetElement.dispatchEvent(new CustomEvent('contextmenu'));
|
||||
testingUtils.dispatchCustomEventByCSS('#target', 'contextmenu');
|
||||
fixture.detectChanges();
|
||||
contextMenu = document.querySelector('.adf-context-menu');
|
||||
loader = TestbedHarnessEnvironment.documentRootLoader(fixture);
|
||||
testingUtils.setLoader(loader);
|
||||
});
|
||||
|
||||
it('should not render item with visibility property set to false', () => {
|
||||
@@ -195,7 +193,7 @@ testCases.forEach((testCase) => {
|
||||
});
|
||||
|
||||
it('should set first not disabled item as active', async () => {
|
||||
const icon = await loader.getHarness(MatIconHarness.with({ ancestor: 'adf-context-menu' }));
|
||||
const icon = await testingUtils.getMatIconWithAncestorByCSS('adf-context-menu');
|
||||
|
||||
expect(await icon.getName()).toEqual('action-icon-3');
|
||||
});
|
||||
@@ -215,16 +213,7 @@ testCases.forEach((testCase) => {
|
||||
});
|
||||
|
||||
it('should not render item icon if not set', async () => {
|
||||
expect(
|
||||
(
|
||||
await loader.getAllHarnesses(
|
||||
MatIconHarness.with({
|
||||
ancestor: 'adf-context-menu',
|
||||
name: 'Action 1'
|
||||
})
|
||||
)
|
||||
).length
|
||||
).toBe(0);
|
||||
expect(await testingUtils.checkIfMatIconExistsWithAncestorByCSSAndName('adf-context-menu', 'Action 1')).toBeFalse();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -22,20 +22,22 @@ import { BehaviorSubject } from 'rxjs';
|
||||
import { LOCALE_ID } from '@angular/core';
|
||||
import { registerLocaleData } from '@angular/common';
|
||||
import localePL from '@angular/common/locales/pl';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('AmountCellComponent', () => {
|
||||
let component: AmountCellComponent;
|
||||
let fixture: ComponentFixture<AmountCellComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const renderAndCheckCurrencyValue = (currencyConfig: CurrencyConfig, value: number, expectedResult: string) => {
|
||||
component.value$ = new BehaviorSubject<number>(value);
|
||||
component.currencyConfig = currencyConfig;
|
||||
|
||||
fixture.detectChanges();
|
||||
const displayedAmount = fixture.nativeElement.querySelector('span');
|
||||
const displayedAmount = testingUtils.getByCSS('span');
|
||||
|
||||
expect(displayedAmount).toBeTruthy();
|
||||
expect(displayedAmount.textContent.trim()).toBe(expectedResult);
|
||||
expect(displayedAmount.nativeElement.textContent.trim()).toBe(expectedResult);
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -44,6 +46,7 @@ describe('AmountCellComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(AmountCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('should set default currency config', () => {
|
||||
@@ -73,6 +76,7 @@ describe('AmountCellComponent', () => {
|
||||
describe('AmountCellComponent locale', () => {
|
||||
let component: AmountCellComponent;
|
||||
let fixture: ComponentFixture<AmountCellComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
it('should render currency value with custom locale', () => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -82,15 +86,16 @@ describe('AmountCellComponent locale', () => {
|
||||
|
||||
fixture = TestBed.createComponent(AmountCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
registerLocaleData(localePL);
|
||||
|
||||
component.value$ = new BehaviorSubject<number>(123.45);
|
||||
component.currencyConfig = { code: 'PLN', display: 'symbol', locale: 'pl-PL' };
|
||||
|
||||
fixture.detectChanges();
|
||||
const displayedAmount = fixture.nativeElement.querySelector('span');
|
||||
const displayedAmount = testingUtils.getByCSS('span');
|
||||
|
||||
expect(displayedAmount).toBeTruthy();
|
||||
expect(displayedAmount.textContent.trim()).toMatch(/123,45\s?zł/);
|
||||
expect(displayedAmount.nativeElement.textContent.trim()).toMatch(/123,45\s?zł/);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -19,11 +19,13 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { BooleanCellComponent } from './boolean-cell.component';
|
||||
import { ObjectDataTableAdapter } from '../../data/object-datatable-adapter';
|
||||
import { ObjectDataColumn } from '../../data/object-datacolumn.model';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('BooleanCellComponent', () => {
|
||||
let component: BooleanCellComponent;
|
||||
let fixture: ComponentFixture<BooleanCellComponent>;
|
||||
let valueEl: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const renderAndGetResult = async (value: any) => {
|
||||
component.value$.next(value);
|
||||
@@ -37,7 +39,8 @@ describe('BooleanCellComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(BooleanCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
valueEl = fixture.nativeElement.querySelector('span');
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
valueEl = testingUtils.getByCSS('span').nativeElement;
|
||||
});
|
||||
|
||||
describe('Initialization', () => {
|
||||
|
||||
+15
-18
@@ -20,15 +20,15 @@ import { ColumnsSelectorComponent } from './columns-selector.component';
|
||||
import { DataColumn } from '../../data/data-column.model';
|
||||
import { Observable, Subject } from 'rxjs';
|
||||
import { MatMenuTrigger } from '@angular/material/menu';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { MatCheckboxHarness } from '@angular/material/checkbox/testing';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('ColumnsSelectorComponent', () => {
|
||||
let fixture: ComponentFixture<ColumnsSelectorComponent>;
|
||||
let loader: HarnessLoader;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
let component: ColumnsSelectorComponent;
|
||||
let inputColumns: DataColumn[] = [];
|
||||
@@ -45,6 +45,7 @@ describe('ColumnsSelectorComponent', () => {
|
||||
|
||||
fixture = TestBed.createComponent(ColumnsSelectorComponent);
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
|
||||
component = fixture.componentInstance;
|
||||
inputColumns = [
|
||||
@@ -97,16 +98,15 @@ describe('ColumnsSelectorComponent', () => {
|
||||
menuOpenedTrigger.next();
|
||||
fixture.detectChanges();
|
||||
|
||||
let searchInput = fixture.debugElement.query(By.css('.adf-columns-selector-search-input')).nativeElement;
|
||||
searchInput.value = 'TEST';
|
||||
searchInput.dispatchEvent(new Event('input'));
|
||||
let searchInput = testingUtils.getByCSS('.adf-columns-selector-search-input').nativeElement;
|
||||
testingUtils.fillInputByCSS('.adf-columns-selector-search-input', 'TEST');
|
||||
|
||||
tick(300);
|
||||
expect(searchInput.value).toBe('TEST');
|
||||
|
||||
menuClosedTrigger.next();
|
||||
tick(300);
|
||||
searchInput = fixture.debugElement.query(By.css('.adf-columns-selector-search-input')).nativeElement;
|
||||
searchInput = testingUtils.getByCSS('.adf-columns-selector-search-input').nativeElement;
|
||||
|
||||
expect(searchInput.value).toBe('');
|
||||
}));
|
||||
@@ -115,8 +115,7 @@ describe('ColumnsSelectorComponent', () => {
|
||||
menuOpenedTrigger.next();
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkboxes = await loader.getAllHarnesses(MatCheckboxHarness);
|
||||
|
||||
const checkboxes = await testingUtils.getAllMatCheckboxes();
|
||||
const inputColumnsWithTitle = inputColumns.filter((column) => !!column.title);
|
||||
expect(checkboxes.length).toBe(inputColumnsWithTitle.length);
|
||||
|
||||
@@ -132,14 +131,12 @@ describe('ColumnsSelectorComponent', () => {
|
||||
fixture.detectChanges();
|
||||
menuOpenedTrigger.next();
|
||||
|
||||
const searchInput = fixture.debugElement.query(By.css('.adf-columns-selector-search-input')).nativeElement;
|
||||
searchInput.value = inputColumns[0].title;
|
||||
searchInput.dispatchEvent(new Event('input'));
|
||||
testingUtils.fillInputByCSS('.adf-columns-selector-search-input', inputColumns[0].title);
|
||||
|
||||
tick(400);
|
||||
fixture.detectChanges();
|
||||
|
||||
const columnCheckboxes = await loader.getAllHarnesses(MatCheckboxHarness);
|
||||
const columnCheckboxes = await testingUtils.getAllMatCheckboxes();
|
||||
|
||||
expect(columnCheckboxes.length).toBe(1);
|
||||
expect(await columnCheckboxes[0].getLabelText()).toBe(inputColumns[0].title);
|
||||
@@ -149,7 +146,7 @@ describe('ColumnsSelectorComponent', () => {
|
||||
menuOpenedTrigger.next();
|
||||
fixture.detectChanges();
|
||||
|
||||
const firstColumnCheckbox = await loader.getHarness(MatCheckboxHarness);
|
||||
const firstColumnCheckbox = await testingUtils.getMatCheckbox();
|
||||
const checkBoxName = await firstColumnCheckbox.getLabelText();
|
||||
|
||||
const toggledColumnItem = component.columnItems.find((item) => item.title === checkBoxName);
|
||||
@@ -164,7 +161,7 @@ describe('ColumnsSelectorComponent', () => {
|
||||
menuOpenedTrigger.next();
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkboxes = await loader.getAllHarnesses(MatCheckboxHarness);
|
||||
const checkboxes = await testingUtils.getAllMatCheckboxes();
|
||||
|
||||
expect(await checkboxes[0].isChecked()).toBe(true);
|
||||
expect(await checkboxes[1].isChecked()).toBe(true);
|
||||
@@ -177,7 +174,7 @@ describe('ColumnsSelectorComponent', () => {
|
||||
menuOpenedTrigger.next();
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkboxes = await loader.getAllHarnesses(MatCheckboxHarness);
|
||||
const checkboxes = await testingUtils.getAllMatCheckboxes();
|
||||
|
||||
expect(await checkboxes[0].isDisabled()).toBe(false);
|
||||
expect(await checkboxes[1].isDisabled()).toBe(false);
|
||||
@@ -206,7 +203,7 @@ describe('ColumnsSelectorComponent', () => {
|
||||
menuOpenedTrigger.next();
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkboxes = await loader.getAllHarnesses(MatCheckboxHarness);
|
||||
const checkboxes = await testingUtils.getAllMatCheckboxes();
|
||||
const labeTextOne = await checkboxes[0].getLabelText();
|
||||
const labeTextTwo = await checkboxes[1].getLabelText();
|
||||
|
||||
@@ -220,7 +217,7 @@ describe('ColumnsSelectorComponent', () => {
|
||||
menuOpenedTrigger.next();
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkboxes = await loader.getAllHarnesses(MatCheckboxHarness);
|
||||
const checkboxes = await testingUtils.getAllMatCheckboxes();
|
||||
const labeTextOne = await checkboxes[0].getLabelText();
|
||||
const labeTextTwo = await checkboxes[1].getLabelText();
|
||||
|
||||
@@ -243,7 +240,7 @@ describe('ColumnsSelectorComponent', () => {
|
||||
menuOpenedTrigger.next();
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkboxes = await loader.getAllHarnesses(MatCheckboxHarness);
|
||||
const checkboxes = await testingUtils.getAllMatCheckboxes();
|
||||
const labeTextOne = await checkboxes[0].getLabelText();
|
||||
expect(labeTextOne).toBe(`${column.title} ${column.subtitle}`);
|
||||
});
|
||||
|
||||
+5
-2
@@ -22,11 +22,13 @@ import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
|
||||
import { DataTableService } from '../../services/datatable.service';
|
||||
import { ObjectDataTableAdapter } from '../../data/object-datatable-adapter';
|
||||
import { mockCarsData, mockCarsSchemaDefinition } from '../mocks/datatable.mock';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('DataTableCellComponent', () => {
|
||||
let component: DataTableCellComponent;
|
||||
let fixture: ComponentFixture<DataTableCellComponent>;
|
||||
let dataTableService: DataTableService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const renderTextCell = (value: string, tooltip: string) => {
|
||||
component.value$ = new BehaviorSubject<string>(value);
|
||||
@@ -36,14 +38,14 @@ describe('DataTableCellComponent', () => {
|
||||
};
|
||||
|
||||
const checkDisplayedText = (expectedText: string) => {
|
||||
const displayedText = fixture.nativeElement.querySelector('span').textContent.trim();
|
||||
const displayedText = testingUtils.getByCSS('span').nativeElement.textContent.trim();
|
||||
|
||||
expect(displayedText).toBeTruthy();
|
||||
expect(displayedText).toBe(expectedText);
|
||||
};
|
||||
|
||||
const checkDisplayedTooltip = (expectedTooltip: string) => {
|
||||
const displayedTooltip = fixture.nativeElement.querySelector('span').title;
|
||||
const displayedTooltip = testingUtils.getByCSS('span').nativeElement.title;
|
||||
|
||||
expect(displayedTooltip).toBeTruthy();
|
||||
expect(displayedTooltip).toBe(expectedTooltip);
|
||||
@@ -58,6 +60,7 @@ describe('DataTableCellComponent', () => {
|
||||
fixture = TestBed.createComponent(DataTableCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
dataTableService = TestBed.inject(DataTableService);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('should display text and tooltip', () => {
|
||||
|
||||
@@ -29,10 +29,11 @@ import { DataColumnListComponent } from '../../data-column/data-column-list.comp
|
||||
import { DataColumnComponent } from '../../data-column/data-column.component';
|
||||
import { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';
|
||||
import { take } from 'rxjs/operators';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { mockCarsData, mockCarsSchemaDefinition } from '../mocks/datatable.mock';
|
||||
import { MatCheckboxHarness } from '@angular/material/checkbox/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-custom-column-template-component',
|
||||
@@ -81,7 +82,8 @@ export const resolverFn = (row: DataRow, col: DataColumn) => {
|
||||
describe('DataTable', () => {
|
||||
let fixture: ComponentFixture<DataTableComponent>;
|
||||
let dataTable: DataTableComponent;
|
||||
let element: any;
|
||||
let loader: HarnessLoader;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const testNotShownHeader = (data: ObjectDataTableAdapter) => {
|
||||
dataTable.ngOnChanges({
|
||||
@@ -90,15 +92,15 @@ describe('DataTable', () => {
|
||||
|
||||
dataTable.showHeader = ShowHeaderMode.Data;
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-datatable-header')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-header')).toBeNull();
|
||||
|
||||
dataTable.showHeader = ShowHeaderMode.Always;
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-datatable-header')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-header')).toBeNull();
|
||||
|
||||
dataTable.showHeader = ShowHeaderMode.Never;
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-datatable-header')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-header')).toBeNull();
|
||||
};
|
||||
|
||||
const testIfRowIsSelected = (data: any[], done?: DoneFn) => {
|
||||
@@ -149,7 +151,8 @@ describe('DataTable', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(DataTableComponent);
|
||||
dataTable = fixture.componentInstance;
|
||||
element = fixture.debugElement.nativeElement;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -265,8 +268,8 @@ describe('DataTable', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('.adf-datatable-card')).toBeNull();
|
||||
expect(element.querySelector('.adf-datatable-list')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-card')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-list')).not.toBeNull();
|
||||
});
|
||||
|
||||
describe('Header modes', () => {
|
||||
@@ -277,7 +280,7 @@ describe('DataTable', () => {
|
||||
dataTable.loading = false;
|
||||
dataTable.data = newData;
|
||||
fixture.detectChanges();
|
||||
return fixture.debugElement.query(By.directive(CdkDropList)).injector.get(CdkDropList);
|
||||
return testingUtils.getByDirective(CdkDropList).injector.get(CdkDropList);
|
||||
};
|
||||
|
||||
it('should show the header if showHeader is `Data` and there is data', () => {
|
||||
@@ -289,7 +292,7 @@ describe('DataTable', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('.adf-datatable-header')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-header')).toBeDefined();
|
||||
});
|
||||
|
||||
it('should hide the header if showHeader is `Data` and there is no data', () => {
|
||||
@@ -301,7 +304,7 @@ describe('DataTable', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('.adf-datatable-header')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-header')).toBeNull();
|
||||
});
|
||||
|
||||
it('should always show the header if showHeader is `Always`', () => {
|
||||
@@ -312,13 +315,13 @@ describe('DataTable', () => {
|
||||
data: new SimpleChange(null, newData, false)
|
||||
});
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-datatable-header')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-header')).toBeDefined();
|
||||
|
||||
dataTable.ngOnChanges({
|
||||
data: new SimpleChange(null, emptyData, false)
|
||||
});
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-datatable-header')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-header')).toBeDefined();
|
||||
});
|
||||
|
||||
it('should never show the header if showHeader is `Never`', () => {
|
||||
@@ -330,7 +333,7 @@ describe('DataTable', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('.adf-datatable-header')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-header')).toBeNull();
|
||||
|
||||
dataTable.ngOnChanges({
|
||||
data: new SimpleChange(null, emptyData, false)
|
||||
@@ -338,7 +341,7 @@ describe('DataTable', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('.adf-datatable-header')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-datatable-header')).toBeNull();
|
||||
});
|
||||
|
||||
it('should never show the header if noPermission is true', () => {
|
||||
@@ -399,9 +402,9 @@ describe('DataTable', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
dataTable.ngAfterViewInit();
|
||||
const headerColumns = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell-header-content');
|
||||
const headerColumns = testingUtils.getAllByCSS('.adf-datatable-cell-header-content');
|
||||
|
||||
headerColumns[0].click();
|
||||
headerColumns[0].nativeElement.click();
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
@@ -414,8 +417,8 @@ describe('DataTable', () => {
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('[data-automation-id="text_TEST"]')).not.toBeNull();
|
||||
expect(element.querySelector('[data-automation-id="text_FAKE"]')).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('text_TEST')).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('text_FAKE')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should set rows to the data when rows defined', () => {
|
||||
@@ -448,7 +451,7 @@ describe('DataTable', () => {
|
||||
fixture.detectChanges();
|
||||
dataTable.ngAfterViewInit();
|
||||
|
||||
const rowElement = document.querySelectorAll('.adf-datatable-body .adf-datatable-row')[0];
|
||||
const rowElement = testingUtils.getAllByCSS('.adf-datatable-body .adf-datatable-row')[0].nativeElement;
|
||||
|
||||
spyOn(dataTable.rowDblClick, 'emit');
|
||||
|
||||
@@ -682,7 +685,7 @@ describe('DataTable', () => {
|
||||
dataTable.actions = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const actions = element.querySelectorAll('[id^=action_menu_right]');
|
||||
const actions = testingUtils.getAllByCSS('[id^=action_menu_right]');
|
||||
expect(actions.length).toBe(4);
|
||||
});
|
||||
|
||||
@@ -696,7 +699,7 @@ describe('DataTable', () => {
|
||||
dataTable.actionsPosition = 'left';
|
||||
fixture.detectChanges();
|
||||
|
||||
const actions = element.querySelectorAll('[id^=action_menu_left]');
|
||||
const actions = testingUtils.getAllByCSS('[id^=action_menu_left]');
|
||||
expect(actions.length).toBe(4);
|
||||
});
|
||||
|
||||
@@ -827,8 +830,8 @@ describe('DataTable', () => {
|
||||
const adapter = dataTable.data;
|
||||
spyOn(adapter, 'setSorting').and.callThrough();
|
||||
|
||||
const headerColumns = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell-header-content');
|
||||
headerColumns[0].click();
|
||||
const headerColumns = testingUtils.getAllByCSS('.adf-datatable-cell-header-content');
|
||||
headerColumns[0].nativeElement.click();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(adapter.setSorting).not.toHaveBeenCalled();
|
||||
@@ -842,8 +845,8 @@ describe('DataTable', () => {
|
||||
spyOn(adapter, 'setSorting').and.callThrough();
|
||||
spyOn(dataTable.data, 'getSorting').and.returnValue(new DataSorting('column_1', 'desc', { numeric: true }));
|
||||
|
||||
const headerColumns = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell-header-content');
|
||||
headerColumns[0].click();
|
||||
const headerColumns = testingUtils.getAllByCSS('.adf-datatable-cell-header-content');
|
||||
headerColumns[0].nativeElement.click();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(adapter.setSorting).toHaveBeenCalledWith(new DataSorting('column_1', 'asc', { numeric: true }));
|
||||
@@ -858,17 +861,15 @@ describe('DataTable', () => {
|
||||
const sorting = new DataSorting('column_1', 'asc', { numeric: true });
|
||||
spyOn(adapter, 'setSorting').and.callThrough();
|
||||
spyOn(adapter, 'getSorting').and.returnValue(sorting);
|
||||
const headerColumns = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell-header-content');
|
||||
|
||||
// // check first click on the header
|
||||
headerColumns[0].click();
|
||||
const headerColumns = testingUtils.getAllByCSS('.adf-datatable-cell-header-content');
|
||||
headerColumns[0].nativeElement.click();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(adapter.setSorting).toHaveBeenCalledWith(new DataSorting('column_1', 'desc', { numeric: true }));
|
||||
|
||||
// check second click on the header
|
||||
sorting.direction = 'desc';
|
||||
headerColumns[0].click();
|
||||
headerColumns[0].nativeElement.click();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(adapter.setSorting).toHaveBeenCalledWith(new DataSorting('column_1', 'asc', { numeric: true }));
|
||||
@@ -883,9 +884,8 @@ describe('DataTable', () => {
|
||||
dataTable.ngAfterViewInit();
|
||||
|
||||
const [col1, col2] = dataTable.getSortableColumns();
|
||||
const headerColumns = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell-header-content');
|
||||
|
||||
headerColumns[1].click();
|
||||
const headerColumns = testingUtils.getAllByCSS('.adf-datatable-cell-header-content');
|
||||
headerColumns[1].nativeElement.click();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(dataTable.isColumnSortActive(col1)).toBe(false);
|
||||
@@ -1223,7 +1223,7 @@ describe('DataTable', () => {
|
||||
dataTable.loading = false;
|
||||
dataTable.noPermission = false;
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-sticky-header')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-sticky-header')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should disable sticky header if component is loading', () => {
|
||||
@@ -1236,7 +1236,7 @@ describe('DataTable', () => {
|
||||
dataTable.loading = true;
|
||||
dataTable.noPermission = false;
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-sticky-header')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-sticky-header')).toBeNull();
|
||||
});
|
||||
|
||||
it('should disable sticky header if user has no permissions', () => {
|
||||
@@ -1249,7 +1249,7 @@ describe('DataTable', () => {
|
||||
dataTable.loading = false;
|
||||
dataTable.noPermission = true;
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-sticky-header')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-sticky-header')).toBeNull();
|
||||
});
|
||||
|
||||
it('should disable sticky header if user has no content', () => {
|
||||
@@ -1259,7 +1259,7 @@ describe('DataTable', () => {
|
||||
dataTable.loading = false;
|
||||
dataTable.noPermission = false;
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-sticky-header')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-sticky-header')).toBeNull();
|
||||
});
|
||||
|
||||
it('should be able to define values using the resolver function', () => {
|
||||
@@ -1273,16 +1273,10 @@ describe('DataTable', () => {
|
||||
spyOn(dataTable, 'resolverFn').and.callFake(resolverFn);
|
||||
fixture.detectChanges();
|
||||
|
||||
const id1 = element.querySelector('[data-automation-id="text_1"]');
|
||||
const id2 = element.querySelector('[data-automation-id="text_2"]');
|
||||
const namesId1 = element.querySelector('[data-automation-id="text_foo - bar"]');
|
||||
const namesId2 = element.querySelector('[data-automation-id="text_bar - baz"]');
|
||||
|
||||
expect(id1.innerText).toEqual('1');
|
||||
expect(namesId1.innerText).toEqual('foo - bar');
|
||||
expect(id2.innerText).toEqual('2');
|
||||
expect(namesId2.innerText).toEqual('bar - baz');
|
||||
|
||||
expect(testingUtils.getInnerTextByDataAutomationId('text_1')).toEqual('1');
|
||||
expect(testingUtils.getInnerTextByDataAutomationId('text_foo - bar')).toEqual('foo - bar');
|
||||
expect(testingUtils.getInnerTextByDataAutomationId('text_2')).toEqual('2');
|
||||
expect(testingUtils.getInnerTextByDataAutomationId('text_bar - baz')).toEqual('bar - baz');
|
||||
expect(dataTable.data.getRows().length).toEqual(2);
|
||||
});
|
||||
|
||||
@@ -1309,11 +1303,8 @@ describe('DataTable', () => {
|
||||
);
|
||||
fixture.detectChanges();
|
||||
|
||||
const idColumn = element.querySelector('[data-automation-id="auto_id_id"]');
|
||||
const nameColumn = element.querySelector('[data-automation-id="auto_id_name"]');
|
||||
|
||||
expect(idColumn.innerText).toContain('ID');
|
||||
expect(nameColumn.innerText).toContain('CUSTOM HEADER');
|
||||
expect(testingUtils.getInnerTextByDataAutomationId('auto_id_id')).toContain('ID');
|
||||
expect(testingUtils.getInnerTextByDataAutomationId('auto_id_name')).toContain('CUSTOM HEADER');
|
||||
});
|
||||
|
||||
it('should set isContextMenuSource to true for row whose id matches selectedRowId', () => {
|
||||
@@ -1362,8 +1353,7 @@ describe('DataTable', () => {
|
||||
|
||||
dataTable.resetSelection();
|
||||
const rowClickPromise = dataTable.rowClick.pipe(take(1)).toPromise();
|
||||
const rowElement = fixture.debugElement.query(By.css(`[data-automation-id="datatable-row-0"] > div`)).nativeElement as HTMLElement;
|
||||
rowElement.dispatchEvent(new MouseEvent('click'));
|
||||
testingUtils.clickByCSS('[data-automation-id="datatable-row-0"] > div');
|
||||
fixture.detectChanges();
|
||||
await rowClickPromise;
|
||||
|
||||
@@ -1373,8 +1363,7 @@ describe('DataTable', () => {
|
||||
|
||||
dataTable.resetSelection();
|
||||
const cellClickPromise = dataTable.rowClick.pipe(take(1)).toPromise();
|
||||
const cellElement = fixture.debugElement.query(By.css(`[data-automation-id="datatable-row-1"] > div`)).nativeElement as HTMLElement;
|
||||
cellElement.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
||||
testingUtils.clickByCSS('[data-automation-id="datatable-row-1"] > div');
|
||||
fixture.detectChanges();
|
||||
await cellClickPromise;
|
||||
|
||||
@@ -1390,7 +1379,6 @@ describe('DataTable', () => {
|
||||
dataTable.ngOnChanges({ rows: new SimpleChange(null, petRows, false) });
|
||||
fixture.detectChanges();
|
||||
|
||||
const loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
const checkboxes = await loader.getAllHarnesses(MatCheckboxHarness);
|
||||
|
||||
await checkboxes[2].check();
|
||||
@@ -1461,32 +1449,23 @@ describe('DataTable', () => {
|
||||
});
|
||||
|
||||
describe('displayCheckboxesOnHover', () => {
|
||||
const getCheckboxes = () =>
|
||||
fixture.debugElement.queryAll(By.css('.adf-datatable-checkbox-single .adf-checkbox-sr-only')).map((row) => row.nativeElement);
|
||||
|
||||
beforeEach(() => {
|
||||
dataTable.data = new ObjectDataTableAdapter([{ name: '1' }, { name: '2' }], [new ObjectDataColumn({ key: 'name' })]);
|
||||
dataTable.multiselect = true;
|
||||
});
|
||||
|
||||
it('should always display checkboxes when displayCheckboxesOnHover is set to false', () => {
|
||||
it('should always display checkboxes when displayCheckboxesOnHover is set to false', async () => {
|
||||
dataTable.displayCheckboxesOnHover = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkboxes = getCheckboxes();
|
||||
checkboxes.forEach((checkbox) => {
|
||||
expect(checkbox.classList).not.toContain('adf-datatable-hover-only');
|
||||
});
|
||||
expect(await testingUtils.checkIfMatCheckboxesHaveClass('adf-datatable-hover-only')).toBeTrue();
|
||||
});
|
||||
|
||||
it('should display checkboxes on hover when displayCheckboxesOnHover is set to true', () => {
|
||||
it('should display checkboxes on hover when displayCheckboxesOnHover is set to true', async () => {
|
||||
dataTable.displayCheckboxesOnHover = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkboxes = getCheckboxes();
|
||||
checkboxes.forEach((checkbox) => {
|
||||
expect(checkbox.classList).toContain('adf-datatable-hover-only');
|
||||
});
|
||||
expect(await testingUtils.checkIfMatCheckboxesHaveClass('adf-datatable-hover-only')).toBeTrue();
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -1494,8 +1473,8 @@ describe('DataTable', () => {
|
||||
describe('Accesibility', () => {
|
||||
let fixture: ComponentFixture<DataTableComponent>;
|
||||
let dataTable: DataTableComponent;
|
||||
let element: any;
|
||||
let columnCustomTemplate: TemplateRef<any>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -1505,7 +1484,7 @@ describe('Accesibility', () => {
|
||||
columnCustomTemplate = TestBed.createComponent(CustomColumnTemplateComponent).componentInstance.templateRef;
|
||||
fixture = TestBed.createComponent(DataTableComponent);
|
||||
dataTable = fixture.componentInstance;
|
||||
element = fixture.debugElement.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -1521,19 +1500,19 @@ describe('Accesibility', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
const datatableAttributes = element.querySelector('.adf-datatable-list').attributes;
|
||||
const datatableHeaderAttributes = element.querySelector('.adf-datatable-list .adf-datatable-header').attributes;
|
||||
const datatableHeaderCellAttributes = element.querySelector('.adf-datatable-cell-header').attributes;
|
||||
const datatableBodyAttributes = element.querySelector('.adf-datatable-body').attributes;
|
||||
const datatableBodyRowAttributes = element.querySelector('.adf-datatable-body .adf-datatable-row').attributes;
|
||||
const datatableBodyCellAttributes = element.querySelector('.adf-datatable-body .adf-datatable-cell').attributes;
|
||||
const datatableAttributes = testingUtils.getByCSS('.adf-datatable-list').attributes;
|
||||
const datatableHeaderAttributes = testingUtils.getByCSS('.adf-datatable-list .adf-datatable-header').attributes;
|
||||
const datatableHeaderCellAttributes = testingUtils.getByCSS('.adf-datatable-cell-header').attributes;
|
||||
const datatableBodyAttributes = testingUtils.getByCSS('.adf-datatable-body').attributes;
|
||||
const datatableBodyRowAttributes = testingUtils.getByCSS('.adf-datatable-body .adf-datatable-row').attributes;
|
||||
const datatableBodyCellAttributes = testingUtils.getByCSS('.adf-datatable-body .adf-datatable-cell').attributes;
|
||||
|
||||
expect(datatableAttributes.getNamedItem('role').value).toEqual('grid');
|
||||
expect(datatableHeaderAttributes.getNamedItem('role').value).toEqual('rowgroup');
|
||||
expect(datatableHeaderCellAttributes.getNamedItem('role').value).toEqual('columnheader');
|
||||
expect(datatableBodyAttributes.getNamedItem('role').value).toEqual('rowgroup');
|
||||
expect(datatableBodyRowAttributes.getNamedItem('role').value).toEqual('row');
|
||||
expect(datatableBodyCellAttributes.getNamedItem('role').value).toEqual('gridcell');
|
||||
expect(datatableAttributes['role']).toEqual('grid');
|
||||
expect(datatableHeaderAttributes['role']).toEqual('rowgroup');
|
||||
expect(datatableHeaderCellAttributes['role']).toEqual('columnheader');
|
||||
expect(datatableBodyAttributes['role']).toEqual('rowgroup');
|
||||
expect(datatableBodyRowAttributes['role']).toEqual('row');
|
||||
expect(datatableBodyCellAttributes['role']).toEqual('gridcell');
|
||||
});
|
||||
|
||||
describe('aria-sort', () => {
|
||||
@@ -1593,10 +1572,10 @@ describe('Accesibility', () => {
|
||||
fixture.detectChanges();
|
||||
dataTable.ngAfterViewInit();
|
||||
|
||||
const rowElement = document.querySelectorAll('.adf-datatable-body .adf-datatable-row')[0];
|
||||
const rowCellElement = rowElement.querySelector('.adf-datatable-cell');
|
||||
const rowElement = testingUtils.getAllByCSS('.adf-datatable-body .adf-datatable-row')[0];
|
||||
testingUtils.setDebugElement(rowElement);
|
||||
testingUtils.clickByCSS('.adf-datatable-cell');
|
||||
|
||||
rowCellElement?.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
||||
fixture.debugElement.nativeElement.dispatchEvent(event);
|
||||
|
||||
expect(document.activeElement?.getAttribute('data-automation-id')).toBe('datatable-row-1');
|
||||
@@ -1610,10 +1589,10 @@ describe('Accesibility', () => {
|
||||
fixture.detectChanges();
|
||||
dataTable.ngAfterViewInit();
|
||||
|
||||
const rowElement = document.querySelectorAll('.adf-datatable-body .adf-datatable-row')[1];
|
||||
const rowCellElement = rowElement.querySelector('.adf-datatable-cell');
|
||||
const rowElement = testingUtils.getAllByCSS('.adf-datatable-body .adf-datatable-row')[1];
|
||||
testingUtils.setDebugElement(rowElement);
|
||||
testingUtils.clickByCSS('.adf-datatable-cell');
|
||||
|
||||
rowCellElement?.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
||||
fixture.debugElement.nativeElement.dispatchEvent(event);
|
||||
|
||||
expect(document.activeElement?.getAttribute('data-automation-id')).toBe('datatable-row-0');
|
||||
@@ -1629,10 +1608,10 @@ describe('Accesibility', () => {
|
||||
fixture.detectChanges();
|
||||
dataTable.ngAfterViewInit();
|
||||
|
||||
const rowElement = document.querySelector('.adf-datatable-row[data-automation-id="datatable-row-0"]');
|
||||
const rowCellElement = rowElement?.querySelector('.adf-datatable-cell');
|
||||
const rowElement = testingUtils.getAllByCSS('.adf-datatable-body .adf-datatable-row')[0];
|
||||
testingUtils.setDebugElement(rowElement);
|
||||
testingUtils.clickByCSS('.adf-datatable-cell');
|
||||
|
||||
rowCellElement?.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
||||
fixture.debugElement.nativeElement.dispatchEvent(event);
|
||||
|
||||
expect(document.activeElement?.getAttribute('data-automation-id')).toBe('datatable-row-header');
|
||||
@@ -1648,10 +1627,10 @@ describe('Accesibility', () => {
|
||||
fixture.detectChanges();
|
||||
dataTable.ngAfterViewInit();
|
||||
|
||||
const rowElement = document.querySelector('.adf-datatable-row[data-automation-id="datatable-row-0"]');
|
||||
const rowCellElement = rowElement?.querySelector('.adf-datatable-cell');
|
||||
const rowElement = testingUtils.getAllByCSS('.adf-datatable-body .adf-datatable-row')[0];
|
||||
testingUtils.setDebugElement(rowElement);
|
||||
testingUtils.clickByCSS('.adf-datatable-cell');
|
||||
|
||||
rowCellElement?.dispatchEvent(new MouseEvent('click'));
|
||||
fixture.debugElement.nativeElement.dispatchEvent(event);
|
||||
|
||||
expect(document.activeElement?.getAttribute('data-automation-id')).toBe('datatable-row-1');
|
||||
@@ -1671,8 +1650,8 @@ describe('Accesibility', () => {
|
||||
fixture.detectChanges();
|
||||
dataTable.ngAfterViewInit();
|
||||
|
||||
const cell = document.querySelector('.adf-datatable-row[data-automation-id="datatable-row-0"] .adf-cell-value');
|
||||
expect(cell?.getAttribute('tabindex')).toBe(null);
|
||||
const cell = testingUtils.getByCSS('.adf-datatable-row[data-automation-id="datatable-row-0"] .adf-cell-value');
|
||||
expect(cell?.nativeElement.getAttribute('tabindex')).toBe(null);
|
||||
});
|
||||
|
||||
it('should allow element focus when [focus] is set to true', () => {
|
||||
@@ -1688,8 +1667,8 @@ describe('Accesibility', () => {
|
||||
fixture.detectChanges();
|
||||
dataTable.ngAfterViewInit();
|
||||
|
||||
const cell = document.querySelector('.adf-datatable-row[data-automation-id="datatable-row-0"] .adf-cell-value');
|
||||
expect(cell?.getAttribute('tabindex')).toBe('0');
|
||||
const cell = testingUtils.getByCSS('.adf-datatable-row[data-automation-id="datatable-row-0"] .adf-cell-value');
|
||||
expect(cell?.nativeElement.getAttribute('tabindex')).toBe('0');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1698,6 +1677,7 @@ describe('Drag&Drop column header', () => {
|
||||
let dataTable: DataTableComponent;
|
||||
let data: { id: number; name: string }[] = [];
|
||||
let dataTableSchema: DataColumn[] = [];
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -1705,6 +1685,7 @@ describe('Drag&Drop column header', () => {
|
||||
schemas: [NO_ERRORS_SCHEMA]
|
||||
});
|
||||
fixture = TestBed.createComponent(DataTableComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
dataTable = fixture.componentInstance;
|
||||
data = [
|
||||
{ id: 1, name: 'name1' },
|
||||
@@ -1722,32 +1703,24 @@ describe('Drag&Drop column header', () => {
|
||||
it('should show/hide drag indicator icon', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const headerColumn = fixture.debugElement.nativeElement.querySelector('[data-automation-id="auto_id_name"]');
|
||||
headerColumn.dispatchEvent(new MouseEvent('mouseenter'));
|
||||
testingUtils.hoverOverByDataAutomationId('auto_id_name');
|
||||
fixture.detectChanges();
|
||||
|
||||
let dragIcon = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-datatable-cell-header-drag-icon-name"]');
|
||||
expect(testingUtils.getByDataAutomationId('adf-datatable-cell-header-drag-icon-name')).toBeTruthy();
|
||||
|
||||
expect(dragIcon).toBeTruthy();
|
||||
|
||||
headerColumn.dispatchEvent(new MouseEvent('mouseleave'));
|
||||
testingUtils.mouseLeaveByDataAutomationId('auto_id_name');
|
||||
fixture.detectChanges();
|
||||
|
||||
dragIcon = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-datatable-cell-header-drag-icon-name"]');
|
||||
|
||||
expect(dragIcon).toBeFalsy();
|
||||
expect(testingUtils.getByDataAutomationId('adf-datatable-cell-header-drag-icon-name')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should not show drag indicator icon, when drag and drop is disabled', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const headerColumn = fixture.debugElement.nativeElement.querySelector('[data-automation-id="auto_id_id"]');
|
||||
headerColumn.dispatchEvent(new MouseEvent('mouseenter'));
|
||||
testingUtils.hoverOverByDataAutomationId('auto_id_id');
|
||||
fixture.detectChanges();
|
||||
|
||||
const dragIcon = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-datatable-cell-header-drag-icon-id"]');
|
||||
|
||||
expect(dragIcon).toBeFalsy();
|
||||
expect(testingUtils.getByDataAutomationId('adf-datatable-cell-header-drag-icon-id')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should emit on change column order', () => {
|
||||
@@ -1783,13 +1756,13 @@ describe('Drag&Drop column header', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const columns = dataTable.data.getColumns();
|
||||
const headerCells = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell--text.adf-datatable-cell-header');
|
||||
const headerCells = testingUtils.getAllByCSS('.adf-datatable-cell--text.adf-datatable-cell-header');
|
||||
|
||||
expect(columns[0].key).toEqual(dataTableSchema[1].key);
|
||||
expect(columns[1].key).toEqual(dataTableSchema[0].key);
|
||||
|
||||
expect(headerCells[0].innerText).toBe(dataTableSchema[1].title);
|
||||
expect(headerCells[1].innerText).toBe(dataTableSchema[0].title);
|
||||
expect(headerCells[0].nativeElement.innerText).toBe(dataTableSchema[1].title);
|
||||
expect(headerCells[1].nativeElement.innerText).toBe(dataTableSchema[0].title);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1798,6 +1771,7 @@ describe('Show/hide columns', () => {
|
||||
let dataTable: DataTableComponent;
|
||||
let data: DataColumn[] = [];
|
||||
let dataTableSchema: DataColumn[] = [];
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -1819,12 +1793,13 @@ describe('Show/hide columns', () => {
|
||||
];
|
||||
|
||||
dataTable.data = new ObjectDataTableAdapter([...data], [...dataTableSchema]);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should hide columns with isHidden prop', () => {
|
||||
const headerCells = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell--text.adf-datatable-cell-header');
|
||||
const headerCells = testingUtils.getAllByCSS('.adf-datatable-cell--text.adf-datatable-cell-header');
|
||||
|
||||
expect(headerCells.length).toBe(2);
|
||||
});
|
||||
@@ -1847,7 +1822,7 @@ describe('Show/hide columns', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const headerCells = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell--text.adf-datatable-cell-header');
|
||||
const headerCells = testingUtils.getAllByCSS('.adf-datatable-cell--text.adf-datatable-cell-header');
|
||||
expect(headerCells.length).toBe(1);
|
||||
});
|
||||
|
||||
@@ -1881,13 +1856,14 @@ describe('Column Resizing', () => {
|
||||
let dataTable: DataTableComponent;
|
||||
let data: { id: number; name: string }[] = [];
|
||||
let dataTableSchema: DataColumn[] = [];
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const getTableBody = (): HTMLDivElement => fixture.debugElement.nativeElement.querySelector('.adf-datatable-body');
|
||||
const getTableBody = (): HTMLDivElement => testingUtils.getByCSS('.adf-datatable-body').nativeElement;
|
||||
|
||||
const getResizeHandler = (): HTMLDivElement => fixture.debugElement.nativeElement.querySelector('.adf-datatable__resize-handle');
|
||||
const getResizeHandler = (): HTMLDivElement => testingUtils.getByCSS('.adf-datatable__resize-handle')?.nativeElement;
|
||||
|
||||
const getResizeHandlersCount = (): number => {
|
||||
const resizeHandlers = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable__resize-handle');
|
||||
const resizeHandlers = testingUtils.getAllByCSS('.adf-datatable__resize-handle');
|
||||
return resizeHandlers.length;
|
||||
};
|
||||
|
||||
@@ -1895,14 +1871,14 @@ describe('Column Resizing', () => {
|
||||
dataTable.isResizingEnabled = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const resizeHandle: HTMLElement = getResizeHandler();
|
||||
const resizeHandle = getResizeHandler();
|
||||
resizeHandle.dispatchEvent(new MouseEvent('mousedown'));
|
||||
fixture.detectChanges();
|
||||
|
||||
const headerColumns = fixture.debugElement.nativeElement.querySelectorAll(headerColumnsSelector);
|
||||
const headerColumns = testingUtils.getAllByCSS(headerColumnsSelector);
|
||||
|
||||
expect(dataTable.isResizing).toBeTrue();
|
||||
headerColumns.forEach((header: HTMLElement) => expect(header.classList).not.toContain(excludedClass));
|
||||
headerColumns.forEach((header) => expect(header.nativeElement.classList).not.toContain(excludedClass));
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -1925,17 +1901,19 @@ describe('Column Resizing', () => {
|
||||
dataTable.data = new ObjectDataTableAdapter([...data], [...dataTableSchema]);
|
||||
|
||||
dataTable.isResizingEnabled = false;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should NOT display resize handle when the feature is Disabled [isResizingEnabled=false]', () => {
|
||||
const resizeHandle = getResizeHandler();
|
||||
|
||||
expect(resizeHandle).toBeNull();
|
||||
const headerColumns = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell-header');
|
||||
expect(resizeHandle).toBeUndefined();
|
||||
const headerColumns = testingUtils.getAllByCSS('.adf-datatable-cell-header');
|
||||
|
||||
headerColumns.forEach((header: HTMLElement) => {
|
||||
expect(header.classList).toContain('adf-datatable__cursor--pointer');
|
||||
headerColumns.forEach((header) => {
|
||||
expect(header.nativeElement.classList).toContain('adf-datatable__cursor--pointer');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1962,10 +1940,10 @@ describe('Column Resizing', () => {
|
||||
const resizeHandle = getResizeHandler();
|
||||
|
||||
expect(resizeHandle).not.toBeNull();
|
||||
const headerColumns = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell-header');
|
||||
const headerColumns = testingUtils.getAllByCSS('.adf-datatable-cell-header');
|
||||
|
||||
headerColumns.forEach((header: HTMLElement) => {
|
||||
expect(header.classList).toContain('adf-datatable__cursor--pointer');
|
||||
headerColumns.forEach((header) => {
|
||||
expect(header.nativeElement.classList).toContain('adf-datatable__cursor--pointer');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1981,18 +1959,17 @@ describe('Column Resizing', () => {
|
||||
dataTable.isResizingEnabled = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const headerColumn = fixture.debugElement.nativeElement.querySelector('[data-automation-id="auto_id_id"]');
|
||||
headerColumn.dispatchEvent(new MouseEvent('mouseenter'));
|
||||
testingUtils.hoverOverByDataAutomationId('auto_id_id');
|
||||
fixture.detectChanges();
|
||||
let dragIcon = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-datatable-cell-header-drag-icon-id"]');
|
||||
let dragIcon = testingUtils.getByDataAutomationId('adf-datatable-cell-header-drag-icon-id');
|
||||
|
||||
expect(dragIcon).not.toBeNull();
|
||||
|
||||
const resizeHandle: HTMLElement[] = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable__resize-handle');
|
||||
resizeHandle[0].dispatchEvent(new MouseEvent('mousedown'));
|
||||
const resizeHandles = testingUtils.getAllByCSS('.adf-datatable__resize-handle');
|
||||
resizeHandles[0].nativeElement.dispatchEvent(new MouseEvent('mousedown'));
|
||||
fixture.detectChanges();
|
||||
|
||||
dragIcon = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-datatable-cell-header-drag-icon-id"]');
|
||||
dragIcon = testingUtils.getByDataAutomationId('adf-datatable-cell-header-drag-icon-id');
|
||||
|
||||
expect(dataTable.isResizing).toBeTrue();
|
||||
expect(dragIcon).toBeNull();
|
||||
@@ -2003,7 +1980,7 @@ describe('Column Resizing', () => {
|
||||
dataTable.isResizingEnabled = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const resizeHandle: HTMLElement = getResizeHandler();
|
||||
const resizeHandle = getResizeHandler();
|
||||
resizeHandle.dispatchEvent(new MouseEvent('mousedown'));
|
||||
fixture.detectChanges();
|
||||
});
|
||||
@@ -2085,8 +2062,8 @@ describe('Column Resizing', () => {
|
||||
tick();
|
||||
fixture.detectChanges();
|
||||
|
||||
const headerColumns: HTMLElement[] = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell-header');
|
||||
expect(headerColumns[0].style.flex).toBe('0 1 125px');
|
||||
const headerColumns = testingUtils.getAllByCSS('.adf-datatable-cell-header');
|
||||
expect(headerColumns[0].nativeElement.style.flex).toBe('0 1 125px');
|
||||
}));
|
||||
|
||||
it('should set the column header to 100px on resizing when its width goes below 100', fakeAsync(() => {
|
||||
@@ -2094,8 +2071,8 @@ describe('Column Resizing', () => {
|
||||
tick();
|
||||
fixture.detectChanges();
|
||||
|
||||
const headerColumns: HTMLElement[] = fixture.debugElement.nativeElement.querySelectorAll('.adf-datatable-cell-header');
|
||||
expect(headerColumns[0].style.flex).toBe('0 1 100px');
|
||||
const headerColumns = testingUtils.getAllByCSS('.adf-datatable-cell-header');
|
||||
expect(headerColumns[0].nativeElement.style.flex).toBe('0 1 100px');
|
||||
}));
|
||||
|
||||
it('should set the style of all the table cells under the resizing header on resizing', fakeAsync(() => {
|
||||
@@ -2174,7 +2151,7 @@ describe('Column Resizing', () => {
|
||||
dataTable.enableDragRows = false;
|
||||
dataTable.showHeader = ShowHeaderMode.Never;
|
||||
fixture.detectChanges();
|
||||
const dragAndDrop = fixture.debugElement.query(By.directive(CdkDropList)).injector.get(CdkDropList);
|
||||
const dragAndDrop = testingUtils.getByDirective(CdkDropList).injector.get(CdkDropList);
|
||||
dataTable.onDragDrop({} as CdkDragDrop<any>);
|
||||
expect(dataTable.dragDropped.emit).not.toHaveBeenCalled();
|
||||
expect(dragAndDrop.disabled).toBeTrue();
|
||||
@@ -2193,16 +2170,19 @@ describe('Column Resizing', () => {
|
||||
it('should display 2 columns for no provided actions and no default actions', () => {
|
||||
dataTable.data = new ObjectDataTableAdapter(
|
||||
[{ name: '1' }],
|
||||
[new ObjectDataColumn({ key: 'name', title: 'Name', sortable: true }), new ObjectDataColumn({ key: 'other', title: 'Other', sortable: true })]
|
||||
[
|
||||
new ObjectDataColumn({ key: 'name', title: 'Name', sortable: true }),
|
||||
new ObjectDataColumn({ key: 'other', title: 'Other', sortable: true })
|
||||
]
|
||||
);
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
|
||||
const visibleColumns = dataTable.getVisibleColumns();
|
||||
|
||||
const datatableCellHeaders = fixture.debugElement.queryAll(By.css('.adf-datatable-cell-header'));
|
||||
const datatableCells = fixture.debugElement.queryAll(By.css('.adf-datatable-cell'));
|
||||
|
||||
|
||||
const datatableCellHeaders = testingUtils.getAllByCSS('.adf-datatable-cell-header');
|
||||
const datatableCells = testingUtils.getAllByCSS('.adf-datatable-cell');
|
||||
|
||||
expect(visibleColumns.length).toBe(2);
|
||||
|
||||
const expectedNumberOfColumns = 2;
|
||||
@@ -2216,14 +2196,14 @@ describe('Column Resizing', () => {
|
||||
[{ name: '1' }],
|
||||
[new ObjectDataColumn({ key: 'name', title: 'Name', sortable: true }), new ObjectDataColumn({ key: 'other', sortable: true })]
|
||||
);
|
||||
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
|
||||
const visibleColumns = dataTable.getVisibleColumns();
|
||||
|
||||
const datatableCellHeaders = fixture.debugElement.queryAll(By.css('.adf-datatable-cell-header'));
|
||||
const datatableCells = fixture.debugElement.queryAll(By.css('.adf-datatable-cell'));
|
||||
|
||||
|
||||
const datatableCellHeaders = testingUtils.getAllByCSS('.adf-datatable-cell-header');
|
||||
const datatableCells = testingUtils.getAllByCSS('.adf-datatable-cell');
|
||||
|
||||
expect(visibleColumns.length).toBe(2);
|
||||
|
||||
const expectedNumberOfColumns = 2;
|
||||
@@ -2235,18 +2215,21 @@ describe('Column Resizing', () => {
|
||||
it('should display 3 columns if there are default actions', () => {
|
||||
dataTable.data = new ObjectDataTableAdapter(
|
||||
[{ name: '1' }],
|
||||
[new ObjectDataColumn({ key: 'name', title: 'Name', sortable: true }), new ObjectDataColumn({ key: 'other', title: 'Other', sortable: true })]
|
||||
[
|
||||
new ObjectDataColumn({ key: 'name', title: 'Name', sortable: true }),
|
||||
new ObjectDataColumn({ key: 'other', title: 'Other', sortable: true })
|
||||
]
|
||||
);
|
||||
|
||||
dataTable.actions = true;
|
||||
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
|
||||
const visibleColumns = dataTable.getVisibleColumns();
|
||||
|
||||
const datatableCellHeaders = fixture.debugElement.queryAll(By.css('.adf-datatable-cell-header'));
|
||||
const datatableCells = fixture.debugElement.queryAll(By.css('.adf-datatable-cell'));
|
||||
|
||||
|
||||
const datatableCellHeaders = testingUtils.getAllByCSS('.adf-datatable-cell-header');
|
||||
const datatableCells = testingUtils.getAllByCSS('.adf-datatable-cell');
|
||||
|
||||
expect(visibleColumns.length).toBe(2);
|
||||
|
||||
const expectedNumberOfColumns = 3;
|
||||
@@ -2263,14 +2246,14 @@ describe('Column Resizing', () => {
|
||||
|
||||
dataTable.actions = true;
|
||||
dataTable.showProvidedActions = true;
|
||||
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
|
||||
const visibleColumns = dataTable.getVisibleColumns();
|
||||
|
||||
const datatableCellHeaders = fixture.debugElement.queryAll(By.css('.adf-datatable-cell-header'));
|
||||
const datatableCells = fixture.debugElement.queryAll(By.css('.adf-datatable-cell'));
|
||||
|
||||
|
||||
const datatableCellHeaders = testingUtils.getAllByCSS('.adf-datatable-cell-header');
|
||||
const datatableCells = testingUtils.getAllByCSS('.adf-datatable-cell');
|
||||
|
||||
expect(visibleColumns.length).toBe(2);
|
||||
|
||||
const expectedNumberOfColumns = 2;
|
||||
|
||||
@@ -23,11 +23,13 @@ import { AppConfigService } from '../../../app-config';
|
||||
import { LOCALE_ID } from '@angular/core';
|
||||
import { registerLocaleData } from '@angular/common';
|
||||
import localePL from '@angular/common/locales/pl';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
let component: DateCellComponent;
|
||||
let appConfigService: AppConfigService;
|
||||
let fixture: ComponentFixture<DateCellComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
let mockDate;
|
||||
let mockTooltip = '';
|
||||
@@ -46,14 +48,14 @@ const renderDateCell = (dateConfig: DateConfig, value: number | string | Date, t
|
||||
};
|
||||
|
||||
const checkDisplayedDate = (expectedDate: string) => {
|
||||
const displayedDate = fixture.nativeElement.querySelector('span').textContent.trim();
|
||||
const displayedDate = testingUtils.getByCSS('span').nativeElement.textContent.trim();
|
||||
|
||||
expect(displayedDate).toBeTruthy();
|
||||
expect(displayedDate).toBe(expectedDate);
|
||||
};
|
||||
|
||||
const checkDisplayedTooltip = (expectedTooltip: string) => {
|
||||
const displayedTooltip = fixture.nativeElement.querySelector('span').title;
|
||||
const displayedTooltip = testingUtils.getByCSS('span').nativeElement.title;
|
||||
|
||||
expect(displayedTooltip).toBeTruthy();
|
||||
expect(displayedTooltip).toBe(expectedTooltip);
|
||||
@@ -66,6 +68,7 @@ const configureTestingModule = (providers: any[]) => {
|
||||
});
|
||||
fixture = TestBed.createComponent(DateCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
appConfigService = TestBed.inject(AppConfigService);
|
||||
|
||||
|
||||
@@ -17,15 +17,18 @@
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { EmptyListComponent } from './empty-list.component';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('EmptyListComponentComponent', () => {
|
||||
let fixture: ComponentFixture<EmptyListComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [EmptyListComponent]
|
||||
});
|
||||
fixture = TestBed.createComponent(EmptyListComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -36,6 +39,6 @@ describe('EmptyListComponentComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.adf-empty-list_template')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-empty-list_template')).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -22,17 +22,19 @@ import { ObjectDataTableAdapter } from '../../data/object-datatable-adapter';
|
||||
import { ObjectDataColumn } from '../../data/object-datacolumn.model';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatIconHarness } from '@angular/material/icon/testing';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('IconCellComponent', () => {
|
||||
let component: IconCellComponent;
|
||||
let fixture: ComponentFixture<IconCellComponent>;
|
||||
let loader: HarnessLoader;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const renderAndCheckResult = async (value: any, expectedOccurrence: boolean, expectedIconName?: string) => {
|
||||
component.value$.next(value);
|
||||
fixture.detectChanges();
|
||||
|
||||
const icon = await loader.getHarnessOrNull(MatIconHarness);
|
||||
const icon = await testingUtils.getMatIconOrNull();
|
||||
|
||||
expectedOccurrence ? expect(icon).not.toBeNull() : expect(icon).toBeNull();
|
||||
if (expectedIconName) {
|
||||
@@ -48,6 +50,7 @@ describe('IconCellComponent', () => {
|
||||
fixture = TestBed.createComponent(IconCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
describe('Initialization', () => {
|
||||
|
||||
@@ -21,7 +21,7 @@ import { ObjectDataColumn } from '../../data/object-datacolumn.model';
|
||||
import { JsonCellComponent } from './json-cell.component';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { MatButtonHarness } from '@angular/material/button/testing';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('JsonCellComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
@@ -30,6 +30,7 @@ describe('JsonCellComponent', () => {
|
||||
let dataTableAdapter: ObjectDataTableAdapter;
|
||||
let rowData: any;
|
||||
let columnData: any;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -38,6 +39,7 @@ describe('JsonCellComponent', () => {
|
||||
fixture = TestBed.createComponent(JsonCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -73,8 +75,7 @@ describe('JsonCellComponent', () => {
|
||||
it('should render json button inside cell', async () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const buttonExists = await loader.hasHarness(MatButtonHarness);
|
||||
expect(buttonExists).toBe(true);
|
||||
expect(await testingUtils.checkIfMatButtonExists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should not setup cell when has no data', () => {
|
||||
|
||||
@@ -22,20 +22,22 @@ import { BehaviorSubject } from 'rxjs';
|
||||
import { LOCALE_ID } from '@angular/core';
|
||||
import { registerLocaleData } from '@angular/common';
|
||||
import localePL from '@angular/common/locales/pl';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('NumberCellComponent', () => {
|
||||
let component: NumberCellComponent;
|
||||
let fixture: ComponentFixture<NumberCellComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const renderAndCheckNumberValue = (decimalConfig: DecimalConfig, value: number, expectedResult: string) => {
|
||||
component.value$ = new BehaviorSubject<number>(value);
|
||||
component.decimalConfig = decimalConfig;
|
||||
|
||||
fixture.detectChanges();
|
||||
const displayedNumber = fixture.nativeElement.querySelector('span');
|
||||
const displayedNumber = testingUtils.getByCSS('span');
|
||||
|
||||
expect(displayedNumber).toBeTruthy();
|
||||
expect(displayedNumber.textContent.trim()).toBe(expectedResult);
|
||||
expect(displayedNumber.nativeElement.textContent.trim()).toBe(expectedResult);
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -44,6 +46,7 @@ describe('NumberCellComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(NumberCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('should set default decimal config', () => {
|
||||
@@ -63,6 +66,7 @@ describe('NumberCellComponent', () => {
|
||||
describe('NumberCellComponent locale', () => {
|
||||
let component: NumberCellComponent;
|
||||
let fixture: ComponentFixture<NumberCellComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
it('should render decimal value with custom locale', () => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -72,15 +76,16 @@ describe('NumberCellComponent locale', () => {
|
||||
|
||||
fixture = TestBed.createComponent(NumberCellComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
registerLocaleData(localePL);
|
||||
|
||||
component.value$ = new BehaviorSubject<number>(123.45);
|
||||
component.decimalConfig = { locale: 'pl-PL' };
|
||||
|
||||
fixture.detectChanges();
|
||||
const displayedNumber = fixture.nativeElement.querySelector('span');
|
||||
const displayedNumber = testingUtils.getByCSS('span');
|
||||
|
||||
expect(displayedNumber).toBeTruthy();
|
||||
expect(displayedNumber.textContent.trim()).toBe('123,45');
|
||||
expect(displayedNumber.nativeElement.textContent.trim()).toBe('123,45');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -18,13 +18,14 @@
|
||||
import { TestBed, ComponentFixture } from '@angular/core/testing';
|
||||
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
||||
import { ConfirmDialogComponent } from './confirm.dialog';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../testing/unit-testing-utils';
|
||||
|
||||
describe('Confirm Dialog Component', () => {
|
||||
let fixture: ComponentFixture<ConfirmDialogComponent>;
|
||||
let component: ConfirmDialogComponent;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const dialogRef = {
|
||||
close: jasmine.createSpy('close')
|
||||
@@ -48,6 +49,7 @@ describe('Confirm Dialog Component', () => {
|
||||
dialogRef.close.calls.reset();
|
||||
fixture = TestBed.createComponent(ConfirmDialogComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -67,25 +69,25 @@ describe('Confirm Dialog Component', () => {
|
||||
});
|
||||
|
||||
it('should render the title', () => {
|
||||
const titleElement = fixture.debugElement.query(By.css('[data-automation-id="adf-confirm-dialog-title"]'));
|
||||
const titleElement = testingUtils.getByDataAutomationId('adf-confirm-dialog-title');
|
||||
expect(titleElement).not.toBeNull();
|
||||
expect(titleElement.nativeElement.innerText).toBe('Fake Title');
|
||||
});
|
||||
|
||||
it('should render the message', () => {
|
||||
const messageElement = fixture.debugElement.query(By.css('[data-automation-id="adf-confirm-dialog-base-message"]'));
|
||||
const messageElement = testingUtils.getByDataAutomationId('adf-confirm-dialog-base-message');
|
||||
expect(messageElement).not.toBeNull();
|
||||
expect(messageElement.nativeElement.innerText).toBe('Base Message');
|
||||
});
|
||||
|
||||
it('should render the YES label', () => {
|
||||
const messageElement = fixture.debugElement.query(By.css('[data-automation-id="adf-confirm-dialog-confirmation"]'));
|
||||
const messageElement = testingUtils.getByDataAutomationId('adf-confirm-dialog-confirmation');
|
||||
expect(messageElement).not.toBeNull();
|
||||
expect(messageElement.nativeElement.innerText).toBe('TAKE THIS');
|
||||
});
|
||||
|
||||
it('should render the NO label', () => {
|
||||
const messageElement = fixture.debugElement.query(By.css('[data-automation-id="adf-confirm-dialog-reject"]'));
|
||||
const messageElement = testingUtils.getByDataAutomationId('adf-confirm-dialog-reject');
|
||||
expect(messageElement).not.toBeNull();
|
||||
expect(messageElement.nativeElement.innerText).toBe('MAYBE NO');
|
||||
});
|
||||
@@ -98,25 +100,25 @@ describe('Confirm Dialog Component', () => {
|
||||
});
|
||||
|
||||
it('should render the title', () => {
|
||||
const titleElement = fixture.debugElement.query(By.css('[data-automation-id="adf-confirm-dialog-title"]'));
|
||||
const titleElement = testingUtils.getByDataAutomationId('adf-confirm-dialog-title');
|
||||
expect(titleElement).not.toBeNull();
|
||||
expect(titleElement.nativeElement.innerText).toBe('Fake Title');
|
||||
});
|
||||
|
||||
it('should render the custom html', () => {
|
||||
const customElement = fixture.nativeElement.querySelector('[data-automation-id="adf-confirm-dialog-custom-content"] div');
|
||||
const customElement = testingUtils.getByCSS('[data-automation-id="adf-confirm-dialog-custom-content"] div');
|
||||
expect(customElement).not.toBeNull();
|
||||
expect(customElement.innerText).toBe('I am about to do to you what Limp Bizkit did to music in the late ’90s.');
|
||||
expect(customElement.nativeElement.innerText).toBe('I am about to do to you what Limp Bizkit did to music in the late ’90s.');
|
||||
});
|
||||
|
||||
it('should render the YES label', () => {
|
||||
const messageElement = fixture.debugElement.query(By.css('[data-automation-id="adf-confirm-dialog-confirmation"]'));
|
||||
const messageElement = testingUtils.getByDataAutomationId('adf-confirm-dialog-confirmation');
|
||||
expect(messageElement).not.toBeNull();
|
||||
expect(messageElement.nativeElement.innerText).toBe('TAKE THIS');
|
||||
});
|
||||
|
||||
it('should render the NO label', () => {
|
||||
const messageElement = fixture.debugElement.query(By.css('[data-automation-id="adf-confirm-dialog-reject"]'));
|
||||
const messageElement = testingUtils.getByDataAutomationId('adf-confirm-dialog-reject');
|
||||
expect(messageElement).not.toBeNull();
|
||||
expect(messageElement.nativeElement.innerText).toBe('MAYBE NO');
|
||||
});
|
||||
@@ -126,14 +128,14 @@ describe('Confirm Dialog Component', () => {
|
||||
it('should NOT render the thirdOption if is thirdOptionLabel is not passed', () => {
|
||||
component.thirdOptionLabel = undefined;
|
||||
fixture.detectChanges();
|
||||
const thirdOptionElement = fixture.debugElement.query(By.css('[data-automation-id="adf-confirm-dialog-confirm-all"]'));
|
||||
const thirdOptionElement = testingUtils.getByDataAutomationId('adf-confirm-dialog-confirm-all');
|
||||
expect(thirdOptionElement).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should render the thirdOption if thirdOptionLabel is passed', () => {
|
||||
component.thirdOptionLabel = 'Yes All';
|
||||
fixture.detectChanges();
|
||||
const thirdOptionElement = fixture.debugElement.query(By.css('[data-automation-id="adf-confirm-dialog-confirm-all"]'));
|
||||
const thirdOptionElement = testingUtils.getByDataAutomationId('adf-confirm-dialog-confirm-all');
|
||||
expect(thirdOptionElement).not.toBeNull();
|
||||
expect(thirdOptionElement.nativeElement.innerText.toUpperCase()).toBe('YES ALL');
|
||||
});
|
||||
|
||||
@@ -17,12 +17,11 @@
|
||||
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { DIALOG_COMPONENT_DATA, DialogComponent } from './dialog.component';
|
||||
import { DialogData } from './dialog-data.interface';
|
||||
import { DialogSize } from './dialog.model';
|
||||
import { CoreTestingModule } from '../../testing';
|
||||
import { Component, DebugElement, inject } from '@angular/core';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../testing';
|
||||
import { Component, inject } from '@angular/core';
|
||||
import { Subject } from 'rxjs';
|
||||
|
||||
@Component({
|
||||
@@ -39,6 +38,8 @@ describe('DialogComponent', () => {
|
||||
let cancelButton: HTMLButtonElement;
|
||||
let confirmButton: HTMLButtonElement;
|
||||
let dialogContainer: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const mockId = 'mockId';
|
||||
const mockDataOnConfirm$ = new Subject();
|
||||
|
||||
@@ -65,12 +66,13 @@ describe('DialogComponent', () => {
|
||||
dialogRef.close.calls.reset();
|
||||
fixture = TestBed.createComponent(DialogComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
|
||||
confirmButton = fixture.nativeElement.querySelector('[data-automation-id="adf-dialog-actions-confirm"]');
|
||||
closeButton = fixture.nativeElement.querySelector('[data-automation-id="adf-dialog-close-button"]');
|
||||
cancelButton = fixture.nativeElement.querySelector('[data-automation-id="adf-dialog-actions-cancel"]');
|
||||
dialogContainer = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-dialog-container"]');
|
||||
confirmButton = testingUtils.getByDataAutomationId('adf-dialog-actions-confirm').nativeElement;
|
||||
closeButton = testingUtils.getByDataAutomationId('adf-dialog-close-button')?.nativeElement;
|
||||
cancelButton = testingUtils.getByDataAutomationId('adf-dialog-actions-cancel')?.nativeElement;
|
||||
dialogContainer = testingUtils.getByDataAutomationId('adf-dialog-container').nativeElement;
|
||||
};
|
||||
|
||||
describe('when init with default data', () => {
|
||||
@@ -80,9 +82,9 @@ describe('DialogComponent', () => {
|
||||
|
||||
it('should have default template elements', () => {
|
||||
expect(dialogContainer).toBeDefined();
|
||||
expect(fixture.nativeElement.querySelector('.adf-dialog-header')).toBeDefined();
|
||||
expect(fixture.nativeElement.querySelector('.adf-dialog-content')).toBeDefined();
|
||||
expect(fixture.nativeElement.querySelector('.adf-dialog-actions')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-dialog-header')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-dialog-content')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-dialog-actions')).toBeDefined();
|
||||
});
|
||||
|
||||
it('should have default values for the dialog', () => {
|
||||
@@ -173,11 +175,11 @@ describe('DialogComponent', () => {
|
||||
});
|
||||
|
||||
it('should hide close button', () => {
|
||||
expect(closeButton).toBeNull();
|
||||
expect(closeButton).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should hide close button', () => {
|
||||
expect(cancelButton).toBeNull();
|
||||
expect(cancelButton).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -195,11 +197,8 @@ describe('DialogComponent', () => {
|
||||
});
|
||||
|
||||
it('should not have header and actions border', () => {
|
||||
const headerBorder = fixture.nativeElement.querySelector('.adf-alert .adf-dialog-header::after');
|
||||
const actionsBorder = fixture.nativeElement.querySelector('.adf-alert .adf-dialog-actions::after');
|
||||
|
||||
expect(headerBorder).toBeDefined();
|
||||
expect(actionsBorder).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-alert .adf-dialog-header::after')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-alert .adf-dialog-actions::after')).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -217,11 +216,8 @@ describe('DialogComponent', () => {
|
||||
});
|
||||
|
||||
it('should not have header and actions border', () => {
|
||||
const headerBorder = fixture.nativeElement.querySelector('.adf-alert .adf-dialog-header::after');
|
||||
const actionsBorder = fixture.nativeElement.querySelector('.adf-alert .adf-dialog-actions::after');
|
||||
|
||||
expect(headerBorder).toBeDefined();
|
||||
expect(actionsBorder).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-alert .adf-dialog-header::after')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-alert .adf-dialog-actions::after')).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -240,17 +236,12 @@ describe('DialogComponent', () => {
|
||||
});
|
||||
|
||||
it('should not have header and actions border', () => {
|
||||
const headerBorder = fixture.nativeElement.querySelector('.adf-alert .adf-dialog-header::after');
|
||||
const actionsBorder = fixture.nativeElement.querySelector('.adf-alert .adf-dialog-actions::after');
|
||||
|
||||
expect(headerBorder).toBeNull();
|
||||
expect(actionsBorder).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-alert .adf-dialog-header::after')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-alert .adf-dialog-actions::after')).toBeNull();
|
||||
});
|
||||
|
||||
it('should not center header content', () => {
|
||||
const header = fixture.nativeElement.querySelector('.adf-centered-header');
|
||||
|
||||
expect(header).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-centered-header')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -264,15 +255,11 @@ describe('DialogComponent', () => {
|
||||
});
|
||||
|
||||
it('should have icon element', () => {
|
||||
const headerIcon = fixture.nativeElement.querySelector('.adf-dialog-header-icon');
|
||||
|
||||
expect(headerIcon).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-dialog-header-icon')).toBeDefined();
|
||||
});
|
||||
|
||||
it('should center header content', () => {
|
||||
const header = fixture.nativeElement.querySelector('.adf-centered-header');
|
||||
|
||||
expect(header).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-centered-header')).toBeDefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -289,7 +276,7 @@ describe('DialogComponent', () => {
|
||||
});
|
||||
|
||||
it('should generate component with injectoted data', () => {
|
||||
const debugElement: DebugElement = fixture.debugElement.query(By.directive(DummyComponent));
|
||||
const debugElement = testingUtils.getByDirective(DummyComponent);
|
||||
const dummyComponentInstance = debugElement.componentInstance;
|
||||
|
||||
expect(dummyComponentInstance).toBeTruthy();
|
||||
|
||||
+9
-10
@@ -17,15 +17,16 @@
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { AppConfigValues, CoreTestingModule, UnsavedChangesDialogComponent, UserPreferencesService } from '@alfresco/adf-core';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { DebugElement } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
|
||||
import { UnsavedChangesDialogData } from './unsaved-changes-dialog.model';
|
||||
import { UnitTestingUtils } from '../../testing/unit-testing-utils';
|
||||
|
||||
describe('UnsavedChangesDialog', () => {
|
||||
let fixture: ComponentFixture<UnsavedChangesDialogComponent>;
|
||||
let userPreferencesService: UserPreferencesService;
|
||||
let savePreferenceCheckbox: DebugElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const setupBeforeEach = (unsavedChangesDialogData?: UnsavedChangesDialogData) => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -40,14 +41,15 @@ describe('UnsavedChangesDialog', () => {
|
||||
|
||||
userPreferencesService = TestBed.inject(UserPreferencesService);
|
||||
fixture = TestBed.createComponent(UnsavedChangesDialogComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
savePreferenceCheckbox = fixture.debugElement.query(By.css('[data-automation-id="adf-unsaved-changes-dialog-content-checkbox"]'));
|
||||
savePreferenceCheckbox = testingUtils.getByDataAutomationId('adf-unsaved-changes-dialog-content-checkbox');
|
||||
};
|
||||
|
||||
const getElements = (): { header: HTMLElement; content: HTMLElement; discardChangesButton: HTMLElement } => {
|
||||
const header = fixture.nativeElement.querySelector('.adf-unsaved-changes-dialog-header');
|
||||
const content = fixture.nativeElement.querySelector('.adf-unsaved-changes-dialog-content');
|
||||
const discardChangesButton = fixture.nativeElement.querySelector('.adf-unsaved-changes-dialog-actions-discard-changes-button');
|
||||
const header = testingUtils.getByCSS('.adf-unsaved-changes-dialog-header').nativeElement;
|
||||
const content = testingUtils.getByCSS('.adf-unsaved-changes-dialog-content').nativeElement;
|
||||
const discardChangesButton = testingUtils.getByCSS('.adf-unsaved-changes-dialog-actions-discard-changes-button').nativeElement;
|
||||
return { header, content, discardChangesButton };
|
||||
};
|
||||
|
||||
@@ -65,16 +67,13 @@ describe('UnsavedChangesDialog', () => {
|
||||
|
||||
it('should have assigned dialog close button with true as result', () => {
|
||||
expect(
|
||||
fixture.debugElement
|
||||
.query(By.css('[data-automation-id="adf-unsaved-changes-dialog-discard-changes-button"]'))
|
||||
.injector.get(MatDialogClose).dialogResult
|
||||
testingUtils.getByDataAutomationId('adf-unsaved-changes-dialog-discard-changes-button').injector.get(MatDialogClose).dialogResult
|
||||
).toBeTrue();
|
||||
});
|
||||
|
||||
it('should have assigned dialog close button with false as result', () => {
|
||||
expect(
|
||||
fixture.debugElement.query(By.css('[data-automation-id="adf-unsaved-changes-dialog-cancel-button"]')).injector.get(MatDialogClose)
|
||||
.dialogResult
|
||||
testingUtils.getByDataAutomationId('adf-unsaved-changes-dialog-cancel-button').injector.get(MatDialogClose).dialogResult
|
||||
).toBeFalse();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
|
||||
import { Component, ViewChildren } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { HighlightTransformService } from '../common/services/highlight-transform.service';
|
||||
import { HighlightDirective } from './highlight.directive';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
/* spellchecker: disable */
|
||||
@Component({
|
||||
@@ -43,6 +43,7 @@ class TestComponent {
|
||||
describe('HighlightDirective', () => {
|
||||
let fixture: ComponentFixture<TestComponent>;
|
||||
let component: TestComponent;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -50,6 +51,7 @@ describe('HighlightDirective', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
@@ -57,7 +59,7 @@ describe('HighlightDirective', () => {
|
||||
component.highlightDirectives.last.highlight('salana-eyong-aysis');
|
||||
fixture.detectChanges();
|
||||
|
||||
const containerElement = fixture.debugElement.query(By.css('#innerDiv21'));
|
||||
const containerElement = testingUtils.getByCSS('#innerDiv21');
|
||||
expect(containerElement).not.toBeNull();
|
||||
expect(containerElement.nativeElement.innerHTML).toBe('Lorem ipsum <span class="adf-highlight">salana-eyong-aysis</span> dolor sit amet');
|
||||
});
|
||||
@@ -66,8 +68,8 @@ describe('HighlightDirective', () => {
|
||||
component.highlightDirectives.first.highlight('salana-eyong-aysis');
|
||||
fixture.detectChanges();
|
||||
|
||||
const containerElement1 = fixture.debugElement.query(By.css('#innerDiv11'));
|
||||
const containerElement2 = fixture.debugElement.query(By.css('#innerDiv14'));
|
||||
const containerElement1 = testingUtils.getByCSS('#innerDiv11');
|
||||
const containerElement2 = testingUtils.getByCSS('#innerDiv14');
|
||||
expect(containerElement1).not.toBeNull();
|
||||
expect(containerElement2).not.toBeNull();
|
||||
expect(containerElement1.nativeElement.innerHTML).toBe(
|
||||
@@ -82,7 +84,7 @@ describe('HighlightDirective', () => {
|
||||
component.highlightDirectives.first.highlight('salana-eyong-aysis');
|
||||
fixture.detectChanges();
|
||||
|
||||
const containerElement1 = fixture.debugElement.query(By.css('#innerDiv12'));
|
||||
const containerElement1 = testingUtils.getByCSS('#innerDiv12');
|
||||
expect(containerElement1).not.toBeNull();
|
||||
expect(containerElement1.nativeElement.innerHTML).toBe('Lorem ipsum salana-eyong-aysis dolor sit amet');
|
||||
});
|
||||
@@ -93,7 +95,7 @@ describe('HighlightDirective', () => {
|
||||
component.highlightDirectives.first.highlight('salana-eyong-aysis');
|
||||
fixture.detectChanges();
|
||||
|
||||
const containerElement = fixture.debugElement.query(By.css('#innerDiv11'));
|
||||
const containerElement = testingUtils.getByCSS('#innerDiv11');
|
||||
expect(containerElement).not.toBeNull();
|
||||
expect(containerElement.nativeElement.innerHTML).not.toContain('Modified text');
|
||||
});
|
||||
|
||||
@@ -22,7 +22,7 @@ import { MatSelect, MatSelectModule } from '@angular/material/select';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatSelectHarness } from '@angular/material/select/testing';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
@Component({
|
||||
template: ` <mat-select adf-infinite-select-scroll (scrollEnd)="load()">
|
||||
@@ -50,6 +50,7 @@ describe('InfiniteSelectScrollDirective', () => {
|
||||
let fixture: ComponentFixture<TestComponent>;
|
||||
let component: TestComponent;
|
||||
let loader: HarnessLoader;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -65,13 +66,12 @@ describe('InfiniteSelectScrollDirective', () => {
|
||||
component.open();
|
||||
fixture.detectChanges();
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
flush();
|
||||
}));
|
||||
|
||||
it('should call an action on scrollEnd event', async () => {
|
||||
const select = await loader.getHarness(MatSelectHarness);
|
||||
const panel = await select.host();
|
||||
|
||||
const panel = await testingUtils.getMatSelectHost();
|
||||
await panel.dispatchEvent('scrollEnd');
|
||||
|
||||
expect(component.options.length).toBe(60);
|
||||
|
||||
@@ -22,7 +22,8 @@ import { of, throwError } from 'rxjs';
|
||||
import { AuthenticationService } from '../auth/services/authentication.service';
|
||||
import { AppConfigService } from '../app-config/app-config.service';
|
||||
import { LogoutDirective } from './logout.directive';
|
||||
import { NoopAuthModule } from '@alfresco/adf-core';
|
||||
import { NoopAuthModule } from '../testing/noop-auth.module';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
describe('LogoutDirective', () => {
|
||||
describe('No input', () => {
|
||||
@@ -41,6 +42,7 @@ describe('LogoutDirective', () => {
|
||||
let router: Router;
|
||||
let authService: AuthenticationService;
|
||||
let appConfig: AppConfigService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -50,6 +52,7 @@ describe('LogoutDirective', () => {
|
||||
authService = TestBed.inject(AuthenticationService);
|
||||
appConfig = TestBed.inject(AppConfigService);
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
appConfig.config['loginRoute'] = undefined;
|
||||
});
|
||||
@@ -58,8 +61,7 @@ describe('LogoutDirective', () => {
|
||||
spyOn(router, 'navigate');
|
||||
spyOn(authService, 'logout').and.returnValue(of(true));
|
||||
|
||||
const button = fixture.nativeElement.querySelector('button');
|
||||
button.click();
|
||||
testingUtils.clickByCSS('button');
|
||||
|
||||
expect(authService.logout).toHaveBeenCalled();
|
||||
expect(router.navigate).toHaveBeenCalledWith(['/login']);
|
||||
@@ -71,8 +73,7 @@ describe('LogoutDirective', () => {
|
||||
appConfig.config['loginRoute'] = 'fake-base-logout';
|
||||
spyOn(authService, 'logout').and.returnValue(of(true));
|
||||
|
||||
const button = fixture.nativeElement.querySelector('button');
|
||||
button.click();
|
||||
testingUtils.clickByCSS('button');
|
||||
|
||||
expect(authService.logout).toHaveBeenCalled();
|
||||
expect(router.navigate).toHaveBeenCalledWith(['fake-base-logout']);
|
||||
@@ -83,8 +84,7 @@ describe('LogoutDirective', () => {
|
||||
spyOn(authService, 'isOauth').and.returnValue(true);
|
||||
spyOn(authService, 'logout').and.returnValue(of(true));
|
||||
|
||||
const button = fixture.nativeElement.querySelector('button');
|
||||
button.click();
|
||||
testingUtils.clickByCSS('button');
|
||||
|
||||
expect(authService.logout).toHaveBeenCalled();
|
||||
expect(router.navigate).not.toHaveBeenCalled();
|
||||
@@ -94,8 +94,7 @@ describe('LogoutDirective', () => {
|
||||
spyOn(router, 'navigate');
|
||||
spyOn(authService, 'logout').and.returnValue(throwError('err'));
|
||||
|
||||
const button = fixture.nativeElement.querySelector('button');
|
||||
button.click();
|
||||
testingUtils.clickByCSS('button');
|
||||
|
||||
expect(authService.logout).toHaveBeenCalled();
|
||||
expect(router.navigate).toHaveBeenCalledWith(['/login']);
|
||||
@@ -117,6 +116,7 @@ describe('LogoutDirective', () => {
|
||||
let fixture: ComponentFixture<TestComponent>;
|
||||
let router: Router;
|
||||
let authService: AuthenticationService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -125,6 +125,7 @@ describe('LogoutDirective', () => {
|
||||
router = TestBed.inject(Router);
|
||||
authService = TestBed.inject(AuthenticationService);
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
@@ -132,8 +133,7 @@ describe('LogoutDirective', () => {
|
||||
spyOn(router, 'navigate');
|
||||
spyOn(authService, 'logout').and.returnValue(of(true));
|
||||
|
||||
const button = fixture.nativeElement.querySelector('button');
|
||||
button.click();
|
||||
testingUtils.clickByCSS('button');
|
||||
|
||||
expect(authService.logout).toHaveBeenCalled();
|
||||
expect(router.navigate).toHaveBeenCalledWith(['/myCustomUri']);
|
||||
@@ -155,6 +155,7 @@ describe('LogoutDirective', () => {
|
||||
let fixture: ComponentFixture<TestComponent>;
|
||||
let router: Router;
|
||||
let authService: AuthenticationService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -163,14 +164,15 @@ describe('LogoutDirective', () => {
|
||||
router = TestBed.inject(Router);
|
||||
authService = TestBed.inject(AuthenticationService);
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should not redirect if enableRedirect is false', () => {
|
||||
spyOn(router, 'navigate');
|
||||
spyOn(authService, 'logout').and.returnValue(of(true));
|
||||
const button = fixture.nativeElement.querySelector('button');
|
||||
button.click();
|
||||
|
||||
testingUtils.clickByCSS('button');
|
||||
|
||||
expect(authService.logout).toHaveBeenCalled();
|
||||
expect(router.navigate).not.toHaveBeenCalled();
|
||||
|
||||
@@ -15,10 +15,12 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Chip, CoreTestingModule, DynamicChipListComponent } from '@alfresco/adf-core';
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { DebugElement, SimpleChange } from '@angular/core';
|
||||
import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { Chip } from './chip';
|
||||
import { DynamicChipListComponent } from './dynamic-chip-list.component';
|
||||
import { CoreTestingModule } from '../testing/core.testing.module';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
describe('DynamicChipListComponent', () => {
|
||||
let chips: Chip[] = [
|
||||
@@ -41,7 +43,7 @@ describe('DynamicChipListComponent', () => {
|
||||
];
|
||||
let component: DynamicChipListComponent;
|
||||
let fixture: ComponentFixture<DynamicChipListComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
let resizeCallback: ResizeObserverCallback;
|
||||
|
||||
/**
|
||||
@@ -50,7 +52,7 @@ describe('DynamicChipListComponent', () => {
|
||||
* @returns native element
|
||||
*/
|
||||
function findViewMoreButton(): HTMLButtonElement {
|
||||
return element.querySelector('[data-automation-id="adf-dynamic-chip-list-view-more-button"]');
|
||||
return testingUtils.getByDataAutomationId('adf-dynamic-chip-list-view-more-button').nativeElement;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -58,8 +60,8 @@ describe('DynamicChipListComponent', () => {
|
||||
*
|
||||
* @returns native element list
|
||||
*/
|
||||
function findChips(): NodeListOf<Element> {
|
||||
return element.querySelectorAll('.adf-dynamic-chip-list-chip');
|
||||
function findChips(): DebugElement[] {
|
||||
return testingUtils.getAllByCSS('.adf-dynamic-chip-list-chip');
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -68,9 +70,9 @@ describe('DynamicChipListComponent', () => {
|
||||
});
|
||||
const resizeObserverSpy = spyOn(window, 'ResizeObserver').and.callThrough();
|
||||
fixture = TestBed.createComponent(DynamicChipListComponent);
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
component.chips = chips;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
resizeCallback = resizeObserverSpy.calls.mostRecent().args[0];
|
||||
});
|
||||
@@ -83,13 +85,12 @@ describe('DynamicChipListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(element.querySelector('#adf-dynamic-chip-list-chip-name-0')?.innerHTML).toBe('test1');
|
||||
expect(element.querySelector('#adf-dynamic-chip-list-chip-name-1')?.innerHTML).toBe('test2');
|
||||
expect(element.querySelector('#adf-dynamic-chip-list-chip-name-2')?.innerHTML).toBe('test3');
|
||||
|
||||
expect(element.querySelector('#adf-dynamic-chip-list-delete-test1')).not.toBe(null);
|
||||
expect(element.querySelector('#adf-dynamic-chip-list-delete-test2')).not.toBe(null);
|
||||
expect(element.querySelector('#adf-dynamic-chip-list-delete-test3')).not.toBe(null);
|
||||
expect(testingUtils.getInnerTextByCSS('#adf-dynamic-chip-list-chip-name-0')).toBe('test1');
|
||||
expect(testingUtils.getInnerTextByCSS('#adf-dynamic-chip-list-chip-name-1')).toBe('test2');
|
||||
expect(testingUtils.getInnerTextByCSS('#adf-dynamic-chip-list-chip-name-2')).toBe('test3');
|
||||
expect(testingUtils.getByCSS('#adf-dynamic-chip-list-delete-test1')).not.toBe(null);
|
||||
expect(testingUtils.getByCSS('#adf-dynamic-chip-list-delete-test2')).not.toBe(null);
|
||||
expect(testingUtils.getByCSS('#adf-dynamic-chip-list-delete-test3')).not.toBe(null);
|
||||
});
|
||||
|
||||
it('should emit removedChip event when clicked on delete icon', async () => {
|
||||
@@ -101,8 +102,7 @@ describe('DynamicChipListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const deleteButton: any = element.querySelector('#adf-dynamic-chip-list-delete-test1');
|
||||
deleteButton.click();
|
||||
testingUtils.clickByCSS('#adf-dynamic-chip-list-delete-test1');
|
||||
|
||||
expect(component.removedChip.emit).toHaveBeenCalledWith('0ee933fa-57fc-4587-8a77-b787e814f1d2');
|
||||
});
|
||||
@@ -116,8 +116,7 @@ describe('DynamicChipListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const deleteButton: any = element.querySelector('#adf-dynamic-chip-list-delete-test1');
|
||||
expect(deleteButton).toBeNull();
|
||||
expect(testingUtils.getByCSS('#adf-dynamic-chip-list-delete-test1')).toBeNull();
|
||||
});
|
||||
|
||||
it('should show the delete button if showDelete is true', async () => {
|
||||
@@ -129,8 +128,7 @@ describe('DynamicChipListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const deleteButton: any = element.querySelector('#adf-dynamic-chip-list-delete-test1');
|
||||
expect(deleteButton).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#adf-dynamic-chip-list-delete-test1')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should round up chips if roundUpChips is true', async () => {
|
||||
@@ -142,7 +140,7 @@ describe('DynamicChipListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const chip = fixture.debugElement.query(By.css('.adf-dynamic-chip-list-chip'));
|
||||
const chip = testingUtils.getByCSS('.adf-dynamic-chip-list-chip');
|
||||
expect(getComputedStyle(chip.nativeElement).borderRadius).toBe('20px');
|
||||
});
|
||||
|
||||
@@ -155,7 +153,7 @@ describe('DynamicChipListComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const chip = fixture.debugElement.query(By.css('.adf-dynamic-chip-list-delete-icon'));
|
||||
const chip = testingUtils.getByCSS('.adf-dynamic-chip-list-delete-icon');
|
||||
expect(Object.keys(chip.attributes)).toContain('disabled');
|
||||
});
|
||||
|
||||
@@ -192,7 +190,7 @@ describe('DynamicChipListComponent', () => {
|
||||
beforeEach(() => {
|
||||
component.limitChipsDisplayed = true;
|
||||
component.ngOnInit();
|
||||
element.style.maxWidth = '309px';
|
||||
fixture.nativeElement.style.maxWidth = '309px';
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -213,7 +211,7 @@ describe('DynamicChipListComponent', () => {
|
||||
|
||||
it('should not render view more button when limiting is enabled and all chips fits into container', fakeAsync(() => {
|
||||
renderChips();
|
||||
element.style.maxWidth = '800px';
|
||||
fixture.nativeElement.style.maxWidth = '800px';
|
||||
component.ngOnChanges({
|
||||
chips: new SimpleChange(undefined, component.chips, true)
|
||||
});
|
||||
@@ -288,7 +286,7 @@ describe('DynamicChipListComponent', () => {
|
||||
});
|
||||
tick();
|
||||
fixture.detectChanges();
|
||||
element.style.maxWidth = '800px';
|
||||
fixture.nativeElement.style.maxWidth = '800px';
|
||||
|
||||
resizeCallback([], null);
|
||||
fixture.detectChanges();
|
||||
@@ -299,14 +297,14 @@ describe('DynamicChipListComponent', () => {
|
||||
|
||||
it('should render view more button when there is not enough space after resizing', fakeAsync(() => {
|
||||
renderChips();
|
||||
element.style.maxWidth = '800px';
|
||||
fixture.nativeElement.style.maxWidth = '800px';
|
||||
|
||||
component.ngOnChanges({
|
||||
chips: new SimpleChange(undefined, component.chips, true)
|
||||
});
|
||||
tick();
|
||||
fixture.detectChanges();
|
||||
element.style.maxWidth = '100px';
|
||||
fixture.nativeElement.style.maxWidth = '100px';
|
||||
|
||||
resizeCallback([], null);
|
||||
fixture.detectChanges();
|
||||
@@ -324,7 +322,7 @@ describe('DynamicChipListComponent', () => {
|
||||
const viewMoreButton = findViewMoreButton();
|
||||
viewMoreButton.click();
|
||||
fixture.detectChanges();
|
||||
element.style.maxWidth = '309px';
|
||||
fixture.nativeElement.style.maxWidth = '309px';
|
||||
|
||||
resizeCallback([], null);
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { CoreTestingModule } from '../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../testing';
|
||||
import { FormRenderingService } from '../../services/form-rendering.service';
|
||||
import { CheckboxWidgetComponent, FormFieldModel, FormFieldTypes, FormModel, TextWidgetComponent } from '../widgets';
|
||||
import { FormFieldComponent } from './form-field.component';
|
||||
@@ -25,6 +25,7 @@ describe('FormFieldComponent', () => {
|
||||
let fixture: ComponentFixture<FormFieldComponent>;
|
||||
let component: FormFieldComponent;
|
||||
let form: FormModel;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
let formRenderingService: FormRenderingService;
|
||||
|
||||
@@ -34,6 +35,7 @@ describe('FormFieldComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(FormFieldComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
formRenderingService = fixture.debugElement.injector.get(FormRenderingService);
|
||||
form = new FormModel();
|
||||
});
|
||||
@@ -117,9 +119,9 @@ describe('FormFieldComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const debugElement = fixture.nativeElement.querySelector('#field-FAKE-TXT-WIDGET-container').style;
|
||||
expect(debugElement.visibility).toEqual('hidden');
|
||||
expect(debugElement.display).toEqual('none');
|
||||
const styles = testingUtils.getByCSS('#field-FAKE-TXT-WIDGET-container').styles;
|
||||
expect(styles.visibility).toEqual('hidden');
|
||||
expect(styles.display).toEqual('none');
|
||||
});
|
||||
|
||||
it('should show the field when it is visible', () => {
|
||||
@@ -132,8 +134,9 @@ describe('FormFieldComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('#field-FAKE-TXT-WIDGET-container').style.visibility).toEqual('visible');
|
||||
expect(fixture.nativeElement.querySelector('#field-FAKE-TXT-WIDGET-container').style.display).toEqual('block');
|
||||
const styles = testingUtils.getByCSS('#field-FAKE-TXT-WIDGET-container').styles;
|
||||
expect(styles.visibility).toEqual('visible');
|
||||
expect(styles.display).toEqual('block');
|
||||
});
|
||||
|
||||
it('should hide a visible element', () => {
|
||||
@@ -144,12 +147,14 @@ describe('FormFieldComponent', () => {
|
||||
|
||||
component.field = field;
|
||||
fixture.detectChanges();
|
||||
expect(fixture.nativeElement.querySelector('#field-FAKE-TXT-WIDGET-container').style.visibility).toEqual('visible');
|
||||
expect(fixture.nativeElement.querySelector('#field-FAKE-TXT-WIDGET-container').style.display).toEqual('block');
|
||||
let styles = testingUtils.getByCSS('#field-FAKE-TXT-WIDGET-container').styles;
|
||||
expect(styles.visibility).toEqual('visible');
|
||||
expect(styles.display).toEqual('block');
|
||||
component.field.isVisible = false;
|
||||
fixture.detectChanges();
|
||||
expect(fixture.nativeElement.querySelector('#field-FAKE-TXT-WIDGET-container').style.visibility).toEqual('hidden');
|
||||
expect(fixture.nativeElement.querySelector('#field-FAKE-TXT-WIDGET-container').style.display).toEqual('none');
|
||||
styles = testingUtils.getByCSS('#field-FAKE-TXT-WIDGET-container').styles;
|
||||
expect(styles.visibility).toEqual('hidden');
|
||||
expect(styles.display).toEqual('none');
|
||||
});
|
||||
|
||||
it('[C213878] - Should fields be correctly rendered when filled with process variables', () => {
|
||||
@@ -199,7 +204,7 @@ describe('FormFieldComponent', () => {
|
||||
|
||||
component.field = field;
|
||||
fixture.detectChanges();
|
||||
const hyperlink: HTMLLinkElement = fixture.nativeElement.querySelector('#field-label2-container hyperlink-widget a');
|
||||
const hyperlink: HTMLLinkElement = testingUtils.getByCSS('#field-label2-container hyperlink-widget a').nativeElement;
|
||||
expect(hyperlink).not.toBeNull();
|
||||
expect(hyperlink.href).toBe('http://testtest/');
|
||||
expect(hyperlink.textContent).toBe('testtest');
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { CoreTestingModule } from '../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../testing';
|
||||
import { FormRulesManager } from '../models/form-rules.model';
|
||||
import { FormRenderingService } from '../services/form-rendering.service';
|
||||
import { FormService } from '../services/form.service';
|
||||
@@ -46,34 +46,35 @@ import {
|
||||
} from './mock/form-renderer.component.mock';
|
||||
import { TextWidgetComponent } from './widgets';
|
||||
|
||||
const typeIntoInput = (targetInput: HTMLInputElement, message: string) => {
|
||||
expect(targetInput).toBeTruthy('Expected input to set to be valid and not null');
|
||||
targetInput.value = message;
|
||||
targetInput.dispatchEvent(new Event('input'));
|
||||
const typeIntoInput = (testingUtils: UnitTestingUtils, selector: string, message: string) => {
|
||||
testingUtils.fillInputByCSS(selector, message);
|
||||
};
|
||||
|
||||
const expectElementToBeHidden = (targetElement: HTMLElement): void => {
|
||||
const expectElementToBeHidden = (testingUtils: UnitTestingUtils, selector: string): void => {
|
||||
const targetElement = testingUtils.getByCSS(selector).nativeElement;
|
||||
expect(targetElement).toBeTruthy();
|
||||
expect(targetElement.style.visibility).toBe('hidden', `${targetElement.id} should be hidden but it is not`);
|
||||
};
|
||||
|
||||
const expectElementToBeVisible = (targetElement: HTMLElement): void => {
|
||||
const expectElementToBeVisible = (testingUtils: UnitTestingUtils, selector: string): void => {
|
||||
const targetElement = testingUtils.getByCSS(selector).nativeElement;
|
||||
expect(targetElement).toBeTruthy();
|
||||
expect(targetElement.style.visibility).not.toBe('hidden', `${targetElement.id} should be visibile but it is not`);
|
||||
};
|
||||
|
||||
const expectInputElementValueIs = (targetElement: HTMLInputElement, value: string): void => {
|
||||
const expectInputElementValueIs = (testingUtils: UnitTestingUtils, selector: string, value: string): void => {
|
||||
const targetElement = testingUtils.getByCSS(selector).nativeElement;
|
||||
expect(targetElement).toBeTruthy();
|
||||
expect(targetElement.value).toBe(value, `invalid value for ${targetElement.name}`);
|
||||
};
|
||||
|
||||
const expectElementToBeInvalid = (fieldId: string, fixture: ComponentFixture<FormRendererComponent<any>>): void => {
|
||||
const invalidElementContainer = fixture.nativeElement.querySelector(`#field-${fieldId}-container .adf-invalid`);
|
||||
const expectElementToBeInvalid = (testingUtils: UnitTestingUtils, fieldId: string): void => {
|
||||
const invalidElementContainer = testingUtils.getByCSS(`#field-${fieldId}-container .adf-invalid`);
|
||||
expect(invalidElementContainer).toBeTruthy();
|
||||
};
|
||||
|
||||
const expectElementToBeValid = (fieldId: string, fixture: ComponentFixture<FormRendererComponent<any>>): void => {
|
||||
const invalidElementContainer = fixture.nativeElement.querySelector(`#field-${fieldId}-container .adf-invalid`);
|
||||
const expectElementToBeValid = (testingUtils: UnitTestingUtils, fieldId: string): void => {
|
||||
const invalidElementContainer = testingUtils.getByCSS(`#field-${fieldId}-container .adf-invalid`);
|
||||
expect(invalidElementContainer).toBeFalsy();
|
||||
};
|
||||
|
||||
@@ -83,6 +84,7 @@ describe('Form Renderer Component', () => {
|
||||
let formService: FormService;
|
||||
let formRenderingService: FormRenderingService;
|
||||
let rulesManager: FormRulesManager<any>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -90,6 +92,7 @@ describe('Form Renderer Component', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(FormRendererComponent);
|
||||
formRendererComponent = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
formService = TestBed.inject(FormService);
|
||||
formRenderingService = TestBed.inject(FormRenderingService);
|
||||
rulesManager = fixture.debugElement.injector.get(FormRulesManager);
|
||||
@@ -105,18 +108,13 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const inputDateTestOne = fixture.nativeElement.querySelector('#Date0hwq20') as HTMLInputElement;
|
||||
let displayTextElementContainer: HTMLInputElement = fixture.nativeElement.querySelector('#field-Text0pqd1u-container');
|
||||
expectElementToBeHidden(displayTextElementContainer);
|
||||
|
||||
inputDateTestOne.value = '2019-11-19';
|
||||
inputDateTestOne.dispatchEvent(new Event('input'));
|
||||
expectElementToBeHidden(testingUtils, '#field-Text0pqd1u-container');
|
||||
testingUtils.fillInputByCSS('#Date0hwq20', '2019-11-19');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
displayTextElementContainer = fixture.nativeElement.querySelector('#field-Text0pqd1u-container');
|
||||
expectElementToBeVisible(displayTextElementContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Text0pqd1u-container');
|
||||
});
|
||||
|
||||
it('Should not be able to see a widget when the visibility condition refers to another fields with specific date', async () => {
|
||||
@@ -124,19 +122,14 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const inputDateTestOne = fixture.nativeElement.querySelector('#Date0hwq20') as HTMLInputElement;
|
||||
expectElementToBeVisible(testingUtils, '#field-Text0uyqd3-container');
|
||||
|
||||
let displayTextElementContainer: HTMLDivElement = fixture.nativeElement.querySelector('#field-Text0uyqd3-container');
|
||||
expectElementToBeVisible(displayTextElementContainer);
|
||||
|
||||
inputDateTestOne.value = '2019-11-19';
|
||||
inputDateTestOne.dispatchEvent(new Event('input'));
|
||||
testingUtils.fillInputByCSS('#Date0hwq20', '2019-11-19');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
displayTextElementContainer = fixture.nativeElement.querySelector('#field-Text0uyqd3-container');
|
||||
expectElementToBeHidden(displayTextElementContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-Text0uyqd3-container');
|
||||
});
|
||||
|
||||
it('[C310336] - Should be able to set visibility conditions for Date widget', async () => {
|
||||
@@ -144,17 +137,14 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const textInputElement = fixture.nativeElement.querySelector('#Text5asd0a');
|
||||
const textInputContainer = fixture.nativeElement.querySelector('#field-Text5asd0a-container');
|
||||
let dateContainer = fixture.nativeElement.querySelector('#field-Date8wbe3d-container');
|
||||
expectElementToBeVisible(textInputContainer);
|
||||
expectElementToBeHidden(dateContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Text5asd0a-container');
|
||||
expectElementToBeHidden(testingUtils, '#field-Date8wbe3d-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'Date');
|
||||
typeIntoInput(testingUtils, '#Text5asd0a', 'Date');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
dateContainer = fixture.nativeElement.querySelector('#field-Date8wbe3d-container');
|
||||
expectElementToBeVisible(dateContainer);
|
||||
|
||||
expectElementToBeVisible(testingUtils, '#field-Date8wbe3d-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -164,117 +154,95 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
let displayValueElementContainer: HTMLDivElement = fixture.nativeElement.querySelector('#field-Displayvalue0g6092-container');
|
||||
const formInputText: HTMLInputElement = fixture.nativeElement.querySelector('#Text0bq3ar');
|
||||
expectElementToBeHidden(displayValueElementContainer);
|
||||
typeIntoInput(formInputText, 'DisplayValue');
|
||||
expectElementToBeHidden(testingUtils, '#field-Displayvalue0g6092-container');
|
||||
typeIntoInput(testingUtils, '#Text0bq3ar', 'DisplayValue');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
displayValueElementContainer = fixture.nativeElement.querySelector('#field-Displayvalue0g6092-container');
|
||||
expectElementToBeVisible(displayValueElementContainer);
|
||||
const displayValueElement: HTMLInputElement = fixture.nativeElement.querySelector('#Displayvalue0g6092');
|
||||
expectInputElementValueIs(displayValueElement, 'No field selected');
|
||||
expectElementToBeVisible(testingUtils, '#field-Displayvalue0g6092-container');
|
||||
expectInputElementValueIs(testingUtils, '#Displayvalue0g6092', 'No field selected');
|
||||
});
|
||||
|
||||
it('[C309863] - Should be able to see Display value widget when visibility condition refers to a form variable and a field', async () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(formDisplayValueForm.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
let displayValueElementContainer: HTMLDivElement = fixture.nativeElement.querySelector('#field-DisplayValueOne-container');
|
||||
expectElementToBeHidden(displayValueElementContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-DisplayValueOne-container');
|
||||
|
||||
const formInputText: HTMLInputElement = fixture.nativeElement.querySelector('#Text0howrc');
|
||||
typeIntoInput(formInputText, 'aaa');
|
||||
typeIntoInput(testingUtils, '#Text0howrc', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
displayValueElementContainer = fixture.nativeElement.querySelector('#field-DisplayValueOne-container');
|
||||
expectElementToBeVisible(displayValueElementContainer);
|
||||
const displayValueElement: HTMLInputElement = fixture.nativeElement.querySelector('#DisplayValueOne');
|
||||
expectInputElementValueIs(displayValueElement, 'No field selected');
|
||||
expectElementToBeVisible(testingUtils, '#field-DisplayValueOne-container');
|
||||
expectInputElementValueIs(testingUtils, '#DisplayValueOne', 'No field selected');
|
||||
|
||||
typeIntoInput(formInputText, 'aaab');
|
||||
typeIntoInput(testingUtils, '#Text0howrc', 'aaab');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayValueElementContainer = fixture.nativeElement.querySelector('#field-DisplayValueOne-container');
|
||||
expectElementToBeHidden(displayValueElementContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-DisplayValueOne-container');
|
||||
});
|
||||
|
||||
it('[C309864] - Should be able to see Display value widget when visibility condition refers to another field and form variable', async () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(formDisplayValueForm.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
let displayValueElementContainer: HTMLDivElement = fixture.nativeElement.querySelector('#field-DisplayValueVariableField-container');
|
||||
expectElementToBeHidden(displayValueElementContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-DisplayValueVariableField-container');
|
||||
|
||||
const formInputText: HTMLInputElement = fixture.nativeElement.querySelector('#TextOne');
|
||||
typeIntoInput(formInputText, 'aaa');
|
||||
typeIntoInput(testingUtils, '#TextOne', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
displayValueElementContainer = fixture.nativeElement.querySelector('#field-DisplayValueVariableField-container');
|
||||
expectElementToBeVisible(displayValueElementContainer);
|
||||
const displayValueElement: HTMLInputElement = fixture.nativeElement.querySelector('#DisplayValueVariableField');
|
||||
expectInputElementValueIs(displayValueElement, 'No field selected');
|
||||
expectElementToBeVisible(testingUtils, '#field-DisplayValueVariableField-container');
|
||||
expectInputElementValueIs(testingUtils, '#DisplayValueVariableField', 'No field selected');
|
||||
|
||||
typeIntoInput(formInputText, 'aaab');
|
||||
typeIntoInput(testingUtils, '#TextOne', 'aaab');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayValueElementContainer = fixture.nativeElement.querySelector('#field-DisplayValueVariableField-container');
|
||||
expectElementToBeHidden(displayValueElementContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-DisplayValueVariableField-container');
|
||||
});
|
||||
|
||||
it('[C309865] - Should be able to see Display value widget when has multiple visibility conditions and next condition operators', async () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(formDisplayValueCombinedVisibility.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const textInputElement: HTMLInputElement = fixture.nativeElement.querySelector('#Text0bq3ar');
|
||||
const textTwoInputElement: HTMLInputElement = fixture.nativeElement.querySelector('#TextTwo');
|
||||
let displayValueHiddenContainer: HTMLDivElement = fixture.nativeElement.querySelector('#field-Displayvalue0g6092-container');
|
||||
expectElementToBeVisible(textInputElement);
|
||||
expectElementToBeVisible(textTwoInputElement);
|
||||
expectElementToBeHidden(displayValueHiddenContainer);
|
||||
expectElementToBeVisible(testingUtils, '#Text0bq3ar');
|
||||
expectElementToBeVisible(testingUtils, '#TextTwo');
|
||||
expectElementToBeHidden(testingUtils, '#field-Displayvalue0g6092-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'aaa');
|
||||
typeIntoInput(testingUtils, '#Text0bq3ar', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayValueHiddenContainer = fixture.nativeElement.querySelector('#field-Displayvalue0g6092-container');
|
||||
expectInputElementValueIs(textInputElement, 'aaa');
|
||||
expectInputElementValueIs(textTwoInputElement, '');
|
||||
expectElementToBeVisible(displayValueHiddenContainer);
|
||||
typeIntoInput(testingUtils, '#Text0bq3ar', 'aaa');
|
||||
expectInputElementValueIs(testingUtils, '#TextTwo', '');
|
||||
expectElementToBeVisible(testingUtils, '#field-Displayvalue0g6092-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'bbb');
|
||||
typeIntoInput(testingUtils, '#Text0bq3ar', 'bbb');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayValueHiddenContainer = fixture.nativeElement.querySelector('#field-Displayvalue0g6092-container');
|
||||
expectInputElementValueIs(textInputElement, 'bbb');
|
||||
expectInputElementValueIs(textTwoInputElement, '');
|
||||
expectElementToBeHidden(displayValueHiddenContainer);
|
||||
typeIntoInput(testingUtils, '#Text0bq3ar', 'bbb');
|
||||
expectInputElementValueIs(testingUtils, '#TextTwo', '');
|
||||
expectElementToBeHidden(testingUtils, '#field-Displayvalue0g6092-container');
|
||||
|
||||
typeIntoInput(textTwoInputElement, 'aaa');
|
||||
typeIntoInput(testingUtils, '#TextTwo', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayValueHiddenContainer = fixture.nativeElement.querySelector('#field-Displayvalue0g6092-container');
|
||||
expectInputElementValueIs(textInputElement, 'bbb');
|
||||
expectInputElementValueIs(textTwoInputElement, 'aaa');
|
||||
expectElementToBeHidden(displayValueHiddenContainer);
|
||||
typeIntoInput(testingUtils, '#Text0bq3ar', 'bbb');
|
||||
expectInputElementValueIs(testingUtils, '#TextTwo', 'aaa');
|
||||
expectElementToBeHidden(testingUtils, '#field-Displayvalue0g6092-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'aaa');
|
||||
typeIntoInput(testingUtils, '#Text0bq3ar', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayValueHiddenContainer = fixture.nativeElement.querySelector('#field-Displayvalue0g6092-container');
|
||||
expectInputElementValueIs(textInputElement, 'aaa');
|
||||
expectInputElementValueIs(textTwoInputElement, 'aaa');
|
||||
expectElementToBeHidden(displayValueHiddenContainer);
|
||||
typeIntoInput(testingUtils, '#Text0bq3ar', 'aaa');
|
||||
expectInputElementValueIs(testingUtils, '#TextTwo', 'aaa');
|
||||
expectElementToBeHidden(testingUtils, '#field-Displayvalue0g6092-container');
|
||||
|
||||
typeIntoInput(textTwoInputElement, 'bbb');
|
||||
typeIntoInput(testingUtils, '#TextTwo', 'bbb');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayValueHiddenContainer = fixture.nativeElement.querySelector('#field-Displayvalue0g6092-container');
|
||||
expectInputElementValueIs(textInputElement, 'aaa');
|
||||
expectInputElementValueIs(textTwoInputElement, 'bbb');
|
||||
expectElementToBeVisible(displayValueHiddenContainer);
|
||||
typeIntoInput(testingUtils, '#Text0bq3ar', 'aaa');
|
||||
expectInputElementValueIs(testingUtils, '#TextTwo', 'bbb');
|
||||
expectElementToBeVisible(testingUtils, '#field-Displayvalue0g6092-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -284,30 +252,24 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
let inputNumberOne = fixture.nativeElement.querySelector('#Number1');
|
||||
let inputNumber2Container = fixture.nativeElement.querySelector('#field-Number2-container');
|
||||
expectElementToBeVisible(inputNumberOne);
|
||||
expectElementToBeHidden(inputNumber2Container);
|
||||
expectElementToBeVisible(testingUtils, '#Number1');
|
||||
expectElementToBeHidden(testingUtils, '#field-Number2-container');
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(true, 'Form should be valid by default');
|
||||
|
||||
typeIntoInput(inputNumberOne, '5');
|
||||
typeIntoInput(testingUtils, '#Number1', '5');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
inputNumberOne = fixture.nativeElement.querySelector('#Number1');
|
||||
inputNumber2Container = fixture.nativeElement.querySelector('#field-Number2-container');
|
||||
expectElementToBeVisible(inputNumberOne);
|
||||
expectElementToBeVisible(inputNumber2Container);
|
||||
expectElementToBeVisible(testingUtils, '#Number1');
|
||||
expectElementToBeVisible(testingUtils, '#field-Number2-container');
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(true, 'Form should be valid with a valid value');
|
||||
|
||||
typeIntoInput(inputNumberOne, 'az');
|
||||
typeIntoInput(testingUtils, '#Number1', 'az');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
inputNumberOne = fixture.nativeElement.querySelector('#Number1');
|
||||
inputNumber2Container = fixture.nativeElement.querySelector('#field-Number2-container');
|
||||
expectElementToBeVisible(inputNumberOne);
|
||||
expectElementToBeHidden(inputNumber2Container);
|
||||
expectElementToBeVisible(testingUtils, '#Number1');
|
||||
expectElementToBeHidden(testingUtils, '#field-Number2-container');
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(false, 'Form should be invalid with an invalid value');
|
||||
});
|
||||
|
||||
@@ -316,22 +278,18 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const textInput: HTMLInputElement = fixture.nativeElement.querySelector('#Text');
|
||||
let numberFieldContainer: HTMLDivElement = fixture.nativeElement.querySelector('#field-NumberFieldValue-container');
|
||||
expectElementToBeVisible(textInput);
|
||||
expectElementToBeHidden(numberFieldContainer);
|
||||
expectElementToBeVisible(testingUtils, '#Text');
|
||||
expectElementToBeHidden(testingUtils, '#field-NumberFieldValue-container');
|
||||
|
||||
typeIntoInput(textInput, 'aaa');
|
||||
typeIntoInput(testingUtils, '#Text', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldContainer = fixture.nativeElement.querySelector('#field-NumberFieldValue-container');
|
||||
expectElementToBeVisible(numberFieldContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-NumberFieldValue-container');
|
||||
|
||||
typeIntoInput(textInput, 'bbb');
|
||||
typeIntoInput(testingUtils, '#Text', 'bbb');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldContainer = fixture.nativeElement.querySelector('#field-NumberFieldValue-container');
|
||||
expectElementToBeHidden(numberFieldContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-NumberFieldValue-container');
|
||||
});
|
||||
|
||||
it('[C315170] - Should be able to complete a task with a form with required number widgets', async () => {
|
||||
@@ -339,23 +297,19 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const inputElementNumber: HTMLInputElement = fixture.nativeElement.querySelector('#Number1');
|
||||
let numberContainerElement: HTMLDivElement = fixture.nativeElement.querySelector('#field-Number2-container');
|
||||
expectElementToBeHidden(numberContainerElement);
|
||||
expectElementToBeVisible(inputElementNumber);
|
||||
expectElementToBeHidden(testingUtils, '#field-Number2-container');
|
||||
expectElementToBeVisible(testingUtils, '#Number1');
|
||||
|
||||
typeIntoInput(inputElementNumber, '5');
|
||||
typeIntoInput(testingUtils, '#Number1', '5');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberContainerElement = fixture.nativeElement.querySelector('#field-Number2-container');
|
||||
expectElementToBeVisible(numberContainerElement);
|
||||
expectElementToBeVisible(testingUtils, '#field-Number2-container');
|
||||
|
||||
typeIntoInput(inputElementNumber, '123');
|
||||
typeIntoInput(testingUtils, '#Number1', '123');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberContainerElement = fixture.nativeElement.querySelector('#field-Number2-container');
|
||||
expectElementToBeHidden(numberContainerElement);
|
||||
const errorWidgetText: HTMLDivElement = fixture.nativeElement.querySelector('#field-Number1-container error-widget .adf-error-text');
|
||||
expectElementToBeHidden(testingUtils, '#field-Number2-container');
|
||||
const errorWidgetText = testingUtils.getByCSS('#field-Number1-container error-widget .adf-error-text').nativeElement;
|
||||
expect(errorWidgetText.textContent).toBe(`FORM.FIELD.VALIDATOR.NOT_GREATER_THAN`);
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(false, 'Form should not be valid without mandatory field');
|
||||
});
|
||||
@@ -364,19 +318,17 @@ describe('Form Renderer Component', () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(formNumberTextJson.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const numberRequired: HTMLInputElement = fixture.nativeElement.querySelector('#NumberReq');
|
||||
const numberNotRequired: HTMLInputElement = fixture.nativeElement.querySelector('#NumberNotReq');
|
||||
expectElementToBeVisible(numberRequired);
|
||||
expectElementToBeVisible(numberNotRequired);
|
||||
expectElementToBeVisible(testingUtils, '#NumberReq');
|
||||
expectElementToBeVisible(testingUtils, '#NumberNotReq');
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(false, 'Form should be invalid with an empty required value');
|
||||
|
||||
typeIntoInput(numberNotRequired, '5');
|
||||
typeIntoInput(testingUtils, '#NumberNotReq', '5');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(false, 'Form should be invalid with an empty required value');
|
||||
|
||||
typeIntoInput(numberRequired, '5');
|
||||
typeIntoInput(numberNotRequired, '');
|
||||
typeIntoInput(testingUtils, '#NumberReq', '5');
|
||||
typeIntoInput(testingUtils, '#NumberNotReq', '');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(true, 'Form should be valid when required field are filled');
|
||||
@@ -386,18 +338,17 @@ describe('Form Renderer Component', () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(colspanForm.formRepresentation.formDefinition, null, false, true);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const formSizedElement = fixture.nativeElement.querySelector('#field-2bc275fb-e113-4d7d-885f-6e74a7332d40-container div.adf-grid-list');
|
||||
expectElementToBeVisible(formSizedElement);
|
||||
const sectionGridElement: HTMLElement[] = fixture.nativeElement.querySelectorAll(
|
||||
'#field-2bc275fb-e113-4d7d-885f-6e74a7332d40-container div .adf-grid-list-item'
|
||||
);
|
||||
expectElementToBeVisible(testingUtils, '#field-2bc275fb-e113-4d7d-885f-6e74a7332d40-container div.adf-grid-list');
|
||||
const sectionGridElement: HTMLElement[] = testingUtils
|
||||
.getAllByCSS('#field-2bc275fb-e113-4d7d-885f-6e74a7332d40-container div .adf-grid-list-item')
|
||||
.map((element) => element.nativeElement);
|
||||
sectionGridElement.forEach((element) => {
|
||||
expect(element.style['grid-area']).toBe('auto / auto / span 1 / span 1', 'Elemens is wrong sized for this section');
|
||||
});
|
||||
|
||||
const fullWidthElement = fixture.nativeElement.querySelector(
|
||||
const fullWidthElement = testingUtils.getByCSS(
|
||||
'#field-d52ada4e-cbdc-4f0c-a480-5b85fa00e4f8-container div.adf-grid-list .adf-grid-list-item'
|
||||
);
|
||||
).nativeElement;
|
||||
expect(fullWidthElement.style['grid-area']).toBe('auto / auto / span 1 / span 2');
|
||||
});
|
||||
|
||||
@@ -405,19 +356,16 @@ describe('Form Renderer Component', () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(colspanForm.formRepresentation.formDefinition, null, false, false);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const formSizedElement = fixture.nativeElement.querySelector(
|
||||
'#field-2bc275fb-e113-4d7d-885f-6e74a7332d40-container section.adf-grid-list-column-view'
|
||||
);
|
||||
expectElementToBeVisible(formSizedElement);
|
||||
const sectionGridElement: HTMLElement[] = fixture.nativeElement.querySelectorAll(
|
||||
'#field-2bc275fb-e113-4d7d-885f-6e74a7332d40-container section .adf-grid-list-single-column'
|
||||
);
|
||||
expectElementToBeVisible(testingUtils, '#field-2bc275fb-e113-4d7d-885f-6e74a7332d40-container section.adf-grid-list-column-view');
|
||||
const sectionGridElement = testingUtils
|
||||
.getAllByCSS('#field-2bc275fb-e113-4d-7d-885f-6e74a7332d40-container section .adf-grid-list-single-column')
|
||||
.map((element) => element.nativeElement);
|
||||
sectionGridElement.forEach((element) => {
|
||||
expect(element.style['width']).toBe('50%', 'Elemens is wrong sized for this section');
|
||||
});
|
||||
const fullWidthElement = fixture.nativeElement.querySelector(
|
||||
const fullWidthElement = testingUtils.getByCSS(
|
||||
'#field-d52ada4e-cbdc-4f0c-a480-5b85fa00e4f8-container section.adf-grid-list-column-view .adf-grid-list-single-column'
|
||||
);
|
||||
).nativeElement;
|
||||
expect(fullWidthElement.style['width']).toBe('100%');
|
||||
});
|
||||
|
||||
@@ -428,17 +376,16 @@ describe('Form Renderer Component', () => {
|
||||
const twoSpanTextWidgetContainerId = '#field-1ff21afc-7df4-4607-8363-1dc8576e1c8e-container';
|
||||
const oneSpanTextWidgetContainerId = '#field-f4285ad-g123-1a73-521d-7nm4a7231aul0-container';
|
||||
|
||||
const formSizedElement = fixture.nativeElement.querySelector(`${oneSpanTextWidgetContainerId} section.adf-grid-list-column-view`);
|
||||
expectElementToBeVisible(formSizedElement);
|
||||
const sectionGridElement: HTMLElement[] = fixture.nativeElement.querySelectorAll(
|
||||
`${oneSpanTextWidgetContainerId} section .adf-grid-list-single-column`
|
||||
);
|
||||
expectElementToBeVisible(testingUtils, `${oneSpanTextWidgetContainerId} section.adf-grid-list-column-view`);
|
||||
const sectionGridElement = testingUtils
|
||||
.getAllByCSS(`${oneSpanTextWidgetContainerId} section .adf-grid-list-single-column`)
|
||||
.map((element) => element.nativeElement);
|
||||
sectionGridElement.forEach((element) => {
|
||||
expect(element.style['width']).toBe('50%');
|
||||
});
|
||||
const fullWidthElement = fixture.nativeElement.querySelector(
|
||||
const fullWidthElement = testingUtils.getByCSS(
|
||||
`${twoSpanTextWidgetContainerId} section.adf-grid-list-column-view .adf-grid-list-single-column`
|
||||
);
|
||||
).nativeElement;
|
||||
expect(fullWidthElement.style['width']).toBe('100%');
|
||||
});
|
||||
|
||||
@@ -447,79 +394,77 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const numberInputRequired: HTMLInputElement = fixture.nativeElement.querySelector('#Number0x8cbv');
|
||||
expectElementToBeVisible(numberInputRequired);
|
||||
expectElementToBeValid('Number0x8cbv', fixture);
|
||||
expectElementToBeVisible(testingUtils, '#Number0x8cbv');
|
||||
expectElementToBeValid(testingUtils, 'Number0x8cbv');
|
||||
|
||||
numberInputRequired.dispatchEvent(new Event('blur'));
|
||||
testingUtils.blurByCSS('#Number0x8cbv');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expectElementToBeInvalid('Number0x8cbv', fixture);
|
||||
expectElementToBeInvalid(testingUtils, 'Number0x8cbv');
|
||||
|
||||
typeIntoInput(numberInputRequired, '5');
|
||||
typeIntoInput(testingUtils, '#Number0x8cbv', '5');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
expectElementToBeValid('Number0x8cbv', fixture);
|
||||
expectElementToBeValid(testingUtils, 'Number0x8cbv');
|
||||
|
||||
typeIntoInput(numberInputRequired, 'a');
|
||||
typeIntoInput(testingUtils, '#Number0x8cbv', 'a');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
expectElementToBeInvalid('Number0x8cbv', fixture);
|
||||
let errorWidgetText: HTMLDivElement = fixture.nativeElement.querySelector('#field-Number0x8cbv-container error-widget .adf-error-text');
|
||||
expectElementToBeInvalid(testingUtils, 'Number0x8cbv');
|
||||
let errorWidgetText = testingUtils.getByCSS('#field-Number0x8cbv-container error-widget .adf-error-text').nativeElement;
|
||||
expect(errorWidgetText.textContent).toBe(`FORM.FIELD.VALIDATOR.INVALID_NUMBER`);
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(false, 'Form should not be valid without mandatory field');
|
||||
|
||||
typeIntoInput(numberInputRequired, '?');
|
||||
typeIntoInput(testingUtils, '#Number0x8cbv', '?');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
expectElementToBeInvalid('Number0x8cbv', fixture);
|
||||
errorWidgetText = fixture.nativeElement.querySelector('#field-Number0x8cbv-container error-widget .adf-error-text');
|
||||
expectElementToBeInvalid(testingUtils, 'Number0x8cbv');
|
||||
errorWidgetText = testingUtils.getByCSS('#field-Number0x8cbv-container error-widget .adf-error-text').nativeElement;
|
||||
expect(errorWidgetText.textContent).toBe(`FORM.FIELD.VALIDATOR.INVALID_NUMBER`);
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(false, 'Form should not be valid without mandatory field');
|
||||
|
||||
typeIntoInput(numberInputRequired, '-5');
|
||||
typeIntoInput(testingUtils, '#Number0x8cbv', '-5');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
expectElementToBeValid('Number0x8cbv', fixture);
|
||||
expectElementToBeValid(testingUtils, 'Number0x8cbv');
|
||||
});
|
||||
|
||||
it('[C309660] - Should display validation error message when Number widget value is not respecting min max interval', async () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(numberMinMaxForm.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const numberInputElement: HTMLInputElement = fixture.nativeElement.querySelector('#Number0him2z');
|
||||
expectElementToBeVisible(numberInputElement);
|
||||
expectElementToBeValid('Number0him2z', fixture);
|
||||
expectElementToBeVisible(testingUtils, '#Number0him2z');
|
||||
expectElementToBeValid(testingUtils, 'Number0him2z');
|
||||
|
||||
numberInputElement.dispatchEvent(new Event('blur'));
|
||||
typeIntoInput(numberInputElement, '9');
|
||||
testingUtils.blurByCSS('#Number0him2z');
|
||||
typeIntoInput(testingUtils, '#Number0him2z', '9');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expectElementToBeInvalid('Number0him2z', fixture);
|
||||
let errorWidgetText = fixture.nativeElement.querySelector('#field-Number0him2z-container error-widget .adf-error-text');
|
||||
expectElementToBeInvalid(testingUtils, 'Number0him2z');
|
||||
let errorWidgetText = testingUtils.getByCSS('#field-Number0him2z-container error-widget .adf-error-text').nativeElement;
|
||||
expect(errorWidgetText.textContent).toBe(`FORM.FIELD.VALIDATOR.NOT_LESS_THAN`);
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(false, 'Form should not be valid without valid field');
|
||||
|
||||
typeIntoInput(numberInputElement, '10');
|
||||
typeIntoInput(testingUtils, '#Number0him2z', '10');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expectElementToBeValid('Number0him2z', fixture);
|
||||
expectElementToBeValid(testingUtils, 'Number0him2z');
|
||||
|
||||
typeIntoInput(numberInputElement, '60');
|
||||
typeIntoInput(testingUtils, '#Number0him2z', '60');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expectElementToBeValid('Number0him2z', fixture);
|
||||
expectElementToBeValid(testingUtils, 'Number0him2z');
|
||||
|
||||
typeIntoInput(numberInputElement, '61');
|
||||
typeIntoInput(testingUtils, '#Number0him2z', '61');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expectElementToBeInvalid('Number0him2z', fixture);
|
||||
errorWidgetText = fixture.nativeElement.querySelector('#field-Number0him2z-container error-widget .adf-error-text');
|
||||
expectElementToBeInvalid(testingUtils, 'Number0him2z');
|
||||
errorWidgetText = testingUtils.getByCSS('#field-Number0him2z-container error-widget .adf-error-text').nativeElement;
|
||||
expect(errorWidgetText.textContent).toBe(`FORM.FIELD.VALIDATOR.NOT_GREATER_THAN`);
|
||||
expect(formRendererComponent.formDefinition.isValid).toBe(false, 'Form should not be valid without valid field');
|
||||
});
|
||||
@@ -528,86 +473,68 @@ describe('Form Renderer Component', () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(formNumberTextJson.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const inputText: HTMLInputElement = fixture.nativeElement.querySelector('#Text');
|
||||
const inputText = testingUtils.getByCSS('#Text').nativeElement;
|
||||
expect(inputText).not.toBeNull();
|
||||
let numberFieldValueContainer: HTMLDivElement = fixture.nativeElement.querySelector('#field-NumberFieldValue-container');
|
||||
expectElementToBeHidden(numberFieldValueContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-NumberFieldValue-container');
|
||||
|
||||
typeIntoInput(inputText, 'aaa');
|
||||
typeIntoInput(testingUtils, '#Text', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldValueContainer = fixture.nativeElement.querySelector('#field-NumberFieldValue-container');
|
||||
expectElementToBeVisible(numberFieldValueContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-NumberFieldValue-container');
|
||||
|
||||
typeIntoInput(inputText, 'bbb');
|
||||
typeIntoInput(testingUtils, '#Text', 'bbb');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldValueContainer = fixture.nativeElement.querySelector('#field-NumberFieldValue-container');
|
||||
expectElementToBeHidden(numberFieldValueContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-NumberFieldValue-container');
|
||||
});
|
||||
|
||||
it('[C309665] - Should be able to see Number widget when visibility condition refers to another field and form variable', async () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(formNumberTextJson.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const inputText: HTMLInputElement = fixture.nativeElement.querySelector('#Text');
|
||||
const inputText = testingUtils.getByCSS('#Text').nativeElement;
|
||||
expect(inputText).not.toBeNull();
|
||||
let numberFieldVariableContainer: HTMLDivElement = fixture.nativeElement.querySelector('#field-NumberFieldVariable-container');
|
||||
expectElementToBeHidden(numberFieldVariableContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-NumberFieldVariable-container');
|
||||
|
||||
typeIntoInput(inputText, 'aaa');
|
||||
typeIntoInput(testingUtils, '#Text', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldVariableContainer = fixture.nativeElement.querySelector('#field-NumberFieldVariable-container');
|
||||
expectElementToBeVisible(numberFieldVariableContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-NumberFieldVariable-container');
|
||||
|
||||
typeIntoInput(inputText, 'bbb');
|
||||
typeIntoInput(testingUtils, '#Text', 'bbb');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldVariableContainer = fixture.nativeElement.querySelector('#field-NumberFieldVariable-container');
|
||||
expectElementToBeHidden(numberFieldVariableContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-NumberFieldVariable-container');
|
||||
});
|
||||
|
||||
it('[C309666] - Should be able to see Number widget when has multiple visibility conditions and next condition operators', async () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(numberWidgetVisibilityForm.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
let numberFieldContainer = fixture.nativeElement.querySelector('#field-Number0wxaur-container');
|
||||
let testOneInput: HTMLInputElement = fixture.nativeElement.querySelector('#Text0hs0gt');
|
||||
let testTwoInput: HTMLInputElement = fixture.nativeElement.querySelector('#Text0cuqet');
|
||||
expect(testOneInput).not.toBeNull();
|
||||
expect(testTwoInput).not.toBeNull();
|
||||
expectElementToBeHidden(numberFieldContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-Number0wxaur-container');
|
||||
|
||||
typeIntoInput(testOneInput, 'aaa');
|
||||
typeIntoInput(testingUtils, '#Text0hs0gt', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldContainer = fixture.nativeElement.querySelector('#field-Number0wxaur-container');
|
||||
expectElementToBeVisible(numberFieldContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Number0wxaur-container');
|
||||
|
||||
typeIntoInput(testOneInput, 'bbb');
|
||||
typeIntoInput(testingUtils, '#Text0hs0gt', 'bbb');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldContainer = fixture.nativeElement.querySelector('#field-Number0wxaur-container');
|
||||
expectElementToBeHidden(numberFieldContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-Number0wxaur-container');
|
||||
|
||||
typeIntoInput(testTwoInput, 'aaa');
|
||||
typeIntoInput(testingUtils, '#Text0cuqet', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldContainer = fixture.nativeElement.querySelector('#field-Number0wxaur-container');
|
||||
testOneInput = fixture.nativeElement.querySelector('#Text0hs0gt');
|
||||
expectElementToBeHidden(numberFieldContainer);
|
||||
expectInputElementValueIs(testOneInput, 'bbb');
|
||||
expectElementToBeHidden(testingUtils, '#field-Number0wxaur-container');
|
||||
expectInputElementValueIs(testingUtils, '#Text0hs0gt', 'bbb');
|
||||
|
||||
typeIntoInput(testOneInput, 'aaa');
|
||||
typeIntoInput(testingUtils, '#Text0hs0gt', 'aaa');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
numberFieldContainer = fixture.nativeElement.querySelector('#field-Number0wxaur-container');
|
||||
testOneInput = fixture.nativeElement.querySelector('#Text0hs0gt');
|
||||
testTwoInput = fixture.nativeElement.querySelector('#Text0cuqet');
|
||||
expectInputElementValueIs(testOneInput, 'aaa');
|
||||
expectInputElementValueIs(testTwoInput, 'aaa');
|
||||
expectElementToBeHidden(numberFieldContainer);
|
||||
expectInputElementValueIs(testingUtils, '#Text0hs0gt', 'aaa');
|
||||
expectInputElementValueIs(testingUtils, '#Text0cuqet', 'aaa');
|
||||
expectElementToBeHidden(testingUtils, '#field-Number0wxaur-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -616,39 +543,26 @@ describe('Form Renderer Component', () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(textWidgetVisibility.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const inputElementTestOne: HTMLInputElement = fixture.nativeElement.querySelector('#textOne');
|
||||
const inputElementTestTwo: HTMLInputElement = fixture.nativeElement.querySelector('#textTwo');
|
||||
expectElementToBeVisible(inputElementTestOne);
|
||||
let elementThreeContainer = fixture.nativeElement.querySelector('#field-textThree-container');
|
||||
const elementTwoContainer = fixture.nativeElement.querySelector('#field-textTwo-container');
|
||||
let elementFourContainer = fixture.nativeElement.querySelector('#field-textFour-container');
|
||||
expectElementToBeHidden(elementThreeContainer);
|
||||
expectElementToBeHidden(elementTwoContainer);
|
||||
expectElementToBeVisible(elementFourContainer);
|
||||
expectElementToBeVisible(testingUtils, '#textOne');
|
||||
expectElementToBeHidden(testingUtils, '#field-textThree-container');
|
||||
expectElementToBeHidden(testingUtils, '#field-textTwo-container');
|
||||
expectElementToBeVisible(testingUtils, '#field-textFour-container');
|
||||
|
||||
typeIntoInput(inputElementTestOne, 'Test');
|
||||
typeIntoInput(testingUtils, '#textOne', 'Test');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
let containerInputOne = fixture.nativeElement.querySelector('#field-textOne-container');
|
||||
let containerInputTwo = fixture.nativeElement.querySelector('#field-textTwo-container');
|
||||
elementThreeContainer = fixture.nativeElement.querySelector('#field-textThree-container');
|
||||
elementFourContainer = fixture.nativeElement.querySelector('#field-textFour-container');
|
||||
expectElementToBeVisible(containerInputOne);
|
||||
expectElementToBeVisible(containerInputTwo);
|
||||
expectElementToBeVisible(elementThreeContainer);
|
||||
expectElementToBeHidden(elementFourContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-textOne-container');
|
||||
expectElementToBeVisible(testingUtils, '#field-textTwo-container');
|
||||
expectElementToBeVisible(testingUtils, '#field-textThree-container');
|
||||
expectElementToBeHidden(testingUtils, '#field-textFour-container');
|
||||
|
||||
typeIntoInput(inputElementTestTwo, 'Test');
|
||||
typeIntoInput(testingUtils, '#textTwo', 'Test');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
containerInputOne = fixture.nativeElement.querySelector('#field-textOne-container');
|
||||
containerInputTwo = fixture.nativeElement.querySelector('#field-textTwo-container');
|
||||
elementThreeContainer = fixture.nativeElement.querySelector('#field-textThree-container');
|
||||
elementFourContainer = fixture.nativeElement.querySelector('#field-textFour-container');
|
||||
expectElementToBeVisible(containerInputOne);
|
||||
expectElementToBeVisible(containerInputTwo);
|
||||
expectElementToBeVisible(elementFourContainer);
|
||||
expectElementToBeHidden(elementThreeContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-textOne-container');
|
||||
expectElementToBeVisible(testingUtils, '#field-textTwo-container');
|
||||
expectElementToBeVisible(testingUtils, '#field-textFour-container');
|
||||
expectElementToBeHidden(testingUtils, '#field-textThree-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -657,17 +571,13 @@ describe('Form Renderer Component', () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(radioWidgetVisibilityForm.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const textInputElement = fixture.nativeElement.querySelector('#Text0cee7g');
|
||||
const textInputContainer = fixture.nativeElement.querySelector('#field-Text0cee7g-container');
|
||||
let radioButtonContainer = fixture.nativeElement.querySelector('#field-Radiobuttons03rkbo-container');
|
||||
expectElementToBeVisible(textInputContainer);
|
||||
expectElementToBeHidden(radioButtonContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Text0cee7g-container');
|
||||
expectElementToBeHidden(testingUtils, '#field-Radiobuttons03rkbo-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'Radio');
|
||||
typeIntoInput(testingUtils, '#Text0cee7g', 'Radio');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
radioButtonContainer = fixture.nativeElement.querySelector('#field-Radiobuttons03rkbo-container');
|
||||
expectElementToBeVisible(radioButtonContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Radiobuttons03rkbo-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -677,10 +587,8 @@ describe('Form Renderer Component', () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(customWidgetForm.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const textInputElement = fixture.nativeElement.querySelector('#Text0vdi18');
|
||||
const customWidgetElement = fixture.nativeElement.querySelector('#bananaforevah0k8gui');
|
||||
expectElementToBeVisible(textInputElement);
|
||||
expectElementToBeVisible(customWidgetElement);
|
||||
expectElementToBeVisible(testingUtils, '#Text0vdi18');
|
||||
expectElementToBeVisible(testingUtils, '#bananaforevah0k8gui');
|
||||
});
|
||||
|
||||
it('Should be able to correctly use visibility in a custom process cloud widget ', async () => {
|
||||
@@ -688,14 +596,11 @@ describe('Form Renderer Component', () => {
|
||||
formRendererComponent.formDefinition = formService.parseForm(customWidgetFormWithVisibility.formRepresentation.formDefinition);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const textInputElement = fixture.nativeElement.querySelector('#Text0vdi18');
|
||||
let customWidgetElementContainer = fixture.nativeElement.querySelector('#field-bananaforevah0k8gui-container');
|
||||
expectElementToBeHidden(customWidgetElementContainer);
|
||||
typeIntoInput(textInputElement, 'no');
|
||||
expectElementToBeHidden(testingUtils, '#field-bananaforevah0k8gui-container');
|
||||
typeIntoInput(testingUtils, '#Text0vdi18', 'no');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
customWidgetElementContainer = fixture.nativeElement.querySelector('#field-bananaforevah0k8gui-container');
|
||||
expectElementToBeVisible(customWidgetElementContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-bananaforevah0k8gui-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -736,21 +641,15 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const textInputElement = fixture.nativeElement.querySelector('#Text0id3ic');
|
||||
const textInputContainer = fixture.nativeElement.querySelector('#field-Text0id3ic-container');
|
||||
const numberInputElement = fixture.nativeElement.querySelector('#Number0yggl7');
|
||||
const numberInputContainer = fixture.nativeElement.querySelector('#field-Number0yggl7-container');
|
||||
let amountContainer = fixture.nativeElement.querySelector('#field-Amount0kceqc-container');
|
||||
expectElementToBeVisible(textInputContainer);
|
||||
expectElementToBeVisible(numberInputContainer);
|
||||
expectElementToBeHidden(amountContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Text0id3ic-container');
|
||||
expectElementToBeVisible(testingUtils, '#field-Number0yggl7-container');
|
||||
expectElementToBeHidden(testingUtils, '#field-Amount0kceqc-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'text1');
|
||||
typeIntoInput(numberInputElement, '77');
|
||||
typeIntoInput(testingUtils, '#Text0id3ic', 'text1');
|
||||
typeIntoInput(testingUtils, '#Number0yggl7', '77');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
amountContainer = fixture.nativeElement.querySelector('#field-Amount0kceqc-container');
|
||||
expectElementToBeVisible(amountContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Amount0kceqc-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -760,25 +659,19 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const firstCheckboxInputElement = fixture.nativeElement.querySelector('#Checkbox0pr51m-input');
|
||||
const firstCheckboxInputContainer = fixture.nativeElement.querySelector('#field-Checkbox0pr51m-container');
|
||||
const secondCheckboxInputElement = fixture.nativeElement.querySelector('#Checkbox0fp0zf-input');
|
||||
const secondCheckboxInputContainer = fixture.nativeElement.querySelector('#field-Checkbox0fp0zf-container');
|
||||
let visibilityCheckboxContainer = fixture.nativeElement.querySelector('#field-Checkbox0lb7ze-container');
|
||||
expectElementToBeVisible(firstCheckboxInputContainer);
|
||||
expectElementToBeVisible(secondCheckboxInputContainer);
|
||||
expectElementToBeHidden(visibilityCheckboxContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Checkbox0pr51m-container');
|
||||
expectElementToBeVisible(testingUtils, '#field-Checkbox0fp0zf-container');
|
||||
expectElementToBeHidden(testingUtils, '#field-Checkbox0lb7ze-container');
|
||||
|
||||
firstCheckboxInputElement.click();
|
||||
testingUtils.clickByCSS('#Checkbox0pr51m-input');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
expectElementToBeHidden(visibilityCheckboxContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-Checkbox0lb7ze-container');
|
||||
|
||||
secondCheckboxInputElement.click();
|
||||
testingUtils.clickByCSS('#Checkbox0fp0zf-input');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
visibilityCheckboxContainer = fixture.nativeElement.querySelector('#field-Checkbox0lb7ze-container');
|
||||
expectElementToBeVisible(visibilityCheckboxContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Checkbox0lb7ze-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -788,23 +681,18 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const textInputElement = fixture.nativeElement.querySelector('#Text');
|
||||
const textInputContainer = fixture.nativeElement.querySelector('#field-Text-container');
|
||||
let multilineContainer = fixture.nativeElement.querySelector('#field-MultilineTextId-container');
|
||||
expectElementToBeVisible(textInputContainer);
|
||||
expectElementToBeVisible(multilineContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Text-container');
|
||||
expectElementToBeVisible(testingUtils, '#field-MultilineTextId-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'textwrong');
|
||||
typeIntoInput(testingUtils, '#Text', 'textwrong');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
multilineContainer = fixture.nativeElement.querySelector('#field-MultilineTextId-container');
|
||||
expectElementToBeHidden(multilineContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-MultilineTextId-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'text');
|
||||
typeIntoInput(testingUtils, '#Text', 'text');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
multilineContainer = fixture.nativeElement.querySelector('#field-MultilineTextId-container');
|
||||
expectElementToBeVisible(multilineContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-MultilineTextId-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -814,23 +702,18 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const textInputElement = fixture.nativeElement.querySelector('#Text0tzu53');
|
||||
const textInputContainer = fixture.nativeElement.querySelector('#field-Text0tzu53-container');
|
||||
let displayTextContainer = fixture.nativeElement.querySelector('#field-Displaytext0q4w02-container');
|
||||
expectElementToBeVisible(textInputContainer);
|
||||
expectElementToBeHidden(displayTextContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Text0tzu53-container');
|
||||
expectElementToBeHidden(testingUtils, '#field-Displaytext0q4w02-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'aaa-value');
|
||||
typeIntoInput(testingUtils, '#Text0tzu53', 'aaa-value');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayTextContainer = fixture.nativeElement.querySelector('#field-Displaytext0q4w02-container');
|
||||
expectElementToBeVisible(displayTextContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Displaytext0q4w02-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'bbb');
|
||||
typeIntoInput(testingUtils, '#Text0tzu53', 'bbb');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayTextContainer = fixture.nativeElement.querySelector('#field-Displaytext0q4w02-container');
|
||||
expectElementToBeHidden(displayTextContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-Displaytext0q4w02-container');
|
||||
});
|
||||
|
||||
it('[C309870] - Should be able to see Display text widget when visibility condition refers to another field and form variable', async () => {
|
||||
@@ -838,23 +721,18 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const textInputElement = fixture.nativeElement.querySelector('#Text0tzu53');
|
||||
const textInputContainer = fixture.nativeElement.querySelector('#field-Text0tzu53-container');
|
||||
let displayTextContainer = fixture.nativeElement.querySelector('#field-Displaytext8bac2e-container');
|
||||
expectElementToBeVisible(textInputContainer);
|
||||
expectElementToBeHidden(displayTextContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Text0tzu53-container');
|
||||
expectElementToBeHidden(testingUtils, '#field-Displaytext8bac2e-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'aaa-variable');
|
||||
typeIntoInput(testingUtils, '#Text0tzu53', 'aaa-variable');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayTextContainer = fixture.nativeElement.querySelector('#field-Displaytext8bac2e-container');
|
||||
expectElementToBeVisible(displayTextContainer);
|
||||
expectElementToBeVisible(testingUtils, '#field-Displaytext8bac2e-container');
|
||||
|
||||
typeIntoInput(textInputElement, 'bbb');
|
||||
typeIntoInput(testingUtils, '#Text0tzu53', 'bbb');
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
displayTextContainer = fixture.nativeElement.querySelector('#field-Displaytext8bac2e-container');
|
||||
expectElementToBeHidden(displayTextContainer);
|
||||
expectElementToBeHidden(testingUtils, '#field-Displaytext8bac2e-container');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -864,7 +742,7 @@ describe('Form Renderer Component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const decimalInputElement = fixture.nativeElement.querySelector('#Decimal0tzu53');
|
||||
const decimalInputElement = testingUtils.getByCSS('#Decimal0tzu53').nativeElement;
|
||||
expect(decimalInputElement.value).toBeTruthy('10.12');
|
||||
});
|
||||
});
|
||||
|
||||
+6
-4
@@ -17,13 +17,14 @@
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { UntypedFormControl } from '@angular/forms';
|
||||
import { CoreTestingModule } from '../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../testing';
|
||||
import { InplaceFormInputComponent } from './inplace-form-input.component';
|
||||
|
||||
describe('InplaceFormInputComponent', () => {
|
||||
let component: InplaceFormInputComponent;
|
||||
let fixture: ComponentFixture<InplaceFormInputComponent>;
|
||||
let formControl: UntypedFormControl;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
@@ -37,13 +38,14 @@ describe('InplaceFormInputComponent', () => {
|
||||
|
||||
component = fixture.componentInstance;
|
||||
component.control = formControl;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('should update form value', () => {
|
||||
formControl.setValue('New Value');
|
||||
fixture.detectChanges();
|
||||
|
||||
const input = fixture.nativeElement.querySelector('[data-automation-id="adf-inplace-input"]');
|
||||
const input = testingUtils.getByDataAutomationId('adf-inplace-input').nativeElement;
|
||||
|
||||
expect(input.value).toBe('New Value');
|
||||
});
|
||||
@@ -56,7 +58,7 @@ describe('InplaceFormInputComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const error = fixture.nativeElement.querySelector('[data-automation-id="adf-inplace-input-error"]');
|
||||
const error = testingUtils.getByDataAutomationId('adf-inplace-input-error');
|
||||
|
||||
expect(error).toBeTruthy();
|
||||
});
|
||||
@@ -66,7 +68,7 @@ describe('InplaceFormInputComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const error = fixture.nativeElement.querySelector('[data-automation-id="adf-inplace-input-label"]');
|
||||
const error = testingUtils.getByDataAutomationId('adf-inplace-input-label');
|
||||
|
||||
expect(error).toBeTruthy();
|
||||
});
|
||||
|
||||
@@ -23,16 +23,15 @@ import { FormFieldTypes } from '../core/form-field-types';
|
||||
import { FormModel } from '../core/form.model';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatInputHarness } from '@angular/material/input/testing';
|
||||
import { MatFormFieldHarness } from '@angular/material/form-field/testing';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../../testing/unit-testing-utils';
|
||||
|
||||
describe('AmountWidgetComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let widget: AmountWidgetComponent;
|
||||
let fixture: ComponentFixture<AmountWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -40,8 +39,8 @@ describe('AmountWidgetComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(AmountWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
it('should setup currency from field', () => {
|
||||
@@ -90,10 +89,10 @@ describe('AmountWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should show tooltip', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await (await input.host()).hover();
|
||||
const host = await testingUtils.getMatInputHost();
|
||||
await host.hover();
|
||||
|
||||
const tooltip = await (await input.host()).getAttribute('title');
|
||||
const tooltip = await host.getAttribute('title');
|
||||
expect(tooltip).toBe('my custom tooltip');
|
||||
});
|
||||
});
|
||||
@@ -107,19 +106,18 @@ describe('AmountWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should be marked as invalid after interaction', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
const host = await input.host();
|
||||
const host = await testingUtils.getMatInputHost();
|
||||
|
||||
expect(element.querySelector('.adf-invalid')).toBeFalsy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeFalsy();
|
||||
await host.blur();
|
||||
expect(element.querySelector('.adf-invalid')).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be able to display label with asterisk', async () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const asterisk = element.querySelector('.adf-asterisk');
|
||||
const asterisk = testingUtils.getByCSS('.adf-asterisk').nativeElement;
|
||||
|
||||
expect(asterisk).toBeTruthy();
|
||||
expect(asterisk.textContent).toEqual('*');
|
||||
@@ -131,7 +129,7 @@ describe('AmountWidgetComponent - rendering', () => {
|
||||
let loader: HarnessLoader;
|
||||
let widget: AmountWidgetComponent;
|
||||
let fixture: ComponentFixture<AmountWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -139,8 +137,8 @@ describe('AmountWidgetComponent - rendering', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(AmountWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
it('[C289915] - Should be able to display different currency icons', async () => {
|
||||
@@ -152,7 +150,7 @@ describe('AmountWidgetComponent - rendering', () => {
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
const field = await loader.getHarness(MatFormFieldHarness);
|
||||
const field = await testingUtils.getMatFormField();
|
||||
expect(await field.getPrefixText()).toBe('$');
|
||||
|
||||
widget.field.currency = '£';
|
||||
@@ -189,23 +187,23 @@ describe('AmountWidgetComponent - rendering', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const field = await loader.getHarness(MatFormFieldHarness);
|
||||
const inputField = await loader.getHarness(MatInputHarness.with({ placeholder: 'Check Placeholder Text' }));
|
||||
const field = await testingUtils.getMatFormField();
|
||||
const inputField = await testingUtils.getMatInputByPlaceholder('Check Placeholder Text');
|
||||
expect(inputField).toBeTruthy();
|
||||
expect(await field.getPrefixText()).toBe('$');
|
||||
|
||||
const widgetLabel = fixture.nativeElement.querySelector('label.adf-label');
|
||||
const widgetLabel = testingUtils.getByCSS('label.adf-label').nativeElement;
|
||||
expect(widgetLabel.textContent.trim()).toBe('Test Amount*');
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
const input = await testingUtils.getMatInput();
|
||||
await input.setValue('90');
|
||||
expect(widget.field.isValid).toBe(true);
|
||||
|
||||
await input.setValue('gdfgdf');
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
|
||||
const errorWidget = fixture.nativeElement.querySelector('error-widget .adf-error-text');
|
||||
const errorWidget = testingUtils.getByCSS('error-widget .adf-error-text').nativeElement;
|
||||
expect(errorWidget.textContent).toBe('FORM.FIELD.VALIDATOR.INVALID_NUMBER');
|
||||
});
|
||||
|
||||
@@ -230,24 +228,24 @@ describe('AmountWidgetComponent - rendering', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetLabel = fixture.nativeElement.querySelector('label.adf-label');
|
||||
const widgetLabel = testingUtils.getByCSS('label.adf-label').nativeElement;
|
||||
expect(widgetLabel.textContent.trim()).toBe('Test Amount*');
|
||||
|
||||
const field = await loader.getHarness(MatFormFieldHarness);
|
||||
const field = await testingUtils.getMatFormField();
|
||||
expect(await field.getPrefixText()).toBe('£');
|
||||
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
const input = await testingUtils.getMatInput();
|
||||
await input.setValue('8');
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
|
||||
let errorMessage = fixture.nativeElement.querySelector('.adf-error-text');
|
||||
let errorMessage = testingUtils.getByCSS('.adf-error-text').nativeElement;
|
||||
expect(errorMessage.textContent.trim()).toContain('FORM.FIELD.VALIDATOR.NOT_LESS_THAN');
|
||||
|
||||
await input.setValue('99');
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
errorMessage = fixture.nativeElement.querySelector('.adf-error-text');
|
||||
errorMessage = testingUtils.getByCSS('.adf-error-text').nativeElement;
|
||||
expect(errorMessage.textContent.trim()).toContain('FORM.FIELD.VALIDATOR.NOT_GREATER_THAN');
|
||||
|
||||
await input.setValue('80');
|
||||
@@ -258,7 +256,7 @@ describe('AmountWidgetComponent - rendering', () => {
|
||||
|
||||
await input.setValue('incorrect format');
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
errorMessage = fixture.nativeElement.querySelector('.adf-error-text');
|
||||
errorMessage = testingUtils.getByCSS('.adf-error-text').nativeElement;
|
||||
expect(errorMessage.textContent.trim()).toContain('FORM.FIELD.VALIDATOR.INVALID_NUMBER');
|
||||
});
|
||||
|
||||
@@ -276,11 +274,8 @@ describe('AmountWidgetComponent - rendering', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
expect(widgetContainer).not.toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
expect(adfLeftLabel).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-left-label-input-container')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-left-label')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should not have left labels classes on leftLabels false', async () => {
|
||||
@@ -296,11 +291,8 @@ describe('AmountWidgetComponent - rendering', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-left-label-input-container')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-left-label')).toBeNull();
|
||||
});
|
||||
|
||||
it('should not have left labels classes on leftLabels not present', async () => {
|
||||
@@ -316,11 +308,8 @@ describe('AmountWidgetComponent - rendering', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-left-label-input-container')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-left-label')).toBeNull();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -19,9 +19,8 @@ import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatCheckboxHarness } from '@angular/material/checkbox/testing';
|
||||
import { TranslateLoader } from '@ngx-translate/core';
|
||||
import { CoreTestingModule } from '../../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../../testing';
|
||||
import { TranslateLoaderService } from '../../../../translation';
|
||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||
import { CheckboxWidgetComponent } from './checkbox.widget';
|
||||
@@ -30,7 +29,7 @@ describe('CheckboxWidgetComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let widget: CheckboxWidgetComponent;
|
||||
let fixture: ComponentFixture<CheckboxWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -38,11 +37,9 @@ describe('CheckboxWidgetComponent', () => {
|
||||
providers: [{ provide: TranslateLoader, useClass: TranslateLoaderService }]
|
||||
});
|
||||
fixture = TestBed.createComponent(CheckboxWidgetComponent);
|
||||
|
||||
widget = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => fixture.destroy());
|
||||
@@ -60,20 +57,20 @@ describe('CheckboxWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should be marked as invalid when required after interaction', async () => {
|
||||
const checkbox = await loader.getHarness(MatCheckboxHarness);
|
||||
expect(element.querySelector('.adf-invalid')).toBeFalsy();
|
||||
const checkbox = await testingUtils.getMatCheckbox();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeFalsy();
|
||||
|
||||
await checkbox.check();
|
||||
await checkbox.uncheck();
|
||||
|
||||
expect(element.querySelector('.adf-invalid')).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be able to display label with asterisk', async () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const asterisk = element.querySelector('.adf-asterisk');
|
||||
const asterisk = testingUtils.getByCSS('.adf-asterisk').nativeElement;
|
||||
|
||||
expect(asterisk).toBeTruthy();
|
||||
expect(asterisk.textContent).toEqual('*');
|
||||
@@ -83,16 +80,14 @@ describe('CheckboxWidgetComponent', () => {
|
||||
widget.field.value = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkbox = await loader.getHarness(MatCheckboxHarness);
|
||||
expect(await checkbox.isChecked()).toBe(true);
|
||||
expect(await testingUtils.checkIfMatCheckboxIsChecked()).toBe(true);
|
||||
});
|
||||
|
||||
it('should not be checked if false is passed', async () => {
|
||||
widget.field.value = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const checkbox = await loader.getHarness(MatCheckboxHarness);
|
||||
expect(await checkbox.isChecked()).toBe(false);
|
||||
expect(await testingUtils.checkIfMatCheckboxIsChecked()).toBe(false);
|
||||
});
|
||||
|
||||
describe('when tooltip is set', () => {
|
||||
@@ -105,10 +100,9 @@ describe('CheckboxWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should show tooltip', async () => {
|
||||
const checkbox = await loader.getHarness(MatCheckboxHarness);
|
||||
await (await checkbox.host()).hover();
|
||||
|
||||
const tooltip = await (await checkbox.host()).getAttribute('title');
|
||||
await testingUtils.hoverOverMatCheckbox();
|
||||
const host = await testingUtils.getMatCheckboxHost();
|
||||
const tooltip = await host.getAttribute('title');
|
||||
expect(tooltip).toBe('my custom tooltip');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -20,22 +20,22 @@ import { FormFieldModel } from '../core/form-field.model';
|
||||
import { FormModel } from '../core/form.model';
|
||||
import { DateTimeWidgetComponent } from './date-time.widget';
|
||||
import { FormFieldTypes } from '../core/form-field-types';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { HarnessLoader, TestKey } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatInputHarness } from '@angular/material/input/testing';
|
||||
import { addMinutes } from 'date-fns';
|
||||
import { MatDialogModule } from '@angular/material/dialog';
|
||||
import { MatDatetimepickerModule, MatNativeDatetimeModule } from '@mat-datetimepicker/core';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../../testing/unit-testing-utils';
|
||||
|
||||
describe('DateTimeWidgetComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let widget: DateTimeWidgetComponent;
|
||||
let fixture: ComponentFixture<DateTimeWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let form: FormModel;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -50,12 +50,10 @@ describe('DateTimeWidgetComponent', () => {
|
||||
]
|
||||
});
|
||||
fixture = TestBed.createComponent(DateTimeWidgetComponent);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
widget = fixture.componentInstance;
|
||||
|
||||
form = new FormModel();
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -85,8 +83,8 @@ describe('DateTimeWidgetComponent', () => {
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('#data-time-widget')).toBeDefined();
|
||||
expect(element.querySelector('#data-time-widget')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#data-time-widget')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#data-time-widget')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should setup max value for date picker', () => {
|
||||
@@ -187,14 +185,13 @@ describe('DateTimeWidgetComponent', () => {
|
||||
fixture.whenStable();
|
||||
await fixture.whenStable();
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await input.setValue('9999-09-12T09:10:00.000Z');
|
||||
await testingUtils.fillMatInput('9999-09-12T09:10:00.000Z');
|
||||
|
||||
expect(field.value).toEqual(new Date('9999-09-12T09:10:00.000Z'));
|
||||
expect(field.isValid).toBeTrue();
|
||||
});
|
||||
|
||||
it('should fail validating incorrect keyboard input', () => {
|
||||
it('should fail validating incorrect keyboard input', async () => {
|
||||
const field = new FormFieldModel(form, {
|
||||
id: 'date-field-id',
|
||||
name: 'date-name',
|
||||
@@ -206,9 +203,7 @@ describe('DateTimeWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const dateTimeInput = fixture.nativeElement.querySelector('input');
|
||||
dateTimeInput.value = '123abc';
|
||||
dateTimeInput.dispatchEvent(new Event('input'));
|
||||
await testingUtils.fillMatInput('123abc');
|
||||
|
||||
expect(widget.datetimeInputControl.invalid).toBeTrue();
|
||||
expect(field.value).toBe(null);
|
||||
@@ -229,8 +224,7 @@ describe('DateTimeWidgetComponent', () => {
|
||||
fixture.whenStable();
|
||||
await fixture.whenStable();
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await input.setValue(null);
|
||||
await testingUtils.fillMatInput(null);
|
||||
|
||||
expect(widget.datetimeInputControl.value).toBe(null);
|
||||
expect(widget.datetimeInputControl.valid).toBeTrue();
|
||||
@@ -248,10 +242,10 @@ describe('DateTimeWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should show tooltip', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await (await input.host()).hover();
|
||||
const host = await testingUtils.getMatInputHost();
|
||||
await host.hover();
|
||||
|
||||
const tooltip = await (await input.host()).getAttribute('title');
|
||||
const tooltip = await host.getAttribute('title');
|
||||
expect(tooltip).toBe('my custom tooltip');
|
||||
});
|
||||
});
|
||||
@@ -266,21 +260,17 @@ describe('DateTimeWidgetComponent', () => {
|
||||
|
||||
it('should be marked as invalid after interaction', () => {
|
||||
fixture.detectChanges();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeFalsy();
|
||||
|
||||
const dateTimeInput = fixture.nativeElement.querySelector('input');
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeFalsy();
|
||||
|
||||
dateTimeInput.dispatchEvent(new Event('blur'));
|
||||
|
||||
testingUtils.blurByCSS('input');
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be able to display label with asterisk', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const asterisk = element.querySelector<HTMLElement>('.adf-asterisk');
|
||||
const asterisk = testingUtils.getByCSS('.adf-asterisk').nativeElement;
|
||||
|
||||
expect(asterisk).not.toBeNull();
|
||||
expect(asterisk?.textContent).toEqual('*');
|
||||
@@ -317,8 +307,7 @@ describe('DateTimeWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
expect(await input.getValue()).toBe('30-11-9999 10:30 AM');
|
||||
expect(await testingUtils.getMatInputValue()).toBe('30-11-9999 10:30 AM');
|
||||
});
|
||||
|
||||
it('should show the correct format type', async () => {
|
||||
@@ -333,8 +322,7 @@ describe('DateTimeWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
expect(await input.getValue()).toBe('12-30-9999 10:30 AM');
|
||||
expect(await testingUtils.getMatInputValue()).toBe('12-30-9999 10:30 AM');
|
||||
});
|
||||
|
||||
it('should disable date button when is readonly', () => {
|
||||
@@ -347,14 +335,16 @@ describe('DateTimeWidgetComponent', () => {
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
let dateButton = element.querySelector<HTMLButtonElement>('button');
|
||||
let dateButton = testingUtils.getByCSS('button').nativeElement;
|
||||
|
||||
expect(dateButton).not.toBeNull();
|
||||
expect(dateButton?.disabled).toBeFalsy();
|
||||
|
||||
widget.field.readOnly = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
dateButton = element.querySelector<HTMLButtonElement>('button');
|
||||
dateButton = testingUtils.getByCSS('button').nativeElement;
|
||||
|
||||
expect(dateButton).not.toBeNull();
|
||||
expect(dateButton?.disabled).toBeTruthy();
|
||||
});
|
||||
@@ -373,7 +363,7 @@ describe('DateTimeWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
const input = await testingUtils.getMatInput();
|
||||
expect(await input.getValue()).toBe('12-30-9999 10:30 AM');
|
||||
|
||||
widget.field.value = '2020-03-02T00:00:00.000Z';
|
||||
@@ -398,7 +388,7 @@ describe('DateTimeWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
const input = await testingUtils.getMatInput();
|
||||
expect(await input.getValue()).toBe('12/30/9999 10;30 AM');
|
||||
|
||||
widget.field.value = '2020-03-02T00:00:00.000Z';
|
||||
@@ -423,13 +413,13 @@ describe('DateTimeWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).not.toBeNull();
|
||||
|
||||
const leftDatePicker = element.querySelector('.adf-left-label-input-datepicker');
|
||||
const leftDatePicker = testingUtils.getByCSS('.adf-left-label-input-datepicker');
|
||||
expect(leftDatePicker).not.toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).not.toBeNull();
|
||||
});
|
||||
|
||||
@@ -445,13 +435,13 @@ describe('DateTimeWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const leftDatePicker = element.querySelector('.adf-left-label-input-datepicker');
|
||||
const leftDatePicker = testingUtils.getByCSS('.adf-left-label-input-datepicker');
|
||||
expect(leftDatePicker).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
});
|
||||
|
||||
@@ -467,13 +457,13 @@ describe('DateTimeWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const leftDatePicker = element.querySelector('.adf-left-label-input-datepicker');
|
||||
const leftDatePicker = testingUtils.getByCSS('.adf-left-label-input-datepicker');
|
||||
expect(leftDatePicker).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
});
|
||||
|
||||
@@ -487,12 +477,10 @@ describe('DateTimeWidgetComponent', () => {
|
||||
required: true
|
||||
});
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await input.focus();
|
||||
await (await input.host()).sendKeys('Enter');
|
||||
await testingUtils.focusMatInput();
|
||||
await testingUtils.sendKeysToMatInput([TestKey.ENTER]);
|
||||
|
||||
const picker = element.querySelector('[data-automation-id="adf-date-time-widget-picker"]');
|
||||
expect(picker).toBeTruthy();
|
||||
expect(testingUtils.getByDataAutomationId('adf-date-time-widget-picker')).toBeTruthy();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { DateAdapter } from '@angular/material/core';
|
||||
import { CoreTestingModule } from '../../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../../testing';
|
||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||
import { DateWidgetComponent } from './date.widget';
|
||||
import { DEFAULT_DATE_FORMAT } from '../../../../common';
|
||||
@@ -26,9 +26,9 @@ import { isEqual } from 'date-fns';
|
||||
describe('DateWidgetComponent', () => {
|
||||
let widget: DateWidgetComponent;
|
||||
let fixture: ComponentFixture<DateWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let adapter: DateAdapter<Date>;
|
||||
let form: FormModel;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -36,12 +36,10 @@ describe('DateWidgetComponent', () => {
|
||||
});
|
||||
|
||||
form = new FormModel();
|
||||
|
||||
fixture = TestBed.createComponent(DateWidgetComponent);
|
||||
adapter = fixture.debugElement.injector.get(DateAdapter);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
widget = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('[C310333] - should be able to set a placeholder', () => {
|
||||
@@ -122,8 +120,8 @@ describe('DateWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('#data-widget')).toBeDefined();
|
||||
expect(element.querySelector('#data-widget')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#data-widget')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#data-widget')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should setup max value for date picker', () => {
|
||||
@@ -166,14 +164,12 @@ describe('DateWidgetComponent', () => {
|
||||
|
||||
it('should be marked as invalid after interaction', () => {
|
||||
fixture.detectChanges();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeFalsy();
|
||||
|
||||
const dateInput = fixture.nativeElement.querySelector('input');
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeFalsy();
|
||||
|
||||
dateInput.dispatchEvent(new Event('blur'));
|
||||
testingUtils.blurByCSS('input');
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be valid when field is hidden with empty value', () => {
|
||||
@@ -211,9 +207,9 @@ describe('DateWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const dateElement = element.querySelector<HTMLInputElement>('#date-field-id');
|
||||
expect(dateElement).not.toBeNull();
|
||||
const dateElement = testingUtils.getByCSS('#date-field-id').nativeElement;
|
||||
|
||||
expect(dateElement).not.toBeNull();
|
||||
expect(dateElement?.value).toContain('9-9-9999');
|
||||
});
|
||||
|
||||
@@ -227,9 +223,9 @@ describe('DateWidgetComponent', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
let dateElement = element.querySelector<HTMLInputElement>('#date-field-id');
|
||||
|
||||
dateElement = element.querySelector<HTMLInputElement>('#date-field-id');
|
||||
const dateElement = testingUtils.getByCSS('#date-field-id').nativeElement;
|
||||
|
||||
expect(dateElement?.value).toContain('30.12.9999');
|
||||
});
|
||||
|
||||
@@ -243,14 +239,16 @@ describe('DateWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
let dateButton = element.querySelector<HTMLButtonElement>('button');
|
||||
let dateButton = testingUtils.getByCSS('button').nativeElement;
|
||||
|
||||
expect(dateButton).toBeDefined();
|
||||
expect(dateButton.disabled).toBeFalsy();
|
||||
|
||||
widget.field.readOnly = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
dateButton = element.querySelector<HTMLButtonElement>('button');
|
||||
dateButton = testingUtils.getByCSS('button').nativeElement;
|
||||
|
||||
expect(dateButton).toBeDefined();
|
||||
expect(dateButton.disabled).toBeTruthy();
|
||||
});
|
||||
@@ -288,7 +286,8 @@ describe('DateWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const dateElement = element.querySelector<HTMLInputElement>('#date-field-id');
|
||||
const dateElement = testingUtils.getByCSS('#date-field-id').nativeElement;
|
||||
|
||||
expect(dateElement).toBeDefined();
|
||||
expect(dateElement.value).toContain('12-30-9999');
|
||||
|
||||
|
||||
@@ -19,18 +19,16 @@ import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatInputHarness } from '@angular/material/input/testing';
|
||||
import { CoreTestingModule } from '../../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../../testing';
|
||||
import { FormService } from '../../../services/form.service';
|
||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||
|
||||
import { DecimalWidgetComponent } from './decimal.component';
|
||||
|
||||
describe('DecimalComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let widget: DecimalWidgetComponent;
|
||||
let fixture: ComponentFixture<DecimalWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
@@ -40,8 +38,8 @@ describe('DecimalComponent', () => {
|
||||
|
||||
fixture = TestBed.createComponent(DecimalWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
describe('when tooltip is set', () => {
|
||||
@@ -54,10 +52,10 @@ describe('DecimalComponent', () => {
|
||||
});
|
||||
|
||||
it('should show tooltip', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await (await input.host()).hover();
|
||||
const host = await testingUtils.getMatInputHost();
|
||||
await host.hover();
|
||||
|
||||
const tooltip = await (await input.host()).getAttribute('title');
|
||||
const tooltip = await host.getAttribute('title');
|
||||
expect(tooltip).toBe('my custom tooltip');
|
||||
});
|
||||
});
|
||||
@@ -73,20 +71,16 @@ describe('DecimalComponent', () => {
|
||||
});
|
||||
|
||||
it('should be marked as invalid after interaction', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeFalsy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeFalsy();
|
||||
|
||||
const inputHost = await input.host();
|
||||
await inputHost.blur();
|
||||
await testingUtils.blurMatInput();
|
||||
fixture.detectChanges();
|
||||
|
||||
const invalidElement = fixture.nativeElement.querySelector('.adf-invalid');
|
||||
|
||||
expect(invalidElement).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be able to display label with asterisk', async () => {
|
||||
const asterisk = element.querySelector('.adf-asterisk');
|
||||
const asterisk = testingUtils.getByCSS('.adf-asterisk').nativeElement;
|
||||
|
||||
expect(asterisk).toBeTruthy();
|
||||
expect(asterisk?.textContent).toEqual('*');
|
||||
@@ -107,10 +101,10 @@ describe('DecimalComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).not.toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).not.toBeNull();
|
||||
});
|
||||
|
||||
@@ -127,10 +121,10 @@ describe('DecimalComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
});
|
||||
|
||||
@@ -147,10 +141,10 @@ describe('DecimalComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
|
||||
import { SimpleChange, SimpleChanges } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { CoreTestingModule } from '../../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../../testing';
|
||||
import { ErrorMessageModel } from '../core';
|
||||
import { ErrorWidgetComponent } from './error.component';
|
||||
|
||||
describe('ErrorWidgetComponent', () => {
|
||||
let widget: ErrorWidgetComponent;
|
||||
let fixture: ComponentFixture<ErrorWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -32,7 +32,7 @@ describe('ErrorWidgetComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(ErrorWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
const errorMessage: string = 'fake-error';
|
||||
const errorMessageModel: ErrorMessageModel = new ErrorMessageModel({ message: errorMessage });
|
||||
@@ -46,7 +46,7 @@ describe('ErrorWidgetComponent', () => {
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const errorIcon = element.querySelector('.adf-error-icon').textContent;
|
||||
const errorIcon = testingUtils.getByCSS('.adf-error-icon').nativeElement.textContent;
|
||||
expect(errorIcon).toEqual('error_outline');
|
||||
});
|
||||
|
||||
@@ -62,7 +62,7 @@ describe('ErrorWidgetComponent', () => {
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
|
||||
const requiredErrorText = element.querySelector('.adf-error-text').textContent;
|
||||
const requiredErrorText = testingUtils.getByCSS('.adf-error-text').nativeElement.textContent;
|
||||
expect(requiredErrorText).toEqual(errorMessage);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -20,12 +20,13 @@ import { ContainerModel } from '../core/container.model';
|
||||
import { FormFieldTypes } from '../core/form-field-types';
|
||||
import { FormFieldModel } from '../core/form-field.model';
|
||||
import { HeaderWidgetComponent } from './header.widget';
|
||||
import { NoopTranslateModule } from '../../../../testing';
|
||||
import { NoopTranslateModule, UnitTestingUtils } from '../../../../testing';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
|
||||
describe('HeaderWidgetComponent', () => {
|
||||
let component: HeaderWidgetComponent;
|
||||
let fixture: ComponentFixture<HeaderWidgetComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -36,6 +37,7 @@ describe('HeaderWidgetComponent', () => {
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(HeaderWidgetComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.componentRef.setInput(
|
||||
'element',
|
||||
new ContainerModel(
|
||||
@@ -61,8 +63,8 @@ describe('HeaderWidgetComponent', () => {
|
||||
it('should render header widget template when type is group', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.adf-container-widget-header')).not.toBe(null);
|
||||
expect(fixture.nativeElement.querySelector('#container-header-label-test-id').textContent.trim()).toEqual('test-name');
|
||||
expect(testingUtils.getByCSS('.adf-container-widget-header')).not.toBe(null);
|
||||
expect(testingUtils.getByCSS('#container-header-label-test-id').nativeElement.textContent.trim()).toEqual('test-name');
|
||||
});
|
||||
|
||||
it('should NOT render header widget template when type is different then group', () => {
|
||||
@@ -70,13 +72,13 @@ describe('HeaderWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.adf-container-widget-header')).toBe(null);
|
||||
expect(testingUtils.getByCSS('.adf-container-widget-header')).toBe(null);
|
||||
});
|
||||
|
||||
it('should display header text when hideHeader is set to false', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.adf-container-widget-header__text')).not.toBe(null);
|
||||
expect(testingUtils.getByCSS('.adf-container-widget-header__text')).not.toBe(null);
|
||||
});
|
||||
|
||||
it('should NOT display header text when hideHeader is set to true', () => {
|
||||
@@ -84,7 +86,7 @@ describe('HeaderWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.adf-container-widget-header__text')).toBe(null);
|
||||
expect(testingUtils.getByCSS('.adf-container-widget-header__text')).toBe(null);
|
||||
});
|
||||
|
||||
it('should display expander when allowCollapse is set to true', () => {
|
||||
@@ -92,13 +94,13 @@ describe('HeaderWidgetComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.mdl-button--icon')).not.toBe(null);
|
||||
expect(testingUtils.getByCSS('.mdl-button--icon')).not.toBe(null);
|
||||
});
|
||||
|
||||
it('should NOT display expander when allowCollapse is set to false', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.mdl-button--icon')).toBe(null);
|
||||
expect(testingUtils.getByCSS('.mdl-button--icon')).toBe(null);
|
||||
});
|
||||
|
||||
it('should call onExpanderClicked method when expander is clicked', () => {
|
||||
@@ -107,8 +109,7 @@ describe('HeaderWidgetComponent', () => {
|
||||
|
||||
spyOn(component, 'onExpanderClicked');
|
||||
|
||||
const expander = fixture.nativeElement.querySelector('.mdl-button--icon');
|
||||
expander.click();
|
||||
testingUtils.clickByCSS('.mdl-button--icon');
|
||||
|
||||
expect(component.onExpanderClicked).toHaveBeenCalledWith(component.element);
|
||||
});
|
||||
@@ -118,8 +119,7 @@ describe('HeaderWidgetComponent', () => {
|
||||
|
||||
spyOn(component, 'onExpanderClicked');
|
||||
|
||||
const headerText = fixture.nativeElement.querySelector('#container-header-label-test-id');
|
||||
headerText.click();
|
||||
testingUtils.clickByCSS('#container-header-label-test-id');
|
||||
|
||||
expect(component.onExpanderClicked).toHaveBeenCalledWith(component.element);
|
||||
});
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { CoreTestingModule } from '../../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../../testing';
|
||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||
import { HyperlinkWidgetComponent } from './hyperlink.widget';
|
||||
|
||||
describe('HyperlinkWidgetComponent', () => {
|
||||
let widget: HyperlinkWidgetComponent;
|
||||
let fixture: ComponentFixture<HyperlinkWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -31,7 +31,7 @@ describe('HyperlinkWidgetComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(HyperlinkWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('should get link text from field display text', () => {
|
||||
@@ -142,8 +142,7 @@ describe('HyperlinkWidgetComponent', () => {
|
||||
widget.ngOnInit();
|
||||
|
||||
fixture.detectChanges();
|
||||
const hyperlinkWidgetLink = element.querySelector('a');
|
||||
expect(hyperlinkWidgetLink.innerText).toBe(url);
|
||||
expect(testingUtils.getInnerTextByCSS('a')).toBe(url);
|
||||
});
|
||||
|
||||
it('should be able to set label property', () => {
|
||||
@@ -154,8 +153,7 @@ describe('HyperlinkWidgetComponent', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
const hyperlinkWidgetLabel = element.querySelector('label');
|
||||
expect(hyperlinkWidgetLabel.innerText).toBe(label);
|
||||
expect(testingUtils.getInnerTextByCSS('label')).toBe(label);
|
||||
});
|
||||
|
||||
it('should be able to set URL', () => {
|
||||
@@ -166,7 +164,7 @@ describe('HyperlinkWidgetComponent', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
const hyperlinkWidgetLink = element.querySelector('a');
|
||||
const hyperlinkWidgetLink = testingUtils.getByCSS('a').nativeElement;
|
||||
expect(hyperlinkWidgetLink.href).toBe(url);
|
||||
});
|
||||
|
||||
@@ -180,7 +178,7 @@ describe('HyperlinkWidgetComponent', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
const hyperlinkWidgetLink = element.querySelector('a');
|
||||
const hyperlinkWidgetLink = testingUtils.getByCSS('a').nativeElement;
|
||||
expect(hyperlinkWidgetLink.href).toBe(url);
|
||||
expect(hyperlinkWidgetLink.innerText).toBe(displayText);
|
||||
});
|
||||
@@ -197,7 +195,7 @@ describe('HyperlinkWidgetComponent', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
const checkbox = fixture.debugElement.nativeElement.querySelector('.adf-hyperlink-widget div');
|
||||
const checkbox = testingUtils.getByCSS('.adf-hyperlink-widget div').nativeElement;
|
||||
const tooltip = checkbox.getAttribute('title');
|
||||
|
||||
expect(tooltip).toEqual(widget.field.tooltip);
|
||||
|
||||
+11
-12
@@ -18,19 +18,19 @@
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { MatInputHarness } from '@angular/material/input/testing';
|
||||
import { FormModel } from '../core/form.model';
|
||||
import { FormFieldModel } from '../core/form-field.model';
|
||||
import { FormFieldTypes } from '../core/form-field-types';
|
||||
import { MultilineTextWidgetComponentComponent } from './multiline-text.widget';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../../testing/unit-testing-utils';
|
||||
|
||||
describe('MultilineTextWidgetComponentComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let widget: MultilineTextWidgetComponentComponent;
|
||||
let fixture: ComponentFixture<MultilineTextWidgetComponentComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -38,8 +38,8 @@ describe('MultilineTextWidgetComponentComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(MultilineTextWidgetComponentComponent);
|
||||
widget = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
describe('when tooltip is set', () => {
|
||||
@@ -52,10 +52,10 @@ describe('MultilineTextWidgetComponentComponent', () => {
|
||||
});
|
||||
|
||||
it('should show tooltip', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await (await input.host()).hover();
|
||||
const host = await testingUtils.getMatInputHost();
|
||||
await host.hover();
|
||||
|
||||
const tooltip = await (await input.host()).getAttribute('title');
|
||||
const tooltip = await host.getAttribute('title');
|
||||
expect(tooltip).toBe('my custom tooltip');
|
||||
});
|
||||
});
|
||||
@@ -70,15 +70,14 @@ describe('MultilineTextWidgetComponentComponent', () => {
|
||||
});
|
||||
|
||||
it('should be marked as invalid after interaction', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeFalsy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeFalsy();
|
||||
|
||||
await (await input.host()).blur();
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeTruthy();
|
||||
await testingUtils.blurMatInput();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be able to display label with asterisk', async () => {
|
||||
const asterisk = element.querySelector('.adf-asterisk');
|
||||
const asterisk = testingUtils.getByCSS('.adf-asterisk').nativeElement;
|
||||
|
||||
expect(asterisk).toBeTruthy();
|
||||
expect(asterisk.textContent).toEqual('*');
|
||||
|
||||
@@ -20,8 +20,7 @@ import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatInputHarness } from '@angular/material/input/testing';
|
||||
import { CoreTestingModule } from '../../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../../testing';
|
||||
import { FormFieldModel, FormFieldTypes, FormModel } from '../core';
|
||||
import { NumberWidgetComponent } from './number.widget';
|
||||
|
||||
@@ -29,7 +28,7 @@ describe('NumberWidgetComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let widget: NumberWidgetComponent;
|
||||
let fixture: ComponentFixture<NumberWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -37,8 +36,8 @@ describe('NumberWidgetComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(NumberWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
describe('when tooltip is set', () => {
|
||||
@@ -51,10 +50,10 @@ describe('NumberWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should show tooltip', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await (await input.host()).hover();
|
||||
const host = await testingUtils.getMatInputHost();
|
||||
await host.hover();
|
||||
|
||||
const tooltip = await (await input.host()).getAttribute('title');
|
||||
const tooltip = await host.getAttribute('title');
|
||||
expect(tooltip).toBe('my custom tooltip');
|
||||
});
|
||||
});
|
||||
@@ -69,16 +68,15 @@ describe('NumberWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should be marked as invalid after interaction', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeFalsy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeFalsy();
|
||||
|
||||
await (await input.host()).blur();
|
||||
await testingUtils.blurMatInput();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be able to display label with asterisk', async () => {
|
||||
const asterisk = element.querySelector('.adf-asterisk');
|
||||
const asterisk = testingUtils.getByCSS('.adf-asterisk').nativeElement;
|
||||
|
||||
expect(asterisk).toBeTruthy();
|
||||
expect(asterisk.textContent).toEqual('*');
|
||||
@@ -99,10 +97,10 @@ describe('NumberWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).not.toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).not.toBeNull();
|
||||
});
|
||||
|
||||
@@ -119,10 +117,10 @@ describe('NumberWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
});
|
||||
|
||||
@@ -139,10 +137,10 @@ describe('NumberWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -22,9 +22,9 @@ import { FormModel } from '../core/form.model';
|
||||
import { TextWidgetComponent } from './text.widget';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatInputHarness } from '@angular/material/input/testing';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../../../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../../../testing/unit-testing-utils';
|
||||
|
||||
describe('TextWidgetComponent', () => {
|
||||
const form = new FormModel({ taskId: 'fake-task-id' });
|
||||
@@ -32,8 +32,8 @@ describe('TextWidgetComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let widget: TextWidgetComponent;
|
||||
let fixture: ComponentFixture<TextWidgetComponent>;
|
||||
let element: HTMLElement;
|
||||
let errorWidget: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -41,8 +41,8 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(TextWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
describe('when template is ready', () => {
|
||||
@@ -59,8 +59,7 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
expect(widget.field.value).toBe('');
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await input.setValue('TEXT');
|
||||
await testingUtils.fillMatInput('TEXT');
|
||||
|
||||
expect(widget.field.value).toBe('TEXT');
|
||||
});
|
||||
@@ -75,8 +74,7 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
const textWidgetLabel = element.querySelector('label');
|
||||
expect(textWidgetLabel.innerText).toBe('text-name');
|
||||
expect(testingUtils.getInnerTextByCSS('label')).toBe('text-name');
|
||||
});
|
||||
|
||||
it('should be able to set a placeholder for Text widget', async () => {
|
||||
@@ -91,8 +89,7 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const inputField = await loader.getHarness(MatInputHarness.with({ placeholder: 'Your name here' }));
|
||||
expect(inputField).toBeTruthy();
|
||||
expect(await testingUtils.getMatInputByPlaceholder('Your name here')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be able to set min/max length properties for Text widget', async () => {
|
||||
@@ -107,22 +104,21 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await input.setValue('TEXT');
|
||||
await testingUtils.fillMatInput('TEXT');
|
||||
|
||||
errorWidget = element.querySelector('.adf-error-text');
|
||||
errorWidget = testingUtils.getByCSS('.adf-error-text').nativeElement;
|
||||
expect(errorWidget.innerHTML).toBe('FORM.FIELD.VALIDATOR.AT_LEAST_LONG');
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
|
||||
await input.setValue('TEXT VALUE');
|
||||
await testingUtils.fillMatInput('TEXT VALUE');
|
||||
|
||||
errorWidget = element.querySelector('.adf-error-text');
|
||||
errorWidget = testingUtils.getByCSS('.adf-error-text')?.nativeElement;
|
||||
expect(widget.field.isValid).toBe(true);
|
||||
|
||||
await input.setValue('TEXT VALUE TOO LONG');
|
||||
await testingUtils.fillMatInput('TEXT VALUE TOO LONG');
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
|
||||
errorWidget = element.querySelector('.adf-error-text');
|
||||
errorWidget = testingUtils.getByCSS('.adf-error-text').nativeElement;
|
||||
expect(errorWidget.innerHTML).toBe('FORM.FIELD.VALIDATOR.NO_LONGER_THAN');
|
||||
});
|
||||
|
||||
@@ -137,14 +133,13 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await input.setValue('TEXT');
|
||||
await testingUtils.fillMatInput('TEXT');
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
|
||||
await input.setValue('8');
|
||||
await testingUtils.fillMatInput('8');
|
||||
expect(widget.field.isValid).toBe(true);
|
||||
|
||||
await input.setValue('8XYZ');
|
||||
await testingUtils.fillMatInput('8XYZ');
|
||||
expect(widget.field.isValid).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -159,10 +154,10 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should show tooltip', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await (await input.host()).hover();
|
||||
const host = await testingUtils.getMatInputHost();
|
||||
await host.hover();
|
||||
|
||||
const tooltip = await (await input.host()).getAttribute('title');
|
||||
const tooltip = await host.getAttribute('title');
|
||||
expect(tooltip).toBe('my custom tooltip');
|
||||
});
|
||||
});
|
||||
@@ -180,19 +175,18 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should be marked as invalid after interaction', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeFalsy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeFalsy();
|
||||
|
||||
await (await input.host()).blur();
|
||||
await testingUtils.blurMatInput();
|
||||
|
||||
expect(fixture.nativeElement.querySelector('.adf-invalid')).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('.adf-invalid')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be able to display label with asterisk', async () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const asterisk = element.querySelector('.adf-asterisk');
|
||||
const asterisk = testingUtils.getByCSS('.adf-asterisk').nativeElement;
|
||||
|
||||
expect(asterisk).toBeTruthy();
|
||||
expect(asterisk.textContent).toEqual('*');
|
||||
@@ -213,7 +207,7 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should be disabled on readonly forms', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
const input = await testingUtils.getMatInput();
|
||||
expect(await input.isDisabled()).toBe(true);
|
||||
});
|
||||
});
|
||||
@@ -233,28 +227,25 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
inputElement = element.querySelector<HTMLInputElement>('#text-id');
|
||||
inputElement = testingUtils.getByCSS('#text-id').nativeElement;
|
||||
});
|
||||
|
||||
it('should show text widget', async () => {
|
||||
expect(await loader.hasHarness(MatInputHarness)).toBe(true);
|
||||
expect(await testingUtils.checkIfMatInputExists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should show the field placeholder', async () => {
|
||||
const inputField = await loader.getHarness(MatInputHarness.with({ placeholder: 'simple placeholder' }));
|
||||
expect(inputField).toBeTruthy();
|
||||
expect(await testingUtils.checkIfMatInputExistsWithPlaceholder('simple placeholder')).toBeTrue();
|
||||
});
|
||||
|
||||
it('should show the field placeholder when clicked', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await (await input.host()).click();
|
||||
await testingUtils.clickMatInput();
|
||||
|
||||
const inputField = await loader.getHarness(MatInputHarness.with({ placeholder: 'simple placeholder' }));
|
||||
expect(inputField).toBeTruthy();
|
||||
expect(await testingUtils.checkIfMatInputExistsWithPlaceholder('simple placeholder')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should prevent text to be written if is not allowed by the mask on keyUp event', async () => {
|
||||
expect(element.querySelector('#text-id')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#text-id')).not.toBeNull();
|
||||
|
||||
inputElement.value = 'F';
|
||||
widget.field.value = 'F';
|
||||
@@ -265,12 +256,11 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
inputElement = element.querySelector<HTMLInputElement>('#text-id');
|
||||
expect(inputElement.value).toBe('');
|
||||
expect(testingUtils.getByCSS('#text-id').nativeElement.value).toBe('');
|
||||
});
|
||||
|
||||
it('should prevent text to be written if is not allowed by the mask on input event', async () => {
|
||||
expect(element.querySelector('#text-id')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#text-id')).not.toBeNull();
|
||||
|
||||
inputElement.value = 'F';
|
||||
widget.field.value = 'F';
|
||||
@@ -279,15 +269,14 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
inputElement = element.querySelector<HTMLInputElement>('#text-id');
|
||||
expect(inputElement.value).toBe('');
|
||||
expect(testingUtils.getByCSS('#text-id').nativeElement.value).toBe('');
|
||||
});
|
||||
|
||||
it('should allow masked configured value on keyUp event', async () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(element.querySelector('#text-id')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#text-id')).not.toBeNull();
|
||||
|
||||
inputElement.value = '1';
|
||||
widget.field.value = '1';
|
||||
@@ -298,15 +287,14 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const textEle = element.querySelector<HTMLInputElement>('#text-id');
|
||||
expect(textEle.value).toBe('1');
|
||||
expect(testingUtils.getByCSS('#text-id').nativeElement.value).toBe('1');
|
||||
});
|
||||
|
||||
it('should auto-fill masked configured value on keyUp event', async () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(element.querySelector('#text-id')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#text-id')).not.toBeNull();
|
||||
|
||||
inputElement.value = '12345678';
|
||||
widget.field.value = '12345678';
|
||||
@@ -317,8 +305,7 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const textEle = element.querySelector<HTMLInputElement>('#text-id');
|
||||
expect(textEle.value).toBe('12-345,67%');
|
||||
expect(testingUtils.getByCSS('#text-id').nativeElement.value).toBe('12-345,67%');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -336,7 +323,7 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
|
||||
fixture.detectChanges();
|
||||
inputElement = element.querySelector<HTMLInputElement>('#text-id');
|
||||
inputElement = testingUtils.getByCSS('#text-id').nativeElement;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -348,7 +335,7 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(element.querySelector('#text-id')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#text-id')).not.toBeNull();
|
||||
|
||||
inputElement.value = '1234';
|
||||
widget.field.value = '1234';
|
||||
@@ -359,8 +346,7 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const textEle = element.querySelector<HTMLInputElement>('#text-id');
|
||||
expect(textEle.value).toBe('12,34%');
|
||||
expect(testingUtils.getByCSS('#text-id').nativeElement.value).toBe('12,34%');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -380,16 +366,13 @@ describe('TextWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should show the input mask placeholder', async () => {
|
||||
const inputField = await loader.getHarness(MatInputHarness.with({ placeholder: 'Phone : (__) ___-___' }));
|
||||
expect(inputField).toBeTruthy();
|
||||
expect(await testingUtils.checkIfMatInputExistsWithPlaceholder('Phone : (__) ___-___')).toBeTrue();
|
||||
});
|
||||
|
||||
it('should show the input mask placeholder when clicked', async () => {
|
||||
const input = await loader.getHarness(MatInputHarness);
|
||||
await (await input.host()).click();
|
||||
await testingUtils.clickMatInput();
|
||||
|
||||
const inputField = await loader.getHarness(MatInputHarness.with({ placeholder: 'Phone : (__) ___-___' }));
|
||||
expect(inputField).toBeTruthy();
|
||||
expect(await testingUtils.checkIfMatInputExistsWithPlaceholder('Phone : (__) ___-___')).toBeTrue();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -407,10 +390,10 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).not.toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).not.toBeNull();
|
||||
});
|
||||
|
||||
@@ -427,10 +410,10 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
});
|
||||
|
||||
@@ -447,10 +430,10 @@ describe('TextWidgetComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const widgetContainer = element.querySelector('.adf-left-label-input-container');
|
||||
const widgetContainer = testingUtils.getByCSS('.adf-left-label-input-container');
|
||||
expect(widgetContainer).toBeNull();
|
||||
|
||||
const adfLeftLabel = element.querySelector('.adf-left-label');
|
||||
const adfLeftLabel = testingUtils.getByCSS('.adf-left-label');
|
||||
expect(adfLeftLabel).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { HeaderComponent } from './header.component';
|
||||
import { UnitTestingUtils } from '../testing';
|
||||
|
||||
describe('HeaderComponent', () => {
|
||||
let component: HeaderComponent;
|
||||
let fixture: ComponentFixture<HeaderComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const getLogoImgElement = () => fixture.nativeElement.querySelector('.adf-toolbar-logo');
|
||||
const getTitleElement = () => fixture.nativeElement.querySelector('.adf-toolbar-title');
|
||||
const getLogoImgElement = () => testingUtils.getByCSS('.adf-toolbar-logo')?.nativeElement;
|
||||
const getTitleElement = () => testingUtils.getByCSS('.adf-toolbar-title')?.nativeElement;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
@@ -33,6 +35,7 @@ describe('HeaderComponent', () => {
|
||||
|
||||
fixture = TestBed.createComponent(HeaderComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
|
||||
@@ -18,11 +18,13 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import { NavbarItemComponent } from './navbar-item.component';
|
||||
import { UnitTestingUtils } from '../../testing/unit-testing-utils';
|
||||
|
||||
describe('NavbarItemComponent', () => {
|
||||
let component: NavbarItemComponent;
|
||||
let fixture: ComponentFixture<NavbarItemComponent>;
|
||||
let button: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
@@ -31,11 +33,12 @@ describe('NavbarItemComponent', () => {
|
||||
|
||||
fixture = TestBed.createComponent(NavbarItemComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
component.label = 'Test Label';
|
||||
component.routerLink = '/expected-route';
|
||||
fixture.detectChanges();
|
||||
|
||||
button = fixture.nativeElement.querySelector('.adf-navbar-item-btn');
|
||||
button = testingUtils.getByCSS('.adf-navbar-item-btn').nativeElement;
|
||||
});
|
||||
|
||||
it('should display label', () => {
|
||||
|
||||
@@ -20,10 +20,12 @@ import { MatButtonModule } from '@angular/material/button';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { NavbarComponent } from './navbar.component';
|
||||
import { UnitTestingUtils } from '../../testing/unit-testing-utils';
|
||||
|
||||
describe('NavbarComponent', () => {
|
||||
let component: NavbarComponent;
|
||||
let fixture: ComponentFixture<NavbarComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
@@ -32,6 +34,7 @@ describe('NavbarComponent', () => {
|
||||
|
||||
fixture = TestBed.createComponent(NavbarComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
@@ -42,7 +45,7 @@ describe('NavbarComponent', () => {
|
||||
];
|
||||
component.items = testItems;
|
||||
fixture.detectChanges();
|
||||
const renderedItems = fixture.nativeElement.querySelectorAll('.adf-navbar-item-btn');
|
||||
const renderedItems = testingUtils.getAllByCSS('.adf-navbar-item-btn');
|
||||
expect(renderedItems.length).toBe(testItems.length);
|
||||
});
|
||||
|
||||
@@ -53,7 +56,7 @@ describe('NavbarComponent', () => {
|
||||
];
|
||||
component.items = testItems;
|
||||
fixture.detectChanges();
|
||||
const renderedItems = fixture.nativeElement.querySelectorAll('.adf-navbar-item-btn');
|
||||
const renderedItems = testingUtils.getAllByCSS('.adf-navbar-item-btn').map((item) => item.nativeElement);
|
||||
testItems.forEach((item, index) => {
|
||||
expect(renderedItems[index].textContent).toContain(item.label);
|
||||
expect(renderedItems[index].getAttribute('ng-reflect-router-link')).toContain(item.routerLink);
|
||||
|
||||
@@ -19,13 +19,13 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { IdentityUserInfoComponent } from './identity-user-info.component';
|
||||
import { CoreTestingModule } from '../testing/core.testing.module';
|
||||
import { MatMenuModule } from '@angular/material/menu';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { IdentityUserModel } from '../auth/models/identity-user.model';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
describe('IdentityUserInfoComponent', () => {
|
||||
let component: IdentityUserInfoComponent;
|
||||
let fixture: ComponentFixture<IdentityUserInfoComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const identityUserMock = {
|
||||
firstName: 'fake-identity-first-name',
|
||||
@@ -55,7 +55,7 @@ describe('IdentityUserInfoComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(IdentityUserInfoComponent);
|
||||
component = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
spyOn(window, 'requestAnimationFrame').and.returnValue(1);
|
||||
});
|
||||
@@ -65,15 +65,15 @@ describe('IdentityUserInfoComponent', () => {
|
||||
});
|
||||
|
||||
it('should not show any image if the user is not logged in', () => {
|
||||
expect(element.querySelector('#userinfo_container')).toBeDefined();
|
||||
expect(element.querySelector('#logged-user-img')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#userinfo_container')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#logged-user-img')).toBeNull();
|
||||
});
|
||||
|
||||
it('should NOT have users immediately after ngOnInit', () => {
|
||||
expect(element.querySelector('#userinfo_container')).toBeDefined();
|
||||
expect(element.querySelector('#ecm_username')).toBeNull();
|
||||
expect(element.querySelector('#bpm_username')).toBeNull();
|
||||
expect(element.querySelector('#user-profile-lists')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#userinfo_container')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#ecm_username')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#bpm_username')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#user-profile-lists')).toBeNull();
|
||||
});
|
||||
|
||||
describe('when identity user is logged in', () => {
|
||||
@@ -84,21 +84,21 @@ describe('IdentityUserInfoComponent', () => {
|
||||
|
||||
it('should show the identity user initials', async () => {
|
||||
await whenFixtureReady();
|
||||
expect(element.querySelector('#userinfo_container')).toBeDefined();
|
||||
expect(element.querySelector('[data-automation-id="user-initials-image"]')?.textContent).toContain('ff');
|
||||
expect(testingUtils.getByCSS('#userinfo_container')).toBeDefined();
|
||||
expect(testingUtils.getByDataAutomationId('user-initials-image')?.nativeElement?.textContent).toContain('ff');
|
||||
});
|
||||
|
||||
it('should show full name next to the user image', async () => {
|
||||
await whenFixtureReady();
|
||||
|
||||
const imageButton = element.querySelector<HTMLButtonElement>('#identity-user-image');
|
||||
const imageButton: HTMLButtonElement = fixture.nativeElement.querySelector('#identity-user-image');
|
||||
imageButton?.click();
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('#userinfo_container')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#userinfo_container')).not.toBeNull();
|
||||
|
||||
const identityUserName = fixture.debugElement.query(By.css('#identity-username'));
|
||||
const identityUserName = testingUtils.getByCSS('#identity-username');
|
||||
expect(identityUserName).toBeDefined();
|
||||
expect(identityUserName).not.toBeNull();
|
||||
expect(identityUserName.nativeElement.textContent).toContain('fake-identity-first-name fake-identity-last-name');
|
||||
@@ -108,35 +108,35 @@ describe('IdentityUserInfoComponent', () => {
|
||||
component.identityUser = identityUserWithOutFirstNameMock;
|
||||
await whenFixtureReady();
|
||||
|
||||
const fullNameElement = element.querySelector('#adf-userinfo-identity-name-display');
|
||||
expect(element.querySelector('#userinfo_container')).toBeDefined();
|
||||
expect(element.querySelector('#adf-userinfo-identity-name-display')).not.toBeNull();
|
||||
expect(fullNameElement?.textContent).toContain('fake-identity-last-name');
|
||||
expect(fullNameElement?.textContent).not.toContain('fake-identity-first-name');
|
||||
const fullNameElement = testingUtils.getByCSS('#adf-userinfo-identity-name-display');
|
||||
expect(testingUtils.getByCSS('#userinfo_container')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#adf-userinfo-identity-name-display')).not.toBeNull();
|
||||
expect(fullNameElement?.nativeElement?.textContent).toContain('fake-identity-last-name');
|
||||
expect(fullNameElement?.nativeElement?.textContent).not.toContain('fake-identity-first-name');
|
||||
});
|
||||
|
||||
it('should not show first name if it is null string', async () => {
|
||||
component.identityUser = identityUserWithOutFirstNameMock;
|
||||
await whenFixtureReady();
|
||||
|
||||
const fullNameElement = element.querySelector('#adf-userinfo-identity-name-display');
|
||||
const fullNameElement = testingUtils.getByCSS('#adf-userinfo-identity-name-display');
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('#userinfo_container')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#userinfo_container')).toBeDefined();
|
||||
expect(fullNameElement).toBeDefined();
|
||||
expect(fullNameElement?.textContent).toContain('fake-identity-last-name');
|
||||
expect(fullNameElement?.textContent).not.toContain('null');
|
||||
expect(fullNameElement?.nativeElement?.textContent).toContain('fake-identity-last-name');
|
||||
expect(fullNameElement?.nativeElement?.textContent).not.toContain('null');
|
||||
});
|
||||
|
||||
it('should not show last name if it is null string', async () => {
|
||||
component.identityUser = identityUserWithOutLastNameMock;
|
||||
await whenFixtureReady();
|
||||
|
||||
const fullNameElement = element.querySelector('#adf-userinfo-identity-name-display');
|
||||
const fullNameElement = testingUtils.getByCSS('#adf-userinfo-identity-name-display');
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('#userinfo_container')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#userinfo_container')).toBeDefined();
|
||||
expect(fullNameElement).toBeDefined();
|
||||
expect(fullNameElement?.textContent).toContain('fake-identity-first-name');
|
||||
expect(fullNameElement?.textContent).not.toContain('null');
|
||||
expect(fullNameElement?.nativeElement?.textContent).toContain('fake-identity-first-name');
|
||||
expect(fullNameElement?.nativeElement?.textContent).not.toContain('null');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -18,19 +18,18 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatTabChangeEvent } from '@angular/material/tabs';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { InfoDrawerComponent, InfoDrawerTabComponent } from './info-drawer.component';
|
||||
import { ESCAPE } from '@angular/cdk/keycodes';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatTabGroupHarness } from '@angular/material/tabs/testing';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NoopTranslateModule } from '../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
describe('InfoDrawerComponent', () => {
|
||||
let element: HTMLElement;
|
||||
let component: InfoDrawerComponent;
|
||||
let fixture: ComponentFixture<InfoDrawerComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -38,12 +37,12 @@ describe('InfoDrawerComponent', () => {
|
||||
});
|
||||
|
||||
fixture = TestBed.createComponent(InfoDrawerComponent);
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('should define InfoDrawerTabLayout', () => {
|
||||
const infoDrawerTabLayout = element.querySelector('adf-info-drawer-layout');
|
||||
const infoDrawerTabLayout = testingUtils.getByCSS('adf-info-drawer-layout');
|
||||
expect(infoDrawerTabLayout).toBeDefined();
|
||||
});
|
||||
|
||||
@@ -57,7 +56,7 @@ describe('InfoDrawerComponent', () => {
|
||||
it('should render the title', () => {
|
||||
component.title = 'FakeTitle';
|
||||
fixture.detectChanges();
|
||||
const title: any = fixture.debugElement.queryAll(By.css('[info-drawer-title]'));
|
||||
const title = testingUtils.getAllByCSS('[info-drawer-title]');
|
||||
expect(title.length).toBe(1);
|
||||
expect(title[0].nativeElement.innerText).toBe('FakeTitle');
|
||||
});
|
||||
@@ -101,8 +100,9 @@ describe('Custom InfoDrawer', () => {
|
||||
let fixture: ComponentFixture<CustomInfoDrawerComponent>;
|
||||
let component: CustomInfoDrawerComponent;
|
||||
let loader: HarnessLoader;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const getNodeIcon = () => fixture.debugElement.queryAll(By.css('[info-drawer-node-icon]'));
|
||||
const getNodeIcon = () => testingUtils.getAllByCSS('[info-drawer-node-icon]');
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -113,6 +113,7 @@ describe('Custom InfoDrawer', () => {
|
||||
fixture.detectChanges();
|
||||
component = fixture.componentInstance;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -121,36 +122,30 @@ describe('Custom InfoDrawer', () => {
|
||||
|
||||
it('should render the title', () => {
|
||||
fixture.detectChanges();
|
||||
const title: any = fixture.debugElement.queryAll(By.css('[info-drawer-title]'));
|
||||
const title = testingUtils.getAllByCSS('[info-drawer-title]');
|
||||
expect(title.length).toBe(1);
|
||||
expect(title[0].nativeElement.innerText).toBe('Fake Title Custom');
|
||||
});
|
||||
|
||||
it('should select the tab 1 (index 0) as default', async () => {
|
||||
fixture.detectChanges();
|
||||
const tabs = await loader.getHarness(MatTabGroupHarness);
|
||||
const selectedTab = await tabs.getSelectedTab();
|
||||
|
||||
expect(await selectedTab.getLabel()).toEqual('Tab1');
|
||||
expect(await testingUtils.getSelectedTabLabelFromMatTabGroup()).toEqual('Tab1');
|
||||
});
|
||||
|
||||
it('should select the tab 2 (index 1)', async () => {
|
||||
component.tabIndex = 1;
|
||||
fixture.detectChanges();
|
||||
const tabs = await loader.getHarness(MatTabGroupHarness);
|
||||
const selectedTab = await tabs.getSelectedTab();
|
||||
|
||||
expect(await selectedTab.getLabel()).toEqual('Tab2');
|
||||
expect(await testingUtils.getSelectedTabLabelFromMatTabGroup()).toEqual('Tab2');
|
||||
});
|
||||
|
||||
it('should render a tab with icon', async () => {
|
||||
component.tabIndex = 2;
|
||||
fixture.detectChanges();
|
||||
const tabs = await loader.getHarness(MatTabGroupHarness);
|
||||
const selectedTab = await tabs.getSelectedTab();
|
||||
|
||||
expect(await selectedTab.getLabel()).toContain('Tab3');
|
||||
expect(await selectedTab.getLabel()).toContain('tab-icon');
|
||||
expect(await testingUtils.getSelectedTabLabelFromMatTabGroup()).toContain('Tab3');
|
||||
expect(await testingUtils.getSelectedTabLabelFromMatTabGroup()).toContain('tab-icon');
|
||||
});
|
||||
|
||||
it('should render a icon with title', () => {
|
||||
@@ -176,7 +171,8 @@ class VisibilityInfoDrawerComponent extends InfoDrawerComponent {
|
||||
describe('Header visibility InfoDrawer', () => {
|
||||
let fixture: ComponentFixture<VisibilityInfoDrawerComponent>;
|
||||
let component: VisibilityInfoDrawerComponent;
|
||||
const getNodeIcon = () => fixture.debugElement.queryAll(By.css('[info-drawer-node-icon]'));
|
||||
let testingUtils: UnitTestingUtils;
|
||||
const getNodeIcon = () => testingUtils.getAllByCSS('[info-drawer-node-icon]');
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -185,12 +181,13 @@ describe('Header visibility InfoDrawer', () => {
|
||||
fixture = TestBed.createComponent(VisibilityInfoDrawerComponent);
|
||||
fixture.detectChanges();
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('should show info drawer header by default', () => {
|
||||
component.icon = '/assets/images/ft_ic_miscellaneous.svg';
|
||||
fixture.detectChanges();
|
||||
const title: any = fixture.debugElement.queryAll(By.css('[info-drawer-title]'));
|
||||
const title = testingUtils.getAllByCSS('[info-drawer-title]');
|
||||
const icon = getNodeIcon();
|
||||
const srcAttribute = icon[0].nativeElement.getAttribute('src');
|
||||
expect(title.length).toBe(1);
|
||||
@@ -203,7 +200,7 @@ describe('Header visibility InfoDrawer', () => {
|
||||
it('should not show info drawer header with icon when showHeader is false', () => {
|
||||
component.showHeader = false;
|
||||
fixture.detectChanges();
|
||||
const title: any = fixture.debugElement.queryAll(By.css('[info-drawer-title]'));
|
||||
const title = testingUtils.getAllByCSS('[info-drawer-title]');
|
||||
const icon = getNodeIcon();
|
||||
expect(title.length).toBe(0);
|
||||
expect(icon.length).toBe(0);
|
||||
|
||||
@@ -18,16 +18,16 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { HeaderLayoutComponent } from './header.component';
|
||||
import { CoreTestingModule } from '../../../testing/core.testing.module';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { Component } from '@angular/core';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatToolbarHarness } from '@angular/material/toolbar/testing';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('HeaderLayoutComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
let fixture: ComponentFixture<HeaderLayoutComponent>;
|
||||
let component: HeaderLayoutComponent;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
describe('Input parameters', () => {
|
||||
beforeEach(() => {
|
||||
@@ -37,6 +37,7 @@ describe('HeaderLayoutComponent', () => {
|
||||
fixture = TestBed.createComponent(HeaderLayoutComponent);
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -44,24 +45,21 @@ describe('HeaderLayoutComponent', () => {
|
||||
});
|
||||
|
||||
it('title element should been displayed', () => {
|
||||
const titleElement = fixture.debugElement.query(By.css('.adf-app-title'));
|
||||
expect(titleElement === null).toBeFalsy();
|
||||
expect(testingUtils.getByCSS('.adf-app-title')).toBeDefined();
|
||||
});
|
||||
|
||||
it('should show TEST TITLE', () => {
|
||||
component.title = 'TEST TITLE';
|
||||
fixture.detectChanges();
|
||||
|
||||
const titleElement = fixture.nativeElement.querySelector('.adf-app-title');
|
||||
expect(titleElement.innerText).toEqual('TEST TITLE');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-app-title')).toEqual('TEST TITLE');
|
||||
});
|
||||
|
||||
it('color attribute should be present on toolbar', async () => {
|
||||
component.color = 'primary';
|
||||
fixture.detectChanges();
|
||||
|
||||
const toolbar = await loader.getHarness(MatToolbarHarness);
|
||||
const host = await toolbar.host();
|
||||
const host = await testingUtils.getMatToolbarHost();
|
||||
|
||||
expect(await host.getAttribute('ng-reflect-color')).toBe('primary');
|
||||
});
|
||||
@@ -70,17 +68,17 @@ describe('HeaderLayoutComponent', () => {
|
||||
component.color = '#42f57e';
|
||||
fixture.detectChanges();
|
||||
|
||||
const toolbarHarness = await loader.getHarness(MatToolbarHarness);
|
||||
const toolbar = await toolbarHarness.host();
|
||||
expect(await toolbar.getCssValue('background-color')).toBe('rgb(66, 245, 126)');
|
||||
const host = await testingUtils.getMatToolbarHost();
|
||||
|
||||
expect(await host.getCssValue('background-color')).toBe('rgb(66, 245, 126)');
|
||||
});
|
||||
|
||||
it('should background image be set to none if is not provided', async () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const toolbarHarness = await loader.getHarness(MatToolbarHarness);
|
||||
const toolbar = await toolbarHarness.host();
|
||||
expect(await toolbar.getCssValue('background-image')).toEqual('none');
|
||||
const host = await testingUtils.getMatToolbarHost();
|
||||
|
||||
expect(await host.getCssValue('background-image')).toEqual('none');
|
||||
});
|
||||
|
||||
it('should background image be set to none if is provided as empty string', async () => {
|
||||
@@ -88,25 +86,25 @@ describe('HeaderLayoutComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
const toolbarHarness = await loader.getHarness(MatToolbarHarness);
|
||||
const toolbar = await toolbarHarness.host();
|
||||
expect(await toolbar.getCssValue('background-image')).toEqual('none');
|
||||
const host = await testingUtils.getMatToolbarHost();
|
||||
|
||||
expect(await host.getCssValue('background-image')).toEqual('none');
|
||||
});
|
||||
|
||||
it('should change background image when provided', async () => {
|
||||
component.backgroundImage = '/assets/someImage.png';
|
||||
fixture.detectChanges();
|
||||
|
||||
const toolbarHarness = await loader.getHarness(MatToolbarHarness);
|
||||
const toolbar = await toolbarHarness.host();
|
||||
expect(await toolbar.getCssValue('background-image')).toContain('/assets/someImage.png');
|
||||
const host = await testingUtils.getMatToolbarHost();
|
||||
|
||||
expect(await host.getCssValue('background-image')).toContain('/assets/someImage.png');
|
||||
});
|
||||
|
||||
it('should display the img element with the expected src if a logo path is set', () => {
|
||||
component.logo = 'logo.png';
|
||||
fixture.detectChanges();
|
||||
|
||||
const logo = fixture.nativeElement.querySelector('.adf-app-logo');
|
||||
const logo = testingUtils.getByCSS('.adf-app-logo').nativeElement;
|
||||
const src = logo.getAttribute('src');
|
||||
expect(src).toEqual('logo.png');
|
||||
});
|
||||
@@ -115,7 +113,7 @@ describe('HeaderLayoutComponent', () => {
|
||||
component.redirectUrl = '/customHomePage';
|
||||
fixture.detectChanges();
|
||||
|
||||
const logoAnchor = fixture.nativeElement.querySelector('a');
|
||||
const logoAnchor = testingUtils.getByCSS('a').nativeElement;
|
||||
expect(/\/customHomePage$/.test(logoAnchor.href)).toEqual(true);
|
||||
});
|
||||
|
||||
@@ -123,7 +121,7 @@ describe('HeaderLayoutComponent', () => {
|
||||
component.tooltip = 'logo title';
|
||||
fixture.detectChanges();
|
||||
|
||||
const logoAnchor = fixture.nativeElement.querySelector('a');
|
||||
const logoAnchor = testingUtils.getByCSS('a').nativeElement;
|
||||
expect(logoAnchor.title).toEqual('logo title');
|
||||
});
|
||||
|
||||
@@ -131,9 +129,8 @@ describe('HeaderLayoutComponent', () => {
|
||||
component.showSidenavToggle = true;
|
||||
fixture.detectChanges();
|
||||
spyOn(component.clicked, 'emit');
|
||||
const button = fixture.nativeElement.querySelector('.adf-menu-icon');
|
||||
|
||||
button.dispatchEvent(new Event('click'));
|
||||
testingUtils.clickByCSS('.adf-menu-icon');
|
||||
fixture.detectChanges();
|
||||
expect(component.clicked.emit).toHaveBeenCalledWith(true);
|
||||
});
|
||||
@@ -142,23 +139,21 @@ describe('HeaderLayoutComponent', () => {
|
||||
component.showSidenavToggle = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const button = fixture.nativeElement.querySelector('.adf-menu-icon');
|
||||
expect(button === null).toBeFalsy();
|
||||
expect(testingUtils.getByCSS('.adf-menu-icon')).toBeDefined();
|
||||
});
|
||||
|
||||
it('if showSidenavToggle is false the button menu should not be displayed', () => {
|
||||
component.showSidenavToggle = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const button = fixture.nativeElement.querySelector('.adf-menu-icon');
|
||||
expect(button === null).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('.adf-menu-icon')).toBeNull();
|
||||
});
|
||||
|
||||
it('if expandedSidenav is false aria expanded should be false too', () => {
|
||||
component.expandedSidenav = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const nodeAttributes = fixture.debugElement.nativeElement.querySelector('#adf-sidebar-toggle-start').attributes as NamedNodeMap;
|
||||
const nodeAttributes = testingUtils.getByCSS('#adf-sidebar-toggle-start').nativeElement.attributes as NamedNodeMap;
|
||||
expect(nodeAttributes.getNamedItem('aria-expanded').value).toEqual('false');
|
||||
});
|
||||
|
||||
@@ -166,7 +161,7 @@ describe('HeaderLayoutComponent', () => {
|
||||
component.expandedSidenav = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const nodeAttributes = fixture.debugElement.nativeElement.querySelector('#adf-sidebar-toggle-start').attributes as NamedNodeMap;
|
||||
const nodeAttributes = testingUtils.getByCSS('#adf-sidebar-toggle-start').nativeElement.attributes as NamedNodeMap;
|
||||
expect(nodeAttributes.getNamedItem('aria-expanded').value).toEqual('true');
|
||||
});
|
||||
|
||||
@@ -174,7 +169,7 @@ describe('HeaderLayoutComponent', () => {
|
||||
component.expandedSidenav = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const button = fixture.nativeElement.querySelector('#adf-sidebar-toggle-start');
|
||||
const button = testingUtils.getByCSS('#adf-sidebar-toggle-start').nativeElement;
|
||||
button.click();
|
||||
|
||||
fixture.detectChanges();
|
||||
@@ -194,45 +189,37 @@ describe('HeaderLayoutComponent', () => {
|
||||
component.position = 'end';
|
||||
fixture.detectChanges();
|
||||
|
||||
const buttonStart = fixture.nativeElement.querySelector('#adf-sidebar-toggle-start');
|
||||
const buttonEnd = fixture.nativeElement.querySelector('#adf-sidebar-toggle-end');
|
||||
expect(buttonStart === null).toBeTruthy();
|
||||
expect(buttonEnd === null).toBeFalsy();
|
||||
expect(testingUtils.getByCSS('#adf-sidebar-toggle-start')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#adf-sidebar-toggle-end')).toBeDefined();
|
||||
});
|
||||
|
||||
it('if position is start the button menu should be at the start', () => {
|
||||
component.position = 'start';
|
||||
fixture.detectChanges();
|
||||
|
||||
const buttonStart = fixture.nativeElement.querySelector('#adf-sidebar-toggle-start');
|
||||
const buttonEnd = fixture.nativeElement.querySelector('#adf-sidebar-toggle-end');
|
||||
expect(buttonStart === null).toBeFalsy();
|
||||
expect(buttonEnd === null).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('#adf-sidebar-toggle-start')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#adf-sidebar-toggle-end')).toBeNull();
|
||||
});
|
||||
|
||||
it('should display the logo image when the input is set to true [showLogo=true]', () => {
|
||||
component.showLogo = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const logo = fixture.debugElement.query(By.css('.adf-app-logo'));
|
||||
|
||||
expect(logo.nativeElement).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-app-logo')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should NOT display the logo image when the input is set to false [showLogo=false]', () => {
|
||||
component.showLogo = false;
|
||||
fixture.detectChanges();
|
||||
|
||||
const logo = fixture.debugElement.query(By.css('.adf-app-logo'));
|
||||
|
||||
expect(logo).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-app-logo')).toBeNull();
|
||||
});
|
||||
|
||||
it('should display the default toggle icon', () => {
|
||||
component.showSidenavToggle = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const toggleIcon = fixture.debugElement.query(By.css('.adf-menu-icon'));
|
||||
const toggleIcon = testingUtils.getByCSS('.adf-menu-icon');
|
||||
|
||||
expect(toggleIcon.nativeElement.textContent.trim()).toBe('menu');
|
||||
});
|
||||
@@ -242,7 +229,7 @@ describe('HeaderLayoutComponent', () => {
|
||||
component.toggleIcon = 'apps';
|
||||
fixture.detectChanges();
|
||||
|
||||
const toggleIcon = fixture.debugElement.query(By.css('.adf-menu-icon'));
|
||||
const toggleIcon = testingUtils.getByCSS('.adf-menu-icon');
|
||||
|
||||
expect(toggleIcon.nativeElement.textContent.trim()).toBe('apps');
|
||||
});
|
||||
@@ -268,9 +255,9 @@ describe('HeaderLayoutComponent', () => {
|
||||
|
||||
it('should project the provided nodes into the component', () => {
|
||||
const hostFixture = TestBed.createComponent(HeaderLayoutTesterComponent);
|
||||
testingUtils.setDebugElement(hostFixture.debugElement);
|
||||
hostFixture.detectChanges();
|
||||
const innerText = hostFixture.nativeElement.querySelector('p').innerText;
|
||||
expect(innerText).toEqual('Test text');
|
||||
expect(testingUtils.getInnerTextByCSS('p')).toEqual('Test text');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+12
-15
@@ -22,19 +22,20 @@ import { CoreTestingModule } from '../../../testing/core.testing.module';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { MatMenuModule } from '@angular/material/menu';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
describe('SidebarActionMenuComponent', () => {
|
||||
let element: HTMLElement;
|
||||
let component: SidebarActionMenuComponent;
|
||||
let fixture: ComponentFixture<SidebarActionMenuComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule, SidebarActionMenuComponent]
|
||||
});
|
||||
fixture = TestBed.createComponent(SidebarActionMenuComponent);
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -45,7 +46,7 @@ describe('SidebarActionMenuComponent', () => {
|
||||
component.title = 'Fake-Title';
|
||||
component.expanded = true;
|
||||
fixture.detectChanges();
|
||||
const title = element.querySelector('.adf-sidebar-action-menu-text');
|
||||
const title = testingUtils.getByCSS('.adf-sidebar-action-menu-text').nativeElement;
|
||||
fixture.detectChanges();
|
||||
expect(title.textContent).toBe('Fake-Title');
|
||||
});
|
||||
@@ -81,7 +82,7 @@ class CustomSidebarActionMenuComponent {
|
||||
describe('Custom SidebarActionMenuComponent', () => {
|
||||
let fixture: ComponentFixture<CustomSidebarActionMenuComponent>;
|
||||
let component: CustomSidebarActionMenuComponent;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -90,43 +91,39 @@ describe('Custom SidebarActionMenuComponent', () => {
|
||||
fixture = TestBed.createComponent(CustomSidebarActionMenuComponent);
|
||||
fixture.detectChanges();
|
||||
component = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('should defined adf-sidebar-action-menu', () => {
|
||||
fixture.detectChanges();
|
||||
element = fixture.nativeElement.querySelector('adf-sidebar-action-menu');
|
||||
expect(element).toBeDefined();
|
||||
expect(testingUtils.getByCSS('adf-sidebar-action-menu')).toBeDefined();
|
||||
});
|
||||
|
||||
it('should display the title', () => {
|
||||
component.title = 'FakeTitle';
|
||||
fixture.detectChanges();
|
||||
const title = element.querySelector('.adf-sidebar-action-menu-text');
|
||||
const title = testingUtils.getByCSS('.adf-sidebar-action-menu-text').nativeElement;
|
||||
fixture.detectChanges();
|
||||
expect(title.textContent).toBe('FakeTitle');
|
||||
});
|
||||
|
||||
it('should render the adf-sidebar-menu-options', async () => {
|
||||
fixture.detectChanges();
|
||||
const actionButton = fixture.nativeElement.querySelector('.adf-sidebar-action-menu-button');
|
||||
const options = fixture.nativeElement.querySelectorAll('.adf-sidebar-action-menu-options');
|
||||
actionButton.click();
|
||||
const options = testingUtils.getAllByCSS('.adf-sidebar-action-menu-options');
|
||||
testingUtils.clickByCSS('.adf-sidebar-action-menu-button');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(actionButton).not.toBeNull();
|
||||
expect(actionButton).toBeDefined();
|
||||
expect(options).toBeDefined();
|
||||
expect(actionButton.innerText.trim()).toBe('Fake titlearrow_drop_down');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-sidebar-action-menu-button').trim()).toBe('Fake titlearrow_drop_down');
|
||||
});
|
||||
|
||||
it('should show icon on icon menu', () => {
|
||||
component.title = 'FakeTitle';
|
||||
component.expanded = false;
|
||||
fixture.detectChanges();
|
||||
const actionIcon = fixture.nativeElement.querySelector('.adf-sidebar-action-menu-icon');
|
||||
const actionIcon = testingUtils.getByCSS('.adf-sidebar-action-menu-icon').nativeElement;
|
||||
expect(actionIcon).not.toBeNull();
|
||||
expect(actionIcon).toBeDefined();
|
||||
expect(actionIcon.innerText.trim()).toBe('queue');
|
||||
|
||||
+12
-18
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { SidenavLayoutComponent } from './sidenav-layout.component';
|
||||
import { Component } from '@angular/core';
|
||||
import { MediaMatcher } from '@angular/cdk/layout';
|
||||
@@ -27,6 +26,7 @@ import { UserPreferencesService } from '../../../common/services/user-preference
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { of } from 'rxjs';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-test-component-for-sidenav',
|
||||
@@ -157,6 +157,7 @@ describe('Template transclusion', () => {
|
||||
let fixture: ComponentFixture<any>;
|
||||
let mediaMatcher: MediaMatcher;
|
||||
let mediaQueryList: any;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -174,53 +175,46 @@ describe('Template transclusion', () => {
|
||||
spyOn(mediaMatcher, 'matchMedia').and.callFake(() => mediaQueryList);
|
||||
|
||||
fixture = TestBed.createComponent(SidenavLayoutTesterComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
describe('adf-sidenav-layout-navigation', () => {
|
||||
const injectedElementSelector = By.css('[data-automation-id="adf-layout-container"] #nav-test');
|
||||
const injectedElementSelector = '[data-automation-id="adf-layout-container"] #nav-test';
|
||||
|
||||
it('should contain the transcluded side navigation template', () => {
|
||||
const injectedElement = fixture.debugElement.query(injectedElementSelector);
|
||||
|
||||
expect(injectedElement === null).toBe(false);
|
||||
expect(testingUtils.getByCSS(injectedElementSelector)).toBeDefined();
|
||||
});
|
||||
|
||||
it('should let the isMenuMinimized property of component to be accessed by the transcluded template', () => {
|
||||
const injectedElement = fixture.debugElement.query(injectedElementSelector);
|
||||
|
||||
expect(injectedElement.nativeElement.innerText.trim()).toBe('variable-is-injected');
|
||||
expect(testingUtils.getInnerTextByCSS(injectedElementSelector).trim()).toBe('variable-is-injected');
|
||||
});
|
||||
});
|
||||
|
||||
describe('adf-sidenav-layout-header', () => {
|
||||
const outerHeaderSelector = By.css('.adf-sidenav-layout-full-space > #header-test');
|
||||
const innerHeaderSelector = By.css('.adf-layout__content > #header-test');
|
||||
const outerHeaderSelector = '.adf-sidenav-layout-full-space > #header-test';
|
||||
const innerHeaderSelector = '.adf-layout__content > #header-test';
|
||||
|
||||
it('should contain the transcluded header template outside of the layout-container', () => {
|
||||
mediaQueryList.matches = false;
|
||||
fixture.detectChanges();
|
||||
const outerHeaderElement = fixture.debugElement.query(outerHeaderSelector);
|
||||
|
||||
expect(outerHeaderElement).toBeDefined();
|
||||
expect(testingUtils.getByCSS(outerHeaderSelector)).toBeDefined();
|
||||
});
|
||||
|
||||
it('should contain the transcluded header template inside of the layout-container', () => {
|
||||
mediaQueryList.matches = true;
|
||||
|
||||
fixture.detectChanges();
|
||||
const innerHeaderElement = fixture.debugElement.query(innerHeaderSelector);
|
||||
|
||||
expect(innerHeaderElement).toBeDefined();
|
||||
expect(testingUtils.getByCSS(innerHeaderSelector)).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('adf-sidenav-layout-content', () => {
|
||||
const injectedElementSelector = By.css('[data-automation-id="adf-layout-container"] #content-test');
|
||||
const injectedElementSelector = '[data-automation-id="adf-layout-container"] #content-test';
|
||||
|
||||
it('should contain the transcluded content template', () => {
|
||||
const injectedElement = fixture.debugElement.query(injectedElementSelector);
|
||||
expect(injectedElement === null).toBe(false);
|
||||
expect(testingUtils.getByCSS(injectedElementSelector)).toBeDefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+10
-7
@@ -15,18 +15,21 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { BasicAlfrescoAuthService, CoreTestingModule, LoginDialogPanelComponent } from '@alfresco/adf-core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { of } from 'rxjs';
|
||||
import { OidcAuthenticationService } from '../../../auth/oidc/oidc-authentication.service';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
import { LoginDialogPanelComponent } from './login-dialog-panel.component';
|
||||
import { BasicAlfrescoAuthService } from '../../../auth/basic-auth/basic-alfresco-auth.service';
|
||||
import { CoreTestingModule } from '../../../testing/core.testing.module';
|
||||
|
||||
describe('LoginDialogPanelComponent', () => {
|
||||
let component: LoginDialogPanelComponent;
|
||||
let fixture: ComponentFixture<LoginDialogPanelComponent>;
|
||||
let element: HTMLElement;
|
||||
let usernameInput: HTMLInputElement;
|
||||
let passwordInput: HTMLInputElement;
|
||||
let basicAlfrescoAuthService: BasicAlfrescoAuthService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -36,14 +39,14 @@ describe('LoginDialogPanelComponent', () => {
|
||||
fixture = TestBed.createComponent(LoginDialogPanelComponent);
|
||||
basicAlfrescoAuthService = TestBed.inject(BasicAlfrescoAuthService);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
usernameInput = element.querySelector('#username');
|
||||
passwordInput = element.querySelector('#password');
|
||||
usernameInput = testingUtils.getByCSS('#username').nativeElement;
|
||||
passwordInput = testingUtils.getByCSS('#password').nativeElement;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -63,8 +66,8 @@ describe('LoginDialogPanelComponent', () => {
|
||||
};
|
||||
|
||||
it('should be created', () => {
|
||||
expect(element.querySelector('#adf-login-form')).not.toBeNull();
|
||||
expect(element.querySelector('#adf-login-form')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#adf-login-form')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#adf-login-form')).toBeDefined();
|
||||
});
|
||||
|
||||
it('should be able to login', (done) => {
|
||||
|
||||
@@ -15,41 +15,39 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
AppConfigService,
|
||||
AuthenticationService,
|
||||
BasicAlfrescoAuthService,
|
||||
CoreTestingModule,
|
||||
LoginErrorEvent,
|
||||
LoginSuccessEvent,
|
||||
UserPreferencesService
|
||||
} from '@alfresco/adf-core';
|
||||
import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing';
|
||||
import { Validators } from '@angular/forms';
|
||||
|
||||
import { Router } from '@angular/router';
|
||||
import { EMPTY, of, throwError } from 'rxjs';
|
||||
import { OidcAuthenticationService } from '../../../auth/oidc/oidc-authentication.service';
|
||||
import { LoginComponent } from './login.component';
|
||||
import { AuthenticationService } from '../../../auth/services/authentication.service';
|
||||
import { UserPreferencesService } from '../../../common/services/user-preferences.service';
|
||||
import { AppConfigService } from '../../../app-config/app-config.service';
|
||||
import { BasicAlfrescoAuthService } from '../../../auth/basic-auth/basic-alfresco-auth.service';
|
||||
import { UnitTestingUtils } from '../../../testing/unit-testing-utils';
|
||||
import { CoreTestingModule } from '../../../testing/core.testing.module';
|
||||
import { LoginSuccessEvent } from '../../models/login-success.event';
|
||||
import { LoginErrorEvent } from '../../models/login-error.event';
|
||||
|
||||
describe('LoginComponent', () => {
|
||||
let component: LoginComponent;
|
||||
let fixture: ComponentFixture<LoginComponent>;
|
||||
let element: any;
|
||||
let authService: AuthenticationService;
|
||||
let router: Router;
|
||||
let userPreferences: UserPreferencesService;
|
||||
let appConfigService: AppConfigService;
|
||||
let basicAlfrescoAuthService: BasicAlfrescoAuthService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
let usernameInput;
|
||||
let passwordInput;
|
||||
|
||||
const getLoginErrorElement = () => element.querySelector('#login-error');
|
||||
const getLoginErrorElement = () => testingUtils.getByCSS('#login-error');
|
||||
|
||||
const getLoginErrorMessage = () => {
|
||||
const errorMessage = undefined;
|
||||
const errorElement = element.querySelector('#login-error .adf-login-error-message');
|
||||
const errorElement = testingUtils.getByCSS('#login-error .adf-login-error-message')?.nativeElement;
|
||||
|
||||
if (errorElement) {
|
||||
return errorElement.innerText;
|
||||
@@ -74,8 +72,8 @@ describe('LoginComponent', () => {
|
||||
]
|
||||
});
|
||||
fixture = TestBed.createComponent(LoginComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
component.showRememberMe = true;
|
||||
component.showLoginActions = true;
|
||||
@@ -89,8 +87,8 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
usernameInput = element.querySelector('#username');
|
||||
passwordInput = element.querySelector('#password');
|
||||
usernameInput = testingUtils.getByCSS('#username')?.nativeElement;
|
||||
passwordInput = testingUtils.getByCSS('#password')?.nativeElement;
|
||||
});
|
||||
}));
|
||||
|
||||
@@ -106,12 +104,12 @@ describe('LoginComponent', () => {
|
||||
passwordInput.dispatchEvent(new Event('input'));
|
||||
fixture.detectChanges();
|
||||
|
||||
element.querySelector('.adf-login-button').click();
|
||||
fixture.nativeElement.querySelector('.adf-login-button').click();
|
||||
fixture.detectChanges();
|
||||
};
|
||||
|
||||
it('should be autocomplete off', () => {
|
||||
expect(element.querySelector('#adf-login-form').getAttribute('autocomplete')).toBe('off');
|
||||
expect(testingUtils.getByCSS('#adf-login-form').nativeElement.getAttribute('autocomplete')).toBe('off');
|
||||
});
|
||||
|
||||
it('should redirect to route on successful login', () => {
|
||||
@@ -188,8 +186,8 @@ describe('LoginComponent', () => {
|
||||
});
|
||||
|
||||
describe('Login button', () => {
|
||||
const getLoginButton = () => element.querySelector('#login-button');
|
||||
const getLoginButtonText = () => element.querySelector('#login-button span.adf-login-button-label').innerText;
|
||||
const getLoginButton = () => testingUtils.getByCSS('#login-button');
|
||||
const getLoginButtonText = () => testingUtils.getInnerTextByCSS('#login-button span.adf-login-button-label');
|
||||
|
||||
it('should be rendered with the proper key by default', () => {
|
||||
expect(getLoginButton()).not.toBeNull();
|
||||
@@ -201,7 +199,7 @@ describe('LoginComponent', () => {
|
||||
|
||||
loginWithCredentials('fake-username', 'fake-password');
|
||||
|
||||
expect(element.querySelector('#checking-spinner')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#checking-spinner')).toBeDefined();
|
||||
expect(getLoginButtonText()).toEqual('LOGIN.BUTTON.CHECKING');
|
||||
});
|
||||
|
||||
@@ -230,7 +228,7 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const loginButton = getLoginButton();
|
||||
expect(loginButton.disabled).toBe(false);
|
||||
expect(loginButton.nativeElement.disabled).toBe(false);
|
||||
});
|
||||
|
||||
it('Should disable login button when username is not valid', () => {
|
||||
@@ -244,7 +242,7 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const loginButton = getLoginButton();
|
||||
expect(loginButton.disabled).toBe(true);
|
||||
expect(loginButton.nativeElement.disabled).toBe(true);
|
||||
});
|
||||
|
||||
it('Should disable login button when password is not valid', () => {
|
||||
@@ -258,7 +256,7 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const loginButton = getLoginButton();
|
||||
expect(loginButton.disabled).toBe(true);
|
||||
expect(loginButton.nativeElement.disabled).toBe(true);
|
||||
});
|
||||
|
||||
it('Should disable login button when username and password are empty', () => {
|
||||
@@ -272,22 +270,22 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const loginButton = getLoginButton();
|
||||
expect(loginButton.disabled).toBe(true);
|
||||
expect(loginButton.nativeElement.disabled).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Remember me', () => {
|
||||
it('should be checked by default', () => {
|
||||
expect(element.querySelector('#adf-login-remember input[type="checkbox"]').checked).toBe(true);
|
||||
expect(testingUtils.getByCSS('#adf-login-remember input[type="checkbox"]').nativeElement.checked).toBe(true);
|
||||
});
|
||||
|
||||
it('should set the component rememberMe property properly', () => {
|
||||
element.querySelector('#adf-login-remember').dispatchEvent(new Event('change'));
|
||||
testingUtils.getByCSS('#adf-login-remember').nativeElement.dispatchEvent(new Event('change'));
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.rememberMe).toBe(false);
|
||||
|
||||
element.querySelector('#adf-login-remember').dispatchEvent(new Event('change'));
|
||||
testingUtils.getByCSS('#adf-login-remember').nativeElement.dispatchEvent(new Event('change'));
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.rememberMe).toBe(true);
|
||||
@@ -304,26 +302,26 @@ describe('LoginComponent', () => {
|
||||
});
|
||||
|
||||
it('should render Login form with all the keys to be translated', () => {
|
||||
expect(element.querySelector('[data-automation-id="username"]')).toBeDefined();
|
||||
expect(element.querySelectorAll('.adf-login-form-input-label')[0].innerText).toEqual('LOGIN.LABEL.USERNAME');
|
||||
expect(testingUtils.getByDataAutomationId('username')).toBeDefined();
|
||||
expect(testingUtils.getAllByCSS('.adf-login-form-input-label')[0].nativeElement.innerText).toEqual('LOGIN.LABEL.USERNAME');
|
||||
|
||||
expect(element.querySelector('#adf-login-remember')).toBeDefined();
|
||||
expect(element.querySelector('#adf-login-remember').innerText).toContain('LOGIN.LABEL.REMEMBER');
|
||||
expect(testingUtils.getByCSS('#adf-login-remember')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByCSS('#adf-login-remember')).toContain('LOGIN.LABEL.REMEMBER');
|
||||
|
||||
expect(element.querySelector('[data-automation-id="password"]')).toBeDefined();
|
||||
expect(element.querySelectorAll('.adf-login-form-input-label')[1].innerText).toContain('LOGIN.LABEL.PASSWORD');
|
||||
expect(testingUtils.getByDataAutomationId('password')).toBeDefined();
|
||||
expect(testingUtils.getAllByCSS('.adf-login-form-input-label')[1].nativeElement.innerText).toContain('LOGIN.LABEL.PASSWORD');
|
||||
|
||||
expect(element.querySelector('#adf-login-action-left')).toBeDefined();
|
||||
expect(element.querySelector('#adf-login-action-left').innerText).toEqual('LOGIN.ACTION.HELP');
|
||||
expect(testingUtils.getByCSS('#adf-login-action-left')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByCSS('#adf-login-action-left')).toEqual('LOGIN.ACTION.HELP');
|
||||
|
||||
expect(element.querySelector('#adf-login-action-right')).toBeDefined();
|
||||
expect(element.querySelector('#adf-login-action-right').innerText).toEqual('LOGIN.ACTION.REGISTER');
|
||||
expect(testingUtils.getByCSS('#adf-login-action-right')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByCSS('#adf-login-action-right')).toEqual('LOGIN.ACTION.REGISTER');
|
||||
});
|
||||
|
||||
describe('Copyright text', () => {
|
||||
it('should render the default copyright text', () => {
|
||||
expect(element.querySelector('[data-automation-id="login-copyright"]')).toBeDefined();
|
||||
expect(element.querySelector('[data-automation-id="login-copyright"]').innerText).toEqual(
|
||||
expect(testingUtils.getByDataAutomationId('login-copyright')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByDataAutomationId('login-copyright')).toEqual(
|
||||
'\u00A9 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.'
|
||||
);
|
||||
});
|
||||
@@ -332,17 +330,17 @@ describe('LoginComponent', () => {
|
||||
component.copyrightText = 'customised';
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('[data-automation-id="login-copyright"]')).toBeDefined();
|
||||
expect(element.querySelector('[data-automation-id="login-copyright"]').innerText).toEqual('customised');
|
||||
expect(testingUtils.getByDataAutomationId('login-copyright')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByDataAutomationId('login-copyright')).toEqual('customised');
|
||||
});
|
||||
});
|
||||
|
||||
it('should render user and password input fields with default values', () => {
|
||||
expect(element.querySelector('form')).toBeDefined();
|
||||
expect(element.querySelector('input[type="password"]')).toBeDefined();
|
||||
expect(element.querySelector('input[type="text"]')).toBeDefined();
|
||||
expect(element.querySelector('input[type="password"]').value).toEqual('');
|
||||
expect(element.querySelector('input[type="text"]').value).toEqual('');
|
||||
expect(testingUtils.getByCSS('form')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('input[type="password"]')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('input[type="text"]')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('input[type="password"]').nativeElement.value).toEqual('');
|
||||
expect(testingUtils.getByCSS('input[type="text"]').nativeElement.value).toEqual('');
|
||||
});
|
||||
|
||||
it('should hide remember me if showRememberMe is false', () => {
|
||||
@@ -350,7 +348,7 @@ describe('LoginComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('#login-remember')).toBe(null);
|
||||
expect(testingUtils.getByCSS('#login-remember')).toBe(null);
|
||||
});
|
||||
|
||||
it('should hide login actions if showLoginActions is false', () => {
|
||||
@@ -358,8 +356,8 @@ describe('LoginComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('#login-action-help')).toBe(null);
|
||||
expect(element.querySelector('#login-action-register')).toBe(null);
|
||||
expect(testingUtils.getByCSS('#login-action-help')).toBe(null);
|
||||
expect(testingUtils.getByCSS('#login-action-register')).toBe(null);
|
||||
});
|
||||
|
||||
describe('Error', () => {
|
||||
@@ -380,8 +378,8 @@ describe('LoginComponent', () => {
|
||||
expect(component.formError).toBeDefined();
|
||||
expect(component.formError.username).toBeDefined();
|
||||
expect(component.formError.username).toEqual('LOGIN.MESSAGES.USERNAME-MIN');
|
||||
expect(element.querySelector('#username-error')).toBeDefined();
|
||||
expect(element.querySelector('#username-error').innerText).toEqual('LOGIN.MESSAGES.USERNAME-MIN');
|
||||
expect(testingUtils.getByCSS('#username-error')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByCSS('#username-error')).toEqual('LOGIN.MESSAGES.USERNAME-MIN');
|
||||
});
|
||||
|
||||
it('should throw a validation min-length error by default when the username is not at least 2 characters long', () => {
|
||||
@@ -395,8 +393,8 @@ describe('LoginComponent', () => {
|
||||
expect(component.formError).toBeDefined();
|
||||
expect(component.formError.username).toBeDefined();
|
||||
expect(component.formError.username).toEqual('LOGIN.MESSAGES.USERNAME-MIN');
|
||||
expect(element.querySelector('#username-error')).toBeDefined();
|
||||
expect(element.querySelector('#username-error').innerText).toEqual('LOGIN.MESSAGES.USERNAME-MIN');
|
||||
expect(testingUtils.getByCSS('#username-error')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByCSS('#username-error')).toEqual('LOGIN.MESSAGES.USERNAME-MIN');
|
||||
});
|
||||
|
||||
it('should render validation min-length error when the username is lower than 3 characters with a custom validation Validators.minLength(3)', () => {
|
||||
@@ -416,8 +414,8 @@ describe('LoginComponent', () => {
|
||||
expect(component.formError).toBeDefined();
|
||||
expect(component.formError.username).toBeDefined();
|
||||
expect(component.formError.username).toEqual('LOGIN.MESSAGES.USERNAME-MIN');
|
||||
expect(element.querySelector('#username-error')).toBeDefined();
|
||||
expect(element.querySelector('#username-error').innerText).toEqual('LOGIN.MESSAGES.USERNAME-MIN');
|
||||
expect(testingUtils.getByCSS('#username-error')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByCSS('#username-error')).toEqual('LOGIN.MESSAGES.USERNAME-MIN');
|
||||
});
|
||||
|
||||
it('should render validation required error when the username is empty and dirty', () => {
|
||||
@@ -430,8 +428,8 @@ describe('LoginComponent', () => {
|
||||
expect(component.formError).toBeDefined();
|
||||
expect(component.formError.username).toBeDefined();
|
||||
expect(component.formError.username).toEqual('LOGIN.MESSAGES.USERNAME-REQUIRED');
|
||||
expect(element.querySelector('#username-error')).toBeDefined();
|
||||
expect(element.querySelector('#username-error').innerText).toEqual('LOGIN.MESSAGES.USERNAME-REQUIRED');
|
||||
expect(testingUtils.getByCSS('#username-error')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByCSS('#username-error')).toEqual('LOGIN.MESSAGES.USERNAME-REQUIRED');
|
||||
});
|
||||
|
||||
it('should render validation required error when the password is empty and dirty', () => {
|
||||
@@ -444,8 +442,8 @@ describe('LoginComponent', () => {
|
||||
expect(component.formError).toBeDefined();
|
||||
expect(component.formError.password).toBeDefined();
|
||||
expect(component.formError.password).toEqual('LOGIN.MESSAGES.PASSWORD-REQUIRED');
|
||||
expect(element.querySelector('#password-required')).toBeDefined();
|
||||
expect(element.querySelector('#password-required').innerText).toEqual('LOGIN.MESSAGES.PASSWORD-REQUIRED');
|
||||
expect(testingUtils.getByCSS('#password-required')).toBeDefined();
|
||||
expect(testingUtils.getInnerTextByCSS('#password-required')).toEqual('LOGIN.MESSAGES.PASSWORD-REQUIRED');
|
||||
});
|
||||
|
||||
it('should render no validation errors when the username and password are filled', () => {
|
||||
@@ -463,8 +461,8 @@ describe('LoginComponent', () => {
|
||||
expect(component.formError).toBeDefined();
|
||||
expect(component.formError.username).toEqual('');
|
||||
expect(component.formError.password).toEqual('');
|
||||
expect(element.querySelector('#username-error')).toBeNull();
|
||||
expect(element.querySelector('#password-required')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#username-error')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#password-required')).toBeNull();
|
||||
});
|
||||
|
||||
it('should return error with a wrong username', (done) => {
|
||||
@@ -593,8 +591,8 @@ describe('LoginComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('input[type="text"]').value).toEqual('fake-change-username');
|
||||
expect(element.querySelector('input[type="password"]').value).toEqual('fake-change-password');
|
||||
expect(testingUtils.getByCSS('input[type="text"]').nativeElement.value).toEqual('fake-change-username');
|
||||
expect(testingUtils.getByCSS('input[type="password"]').nativeElement.value).toEqual('fake-change-password');
|
||||
});
|
||||
|
||||
it('should return success event after the login have succeeded', (done) => {
|
||||
@@ -648,7 +646,7 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.isPasswordShow).toBe(true);
|
||||
expect(element.querySelector('#password').type).toEqual('text');
|
||||
expect(testingUtils.getByCSS('#password').nativeElement.type).toEqual('text');
|
||||
});
|
||||
|
||||
it('should password be hidden when show password is false', () => {
|
||||
@@ -658,7 +656,7 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component.isPasswordShow).toBe(false);
|
||||
expect(element.querySelector('#password').type).toEqual('password');
|
||||
expect(testingUtils.getByCSS('#password').nativeElement.type).toEqual('password');
|
||||
});
|
||||
|
||||
it('should emit only the username and not the password as part of the executeSubmit', fakeAsync(() => {
|
||||
@@ -688,8 +686,8 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
expect(element.querySelector('#username')).toBeNull();
|
||||
expect(element.querySelector('#password')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#username')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#password')).toBeNull();
|
||||
});
|
||||
}));
|
||||
|
||||
@@ -726,7 +724,7 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
expect(element.querySelector('#login-button')).toBeNull();
|
||||
expect(testingUtils.getByCSS('#login-button')).toBeNull();
|
||||
});
|
||||
}));
|
||||
|
||||
@@ -737,7 +735,7 @@ describe('LoginComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
expect(element.querySelector('#login-button-sso')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#login-button-sso')).toBeDefined();
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
@@ -22,19 +22,19 @@ import { OverlayContainer } from '@angular/cdk/overlay';
|
||||
import { NotificationService } from '../services/notification.service';
|
||||
import { StorageService } from '../../common/services/storage.service';
|
||||
import { NOTIFICATION_TYPE, NotificationModel } from '../models/notification.model';
|
||||
import { UnitTestingUtils } from '../../testing/unit-testing-utils';
|
||||
|
||||
describe('Notification History Component', () => {
|
||||
let fixture: ComponentFixture<NotificationHistoryComponent>;
|
||||
let component: NotificationHistoryComponent;
|
||||
let element: HTMLElement;
|
||||
let notificationService: NotificationService;
|
||||
let overlayContainerElement: HTMLElement;
|
||||
let storage: StorageService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const openNotification = () => {
|
||||
fixture.detectChanges();
|
||||
const button = element.querySelector<HTMLButtonElement>('#adf-notification-history-open-button');
|
||||
button.click();
|
||||
testingUtils.clickByCSS('#adf-notification-history-open-button');
|
||||
fixture.detectChanges();
|
||||
};
|
||||
|
||||
@@ -44,7 +44,7 @@ describe('Notification History Component', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(NotificationHistoryComponent);
|
||||
component = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
storage = TestBed.inject(StorageService);
|
||||
notificationService = TestBed.inject(NotificationService);
|
||||
|
||||
@@ -22,10 +22,9 @@ import { NotificationService } from './notification.service';
|
||||
import { TranslationService } from '../../translation/translation.service';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatIconHarness } from '@angular/material/icon/testing';
|
||||
import { MatSnackBarHarness } from '@angular/material/snack-bar/testing';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NoopTranslateModule } from '../../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../../testing/unit-testing-utils';
|
||||
|
||||
@Component({
|
||||
template: '',
|
||||
@@ -89,6 +88,7 @@ describe('NotificationService', () => {
|
||||
let loader: HarnessLoader;
|
||||
let fixture: ComponentFixture<ProvidesNotificationServiceComponent>;
|
||||
let translationService: TranslationService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -99,6 +99,7 @@ describe('NotificationService', () => {
|
||||
fixture = TestBed.createComponent(ProvidesNotificationServiceComponent);
|
||||
fixture.detectChanges();
|
||||
loader = TestbedHarnessEnvironment.documentRootLoader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
});
|
||||
|
||||
it('should translate messages', () => {
|
||||
@@ -131,49 +132,49 @@ describe('NotificationService', () => {
|
||||
fixture.componentInstance.sendMessage();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(await loader.hasHarness(MatSnackBarHarness)).toBe(true);
|
||||
expect(await testingUtils.checkIfMatSnackbarExists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should open a message notification bar without custom configuration', async () => {
|
||||
fixture.componentInstance.sendMessageWithoutConfig();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(await loader.hasHarness(MatSnackBarHarness)).toBe(true);
|
||||
expect(await testingUtils.checkIfMatSnackbarExists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should open a message notification bar with custom configuration', async () => {
|
||||
fixture.componentInstance.sendCustomMessage();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(await loader.hasHarness(MatSnackBarHarness)).toBe(true);
|
||||
expect(await testingUtils.checkIfMatSnackbarExists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should open a message notification bar with action', async () => {
|
||||
fixture.componentInstance.sendMessageAction();
|
||||
expect(await loader.hasHarness(MatSnackBarHarness)).toBe(true);
|
||||
expect(await testingUtils.checkIfMatSnackbarExists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should open a message notification bar with action and custom configuration', async () => {
|
||||
fixture.componentInstance.sendCustomMessageAction();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(await loader.hasHarness(MatSnackBarHarness)).toBe(true);
|
||||
expect(await testingUtils.checkIfMatSnackbarExists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should open a message notification bar with action and no custom configuration', async () => {
|
||||
fixture.componentInstance.sendMessageActionWithoutConfig();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(await loader.hasHarness(MatSnackBarHarness)).toBe(true);
|
||||
expect(await testingUtils.checkIfMatSnackbarExists()).toBe(true);
|
||||
});
|
||||
|
||||
it('should open a message notification bar with a decorative icon', async () => {
|
||||
fixture.componentInstance.sendMessageWithDecorativeIcon();
|
||||
expect(await loader.hasHarness(MatIconHarness.with({ ancestor: `[data-automation-id="adf-snackbar-message-content"]` }))).toBe(true);
|
||||
expect(await testingUtils.checkIfMatIconExistsWithAncestorByDataAutomationId('adf-snackbar-message-content')).toBe(true);
|
||||
});
|
||||
|
||||
it('should open a message notification bar with action and a decorative icon', async () => {
|
||||
fixture.componentInstance.sendMessageWithDecorativeIconAndAction();
|
||||
expect(await loader.hasHarness(MatIconHarness.with({ ancestor: `[data-automation-id="adf-snackbar-message-content"]` }))).toBe(true);
|
||||
expect(await testingUtils.checkIfMatIconExistsWithAncestorByDataAutomationId('adf-snackbar-message-content')).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { PaginationModel } from '../models/pagination.model';
|
||||
import { InfinitePaginationComponent } from './infinite-pagination.component';
|
||||
import { PaginatedComponent } from './paginated-component.interface';
|
||||
@@ -24,6 +23,7 @@ import { BehaviorSubject } from 'rxjs';
|
||||
import { CoreTestingModule } from '../testing/core.testing.module';
|
||||
import { Component, ChangeDetectorRef } from '@angular/core';
|
||||
import { RequestPaginationModel } from '../models/request-pagination.model';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
@Component({
|
||||
template: ``
|
||||
@@ -54,6 +54,7 @@ describe('InfinitePaginationComponent', () => {
|
||||
let component: InfinitePaginationComponent;
|
||||
let pagination: PaginationModel;
|
||||
let changeDetectorRef: ChangeDetectorRef;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -62,6 +63,7 @@ describe('InfinitePaginationComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(InfinitePaginationComponent);
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
changeDetectorRef = fixture.componentRef.injector.get(ChangeDetectorRef);
|
||||
|
||||
component.target = TestBed.createComponent(TestPaginatedComponent).componentInstance;
|
||||
@@ -82,8 +84,7 @@ describe('InfinitePaginationComponent', () => {
|
||||
component.target = null;
|
||||
changeDetectorRef.detectChanges();
|
||||
|
||||
const loadingSpinner = fixture.debugElement.query(By.css('[data-automation-id="adf-infinite-pagination-spinner"]'));
|
||||
expect(loadingSpinner).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-infinite-pagination-spinner')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should NOT show the loading spinner if NOT loading', () => {
|
||||
@@ -92,8 +93,7 @@ describe('InfinitePaginationComponent', () => {
|
||||
component.isLoading = false;
|
||||
changeDetectorRef.detectChanges();
|
||||
|
||||
const loadingSpinner = fixture.debugElement.query(By.css('[data-automation-id="adf-infinite-pagination-spinner"]'));
|
||||
expect(loadingSpinner).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-infinite-pagination-spinner')).toBeNull();
|
||||
});
|
||||
|
||||
it('should show the load more button if NOT loading and has more items', () => {
|
||||
@@ -102,8 +102,7 @@ describe('InfinitePaginationComponent', () => {
|
||||
component.isLoading = false;
|
||||
changeDetectorRef.detectChanges();
|
||||
|
||||
const loadMoreButton = fixture.debugElement.query(By.css('[data-automation-id="adf-infinite-pagination-button"]'));
|
||||
expect(loadMoreButton).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-infinite-pagination-button')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should NOT show the load more button if there are no more elements to load', (done) => {
|
||||
@@ -116,8 +115,7 @@ describe('InfinitePaginationComponent', () => {
|
||||
component.onLoadMore();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
const loadMoreButton = fixture.debugElement.query(By.css('[data-automation-id="adf-infinite-pagination-button"]'));
|
||||
expect(loadMoreButton).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-infinite-pagination-button')).toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -130,8 +128,7 @@ describe('InfinitePaginationComponent', () => {
|
||||
changeDetectorRef.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
const loadMoreButton = fixture.debugElement.query(By.css('[data-automation-id="adf-infinite-pagination-button"]'));
|
||||
expect(loadMoreButton).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-infinite-pagination-button')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -141,10 +138,8 @@ describe('InfinitePaginationComponent', () => {
|
||||
component.target.updatePagination(pagination);
|
||||
changeDetectorRef.detectChanges();
|
||||
|
||||
const loadMoreButton = fixture.debugElement.query(By.css('[data-automation-id="adf-infinite-pagination-button"]'));
|
||||
expect(loadMoreButton).toBeNull();
|
||||
const loadingSpinner = fixture.debugElement.query(By.css('[data-automation-id="adf-infinite-pagination-spinner"]'));
|
||||
expect(loadingSpinner).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-infinite-pagination-button')).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-infinite-pagination-spinner')).toBeNull();
|
||||
});
|
||||
|
||||
it('should trigger the loadMore event with skipcount 0 to reload all the elements', (done) => {
|
||||
@@ -161,8 +156,7 @@ describe('InfinitePaginationComponent', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
const loadMoreButton = fixture.debugElement.query(By.css('[data-automation-id="adf-infinite-pagination-button"]'));
|
||||
loadMoreButton.triggerEventHandler('click', {});
|
||||
testingUtils.clickByDataAutomationId('adf-infinite-pagination-button');
|
||||
});
|
||||
|
||||
it('should trigger the loadMore event with merge true to reload all the elements', (done) => {
|
||||
@@ -179,8 +173,7 @@ describe('InfinitePaginationComponent', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
const loadMoreButton = fixture.debugElement.query(By.css('[data-automation-id="adf-infinite-pagination-button"]'));
|
||||
loadMoreButton.triggerEventHandler('click', {});
|
||||
testingUtils.clickByDataAutomationId('adf-infinite-pagination-button');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -21,13 +21,14 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatProgressBarHarness } from '@angular/material/progress-bar/testing';
|
||||
import { ProgressComponent } from './progress.component';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
describe('ProgressComponent', () => {
|
||||
let component: ProgressComponent;
|
||||
let fixture: ComponentFixture<ProgressComponent>;
|
||||
let loader: HarnessLoader;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
@@ -36,6 +37,7 @@ describe('ProgressComponent', () => {
|
||||
|
||||
fixture = TestBed.createComponent(ProgressComponent);
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement, loader);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
@@ -74,8 +76,8 @@ describe('ProgressComponent', () => {
|
||||
component.ariaLabel = testLabel;
|
||||
fixture.detectChanges();
|
||||
|
||||
const progress = await loader.getHarness(MatProgressBarHarness);
|
||||
const host = await progress.host();
|
||||
const host = await testingUtils.getMatProgressBarHost();
|
||||
|
||||
expect(await host.getAttribute('aria-label')).toBe(testLabel);
|
||||
});
|
||||
|
||||
@@ -83,8 +85,7 @@ describe('ProgressComponent', () => {
|
||||
component.ariaHidden = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
const progress = await loader.getHarness(MatProgressBarHarness);
|
||||
const host = await progress.host();
|
||||
const host = await testingUtils.getMatProgressBarHost();
|
||||
|
||||
expect(await host.getAttribute('aria-hidden')).toBe('true');
|
||||
});
|
||||
@@ -93,7 +94,7 @@ describe('ProgressComponent', () => {
|
||||
const testId = 'progress-test-id';
|
||||
component.testId = testId;
|
||||
fixture.detectChanges();
|
||||
const progressBarElement = fixture.nativeElement.querySelector(`[data-automation-id="${testId}"]`);
|
||||
const progressBarElement = testingUtils.getByDataAutomationId(testId);
|
||||
expect(progressBarElement).not.toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -19,16 +19,16 @@ import { ComponentFixture, TestBed, discardPeriodicTasks, fakeAsync, tick } from
|
||||
import { CoreTestingModule } from '../testing/core.testing.module';
|
||||
import { SearchTextInputComponent } from './search-text-input.component';
|
||||
import { DebugElement } from '@angular/core';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { Subject } from 'rxjs';
|
||||
import { UserPreferencesService } from '../common/services/user-preferences.service';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
describe('SearchTextInputComponent', () => {
|
||||
let fixture: ComponentFixture<SearchTextInputComponent>;
|
||||
let component: SearchTextInputComponent;
|
||||
let debugElement: DebugElement;
|
||||
let element: HTMLElement;
|
||||
let userPreferencesService: UserPreferencesService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -37,7 +37,7 @@ describe('SearchTextInputComponent', () => {
|
||||
fixture = TestBed.createComponent(SearchTextInputComponent);
|
||||
component = fixture.componentInstance;
|
||||
debugElement = fixture.debugElement;
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(debugElement);
|
||||
userPreferencesService = TestBed.inject(UserPreferencesService);
|
||||
component.focusListener = new Subject<any>();
|
||||
});
|
||||
@@ -56,7 +56,7 @@ describe('SearchTextInputComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(element.querySelectorAll('input[type="search"]').length).toBe(1);
|
||||
expect(testingUtils.getAllByCSS('input[type="search"]').length).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -67,8 +67,7 @@ describe('SearchTextInputComponent', () => {
|
||||
|
||||
it('search button should be hidden', () => {
|
||||
fixture.detectChanges();
|
||||
const searchButton: any = element.querySelector('#adf-search-button');
|
||||
expect(searchButton).toBe(null);
|
||||
expect(testingUtils.getByCSS('#adf-search-button')).toBe(null);
|
||||
});
|
||||
|
||||
it('should not have animation', () => {
|
||||
@@ -84,7 +83,7 @@ describe('SearchTextInputComponent', () => {
|
||||
fixture.detectChanges();
|
||||
tick(100);
|
||||
|
||||
searchButton = debugElement.query(By.css('#adf-search-button'));
|
||||
searchButton = testingUtils.getByCSS('#adf-search-button');
|
||||
}));
|
||||
|
||||
it('should NOT display a autocomplete list control when configured not to', fakeAsync(() => {
|
||||
@@ -143,7 +142,6 @@ describe('SearchTextInputComponent', () => {
|
||||
}));
|
||||
|
||||
it('Search bar should close when user press ESC button', fakeAsync(() => {
|
||||
const inputDebugElement = debugElement.query(By.css('#adf-control-input'));
|
||||
component.subscriptAnimationState.value = 'active';
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -151,7 +149,7 @@ describe('SearchTextInputComponent', () => {
|
||||
|
||||
expect(component.subscriptAnimationState.value).toBe('active');
|
||||
|
||||
inputDebugElement.triggerEventHandler('keyup.escape', {});
|
||||
testingUtils.keyBoardEventByCSS('#adf-control-input', 'keyup', 'Escape', 'Escape');
|
||||
|
||||
tick(100);
|
||||
fixture.detectChanges();
|
||||
@@ -173,8 +171,7 @@ describe('SearchTextInputComponent', () => {
|
||||
*/
|
||||
function clickSearchButton(): void {
|
||||
fixture.detectChanges();
|
||||
const searchButton: DebugElement = debugElement.query(By.css('#adf-search-button'));
|
||||
searchButton.triggerEventHandler('click', null);
|
||||
testingUtils.clickByCSS('#adf-search-button');
|
||||
tick(100);
|
||||
fixture.detectChanges();
|
||||
tick(100);
|
||||
@@ -227,7 +224,7 @@ describe('SearchTextInputComponent', () => {
|
||||
component.subscriptAnimationState.value = 'inactive';
|
||||
fixture.detectChanges();
|
||||
expect(component.subscriptAnimationState.value).toBe('inactive');
|
||||
expect(element.querySelector('.adf-search-button-inactive')).toBeTruthy();
|
||||
expect(testingUtils.getByCSS('.adf-search-button-inactive')).toBeTruthy();
|
||||
}));
|
||||
|
||||
it('should set browser autocomplete to on when configured', async () => {
|
||||
@@ -236,7 +233,7 @@ describe('SearchTextInputComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(element.querySelector('#adf-control-input').getAttribute('autocomplete')).toBe('on');
|
||||
expect(testingUtils.getByCSS('#adf-control-input').nativeElement.getAttribute('autocomplete')).toBe('on');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -290,8 +287,7 @@ describe('SearchTextInputComponent', () => {
|
||||
tick(200);
|
||||
}));
|
||||
|
||||
const getClearSearchButton = (): HTMLButtonElement =>
|
||||
fixture.debugElement.query(By.css('[data-automation-id="adf-clear-search-button"]'))?.nativeElement;
|
||||
const getClearSearchButton = (): HTMLButtonElement => testingUtils.getByDataAutomationId('adf-clear-search-button')?.nativeElement;
|
||||
|
||||
it('should clear button be visible when showClearButton is set to true', async () => {
|
||||
component.showClearButton = true;
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { SnackbarContentComponent } from './snackbar-content.component';
|
||||
import { CoreTestingModule, NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
import { NoopTranslateModule } from '../testing/noop-translate.module';
|
||||
import { CoreTestingModule } from '../testing/core.testing.module';
|
||||
|
||||
describe('SnackbarContentComponent', () => {
|
||||
let component: SnackbarContentComponent;
|
||||
let fixture: ComponentFixture<SnackbarContentComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -45,6 +47,7 @@ describe('SnackbarContentComponent', () => {
|
||||
});
|
||||
|
||||
fixture = TestBed.createComponent(SnackbarContentComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
component = fixture.componentInstance;
|
||||
});
|
||||
|
||||
@@ -53,12 +56,12 @@ describe('SnackbarContentComponent', () => {
|
||||
message: 'Some message'
|
||||
};
|
||||
fixture.detectChanges();
|
||||
expect(fixture.nativeElement.querySelector('.adf-snackbar-message-content').innerText).toBe(component.data.message);
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-snackbar-message-content')).toBe(component.data.message);
|
||||
});
|
||||
|
||||
it('should not display message if message in data is not set', () => {
|
||||
fixture.detectChanges();
|
||||
expect(fixture.nativeElement.querySelector('.adf-snackbar-message-content').innerText).toBe('');
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-snackbar-message-content')).toBe('');
|
||||
});
|
||||
|
||||
it('should call snackBarRef.dismissWithAction() when button is clicked', () => {
|
||||
@@ -69,7 +72,7 @@ describe('SnackbarContentComponent', () => {
|
||||
};
|
||||
spyOn(component.snackBarRef, 'dismissWithAction');
|
||||
fixture.detectChanges();
|
||||
fixture.nativeElement.querySelector('.adf-snackbar-message-content-action-button').click();
|
||||
testingUtils.clickByCSS('.adf-snackbar-message-content-action-button');
|
||||
expect(component.snackBarRef.dismissWithAction).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@@ -80,7 +83,7 @@ describe('SnackbarContentComponent', () => {
|
||||
actionLabel: 'Some action action'
|
||||
};
|
||||
fixture.detectChanges();
|
||||
expect(fixture.nativeElement.querySelector('.adf-snackbar-message-content-action-button').innerText).toBe(component.data.actionLabel);
|
||||
expect(testingUtils.getInnerTextByCSS('.adf-snackbar-message-content-action-button')).toBe(component.data.actionLabel);
|
||||
});
|
||||
|
||||
it('should not display actionLabel if actionLabel in data is not set', () => {
|
||||
@@ -89,7 +92,7 @@ describe('SnackbarContentComponent', () => {
|
||||
showAction: true
|
||||
};
|
||||
fixture.detectChanges();
|
||||
expect(fixture.nativeElement.querySelector('.adf-snackbar-message-content-action-button')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-snackbar-message-content-action-button')).toBeNull();
|
||||
});
|
||||
|
||||
it('should render icon if actionIcon in data is set', () => {
|
||||
@@ -99,7 +102,7 @@ describe('SnackbarContentComponent', () => {
|
||||
actionIcon: 'close'
|
||||
};
|
||||
fixture.detectChanges();
|
||||
expect(fixture.debugElement.query(By.directive(MatIcon))).toBeDefined();
|
||||
expect(testingUtils.getByDirective(MatIcon)).toBeDefined();
|
||||
});
|
||||
|
||||
it('should not render icon if actionIcon in data is not set', () => {
|
||||
@@ -108,6 +111,6 @@ describe('SnackbarContentComponent', () => {
|
||||
showAction: true
|
||||
};
|
||||
fixture.detectChanges();
|
||||
expect(fixture.debugElement.query(By.directive(MatIcon))).toBeNull();
|
||||
expect(testingUtils.getByDirective(MatIcon)).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
|
||||
import { Component } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { of } from 'rxjs';
|
||||
import { NoopTranslateModule } from '../../testing/noop-translate.module';
|
||||
import { EmptyContentComponent } from './empty-content.component';
|
||||
import { UnitTestingUtils } from '../../testing/unit-testing-utils';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-test-component',
|
||||
@@ -40,12 +40,14 @@ class TestComponent {}
|
||||
describe('EmptyContentComponent', () => {
|
||||
let fixture: ComponentFixture<TestComponent>;
|
||||
let translateService: TranslateService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [NoopTranslateModule, TestComponent]
|
||||
});
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
translateService = TestBed.inject(TranslateService);
|
||||
});
|
||||
|
||||
@@ -53,7 +55,7 @@ describe('EmptyContentComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const title = fixture.debugElement.query(By.css('.adf-empty-content__title'));
|
||||
const title = testingUtils.getByCSS('.adf-empty-content__title');
|
||||
expect(title).toBeDefined();
|
||||
expect(title.nativeElement.textContent).toContain('CUSTOM_TITLE');
|
||||
});
|
||||
@@ -73,8 +75,8 @@ describe('EmptyContentComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const title = fixture.debugElement.query(By.css('.adf-empty-content__title'));
|
||||
const subtitle = fixture.debugElement.query(By.css('.adf-empty-content__subtitle'));
|
||||
const title = testingUtils.getByCSS('.adf-empty-content__title');
|
||||
const subtitle = testingUtils.getByCSS('.adf-empty-content__subtitle');
|
||||
|
||||
expect(title).toBeDefined();
|
||||
expect(title.nativeElement.textContent).toContain('ENG_CUSTOM_TITLE');
|
||||
@@ -84,7 +86,7 @@ describe('EmptyContentComponent', () => {
|
||||
});
|
||||
|
||||
it('should render multiple subtitle elements', () => {
|
||||
const subTitles = fixture.debugElement.queryAll(By.css('.adf-empty-content__text'));
|
||||
const subTitles = testingUtils.getAllByCSS('.adf-empty-content__text');
|
||||
|
||||
expect(subTitles.length).toBe(3);
|
||||
expect(subTitles[0].nativeElement.textContent).toContain('SUBTITLE-1');
|
||||
|
||||
@@ -21,12 +21,13 @@ import { ErrorContentComponent } from './error-content.component';
|
||||
import { TranslationService } from '../../translation/translation.service';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { of } from 'rxjs';
|
||||
import { UnitTestingUtils } from '../../testing/unit-testing-utils';
|
||||
|
||||
describe('ErrorContentComponent', () => {
|
||||
let fixture: ComponentFixture<ErrorContentComponent>;
|
||||
let errorContentComponent: ErrorContentComponent;
|
||||
let element: HTMLElement;
|
||||
let translateService: TranslationService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -34,7 +35,7 @@ describe('ErrorContentComponent', () => {
|
||||
providers: [{ provide: ActivatedRoute, useValue: { params: of() } }]
|
||||
});
|
||||
fixture = TestBed.createComponent(ErrorContentComponent);
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
errorContentComponent = fixture.debugElement.componentInstance;
|
||||
translateService = TestBed.inject(TranslationService);
|
||||
});
|
||||
@@ -49,7 +50,7 @@ describe('ErrorContentComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const errorContentElement = element.querySelector('.adf-error-content-code');
|
||||
const errorContentElement = testingUtils.getByCSS('.adf-error-content-code');
|
||||
expect(errorContentElement).not.toBeNull();
|
||||
expect(errorContentElement).toBeDefined();
|
||||
});
|
||||
@@ -58,7 +59,7 @@ describe('ErrorContentComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const errorContentElement = element.querySelector('.adf-error-content-title');
|
||||
const errorContentElement = testingUtils.getByCSS('.adf-error-content-title');
|
||||
expect(errorContentElement).not.toBeNull();
|
||||
expect(errorContentElement).toBeDefined();
|
||||
});
|
||||
@@ -67,7 +68,7 @@ describe('ErrorContentComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const errorContentElement = element.querySelector('.adf-error-content-description');
|
||||
const errorContentElement = testingUtils.getByCSS('.adf-error-content-description');
|
||||
expect(errorContentElement).not.toBeNull();
|
||||
expect(errorContentElement).toBeDefined();
|
||||
});
|
||||
@@ -76,7 +77,7 @@ describe('ErrorContentComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const errorContentElement = element.querySelector('.adf-error-content-description');
|
||||
const errorContentElement = testingUtils.getByCSS('.adf-error-content-description');
|
||||
expect(errorContentElement).not.toBeNull();
|
||||
expect(errorContentElement).toBeDefined();
|
||||
});
|
||||
@@ -86,7 +87,7 @@ describe('ErrorContentComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const errorContentElement = element.querySelector('.adf-error-content-description-link');
|
||||
const errorContentElement = testingUtils.getByCSS('.adf-error-content-description-link');
|
||||
expect(errorContentElement).toBeNull();
|
||||
});
|
||||
|
||||
|
||||
@@ -19,3 +19,4 @@ export * from './core.testing.module';
|
||||
export * from './core.story.module';
|
||||
export * from './noop-translate.module';
|
||||
export * from './noop-auth.module';
|
||||
export * from './unit-testing-utils';
|
||||
|
||||
@@ -0,0 +1,470 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { HarnessLoader, TestElement, TestKey } from '@angular/cdk/testing';
|
||||
import { DebugElement, Type } from '@angular/core';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { MatSelectHarness } from '@angular/material/select/testing';
|
||||
import { MatOptionHarness } from '@angular/material/core/testing';
|
||||
import { MatChipGridHarness, MatChipHarness, MatChipListboxHarness } from '@angular/material/chips/testing';
|
||||
import { MatButtonHarness } from '@angular/material/button/testing';
|
||||
import { MatIconHarness } from '@angular/material/icon/testing';
|
||||
import { MatCheckboxHarness } from '@angular/material/checkbox/testing';
|
||||
import { MatErrorHarness, MatFormFieldHarness } from '@angular/material/form-field/testing';
|
||||
import { MatInputHarness } from '@angular/material/input/testing';
|
||||
import { MatAutocompleteHarness } from '@angular/material/autocomplete/testing';
|
||||
import { ComponentFixture } from '@angular/core/testing';
|
||||
import { MatTabGroupHarness, MatTabHarness } from '@angular/material/tabs/testing';
|
||||
import { MatToolbarHarness } from '@angular/material/toolbar/testing';
|
||||
import { MatSnackBarHarness } from '@angular/material/snack-bar/testing';
|
||||
import { MatProgressBarHarness } from '@angular/material/progress-bar/testing';
|
||||
|
||||
export class UnitTestingUtils {
|
||||
constructor(private debugElement?: DebugElement, private loader?: HarnessLoader) {
|
||||
this.debugElement = debugElement;
|
||||
this.loader = loader;
|
||||
}
|
||||
|
||||
setDebugElement(debugElement: DebugElement): void {
|
||||
this.debugElement = debugElement;
|
||||
}
|
||||
|
||||
setLoader(loader: HarnessLoader): void {
|
||||
this.loader = loader;
|
||||
}
|
||||
|
||||
getByCSS(selector: string): DebugElement {
|
||||
return this.debugElement.query(By.css(selector));
|
||||
}
|
||||
|
||||
getAllByCSS(selector: string): DebugElement[] {
|
||||
return this.debugElement.queryAll(By.css(selector));
|
||||
}
|
||||
|
||||
getInnerTextByCSS(selector: string): string {
|
||||
return this.getByCSS(selector).nativeElement.innerText;
|
||||
}
|
||||
|
||||
getByDataAutomationId(dataAutomationId: string): DebugElement {
|
||||
return this.getByCSS(`[data-automation-id="${dataAutomationId}"]`);
|
||||
}
|
||||
|
||||
getByDataAutomationClass(dataAutomationClass: string): DebugElement {
|
||||
return this.getByCSS(`[data-automation-class="${dataAutomationClass}"]`);
|
||||
}
|
||||
|
||||
getInnerTextByDataAutomationId(dataAutomationId: string): string {
|
||||
return this.getByDataAutomationId(dataAutomationId).nativeElement.innerText;
|
||||
}
|
||||
|
||||
getByDirective(directive: Type<any>): DebugElement {
|
||||
return this.debugElement.query(By.directive(directive));
|
||||
}
|
||||
|
||||
/** Perform actions */
|
||||
|
||||
clickByCSS(selector: string): void {
|
||||
const element = this.getByCSS(selector);
|
||||
element.triggerEventHandler('click', new MouseEvent('click'));
|
||||
}
|
||||
|
||||
clickByDataAutomationId(dataAutomationId: string): void {
|
||||
this.getByDataAutomationId(dataAutomationId).nativeElement.click();
|
||||
}
|
||||
|
||||
doubleClickByDataAutomationId(dataAutomationId: string): void {
|
||||
const element = this.getByDataAutomationId(dataAutomationId);
|
||||
element.triggerEventHandler('dblclick', new MouseEvent('dblclick'));
|
||||
}
|
||||
|
||||
blurByCSS(selector: string): void {
|
||||
const element = this.getByCSS(selector);
|
||||
element.triggerEventHandler('blur', new FocusEvent('blur'));
|
||||
}
|
||||
|
||||
hoverOverByCSS(selector: string): void {
|
||||
const element = this.getByCSS(selector);
|
||||
element.triggerEventHandler('mouseenter', new MouseEvent('mouseenter'));
|
||||
}
|
||||
|
||||
hoverOverByDataAutomationId(dataAutomationId: string): void {
|
||||
const element = this.getByDataAutomationId(dataAutomationId);
|
||||
element.triggerEventHandler('mouseenter', new MouseEvent('mouseenter'));
|
||||
}
|
||||
|
||||
mouseLeaveByCSS(selector: string): void {
|
||||
const element = this.getByCSS(selector);
|
||||
element.triggerEventHandler('mouseleave', new MouseEvent('mouseleave'));
|
||||
}
|
||||
|
||||
mouseLeaveByDataAutomationId(dataAutomationId: string): void {
|
||||
const element = this.getByDataAutomationId(dataAutomationId);
|
||||
element.triggerEventHandler('mouseleave', new MouseEvent('mouseleave'));
|
||||
}
|
||||
|
||||
keyBoardEventByCSS(selector: string, event: 'keyup' | 'keydown', code: string, key: string): void {
|
||||
const element = this.getByCSS(selector);
|
||||
element.nativeElement.dispatchEvent(new KeyboardEvent(event, { code, key }));
|
||||
}
|
||||
|
||||
dispatchCustomEventByCSS(selector: string, eventName: string): void {
|
||||
const element = this.getByCSS(selector);
|
||||
element.nativeElement.dispatchEvent(new CustomEvent(eventName));
|
||||
}
|
||||
|
||||
/** Input related methods */
|
||||
|
||||
getInputByCSS(selector: string): HTMLInputElement {
|
||||
return this.getByCSS(selector)?.nativeElement;
|
||||
}
|
||||
|
||||
getInputByDataAutomationId(dataAutomationId: string): HTMLInputElement {
|
||||
return this.getByDataAutomationId(dataAutomationId)?.nativeElement;
|
||||
}
|
||||
|
||||
fillInputByCSS(selector: string, value: string): void {
|
||||
const input = this.getInputByCSS(selector);
|
||||
input.value = value;
|
||||
input.dispatchEvent(new Event('input'));
|
||||
}
|
||||
|
||||
fillInputByDataAutomationId(dataAutomationId: string, value: any): void {
|
||||
const input = this.getInputByDataAutomationId(dataAutomationId);
|
||||
input.value = value;
|
||||
input.dispatchEvent(new Event('input'));
|
||||
}
|
||||
|
||||
/** MatButton related methods */
|
||||
|
||||
async getMatButton(): Promise<MatButtonHarness> {
|
||||
return this.loader.getHarness(MatButtonHarness);
|
||||
}
|
||||
|
||||
async getMatButtonByCSS(selector: string): Promise<MatButtonHarness> {
|
||||
return this.loader.getHarness(MatButtonHarness.with({ selector }));
|
||||
}
|
||||
|
||||
async getMatButtonByDataAutomationId(dataAutomationId: string): Promise<MatButtonHarness> {
|
||||
return this.loader.getHarness(MatButtonHarness.with({ selector: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async checkIfMatButtonExists(): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatButtonHarness);
|
||||
}
|
||||
|
||||
async checkIfMatButtonExistsWithDataAutomationId(dataAutomationId: string): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatButtonHarness.with({ selector: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async clickMatButton(): Promise<void> {
|
||||
const button = await this.getMatButton();
|
||||
await button.click();
|
||||
}
|
||||
|
||||
async clickMatButtonByCSS(selector: string): Promise<void> {
|
||||
const button = await this.getMatButtonByCSS(selector);
|
||||
await button.click();
|
||||
}
|
||||
|
||||
async clickMatButtonByDataAutomationId(dataAutomationId: string): Promise<void> {
|
||||
const button = await this.getMatButtonByDataAutomationId(dataAutomationId);
|
||||
await button.click();
|
||||
}
|
||||
|
||||
async sendKeysToMatButton(keys: (string | TestKey)[]): Promise<void> {
|
||||
const button = await this.getMatButton();
|
||||
const host = await button.host();
|
||||
await host.sendKeys(...keys);
|
||||
}
|
||||
|
||||
/** MatCheckbox related methods */
|
||||
|
||||
async getMatCheckbox(): Promise<MatCheckboxHarness> {
|
||||
return this.loader.getHarness(MatCheckboxHarness);
|
||||
}
|
||||
|
||||
async getMatCheckboxByDataAutomationId(dataAutomationId: string): Promise<MatCheckboxHarness> {
|
||||
return this.loader.getHarness(MatCheckboxHarness.with({ selector: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async getMatCheckboxHost(): Promise<TestElement> {
|
||||
const checkbox = await this.getMatCheckbox();
|
||||
return checkbox.host();
|
||||
}
|
||||
|
||||
async getAllMatCheckboxes(): Promise<MatCheckboxHarness[]> {
|
||||
return this.loader.getAllHarnesses(MatCheckboxHarness);
|
||||
}
|
||||
|
||||
async checkIfMatCheckboxIsChecked(): Promise<boolean> {
|
||||
const checkbox = await this.getMatCheckbox();
|
||||
return checkbox.isChecked();
|
||||
}
|
||||
|
||||
async checkIfMatCheckboxesHaveClass(className: string): Promise<boolean> {
|
||||
const checkboxes = await this.getAllMatCheckboxes();
|
||||
return checkboxes.every(async (checkbox) => (await checkbox.host()).hasClass(className));
|
||||
}
|
||||
|
||||
async hoverOverMatCheckbox(): Promise<void> {
|
||||
const host = await this.getMatCheckboxHost();
|
||||
await host.hover();
|
||||
}
|
||||
|
||||
/** MatIcon related methods */
|
||||
|
||||
async getMatIconOrNull(): Promise<MatIconHarness> {
|
||||
return this.loader.getHarnessOrNull(MatIconHarness);
|
||||
}
|
||||
|
||||
async getMatIconWithAncestorByDataAutomationId(dataAutomationId: string): Promise<MatIconHarness> {
|
||||
return this.loader.getHarness(MatIconHarness.with({ ancestor: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async getMatIconWithAncestorByCSS(selector: string): Promise<MatIconHarness> {
|
||||
return this.loader.getHarness(MatIconHarness.with({ ancestor: selector }));
|
||||
}
|
||||
|
||||
async getMatIconWithAncestorByCSSAndName(selector: string, name: string): Promise<MatIconHarness> {
|
||||
return this.loader.getHarness(MatIconHarness.with({ ancestor: selector, name }));
|
||||
}
|
||||
|
||||
async checkIfMatIconExistsWithAncestorByDataAutomationId(dataAutomationId: string): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatIconHarness.with({ ancestor: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async checkIfMatIconExistsWithAncestorByCSSAndName(selector: string, name: string): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatIconHarness.with({ ancestor: selector, name }));
|
||||
}
|
||||
|
||||
async clickMatIconWithAncestorByDataAutomationId(dataAutomationId: string): Promise<void> {
|
||||
const icon = await this.getMatIconWithAncestorByDataAutomationId(dataAutomationId);
|
||||
const host = await icon.host();
|
||||
await host.click();
|
||||
}
|
||||
|
||||
/** MatSelect related methods */
|
||||
|
||||
async getMatSelectOptions(isOpened = false): Promise<MatOptionHarness[]> {
|
||||
const select = await this.loader.getHarness(MatSelectHarness);
|
||||
if (!isOpened) {
|
||||
await select.open();
|
||||
}
|
||||
return select.getOptions();
|
||||
}
|
||||
|
||||
async getMatSelectHost(): Promise<TestElement> {
|
||||
const select = await this.loader.getHarness(MatSelectHarness);
|
||||
return select.host();
|
||||
}
|
||||
|
||||
async checkIfMatSelectExists(): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatSelectHarness);
|
||||
}
|
||||
|
||||
async openMatSelect(): Promise<void> {
|
||||
const select = await this.loader.getHarness(MatSelectHarness);
|
||||
await select.open();
|
||||
}
|
||||
|
||||
/** MatChips related methods */
|
||||
|
||||
async getMatChipByDataAutomationId(dataAutomationId: string): Promise<MatChipHarness> {
|
||||
return this.loader.getHarness(MatChipHarness.with({ selector: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async checkIfMatChipExistsWithDataAutomationId(dataAutomationId: string): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatChipHarness.with({ selector: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async clickMatChip(dataAutomationId: string): Promise<void> {
|
||||
const chip = await this.getMatChipByDataAutomationId(dataAutomationId);
|
||||
const host = await chip.host();
|
||||
await host.click();
|
||||
}
|
||||
|
||||
async getMatChips(): Promise<MatChipHarness[]> {
|
||||
return this.loader.getAllHarnesses(MatChipHarness);
|
||||
}
|
||||
|
||||
/** MatChipListbox related methods */
|
||||
|
||||
async getMatChipListboxByDataAutomationId(dataAutomationId: string): Promise<MatChipListboxHarness> {
|
||||
return this.loader.getHarness(MatChipListboxHarness.with({ selector: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async clickMatChipListbox(dataAutomationId: string): Promise<void> {
|
||||
const chipList = await this.getMatChipListboxByDataAutomationId(dataAutomationId);
|
||||
const host = await chipList.host();
|
||||
await host.click();
|
||||
}
|
||||
|
||||
/** MatChipGrid related methods */
|
||||
|
||||
async checkIfMatChipGridExists(): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatChipGridHarness);
|
||||
}
|
||||
|
||||
/** MatFromField related methods */
|
||||
|
||||
async getMatFormField(): Promise<MatFormFieldHarness> {
|
||||
return this.loader.getHarness(MatFormFieldHarness);
|
||||
}
|
||||
|
||||
async getMatFormFieldByCSS(selector: string): Promise<MatFormFieldHarness> {
|
||||
return this.loader.getHarness(MatFormFieldHarness.with({ selector }));
|
||||
}
|
||||
|
||||
/** MatInput related methods */
|
||||
|
||||
async getMatInput(): Promise<MatInputHarness> {
|
||||
return this.loader.getHarness(MatInputHarness);
|
||||
}
|
||||
|
||||
async getMatInputByCSS(selector: string): Promise<MatInputHarness> {
|
||||
return this.loader.getHarness(MatInputHarness.with({ selector }));
|
||||
}
|
||||
|
||||
async getMatInputByDataAutomationId(dataAutomationId: string): Promise<MatInputHarness> {
|
||||
return this.loader.getHarness(MatInputHarness.with({ selector: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async getMatInputByPlaceholder(placeholder: string): Promise<MatInputHarness> {
|
||||
return this.loader.getHarness(MatInputHarness.with({ placeholder }));
|
||||
}
|
||||
|
||||
async getMatInputHost(): Promise<TestElement> {
|
||||
const input = await this.getMatInput();
|
||||
return input.host();
|
||||
}
|
||||
|
||||
async checkIfMatInputExists(): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatInputHarness);
|
||||
}
|
||||
|
||||
async checkIfMatInputExistsWithCSS(selector: string): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatInputHarness.with({ selector }));
|
||||
}
|
||||
|
||||
async checkIfMatInputExistsWithDataAutomationId(dataAutomationId: string): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatInputHarness.with({ selector: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
async checkIfMatInputExistsWithPlaceholder(placeholder: string): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatInputHarness.with({ placeholder }));
|
||||
}
|
||||
|
||||
async clickMatInput(): Promise<void> {
|
||||
const input = await this.getMatInput();
|
||||
const host = await input.host();
|
||||
await host.click();
|
||||
}
|
||||
|
||||
async fillMatInput(value: string): Promise<void> {
|
||||
const input = await this.getMatInput();
|
||||
await input.setValue(value);
|
||||
}
|
||||
|
||||
async fillMatInputByCSS(selector: string, value: string): Promise<void> {
|
||||
const input = await this.getMatInputByCSS(selector);
|
||||
await input.setValue(value);
|
||||
}
|
||||
|
||||
async fillMatInputByDataAutomationId(dataAutomationId: string, value: string): Promise<void> {
|
||||
const input = await this.getMatInputByDataAutomationId(dataAutomationId);
|
||||
await input.setValue(value);
|
||||
await (await input.host()).dispatchEvent('input');
|
||||
}
|
||||
|
||||
async focusMatInput(): Promise<void> {
|
||||
const input = await this.getMatInput();
|
||||
await input.focus();
|
||||
}
|
||||
|
||||
async blurMatInput(): Promise<void> {
|
||||
const input = await this.getMatInput();
|
||||
await input.blur();
|
||||
}
|
||||
|
||||
async getMatInputValue(): Promise<string> {
|
||||
const input = await this.getMatInput();
|
||||
return input.getValue();
|
||||
}
|
||||
|
||||
async getMatInputValueByDataAutomationId(dataAutomationId: string): Promise<string> {
|
||||
const input = await this.getMatInputByDataAutomationId(dataAutomationId);
|
||||
return input.getValue();
|
||||
}
|
||||
|
||||
async sendKeysToMatInput(keys: (string | TestKey)[]): Promise<void> {
|
||||
const input = await this.getMatInput();
|
||||
const host = await input.host();
|
||||
await host.sendKeys(...keys);
|
||||
}
|
||||
|
||||
/** MatAutoComplete related methods */
|
||||
|
||||
async typeAndGetOptionsForMatAutoComplete(fixture: ComponentFixture<any>, value: string): Promise<MatOptionHarness[]> {
|
||||
const autocomplete = await this.loader.getHarness(MatAutocompleteHarness);
|
||||
await autocomplete.enterText(value);
|
||||
fixture.detectChanges();
|
||||
|
||||
return autocomplete.getOptions();
|
||||
}
|
||||
|
||||
/** MatError related methods */
|
||||
|
||||
async getMatErrorByCSS(selector: string): Promise<MatErrorHarness> {
|
||||
return this.loader.getHarness(MatErrorHarness.with({ selector }));
|
||||
}
|
||||
|
||||
async getMatErrorByDataAutomationId(dataAutomationId: string): Promise<MatErrorHarness> {
|
||||
return this.loader.getHarness(MatErrorHarness.with({ selector: `[data-automation-id="${dataAutomationId}"]` }));
|
||||
}
|
||||
|
||||
/** MatTabGroup related methods */
|
||||
|
||||
async getSelectedTabFromMatTabGroup(): Promise<MatTabHarness> {
|
||||
const tabs = await this.loader.getHarness(MatTabGroupHarness);
|
||||
return tabs.getSelectedTab();
|
||||
}
|
||||
|
||||
async getSelectedTabLabelFromMatTabGroup(): Promise<string> {
|
||||
const tab = await this.getSelectedTabFromMatTabGroup();
|
||||
return tab.getLabel();
|
||||
}
|
||||
|
||||
/** MatToolbar related methods */
|
||||
|
||||
async getMatToolbarHost(): Promise<TestElement> {
|
||||
const toolbar = await this.loader.getHarness(MatToolbarHarness);
|
||||
return toolbar.host();
|
||||
}
|
||||
|
||||
/** MatSnackbar related methods */
|
||||
|
||||
async checkIfMatSnackbarExists(): Promise<boolean> {
|
||||
return this.loader.hasHarness(MatSnackBarHarness);
|
||||
}
|
||||
|
||||
/** MatProgressBar related methods */
|
||||
|
||||
async getMatProgressBarHost(): Promise<TestElement> {
|
||||
const progress = await this.loader.getHarness(MatProgressBarHarness);
|
||||
return progress.host();
|
||||
}
|
||||
}
|
||||
@@ -17,10 +17,12 @@
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ToolbarComponent } from './toolbar.component';
|
||||
import { NoopTranslateModule } from '@alfresco/adf-core';
|
||||
import { NoopTranslateModule } from '../testing/noop-translate.module';
|
||||
import { UnitTestingUtils } from '../testing/unit-testing-utils';
|
||||
|
||||
describe('ToolbarComponent', () => {
|
||||
let fixture: ComponentFixture<ToolbarComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -28,6 +30,7 @@ describe('ToolbarComponent', () => {
|
||||
});
|
||||
|
||||
fixture = TestBed.createComponent(ToolbarComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
});
|
||||
|
||||
it('should render title span', async () => {
|
||||
@@ -36,7 +39,7 @@ describe('ToolbarComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const title: HTMLSpanElement = fixture.nativeElement.querySelector('.adf-toolbar-title');
|
||||
const title: HTMLSpanElement = testingUtils.getByCSS('.adf-toolbar-title').nativeElement;
|
||||
expect(title.innerHTML).toBe('test-title');
|
||||
});
|
||||
});
|
||||
|
||||
+6
-7
@@ -17,8 +17,7 @@
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatDialogRef } from '@angular/material/dialog';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CoreTestingModule } from '../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../testing';
|
||||
import { DownloadPromptActions } from '../../models/download-prompt.actions';
|
||||
import { DownloadPromptDialogComponent } from './download-prompt-dialog.component';
|
||||
|
||||
@@ -29,8 +28,9 @@ const mockDialog = {
|
||||
describe('DownloadPromptDialogComponent', () => {
|
||||
let matDialogRef: MatDialogRef<DownloadPromptDialogComponent>;
|
||||
let fixture: ComponentFixture<DownloadPromptDialogComponent>;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const getButton = (buttonId: string) => fixture.debugElement.query(By.css(buttonId)).nativeElement;
|
||||
const clickButton = (buttonId: string) => testingUtils.clickByCSS(buttonId);
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -40,12 +40,12 @@ describe('DownloadPromptDialogComponent', () => {
|
||||
matDialogRef = TestBed.inject(MatDialogRef);
|
||||
|
||||
fixture = TestBed.createComponent(DownloadPromptDialogComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should emit DownloadPromptActions.WAIT and close dialog when clicking on the wait button', async () => {
|
||||
const waitButton = getButton('#waitButton');
|
||||
waitButton.dispatchEvent(new Event('click'));
|
||||
clickButton('#waitButton');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
@@ -54,8 +54,7 @@ describe('DownloadPromptDialogComponent', () => {
|
||||
});
|
||||
|
||||
it('should emit DownloadPromptActions.DOWNLOAD and close dialog when clicking on the download button', async () => {
|
||||
const waitButton = getButton('#downloadButton');
|
||||
waitButton.dispatchEvent(new Event('click'));
|
||||
clickButton('#downloadButton');
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
@@ -17,17 +17,16 @@
|
||||
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { AppConfigService } from '../../../app-config';
|
||||
import { UrlService } from '../../../common';
|
||||
import { CoreTestingModule } from '../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../testing';
|
||||
import { ImgViewerComponent } from './img-viewer.component';
|
||||
|
||||
describe('Test Img viewer component ', () => {
|
||||
let component: ImgViewerComponent;
|
||||
let urlService: UrlService;
|
||||
let fixture: ComponentFixture<ImgViewerComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const createFakeBlob = () => {
|
||||
const data = atob('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==');
|
||||
@@ -44,8 +43,8 @@ describe('Test Img viewer component ', () => {
|
||||
beforeEach(() => {
|
||||
urlService = TestBed.inject(UrlService);
|
||||
fixture = TestBed.createComponent(ImgViewerComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
component.urlFile = 'fake-url-file.png';
|
||||
fixture.detectChanges();
|
||||
@@ -81,7 +80,6 @@ describe('Test Img viewer component ', () => {
|
||||
urlService = TestBed.inject(UrlService);
|
||||
fixture = TestBed.createComponent(ImgViewerComponent);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
component.urlFile =
|
||||
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';
|
||||
@@ -109,8 +107,8 @@ describe('Test Img viewer component ', () => {
|
||||
beforeEach(() => {
|
||||
urlService = TestBed.inject(UrlService);
|
||||
fixture = TestBed.createComponent(ImgViewerComponent);
|
||||
testingUtils.setDebugElement(fixture.debugElement);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
@@ -132,7 +130,7 @@ describe('Test Img viewer component ', () => {
|
||||
it('should present file name in the alt attribute', () => {
|
||||
component.fileName = 'fake-name';
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('#viewer-image').getAttribute('alt')).toEqual('fake-name');
|
||||
expect(testingUtils.getByCSS('#viewer-image').nativeElement.getAttribute('alt')).toEqual('fake-name');
|
||||
});
|
||||
|
||||
it('should call replace on cropper with new url if blobFile is null', () => {
|
||||
@@ -161,8 +159,8 @@ describe('Test Img viewer component ', () => {
|
||||
describe('toolbar actions', () => {
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(ImgViewerComponent);
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
component.blobFile = createFakeBlob();
|
||||
const change = new SimpleChange(null, component.blobFile, true);
|
||||
component.ngOnChanges({ blobFile: change });
|
||||
@@ -213,19 +211,16 @@ describe('Test Img viewer component ', () => {
|
||||
it('should show rotate button if not in read only mode', () => {
|
||||
component.readOnly = false;
|
||||
fixture.detectChanges();
|
||||
const rotateButtonElement = element.querySelector('#viewer-rotate-button');
|
||||
|
||||
expect(rotateButtonElement).not.toEqual(null);
|
||||
expect(testingUtils.getByCSS('#viewer-rotate-button')).not.toEqual(null);
|
||||
});
|
||||
|
||||
it('should not show rotate button by default', () => {
|
||||
const rotateButtonElement = element.querySelector('#viewer-rotate-button');
|
||||
expect(rotateButtonElement).toEqual(null);
|
||||
expect(testingUtils.getByCSS('#viewer-rotate-button')).toEqual(null);
|
||||
});
|
||||
|
||||
it('should not show crop button by default', () => {
|
||||
const rotateButtonElement = element.querySelector('#viewer-crop-button');
|
||||
expect(rotateButtonElement).toEqual(null);
|
||||
expect(testingUtils.getByCSS('#viewer-crop-button')).toEqual(null);
|
||||
});
|
||||
|
||||
it('should start cropping when clicking the crop button', fakeAsync(() => {
|
||||
@@ -234,8 +229,7 @@ describe('Test Img viewer component ', () => {
|
||||
spyOn(component.cropper, 'crop');
|
||||
spyOn(component.cropper, 'setDragMode');
|
||||
fixture.detectChanges();
|
||||
const cropButtonElement = fixture.debugElement.query(By.css('#viewer-crop-button'));
|
||||
cropButtonElement.triggerEventHandler('click', null);
|
||||
testingUtils.clickByCSS('#viewer-crop-button');
|
||||
tick();
|
||||
|
||||
expect(component.cropImage).toHaveBeenCalled();
|
||||
@@ -248,8 +242,7 @@ describe('Test Img viewer component ', () => {
|
||||
spyOn(component, 'rotateImage').and.callThrough();
|
||||
spyOn(component.cropper, 'rotate');
|
||||
fixture.detectChanges();
|
||||
const rotateButtonElement = fixture.debugElement.query(By.css('#viewer-rotate-button'));
|
||||
rotateButtonElement.triggerEventHandler('click', null);
|
||||
testingUtils.clickByCSS('#viewer-rotate-button');
|
||||
tick();
|
||||
|
||||
expect(component.rotateImage).toHaveBeenCalled();
|
||||
@@ -260,26 +253,23 @@ describe('Test Img viewer component ', () => {
|
||||
component.readOnly = false;
|
||||
component.isEditing = true;
|
||||
fixture.detectChanges();
|
||||
const secondaryToolbar = document.querySelector('.adf-secondary-toolbar');
|
||||
|
||||
expect(secondaryToolbar).not.toEqual(null);
|
||||
expect(testingUtils.getByCSS('.adf-secondary-toolbar')).not.toEqual(null);
|
||||
}));
|
||||
|
||||
it('should not display the second toolbar when in read only mode', () => {
|
||||
component.readOnly = true;
|
||||
fixture.detectChanges();
|
||||
const secondaryToolbar = document.querySelector('.adf-secondary-toolbar');
|
||||
|
||||
expect(secondaryToolbar).toEqual(null);
|
||||
expect(testingUtils.getByCSS('.adf-secondary-toolbar')).toEqual(null);
|
||||
});
|
||||
|
||||
it('should not display the second toolbar when not in editing', () => {
|
||||
component.readOnly = true;
|
||||
component.isEditing = false;
|
||||
fixture.detectChanges();
|
||||
const secondaryToolbar = document.querySelector('.adf-secondary-toolbar');
|
||||
|
||||
expect(secondaryToolbar).toEqual(null);
|
||||
expect(testingUtils.getByCSS('.adf-secondary-toolbar')).toEqual(null);
|
||||
});
|
||||
|
||||
it('should display second toolbar in edit mode', fakeAsync(() => {
|
||||
@@ -287,13 +277,10 @@ describe('Test Img viewer component ', () => {
|
||||
component.isEditing = true;
|
||||
|
||||
fixture.detectChanges();
|
||||
const secondaryToolbar = document.querySelector('.adf-secondary-toolbar');
|
||||
const resetButton = document.querySelector('#viewer-cancel-button');
|
||||
const saveButton = document.querySelector('#viewer-save-button');
|
||||
|
||||
expect(secondaryToolbar).not.toEqual(null);
|
||||
expect(resetButton).not.toEqual(null);
|
||||
expect(saveButton).not.toEqual(null);
|
||||
expect(testingUtils.getByCSS('.adf-secondary-toolbar')).not.toEqual(null);
|
||||
expect(testingUtils.getByCSS('#viewer-cancel-button')).not.toEqual(null);
|
||||
expect(testingUtils.getByCSS('#viewer-save-button')).not.toEqual(null);
|
||||
}));
|
||||
|
||||
it('should not be in editing mode by default', () => {
|
||||
@@ -327,8 +314,7 @@ describe('Test Img viewer component ', () => {
|
||||
spyOn(component.cropper, 'zoomTo');
|
||||
|
||||
fixture.detectChanges();
|
||||
const cancelButtonElement = fixture.debugElement.query(By.css('#viewer-cancel-button'));
|
||||
cancelButtonElement.triggerEventHandler('click', null);
|
||||
testingUtils.clickByCSS('#viewer-cancel-button');
|
||||
tick();
|
||||
|
||||
expect(component.reset).toHaveBeenCalled();
|
||||
@@ -350,8 +336,7 @@ describe('Test Img viewer component ', () => {
|
||||
spyOn(component.cropper.getCroppedCanvas(), 'toBlob').and.callFake(() => component.isSaving.emit(false));
|
||||
|
||||
fixture.detectChanges();
|
||||
const saveButtonElement = fixture.debugElement.query(By.css('#viewer-save-button'));
|
||||
saveButtonElement.triggerEventHandler('click', null);
|
||||
testingUtils.clickByCSS('#viewer-save-button');
|
||||
tick();
|
||||
|
||||
expect(component.save).toHaveBeenCalled();
|
||||
@@ -374,7 +359,7 @@ describe('Test Img viewer component ', () => {
|
||||
describe('allowedEditActions', () => {
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(ImgViewerComponent);
|
||||
element = fixture.nativeElement;
|
||||
testingUtils.setDebugElement(fixture.debugElement);
|
||||
component = fixture.componentInstance;
|
||||
});
|
||||
|
||||
@@ -383,23 +368,17 @@ describe('Test Img viewer component ', () => {
|
||||
component.allowedEditActions = { rotate: true, crop: true };
|
||||
fixture.detectChanges();
|
||||
|
||||
let rotateButton = element.querySelector('#viewer-rotate-button');
|
||||
let cropButton = element.querySelector('#viewer-crop-button');
|
||||
|
||||
// Check both buttons are visible when allowed
|
||||
expect(rotateButton).not.toBeNull('Rotate button should be visible when allowed');
|
||||
expect(cropButton).not.toBeNull('Crop button should be visible when allowed');
|
||||
expect(testingUtils.getByCSS('#viewer-rotate-button')).not.toBeNull('Rotate button should be visible when allowed');
|
||||
expect(testingUtils.getByCSS('#viewer-crop-button')).not.toBeNull('Crop button should be visible when allowed');
|
||||
|
||||
// Change allowedEditActions to disallow both actions
|
||||
component.allowedEditActions = { rotate: false, crop: false };
|
||||
fixture.detectChanges();
|
||||
|
||||
rotateButton = element.querySelector('#viewer-rotate-button');
|
||||
cropButton = element.querySelector('#viewer-crop-button');
|
||||
|
||||
// Check both buttons are not visible when not allowed
|
||||
expect(rotateButton).toBeNull('Rotate button should not be visible when disallowed');
|
||||
expect(cropButton).toBeNull('Crop button should not be visible when disallowed');
|
||||
expect(testingUtils.getByCSS('#viewer-rotate-button')).toBeNull('Rotate button should not be visible when disallowed');
|
||||
expect(testingUtils.getByCSS('#viewer-crop-button')).toBeNull('Crop button should not be visible when disallowed');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+4
-3
@@ -16,9 +16,8 @@
|
||||
*/
|
||||
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { PdfThumbListComponent } from './pdf-viewer-thumbnails.component';
|
||||
import { CoreTestingModule } from '../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../testing';
|
||||
import { DOWN_ARROW, ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';
|
||||
|
||||
declare const pdfjsViewer: any;
|
||||
@@ -26,6 +25,7 @@ declare const pdfjsViewer: any;
|
||||
describe('PdfThumbListComponent', () => {
|
||||
let fixture: ComponentFixture<PdfThumbListComponent>;
|
||||
let component: PdfThumbListComponent;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
const page = (id) => ({
|
||||
id,
|
||||
@@ -75,6 +75,7 @@ describe('PdfThumbListComponent', () => {
|
||||
imports: [CoreTestingModule]
|
||||
});
|
||||
fixture = TestBed.createComponent(PdfThumbListComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
component = fixture.componentInstance;
|
||||
component.pdfViewer = viewerMock;
|
||||
|
||||
@@ -83,7 +84,7 @@ describe('PdfThumbListComponent', () => {
|
||||
fixture.nativeElement.style.height = '700px';
|
||||
fixture.nativeElement.style.overflow = 'scroll';
|
||||
|
||||
const content = fixture.debugElement.query(By.css('.adf-pdf-thumbnails__content')).nativeElement;
|
||||
const content = testingUtils.getByCSS('.adf-pdf-thumbnails__content').nativeElement;
|
||||
|
||||
content.style.height = '2000px';
|
||||
content.style.position = 'unset';
|
||||
|
||||
@@ -24,7 +24,7 @@ import { of } from 'rxjs';
|
||||
import { take } from 'rxjs/operators';
|
||||
import { AppConfigService } from '../../../app-config';
|
||||
import { EventMock } from '../../../mock';
|
||||
import { CoreTestingModule } from '../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../testing';
|
||||
import { RenderingQueueServices } from '../../services/rendering-queue.services';
|
||||
import { PdfThumbListComponent } from '../pdf-viewer-thumbnails/pdf-viewer-thumbnails.component';
|
||||
import { PdfViewerComponent } from './pdf-viewer.component';
|
||||
@@ -109,9 +109,9 @@ class BlobTestComponent {
|
||||
describe('Test PdfViewer component', () => {
|
||||
let component: PdfViewerComponent;
|
||||
let fixture: ComponentFixture<PdfViewerComponent>;
|
||||
let element: HTMLElement;
|
||||
let change: any;
|
||||
let dialog: MatDialog;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(async () => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -127,11 +127,10 @@ describe('Test PdfViewer component', () => {
|
||||
]
|
||||
});
|
||||
fixture = TestBed.createComponent(PdfViewerComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
dialog = TestBed.inject(MatDialog);
|
||||
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
|
||||
component.showToolbar = true;
|
||||
component.inputPage('1');
|
||||
|
||||
@@ -148,6 +147,7 @@ describe('Test PdfViewer component', () => {
|
||||
fixtureUrlTestComponent = TestBed.createComponent(UrlTestComponent);
|
||||
componentUrlTestComponent = fixtureUrlTestComponent.componentInstance;
|
||||
elementUrlTestComponent = fixtureUrlTestComponent.nativeElement;
|
||||
testingUtils.setDebugElement(fixtureUrlTestComponent.debugElement);
|
||||
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
|
||||
@@ -179,8 +179,7 @@ describe('Test PdfViewer component', () => {
|
||||
}, 55000);
|
||||
|
||||
it('should nextPage move to the next page', (done) => {
|
||||
const nextPageButton: any = elementUrlTestComponent.querySelector('#viewer-next-page-button');
|
||||
nextPageButton.click();
|
||||
testingUtils.clickByCSS('#viewer-next-page-button');
|
||||
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
|
||||
@@ -218,12 +217,9 @@ describe('Test PdfViewer component', () => {
|
||||
}, 55000);
|
||||
|
||||
it('should previous page move to the previous page', (done) => {
|
||||
const previousPageButton: any = elementUrlTestComponent.querySelector('#viewer-previous-page-button');
|
||||
const nextPageButton: any = elementUrlTestComponent.querySelector('#viewer-next-page-button');
|
||||
|
||||
nextPageButton.click();
|
||||
nextPageButton.click();
|
||||
previousPageButton.click();
|
||||
testingUtils.clickByCSS('#viewer-next-page-button');
|
||||
testingUtils.clickByCSS('#viewer-next-page-button');
|
||||
testingUtils.clickByCSS('#viewer-previous-page-button');
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
|
||||
fixtureUrlTestComponent.whenStable().then(() => {
|
||||
@@ -256,10 +252,8 @@ describe('Test PdfViewer component', () => {
|
||||
it('should zoom in increment the scale value', (done) => {
|
||||
spyOn(componentUrlTestComponent.pdfViewerComponent.pdfViewer, 'forceRendering').and.callFake(() => {});
|
||||
|
||||
const zoomInButton: any = elementUrlTestComponent.querySelector('#viewer-zoom-in-button');
|
||||
|
||||
const zoomBefore = componentUrlTestComponent.pdfViewerComponent.pdfViewer.currentScaleValue;
|
||||
zoomInButton.click();
|
||||
testingUtils.clickByCSS('#viewer-zoom-in-button');
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
|
||||
expect(componentUrlTestComponent.pdfViewerComponent.currentScaleMode).toBe('auto');
|
||||
@@ -270,10 +264,9 @@ describe('Test PdfViewer component', () => {
|
||||
|
||||
it('should zoom out decrement the scale value', (done) => {
|
||||
spyOn(componentUrlTestComponent.pdfViewerComponent.pdfViewer, 'forceRendering').and.callFake(() => {});
|
||||
const zoomOutButton: any = elementUrlTestComponent.querySelector('#viewer-zoom-out-button');
|
||||
|
||||
const zoomBefore = componentUrlTestComponent.pdfViewerComponent.pdfViewer.currentScaleValue;
|
||||
zoomOutButton.click();
|
||||
testingUtils.clickByCSS('#viewer-zoom-out-button');
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
|
||||
expect(componentUrlTestComponent.pdfViewerComponent.currentScaleMode).toBe('auto');
|
||||
@@ -284,17 +277,14 @@ describe('Test PdfViewer component', () => {
|
||||
|
||||
it('should it-in button toggle page-fit and auto scale mode', fakeAsync(() => {
|
||||
spyOn(componentUrlTestComponent.pdfViewerComponent.pdfViewer, 'forceRendering').and.callFake(() => {});
|
||||
|
||||
const itPage: any = elementUrlTestComponent.querySelector('#viewer-scale-page-button');
|
||||
|
||||
tick(250);
|
||||
|
||||
expect(componentUrlTestComponent.pdfViewerComponent.currentScaleMode).toBe('init');
|
||||
itPage.click();
|
||||
testingUtils.clickByCSS('#viewer-scale-page-button');
|
||||
expect(componentUrlTestComponent.pdfViewerComponent.currentScaleMode).toBe('page-fit');
|
||||
itPage.click();
|
||||
testingUtils.clickByCSS('#viewer-scale-page-button');
|
||||
expect(componentUrlTestComponent.pdfViewerComponent.currentScaleMode).toBe('auto');
|
||||
itPage.click();
|
||||
testingUtils.clickByCSS('#viewer-scale-page-button');
|
||||
expect(componentUrlTestComponent.pdfViewerComponent.currentScaleMode).toBe('page-fit');
|
||||
}), 55000);
|
||||
});
|
||||
@@ -322,14 +312,14 @@ describe('Test PdfViewer component', () => {
|
||||
}, 55000);
|
||||
|
||||
it('should open thumbnails panel', (done) => {
|
||||
expect(elementUrlTestComponent.querySelector('.adf-pdf-viewer__thumbnails')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-pdf-viewer__thumbnails')).toBeNull();
|
||||
|
||||
componentUrlTestComponent.pdfViewerComponent.toggleThumbnails();
|
||||
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
|
||||
fixtureUrlTestComponent.whenStable().then(() => {
|
||||
expect(elementUrlTestComponent.querySelector('.adf-pdf-viewer__thumbnails')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-pdf-viewer__thumbnails')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 55000);
|
||||
@@ -391,7 +381,7 @@ describe('Test PdfViewer component', () => {
|
||||
});
|
||||
|
||||
it('should Loader be present', () => {
|
||||
expect(element.querySelector('.adf-loader-container')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-loader-container')).not.toBeNull();
|
||||
});
|
||||
|
||||
describe('Zoom customization', () => {
|
||||
@@ -527,6 +517,7 @@ describe('Test PdfViewer component', () => {
|
||||
beforeEach(async () => {
|
||||
fixtureUrlTestComponent = TestBed.createComponent(UrlTestComponent);
|
||||
elementUrlTestComponent = fixtureUrlTestComponent.nativeElement;
|
||||
testingUtils.setDebugElement(fixtureUrlTestComponent.debugElement);
|
||||
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
await fixtureUrlTestComponent.whenStable();
|
||||
@@ -541,8 +532,8 @@ describe('Test PdfViewer component', () => {
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
|
||||
fixtureUrlTestComponent.whenStable().then(() => {
|
||||
expect(elementUrlTestComponent.querySelector('.adf-pdfViewer')).not.toBeNull();
|
||||
expect(elementUrlTestComponent.querySelector('.adf-viewer-pdf-viewer')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-pdfViewer')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-pdf-viewer')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 55000);
|
||||
@@ -551,11 +542,11 @@ describe('Test PdfViewer component', () => {
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
fixtureUrlTestComponent.whenStable().then(() => {
|
||||
/* cspell:disable-next-line */
|
||||
expect(elementUrlTestComponent.querySelector('.viewer-pagenumber-input')).toBeDefined();
|
||||
expect(elementUrlTestComponent.querySelector('.viewer-total-pages')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.viewer-pagenumber-input')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.viewer-total-pages')).toBeDefined();
|
||||
|
||||
expect(elementUrlTestComponent.querySelector('#viewer-previous-page-button')).not.toBeNull();
|
||||
expect(elementUrlTestComponent.querySelector('#viewer-next-page-button')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#viewer-previous-page-button')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#viewer-next-page-button')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 55000);
|
||||
@@ -565,8 +556,8 @@ describe('Test PdfViewer component', () => {
|
||||
|
||||
fixtureUrlTestComponent.detectChanges();
|
||||
fixtureUrlTestComponent.whenStable().then(() => {
|
||||
expect(elementUrlTestComponent.querySelector('.viewer-toolbar-command')).toBeNull();
|
||||
expect(elementUrlTestComponent.querySelector('.viewer-toolbar-pagination')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.viewer-toolbar-command')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.viewer-toolbar-pagination')).toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 55000);
|
||||
@@ -579,6 +570,7 @@ describe('Test PdfViewer component', () => {
|
||||
beforeEach(async () => {
|
||||
fixtureBlobTestComponent = TestBed.createComponent(BlobTestComponent);
|
||||
elementBlobTestComponent = fixtureBlobTestComponent.nativeElement;
|
||||
testingUtils.setDebugElement(fixtureBlobTestComponent.debugElement);
|
||||
|
||||
fixtureBlobTestComponent.detectChanges();
|
||||
await fixtureBlobTestComponent.whenStable();
|
||||
@@ -593,8 +585,8 @@ describe('Test PdfViewer component', () => {
|
||||
fixtureBlobTestComponent.detectChanges();
|
||||
|
||||
fixtureBlobTestComponent.whenStable().then(() => {
|
||||
expect(elementBlobTestComponent.querySelector('.adf-pdfViewer')).not.toBeNull();
|
||||
expect(elementBlobTestComponent.querySelector('.adf-viewer-pdf-viewer')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-pdfViewer')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-pdf-viewer')).not.toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -602,8 +594,8 @@ describe('Test PdfViewer component', () => {
|
||||
fixtureBlobTestComponent.detectChanges();
|
||||
|
||||
fixtureBlobTestComponent.whenStable().then(() => {
|
||||
expect(elementBlobTestComponent.querySelector('#viewer-previous-page-button')).not.toBeNull();
|
||||
expect(elementBlobTestComponent.querySelector('#viewer-next-page-button')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#viewer-previous-page-button')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#viewer-next-page-button')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 55000);
|
||||
@@ -613,11 +605,11 @@ describe('Test PdfViewer component', () => {
|
||||
|
||||
fixtureBlobTestComponent.whenStable().then(() => {
|
||||
/* cspell:disable-next-line */
|
||||
expect(elementBlobTestComponent.querySelector('.adf-viewer-pagenumber-input')).toBeDefined();
|
||||
expect(elementBlobTestComponent.querySelector('.adf-viewer-total-pages')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-pagenumber-input')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-total-pages')).toBeDefined();
|
||||
|
||||
expect(elementBlobTestComponent.querySelector('#viewer-previous-page-button')).not.toBeNull();
|
||||
expect(elementBlobTestComponent.querySelector('#viewer-next-page-button')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#viewer-previous-page-button')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#viewer-next-page-button')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 55000);
|
||||
@@ -628,8 +620,8 @@ describe('Test PdfViewer component', () => {
|
||||
fixtureBlobTestComponent.detectChanges();
|
||||
|
||||
fixtureBlobTestComponent.whenStable().then(() => {
|
||||
expect(elementBlobTestComponent.querySelector('.viewer-toolbar-command')).toBeNull();
|
||||
expect(elementBlobTestComponent.querySelector('.viewer-toolbar-pagination')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.viewer-toolbar-command')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.viewer-toolbar-pagination')).toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 55000);
|
||||
|
||||
@@ -18,25 +18,25 @@
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { TxtViewerComponent } from './txt-viewer.component';
|
||||
import { CoreTestingModule } from '../../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../../testing';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { of } from 'rxjs';
|
||||
|
||||
describe('Text View component', () => {
|
||||
let component: TxtViewerComponent;
|
||||
let fixture: ComponentFixture<TxtViewerComponent>;
|
||||
let element: HTMLElement;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule, TxtViewerComponent]
|
||||
});
|
||||
fixture = TestBed.createComponent(TxtViewerComponent);
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
|
||||
const httpClient = TestBed.inject(HttpClient);
|
||||
spyOn(httpClient, 'get').and.returnValue(of('example'));
|
||||
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
});
|
||||
|
||||
@@ -51,7 +51,7 @@ describe('Text View component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(element.querySelector('.adf-txt-viewer-content').textContent).toContain('example');
|
||||
expect(testingUtils.getByCSS('.adf-txt-viewer-content').nativeElement.textContent).toContain('example');
|
||||
});
|
||||
|
||||
it('Should text container be present with Blob file', async () => {
|
||||
@@ -64,7 +64,7 @@ describe('Text View component', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(element.querySelector('.adf-txt-viewer-content').textContent).toContain('example');
|
||||
expect(testingUtils.getByCSS('.adf-txt-viewer-content').nativeElement.textContent).toContain('example');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -21,8 +21,7 @@ import { SpyLocation } from '@angular/common/testing';
|
||||
import { Component, TemplateRef, ViewChild } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatDialog, MatDialogModule } from '@angular/material/dialog';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { NoopTranslateModule } from '../../../testing';
|
||||
import { NoopTranslateModule, UnitTestingUtils } from '../../../testing';
|
||||
import { RenderingQueueServices } from '../../services/rendering-queue.services';
|
||||
import { ViewerRenderComponent } from './viewer-render.component';
|
||||
import { ViewerExtensionDirective } from '@alfresco/adf-core';
|
||||
@@ -66,9 +65,8 @@ class DoubleViewerComponent {
|
||||
describe('ViewerComponent', () => {
|
||||
let component: ViewerRenderComponent;
|
||||
let fixture: ComponentFixture<ViewerRenderComponent>;
|
||||
let element: HTMLElement;
|
||||
|
||||
let extensionService: AppExtensionService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -76,7 +74,7 @@ describe('ViewerComponent', () => {
|
||||
providers: [RenderingQueueServices, { provide: Location, useClass: SpyLocation }, MatDialog]
|
||||
});
|
||||
fixture = TestBed.createComponent(ViewerRenderComponent);
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
component = fixture.componentInstance;
|
||||
|
||||
extensionService = TestBed.inject(AppExtensionService);
|
||||
@@ -129,7 +127,7 @@ describe('ViewerComponent', () => {
|
||||
spyOn(extensionService, 'getViewerExtensions').and.returnValue([extension]);
|
||||
|
||||
fixture = TestBed.createComponent(ViewerRenderComponent);
|
||||
element = fixture.nativeElement;
|
||||
testingUtils.setDebugElement(fixture.debugElement);
|
||||
component = fixture.componentInstance;
|
||||
|
||||
component.urlFile = 'fake-test-file.pdf';
|
||||
@@ -141,7 +139,7 @@ describe('ViewerComponent', () => {
|
||||
expect(component.externalExtensions.includes('*')).toBe(true);
|
||||
expect(component.externalViewer).toBe(extension);
|
||||
expect(component.viewerType).toBe('external');
|
||||
expect(element.querySelector('[data-automation-id="custom.component"]')).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('custom.component')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should display pdf with the first external viewer provided', async () => {
|
||||
@@ -160,7 +158,7 @@ describe('ViewerComponent', () => {
|
||||
spyOn(extensionService, 'getViewerExtensions').and.returnValue(extensions);
|
||||
|
||||
fixture = TestBed.createComponent(ViewerRenderComponent);
|
||||
element = fixture.nativeElement;
|
||||
testingUtils.setDebugElement(fixture.debugElement);
|
||||
component = fixture.componentInstance;
|
||||
|
||||
component.urlFile = 'fake-test-file.pdf';
|
||||
@@ -169,8 +167,8 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
expect(element.querySelector('[data-automation-id="custom.component.1"]')).not.toBeNull();
|
||||
expect(element.querySelector('[data-automation-id="custom.component.2"]')).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('custom.component.1')).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('custom.component.2')).toBeNull();
|
||||
});
|
||||
|
||||
it('should display url with the external viewer provided', async () => {
|
||||
@@ -182,7 +180,7 @@ describe('ViewerComponent', () => {
|
||||
spyOn(extensionService, 'getViewerExtensions').and.returnValue([extension]);
|
||||
|
||||
fixture = TestBed.createComponent(ViewerRenderComponent);
|
||||
element = fixture.nativeElement;
|
||||
testingUtils.setDebugElement(fixture.debugElement);
|
||||
component = fixture.componentInstance;
|
||||
|
||||
component.urlFile = 'http://localhost:4200/alfresco';
|
||||
@@ -194,7 +192,7 @@ describe('ViewerComponent', () => {
|
||||
expect(component.externalExtensions.includes('*')).toBe(true);
|
||||
expect(component.externalViewer).toBe(extension);
|
||||
expect(component.viewerType).toBe('external');
|
||||
expect(element.querySelector('[data-automation-id="custom.component"]')).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('custom.component')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should extension file pdf be loaded', (done) => {
|
||||
@@ -204,7 +202,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-pdf-viewer')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('adf-pdf-viewer')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -216,7 +214,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('#viewer-image')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#viewer-image')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -228,7 +226,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-media-player')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('adf-media-player')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -240,7 +238,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-txt-viewer')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('adf-txt-viewer')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -253,15 +251,17 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-viewer-unknown-format')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('adf-viewer-unknown-format')).toBeDefined();
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Custom viewer extension template', () => {
|
||||
const getCustomViewerContent = (customFixture: ComponentFixture<DoubleViewerComponent>): HTMLHeadingElement =>
|
||||
customFixture.debugElement.query(By.css('.adf-viewer-render-custom-content h1')).nativeElement;
|
||||
const getCustomViewerContent = (customFixture: ComponentFixture<DoubleViewerComponent>): HTMLHeadingElement => {
|
||||
testingUtils.setDebugElement(customFixture.debugElement);
|
||||
return testingUtils.getByCSS('.adf-viewer-render-custom-content h1').nativeElement;
|
||||
};
|
||||
|
||||
it('should render provided custom template when file type matches supported extensions', async () => {
|
||||
const fixtureCustom = TestBed.createComponent(DoubleViewerComponent);
|
||||
@@ -304,7 +304,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('#viewer-image')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#viewer-image')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -317,7 +317,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('#viewer-image')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('#viewer-image')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -330,7 +330,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-txt-viewer')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('adf-txt-viewer')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -343,7 +343,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-media-player')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('adf-media-player')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 25000);
|
||||
@@ -356,7 +356,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-media-player')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('adf-media-player')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 25000);
|
||||
@@ -369,7 +369,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-pdf-viewer')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('adf-pdf-viewer')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 25000);
|
||||
@@ -381,7 +381,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-pdf-viewer')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('adf-pdf-viewer')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
}, 25000);
|
||||
@@ -401,7 +401,7 @@ describe('ViewerComponent', () => {
|
||||
component.ngOnChanges();
|
||||
fixture.detectChanges();
|
||||
|
||||
const imgViewer = fixture.debugElement.query(By.css('adf-img-viewer'));
|
||||
const imgViewer = testingUtils.getByCSS('adf-img-viewer');
|
||||
imgViewer.triggerEventHandler('isSaving', true);
|
||||
|
||||
expect(component.isSaving.emit).toHaveBeenCalledWith(true);
|
||||
@@ -426,7 +426,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('adf-viewer-unknown-format')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('adf-viewer-unknown-format')).toBeDefined();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -20,11 +20,10 @@ import { ComponentFixture, discardPeriodicTasks, fakeAsync, flush, TestBed, tick
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { of } from 'rxjs';
|
||||
import { AppConfigService } from '../../app-config';
|
||||
import { EventMock } from '../../mock';
|
||||
import { CoreTestingModule } from '../../testing';
|
||||
import { CoreTestingModule, UnitTestingUtils } from '../../testing';
|
||||
import { DownloadPromptActions } from '../models/download-prompt.actions';
|
||||
import { CloseButtonPosition } from '../models/viewer.model';
|
||||
import { ViewUtilService } from '../services/view-util.service';
|
||||
@@ -35,7 +34,7 @@ import { ViewerWithCustomSidebarComponent } from './mock/adf-viewer-container-si
|
||||
import { ViewerWithCustomToolbarActionsComponent } from './mock/adf-viewer-container-toolbar-actions.component.mock';
|
||||
import { ViewerWithCustomToolbarComponent } from './mock/adf-viewer-container-toolbar.component.mock';
|
||||
import { ViewerComponent } from './viewer.component';
|
||||
import { ThumbnailService } from '@alfresco/adf-core';
|
||||
import { ThumbnailService } from '../../common/services/thumbnail.service';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-dialog-dummy',
|
||||
@@ -46,11 +45,11 @@ class DummyDialogComponent {}
|
||||
describe('ViewerComponent', () => {
|
||||
let component: ViewerComponent<any>;
|
||||
let fixture: ComponentFixture<ViewerComponent<any>>;
|
||||
let element: HTMLElement;
|
||||
let dialog: MatDialog;
|
||||
let viewUtilService: ViewUtilService;
|
||||
let appConfigService: AppConfigService;
|
||||
let thumbnailService: ThumbnailService;
|
||||
let testingUtils: UnitTestingUtils;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
@@ -68,9 +67,8 @@ describe('ViewerComponent', () => {
|
||||
});
|
||||
|
||||
fixture = TestBed.createComponent(ViewerComponent);
|
||||
element = fixture.nativeElement;
|
||||
testingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
component = fixture.componentInstance;
|
||||
|
||||
dialog = TestBed.inject(MatDialog);
|
||||
viewUtilService = TestBed.inject(ViewUtilService);
|
||||
appConfigService = TestBed.inject(AppConfigService);
|
||||
@@ -132,7 +130,7 @@ describe('ViewerComponent', () => {
|
||||
component.ngOnChanges(mockSimpleChanges);
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('#adf-viewer-display-name').textContent).toEqual('fakeFileName.jpeg');
|
||||
expect(testingUtils.getByCSS('#adf-viewer-display-name').nativeElement.textContent).toEqual('fakeFileName.jpeg');
|
||||
});
|
||||
|
||||
it('should set fileName providing fileName input', () => {
|
||||
@@ -144,65 +142,62 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('#adf-viewer-display-name').textContent).toEqual('testFileName.jpg');
|
||||
expect(testingUtils.getByCSS('#adf-viewer-display-name').nativeElement.textContent).toEqual('testFileName.jpg');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Viewer Example Component Rendering', () => {
|
||||
it('should use custom toolbar', (done) => {
|
||||
const customFixture = TestBed.createComponent(ViewerWithCustomToolbarComponent);
|
||||
const customElement: HTMLElement = customFixture.nativeElement;
|
||||
|
||||
testingUtils.setDebugElement(customFixture.debugElement);
|
||||
customFixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
expect(customElement.querySelector('.custom-toolbar-element')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.custom-toolbar-element')).toBeDefined();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should use custom toolbar actions', (done) => {
|
||||
const customFixture = TestBed.createComponent(ViewerWithCustomToolbarActionsComponent);
|
||||
const customElement: HTMLElement = customFixture.nativeElement;
|
||||
|
||||
testingUtils.setDebugElement(customFixture.debugElement);
|
||||
customFixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
expect(customElement.querySelector('#custom-button')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('#custom-button')).toBeDefined();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should use custom info drawer', (done) => {
|
||||
const customFixture = TestBed.createComponent(ViewerWithCustomSidebarComponent);
|
||||
const customElement: HTMLElement = customFixture.nativeElement;
|
||||
|
||||
testingUtils.setDebugElement(customFixture.debugElement);
|
||||
customFixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
expect(customElement.querySelector('.custom-info-drawer-element')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.custom-info-drawer-element')).toBeDefined();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should use custom open with menu', (done) => {
|
||||
const customFixture = TestBed.createComponent(ViewerWithCustomOpenWithComponent);
|
||||
const customElement: HTMLElement = customFixture.nativeElement;
|
||||
|
||||
testingUtils.setDebugElement(customFixture.debugElement);
|
||||
customFixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
expect(customElement.querySelector('.adf-viewer-container-open-with')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-container-open-with')).toBeDefined();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should use custom more actions menu', (done) => {
|
||||
const customFixture = TestBed.createComponent(ViewerWithCustomMoreActionsComponent);
|
||||
const customElement: HTMLElement = customFixture.nativeElement;
|
||||
|
||||
testingUtils.setDebugElement(customFixture.debugElement);
|
||||
customFixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
expect(customElement.querySelector('.adf-viewer-container-more-actions')).toBeDefined();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-container-more-actions')).toBeDefined();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -217,11 +212,8 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const nextButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-next-file"]');
|
||||
expect(nextButton).not.toBeNull();
|
||||
|
||||
const prevButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-pref-file"]');
|
||||
expect(prevButton).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-next-file')).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-pref-file')).toBeNull();
|
||||
});
|
||||
|
||||
it('should provide tooltip for next file button', async () => {
|
||||
@@ -232,8 +224,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const nextButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-next-file"]');
|
||||
expect(nextButton.title).toBe('ADF_VIEWER.ACTIONS.NEXT_FILE');
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-next-file').nativeElement.title).toBe('ADF_VIEWER.ACTIONS.NEXT_FILE');
|
||||
});
|
||||
|
||||
it('should show only previous file button', async () => {
|
||||
@@ -244,11 +235,8 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const nextButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-next-file"]');
|
||||
expect(nextButton).toBeNull();
|
||||
|
||||
const prevButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-pref-file"]');
|
||||
expect(prevButton).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-next-file')).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-pref-file')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should provide tooltip for the previous file button', async () => {
|
||||
@@ -259,8 +247,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const prevButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-pref-file"]');
|
||||
expect(prevButton.title).toBe('ADF_VIEWER.ACTIONS.PREV_FILE');
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-pref-file').nativeElement.title).toBe('ADF_VIEWER.ACTIONS.PREV_FILE');
|
||||
});
|
||||
|
||||
it('should show both file navigation buttons', async () => {
|
||||
@@ -271,11 +258,8 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const nextButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-next-file"]');
|
||||
expect(nextButton).not.toBeNull();
|
||||
|
||||
const prevButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-pref-file"]');
|
||||
expect(prevButton).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-next-file')).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-pref-file')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should not show navigation buttons', async () => {
|
||||
@@ -284,17 +268,14 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const nextButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-next-file"]');
|
||||
expect(nextButton).toBeNull();
|
||||
|
||||
const prevButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-pref-file"]');
|
||||
expect(prevButton).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-next-file')).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-pref-file')).toBeNull();
|
||||
});
|
||||
|
||||
it('should not show navigation buttons if file is saving', async () => {
|
||||
component.allowNavigate = true;
|
||||
fixture.detectChanges();
|
||||
const viewerRender = fixture.debugElement.query(By.css('adf-viewer-render'));
|
||||
const viewerRender = testingUtils.getByCSS('adf-viewer-render');
|
||||
|
||||
viewerRender.triggerEventHandler('isSaving', true);
|
||||
expect(component.allowNavigate).toBeFalsy();
|
||||
@@ -311,15 +292,12 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
|
||||
const nextButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-next-file"]');
|
||||
expect(nextButton).toBeNull();
|
||||
|
||||
const prevButton = element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-pref-file"]');
|
||||
expect(prevButton).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-next-file')).toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-pref-file')).toBeNull();
|
||||
});
|
||||
|
||||
it('should render fullscreen button', () => {
|
||||
expect(element.querySelector('[data-automation-id="adf-toolbar-fullscreen"]')).toBeDefined();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-fullscreen')).toBeDefined();
|
||||
});
|
||||
|
||||
it('should render close viewer button if it is not a shared link', (done) => {
|
||||
@@ -327,7 +305,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('[data-automation-id="adf-toolbar-left-back"]')).not.toBeNull();
|
||||
expect(testingUtils.getByDataAutomationId('adf-toolbar-left-back')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -347,8 +325,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
const sidebar = element.querySelector('#adf-right-sidebar');
|
||||
expect(sidebar).toBeNull();
|
||||
expect(testingUtils.getByCSS('#adf-right-sidebar')).toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -359,7 +336,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
const sidebar = element.querySelector('#adf-right-sidebar');
|
||||
const sidebar = testingUtils.getByCSS('#adf-right-sidebar').nativeElement;
|
||||
expect(getComputedStyle(sidebar).order).toEqual('4');
|
||||
done();
|
||||
});
|
||||
@@ -371,8 +348,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
const sidebar = element.querySelector('#adf-left-sidebar');
|
||||
expect(sidebar).toBeNull();
|
||||
expect(testingUtils.getByCSS('#adf-left-sidebar')).toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -383,7 +359,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
const sidebar = element.querySelector('#adf-left-sidebar');
|
||||
const sidebar = testingUtils.getByCSS('#adf-left-sidebar').nativeElement;
|
||||
expect(getComputedStyle(sidebar).order).toEqual('1');
|
||||
done();
|
||||
});
|
||||
@@ -391,7 +367,7 @@ describe('ViewerComponent', () => {
|
||||
});
|
||||
|
||||
describe('Info Button', () => {
|
||||
const infoButton = () => element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-sidebar"]');
|
||||
const infoButton = () => testingUtils.getByDataAutomationId('adf-toolbar-sidebar');
|
||||
|
||||
it('should NOT display info button on the right side', () => {
|
||||
component.allowRightSidebar = true;
|
||||
@@ -419,7 +395,7 @@ describe('ViewerComponent', () => {
|
||||
});
|
||||
|
||||
it('should header be present if is overlay mode', () => {
|
||||
expect(element.querySelector('.adf-viewer-toolbar')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-toolbar')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should file name be present if is overlay mode ', async () => {
|
||||
@@ -427,22 +403,21 @@ describe('ViewerComponent', () => {
|
||||
component.ngOnChanges(mockSimpleChanges);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
expect(element.querySelector('#adf-viewer-display-name').textContent).toEqual('fake-test-file.pdf');
|
||||
expect(testingUtils.getByCSS('#adf-viewer-display-name').nativeElement.textContent).toEqual('fake-test-file.pdf');
|
||||
});
|
||||
|
||||
it('should Close button be present if overlay mode', async () => {
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
expect(element.querySelector('.adf-viewer-close-button')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-close-button')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should Click on close button hide the viewer', async () => {
|
||||
const closeButton: any = element.querySelector('.adf-viewer-close-button');
|
||||
closeButton.click();
|
||||
testingUtils.clickByCSS('.adf-viewer-close-button');
|
||||
fixture.detectChanges();
|
||||
|
||||
await fixture.whenStable();
|
||||
expect(element.querySelector('.adf-viewer-content')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-content')).toBeNull();
|
||||
});
|
||||
|
||||
it('should Esc button hide the viewer', async () => {
|
||||
@@ -451,7 +426,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
await fixture.whenStable();
|
||||
expect(element.querySelector('.adf-viewer-content')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-content')).toBeNull();
|
||||
});
|
||||
|
||||
it('should not close the viewer on Escape event if dialog was opened', (done) => {
|
||||
@@ -465,7 +440,7 @@ describe('ViewerComponent', () => {
|
||||
dialogRef.afterClosed().subscribe(() => {
|
||||
EventMock.keyDown(27);
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-viewer-content')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-content')).toBeNull();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -473,7 +448,7 @@ describe('ViewerComponent', () => {
|
||||
|
||||
document.body.dispatchEvent(event);
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-viewer-content')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-content')).not.toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -489,7 +464,7 @@ describe('ViewerComponent', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
fixture.whenStable().then(() => {
|
||||
expect(element.querySelector('.adf-viewer-content')).not.toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-content')).not.toBeNull();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -505,13 +480,13 @@ describe('ViewerComponent', () => {
|
||||
component.showViewer = false;
|
||||
|
||||
fixture.detectChanges();
|
||||
expect(element.querySelector('.adf-viewer-content')).toBeNull();
|
||||
expect(testingUtils.getByCSS('.adf-viewer-content')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Close Button', () => {
|
||||
const getRightCloseButton = () => element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-right-back"]');
|
||||
const getLeftCloseButton = () => element.querySelector<HTMLButtonElement>('[data-automation-id="adf-toolbar-left-back"]');
|
||||
const getRightCloseButton = () => testingUtils.getByDataAutomationId('adf-toolbar-right-back');
|
||||
const getLeftCloseButton = () => testingUtils.getByDataAutomationId('adf-toolbar-left-back');
|
||||
|
||||
it('should show close button on left side when closeButtonPosition is left and allowGoBack is true', () => {
|
||||
component.allowGoBack = true;
|
||||
@@ -543,9 +518,7 @@ describe('ViewerComponent', () => {
|
||||
describe('Viewer component - Full Screen Mode - Mocking fixture element', () => {
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(ViewerComponent);
|
||||
element = fixture.nativeElement;
|
||||
component = fixture.componentInstance;
|
||||
|
||||
component.showToolbar = true;
|
||||
component.mimeType = 'application/pdf';
|
||||
fixture.detectChanges();
|
||||
|
||||
Reference in New Issue
Block a user