UNPKG

quoad

Version:

Serenity/JS: Next generation acceptance testing library for modern web applications.

146 lines (117 loc) 5.96 kB
import 'mocha'; import { expect } from '@integration/testing-tools'; import { contain, Ensure, equals, not } from '@serenity-js/assertions'; import { actorCalled } from '@serenity-js/core'; import { By, CssClasses, Navigate, PageElement, PageElements, Text } from '@serenity-js/web'; import { given } from 'mocha-testdata'; /** @test {CssClasses} */ describe('CssClasses', () => { /** @test {CssClasses.of} */ describe('of', () => { before(() => actorCalled('Bernie').attemptsTo( Navigate.to('/screenplay/questions/css-classes/example.html'), )); given([ { description: 'no-class-attribute', expected: [] }, { description: 'no-class-attribute', expected: [] }, { description: 'class-attribute-with-whitespace-only', expected: [] }, { description: 'single-class', expected: ['pretty'] }, { description: 'several-classes', expected: ['pretty', 'css', 'classes'] }, { description: 'several-classes-with-whitespace', expected: ['pretty', 'css', 'classes'] }, ]). it('allows the actor to read the css classes of a DOM element matching the locator', ({ description, expected }) => actorCalled('Bernie').attemptsTo( Ensure.that( CssClasses.of(PageElement.located(By.id(description)).describedAs(`Element with ${ description }`)), equals(expected), ), )); it('produces a QuestionAdapter that enables access to the underlying value', () => actorCalled('Bernie').attemptsTo( Ensure.that( CssClasses.of(PageElement.located(By.id('several-classes'))).length, equals(3), ), Ensure.that( CssClasses.of(PageElement.located(By.id('several-classes')))[0], equals('pretty'), ), Ensure.that( CssClasses.of(PageElement.located(By.id('several-classes')))[0].length, equals(6), ), )); it('allows for a meta-question relative to another PageElement to be asked', () => actorCalled('Bernie').attemptsTo( Ensure.that( CssClasses.of( PageElement.located(By.id('single-class')).describedAs(`Element with single-class`), ).of(PageElement.located(By.tagName('ul')).describedAs(`list`)), contain('pretty'), ), )); }); /** @test {CssClasses.of} */ describe('filtering', () => { const listItems = PageElements.located(By.css('li')).describedAs('list items'); before(() => actorCalled('Bernie').attemptsTo( Navigate.to('/screenplay/questions/css-classes/filtering.html'), )); it('keep only those elements which CSS classes match the expectation', () => actorCalled('Bernie').attemptsTo( Ensure.that( Text.ofAll(listItems.where(CssClasses, contain('keep'))), equals([ 'first (keep)', 'third (keep)', 'fourth (keep, skip)', ]), ), )); it('keep only those elements which CSS classes match all the expectations', () => actorCalled('Bernie').attemptsTo( Ensure.that( Text.ofAll( listItems .where(CssClasses, contain('keep')) .where(CssClasses, not(contain('skip'))) ), equals([ 'first (keep)', 'third (keep)', ]), ), )); }); /** @test {CssClasses#toString} */ describe('toString', () => { const sections = PageElements.located(By.css('section')).describedAs('sections'); const section = PageElement.located(By.css('section')).describedAs('a section'); const heading = PageElement.located(By.css('h1')).describedAs('the heading'); it('provides a human-readable description of a regular question', () => { const description = CssClasses.of(heading).toString(); expect(description).to.equal('CSS classes of the heading') }); it('allows for the description to be altered', () => { const description = CssClasses.of(heading).describedAs('style').toString(); expect(description).to.equal('style') }); it('provides a human-readable description of the meta-question', () => { const description = CssClasses.of(heading).of(section).toString(); expect(description).to.equal('CSS classes of the heading of a section') }); it('provides a human-readable description of a reqular question used in a filter', () => { const found = sections.where(CssClasses, equals(['important'])); const description = found.toString(); expect(description).to.equal(`sections where CssClasses does equal [ 'important' ]`) }); it('provides a human-readable description of a meta-question used in a filter', () => { const found = sections .where(CssClasses.of(heading), equals([ 'important' ])); const description = found.toString(); expect(description).to.equal(`sections where CSS classes of the heading does equal [ 'important' ]`) }); }); });