<%- _.import('describe, it', 'mocha') %><%- _.import('Ensure, equals', '@serenity-js/assertions') %><%- _.import('actorCalled', '@serenity-js/core') %><%- _.import('By, Navigate, PageElement, Text', '@serenity-js/web') %><%- _.import('GitHubStatus', '../serenity/github-api/GitHubStatus') %><%- _.import('TodoList', '../serenity/todo-list-app/TodoList') %>/*** Serenity/JS Screenplay Pattern test scenarios use one or more actors to represent people and external systems* interacting with the system under test.** To design a test scenario, give each actor a series of tasks and interactions to perform* and instruct them to answer questions about the state of the system under test* to ensure that the answers meet the expected results.** This example test file demonstrates several ways of writing test scenarios using the Screenplay Pattern.** Learn more:* - Serenity/JS Screenplay Pattern - https://serenity-js.org/handbook/design/screenplay-pattern/* - Web Testing with Serenity/JS - https://serenity-js.org/handbook/web-testing/* - API Testing with Serenity/JS - https://serenity-js.org/handbook/api-testing/* - Serenity/JS web module - https://serenity-js.org/api/web/* - Serenity/JS REST module - https://serenity-js.org/api/rest/* - Serenity/JS assertions module - https://serenity-js.org/api/assertions/*/describe('Example', () => {/*** This is the most basic example of a Serenity/JS Screenplay Pattern test scenario.** This scenario uses a single actor configured to perform a series of web-based interactions,* and uses only the low-level abstractions provided by the Serenity/JS web module.*/it('offers a web testing tutorial', async () => {await actorCalled('Alice').attemptsTo(Navigate.to('https://serenity-js.org'),Ensure.that(Text.of(PageElement.located(By.id('cta-start-automating'))),equals('Start automating 🚀')),)})/*** This is a more advanced example of a Serenity/JS Screenplay Pattern test scenario.** This scenario uses two actors:* - Apisitt, responsible for interacting with an API to check if the system is up and running before performing any UI checks* - Wendy, responsible for interacting with the website to perform the actual acceptance test** In this scenario, rather than list all the interactions in the test itself, we use:* - API Actions Class Pattern to group tasks concerning interacting with the GitHubStatus API* - Screenplay Pattern flavour of Page Objects to group tasks and questions concerning interacting with the Serenity/JS Todo List app** Note that apart from strongly encouraging the Screenplay Pattern,* Serenity/JS doesn't require you to organise your code in any particular way.* This gives you the freedom to choose patterns and abstractions that work best for you, your team,* and reflect the domain of your system under test.*/it(`offers examples to help you practice test automation`, async () => {// You can use API interactions to manage test data, or to ensure services are up and running before performing any UI checks.// Since Serenity/JS demo website is deployed to GitHub Pages,// before interacting with the website we ensure that GitHub itself is up and running.await actorCalled('Apisitt').attemptsTo(GitHubStatus.ensureAllSystemsOperational(),)// Once we know the system is up and running, Wendy can proceed with the web-based scenario.await actorCalled('Wendy').attemptsTo(TodoList.createListContaining([`Buy dog food`,`Feed the dog`,`Book a vet's appointment`,]),TodoList.markAsCompleted([`Buy dog food`,`Feed the dog`,]),Ensure.that(TodoList.outstandingItemsCount(),equals(1)),)})})