156 lines
5.0 KiB
TypeScript
156 lines
5.0 KiB
TypeScript
|
|
import {Component, signal} from '@angular/core';
|
|||
|
|
import {ComponentFixture, TestBed} from '@angular/core/testing';
|
|||
|
|
import {HarnessLoader} from '@angular/cdk/testing';
|
|||
|
|
import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed';
|
|||
|
|
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
|
|||
|
|
import {MatPaginatorModule, PageEvent} from '@angular/material/paginator';
|
|||
|
|
import {MatPaginatorHarness} from './paginator-harness';
|
|||
|
|
|
|||
|
|
describe('MatPaginatorHarness', () => {
|
|||
|
|
let fixture: ComponentFixture<PaginatorHarnessTest>;
|
|||
|
|
let loader: HarnessLoader;
|
|||
|
|
let instance: PaginatorHarnessTest;
|
|||
|
|
|
|||
|
|
beforeEach(() => {
|
|||
|
|
TestBed.configureTestingModule({
|
|||
|
|
imports: [MatPaginatorModule, NoopAnimationsModule, PaginatorHarnessTest],
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
fixture = TestBed.createComponent(PaginatorHarnessTest);
|
|||
|
|
fixture.detectChanges();
|
|||
|
|
loader = TestbedHarnessEnvironment.loader(fixture);
|
|||
|
|
instance = fixture.componentInstance;
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should load all paginator harnesses', async () => {
|
|||
|
|
const paginators = await loader.getAllHarnesses(MatPaginatorHarness);
|
|||
|
|
expect(paginators.length).toBe(1);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should be able to go to the next page', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
|
|||
|
|
expect(instance.pageIndex()).toBe(0);
|
|||
|
|
await paginator.goToNextPage();
|
|||
|
|
expect(instance.pageIndex()).toBe(1);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should be able to go to the previous page', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
|
|||
|
|
instance.pageIndex.set(5);
|
|||
|
|
fixture.detectChanges();
|
|||
|
|
|
|||
|
|
await paginator.goToPreviousPage();
|
|||
|
|
expect(instance.pageIndex()).toBe(4);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should be able to go to the first page', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
|
|||
|
|
instance.pageIndex.set(5);
|
|||
|
|
fixture.detectChanges();
|
|||
|
|
|
|||
|
|
await paginator.goToFirstPage();
|
|||
|
|
expect(instance.pageIndex()).toBe(0);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should be able to go to the last page', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
|
|||
|
|
expect(instance.pageIndex()).toBe(0);
|
|||
|
|
await paginator.goToLastPage();
|
|||
|
|
expect(instance.pageIndex()).toBe(49);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should be able to set the page size', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
|
|||
|
|
expect(instance.pageSize).toBe(10);
|
|||
|
|
await paginator.setPageSize(25);
|
|||
|
|
expect(instance.pageSize).toBe(25);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should be able to get the page size', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
expect(await paginator.getPageSize()).toBe(10);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should be able to get the range label', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
expect(await paginator.getRangeLabel()).toBe('1 – 10 of 500');
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should throw an error if the first page button is not available', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
|
|||
|
|
instance.showFirstLastButtons.set(false);
|
|||
|
|
fixture.detectChanges();
|
|||
|
|
|
|||
|
|
await expectAsync(paginator.goToFirstPage()).toBeRejectedWithError(
|
|||
|
|
/Could not find first page button inside paginator/,
|
|||
|
|
);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should return whether or not the previous page is disabled', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
expect(await paginator.isPreviousPageDisabled()).toBe(true);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should return whether or not the next page is disabled', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
await paginator.goToLastPage();
|
|||
|
|
expect(await paginator.isNextPageDisabled()).toBe(true);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should throw an error if the last page button is not available', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
|
|||
|
|
instance.showFirstLastButtons.set(false);
|
|||
|
|
fixture.detectChanges();
|
|||
|
|
|
|||
|
|
await expectAsync(paginator.goToLastPage()).toBeRejectedWithError(
|
|||
|
|
/Could not find last page button inside paginator/,
|
|||
|
|
);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
it('should throw an error if the page size selector is not available', async () => {
|
|||
|
|
const paginator = await loader.getHarness(MatPaginatorHarness);
|
|||
|
|
|
|||
|
|
instance.pageSizeOptions.set([]);
|
|||
|
|
fixture.detectChanges();
|
|||
|
|
|
|||
|
|
await expectAsync(paginator.setPageSize(10)).toBeRejectedWithError(
|
|||
|
|
/Cannot find page size selector in paginator/,
|
|||
|
|
);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
@Component({
|
|||
|
|
template: `
|
|||
|
|
<mat-paginator
|
|||
|
|
(page)="handlePageEvent($event)"
|
|||
|
|
[length]="length"
|
|||
|
|
[pageSize]="pageSize"
|
|||
|
|
[showFirstLastButtons]="showFirstLastButtons()"
|
|||
|
|
[pageSizeOptions]="pageSizeOptions()"
|
|||
|
|
[pageIndex]="pageIndex()">
|
|||
|
|
</mat-paginator>
|
|||
|
|
`,
|
|||
|
|
standalone: true,
|
|||
|
|
imports: [MatPaginatorModule],
|
|||
|
|
})
|
|||
|
|
class PaginatorHarnessTest {
|
|||
|
|
length = 500;
|
|||
|
|
pageSize = 10;
|
|||
|
|
pageIndex = signal(0);
|
|||
|
|
pageSizeOptions = signal([5, 10, 25]);
|
|||
|
|
showFirstLastButtons = signal(true);
|
|||
|
|
|
|||
|
|
handlePageEvent(event: PageEvent) {
|
|||
|
|
this.length = event.length;
|
|||
|
|
this.pageSize = event.pageSize;
|
|||
|
|
this.pageIndex.set(event.pageIndex);
|
|||
|
|
}
|
|||
|
|
}
|