import { isNumber, toNumber } from '../utils'; import Chainable = Cypress.Chainable; export class Pagination { constructor(private selector: string) {} first() { return this.goTo('first'); } last() { return this.goTo('last'); } next() { return this.goTo('next'); } previous() { return this.goTo('previous'); } goTo(page: number): Chainable; goTo(page: 'first' | 'last' | 'next' | 'previous'): Chainable; goTo(page: 'first' | 'last' | 'next' | 'previous' | number): Chainable { const query = isNumber(page) ? `page-${page}` : `${page}-page`; return this.get() .find(`[data-auto-id="pagiantion-${query}"]`) .click(); } get(): Chainable; get(target: 'pages-count' | 'current-page' | 'page-size' | 'rows-count'): number; get(target?: 'pages-count' | 'current-page' | 'page-size' | 'rows-count'): number | Chainable { return target ? this.getPaginationData(target) : cy.get(`${this.selector} dato-grid-pagination-v2`); } private getPaginationData(attr: 'pages-count' | 'current-page' | 'page-size' | 'rows-count') { return this.get() .find('.container') .then(el => toNumber(el.attr(`data-${attr}`))); } private assertData(attr: 'pages-count' | 'current-page' | 'page-size' | 'rows-count', expectedValue: number) { this.getPaginationData(attr).then(value => { assert.equal(value, expectedValue); }); } assertPagesCount(expectedPagesCount: number) { this.assertData('pages-count', expectedPagesCount); } assertCurrentPage(expectedPage: number) { this.assertData('current-page', expectedPage); } assertTotalRowsCount(expectedRowsCount: number) { this.assertData('rows-count', expectedRowsCount); } }