Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate 'scheduling' e2e tests to Playwright #57539

Merged
merged 2 commits into from
Jan 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 0 additions & 65 deletions packages/e2e-tests/specs/editor/various/scheduling.test.js

This file was deleted.

90 changes: 90 additions & 0 deletions test/e2e/specs/editor/various/scheduling.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/**
* WordPress dependencies
*/
const { test, expect } = require( '@wordpress/e2e-test-utils-playwright' );

// The `timezone` setting exposed via REST API only accepts `UTC`
// and timezone strings by location.
const TIMEZONES = [ 'Pacific/Honolulu', 'UTC', 'Australia/Sydney' ];

test.describe( 'Scheduling', () => {
TIMEZONES.forEach( ( timezone ) => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Could we move the loop to close to the test function so that we only have to get the original timezone once? We can then call updateSiteSettings in beforeEach or inside the test too.

Copy link
Member Author

@Mamaduka Mamaduka Jan 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll try it, though I don't think it should affect test speed in this case.

Update: I tried rearranging things, but I don't think it's worth it for a single test in a loop. Rearrangement introduces more setup and cleanup steps.

test.describe( `Timezone ${ timezone }`, () => {
let orignalTimezone;
test.beforeAll( async ( { requestUtils } ) => {
orignalTimezone = ( await requestUtils.getSiteSettings() )
.timezone;

await requestUtils.updateSiteSettings( { timezone } );
} );

test.afterAll( async ( { requestUtils } ) => {
await requestUtils.updateSiteSettings( {
timezone: orignalTimezone,
} );
} );

test( 'Should change publishing button text from "Publish" to "Schedule"', async ( {
admin,
editor,
page,
} ) => {
await admin.createNewPost();
await editor.openDocumentSettingsSidebar();

const topBar = page.getByRole( 'region', {
name: 'Editor top bar',
} );

await expect(
topBar.getByRole( 'button', { name: 'Publish' } )
).toBeVisible();

// Open the datepicker.
await page
.getByRole( 'button', { name: 'Change date' } )
.click();

// Change the publishing date to a year in the future.
await page
.getByRole( 'group', { name: 'Date' } )
.getByRole( 'spinbutton', { name: 'Year' } )
.click();
await page.keyboard.press( 'ArrowUp' );

// Close the datepicker.
await page.keyboard.press( 'Escape' );

await expect(
topBar.getByRole( 'button', { name: 'Schedule…' } )
).toBeVisible();
} );
} );
} );

test( 'should keep date time UI focused when the previous and next month buttons are clicked', async ( {
admin,
editor,
page,
} ) => {
await admin.createNewPost();
await editor.openDocumentSettingsSidebar();
await page.getByRole( 'button', { name: 'Change date' } ).click();

const calendar = page.getByRole( 'application', { name: 'Calendar' } );
const prevMonth = calendar.getByRole( 'button', {
name: 'View previous month',
} );
const nextMonth = calendar.getByRole( 'button', {
name: 'View next month',
} );

await prevMonth.click();
await expect( prevMonth ).toBeFocused();
await expect( calendar ).toBeVisible();

await nextMonth.click();
await expect( nextMonth ).toBeFocused();
await expect( calendar ).toBeVisible();
} );
} );
Loading