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

Avatar: Add test to ensure that user image updates when user switched. #42657

Merged
merged 10 commits into from
Aug 25, 2022

Conversation

BE-Webdesign
Copy link
Contributor

Fixes #39645.

What?

Add e2e tests in Playwright for the avatar block. When a user is switched check if the image src updates as well.

Why?

Adds e2e tests for the avatar block to ensure that we are always properly updating the image src.

How?

Adds user helper utilities to the @wordpress/e2e-test-utils-playwright for adding users and cleaning up added users. This is used to add a sample user, Gravatar Gravatar, The new user is selected from the user combo box and the original source is checked against the new source after the user has been updated.

Testing Instructions

  1. npm i
  2. npm run build
  3. npm run test-e2e:playwright -- editor/blocks/avatar.spec.js
  4. Ensure tests pass

Screenshots or screencast

Not applicable.

@github-actions
Copy link

github-actions bot commented Jul 23, 2022

Size Change: -19.8 kB (-2%)

Total Size: 1.24 MB

Filename Size Change
build/block-directory/index.min.js 7.06 kB +474 B (+7%) 🔍
build/block-editor/index.min.js 159 kB +5.38 kB (+4%)
build/block-editor/style-rtl.css 15.1 kB +428 B (+3%)
build/block-editor/style.css 15 kB +423 B (+3%)
build/block-library/blocks/audio/style-rtl.css 122 B +19 B (+18%) ⚠️
build/block-library/blocks/audio/style.css 122 B +19 B (+18%) ⚠️
build/block-library/blocks/button/style-rtl.css 539 B -3 B (-1%)
build/block-library/blocks/button/style.css 539 B -3 B (-1%)
build/block-library/blocks/group/editor-rtl.css 412 B +79 B (+24%) 🚨
build/block-library/blocks/group/editor.css 412 B +79 B (+24%) 🚨
build/block-library/blocks/image/editor-rtl.css 876 B +140 B (+19%) ⚠️
build/block-library/blocks/image/editor.css 873 B +136 B (+18%) ⚠️
build/block-library/blocks/latest-posts/editor-rtl.css 213 B +14 B (+7%) 🔍
build/block-library/blocks/latest-posts/editor.css 212 B +14 B (+7%) 🔍
build/block-library/blocks/navigation/editor.css 2.04 kB -1 B (0%)
build/block-library/blocks/navigation/style-rtl.css 1.98 kB +17 B (+1%)
build/block-library/blocks/navigation/style.css 1.97 kB +19 B (+1%)
build/block-library/blocks/paragraph/editor-rtl.css 174 B +17 B (+11%) ⚠️
build/block-library/blocks/paragraph/editor.css 174 B +17 B (+11%) ⚠️
build/block-library/blocks/post-featured-image/editor-rtl.css 507 B -98 B (-16%) 👏
build/block-library/blocks/post-featured-image/editor.css 505 B -100 B (-17%) 👏
build/block-library/blocks/post-featured-image/style-rtl.css 166 B +13 B (+8%) 🔍
build/block-library/blocks/post-featured-image/style.css 166 B +13 B (+8%) 🔍
build/block-library/blocks/pullquote/editor-rtl.css 135 B -63 B (-32%) 🎉
build/block-library/blocks/pullquote/editor.css 135 B -63 B (-32%) 🎉
build/block-library/blocks/pullquote/style-rtl.css 326 B -44 B (-12%) 👏
build/block-library/blocks/pullquote/style.css 325 B -45 B (-12%) 👏
build/block-library/blocks/query-pagination/style-rtl.css 282 B +48 B (+21%) 🚨
build/block-library/blocks/query-pagination/style.css 278 B +47 B (+20%) 🚨
build/block-library/blocks/query/editor-rtl.css 439 B +74 B (+20%) 🚨
build/block-library/blocks/query/editor.css 439 B +75 B (+21%) 🚨
build/block-library/blocks/search/style-rtl.css 396 B +11 B (+3%)
build/block-library/blocks/search/style.css 393 B +7 B (+2%)
build/block-library/blocks/site-logo/editor-rtl.css 455 B -253 B (-36%) 🎉
build/block-library/blocks/site-logo/editor.css 455 B -253 B (-36%) 🎉
build/block-library/blocks/social-link/editor-rtl.css 184 B +7 B (+4%)
build/block-library/blocks/social-link/editor.css 184 B +7 B (+4%)
build/block-library/blocks/tag-cloud/style-rtl.css 239 B +13 B (+6%) 🔍
build/block-library/blocks/tag-cloud/style.css 239 B +12 B (+5%) 🔍
build/block-library/editor-rtl.css 11 kB +183 B (+2%)
build/block-library/editor.css 11 kB +173 B (+2%)
build/block-library/index.min.js 186 kB +1.99 kB (+1%)
build/block-library/style-rtl.css 11.8 kB +17 B (0%)
build/block-library/style.css 11.8 kB +17 B (0%)
build/blocks/index.min.js 49.5 kB +2.3 kB (+5%) 🔍
build/components/index.min.js 198 kB -31.8 kB (-14%) 👏
build/components/style-rtl.css 11.6 kB -2.4 kB (-17%) 👏
build/components/style.css 11.6 kB -2.39 kB (-17%) 👏
build/compose/index.min.js 12 kB +311 B (+3%)
build/core-data/index.min.js 15.4 kB +698 B (+5%) 🔍
build/customize-widgets/index.min.js 11.3 kB +57 B (+1%)
build/data/index.min.js 8.03 kB +39 B (0%)
build/date/index.min.js 32 kB +5 B (0%)
build/dom/index.min.js 4.69 kB +1 B (0%)
build/edit-navigation/index.min.js 16 kB +28 B (0%)
build/edit-navigation/style-rtl.css 4 kB -18 B (0%)
build/edit-navigation/style.css 4.01 kB -19 B (0%)
build/edit-post/index.min.js 30.5 kB +16 B (0%)
build/edit-site/index.min.js 57.3 kB +3.13 kB (+6%) 🔍
build/edit-site/style-rtl.css 8.22 kB +39 B (0%)
build/edit-site/style.css 8.2 kB +38 B (0%)
build/edit-widgets/index.min.js 16.5 kB +33 B (0%)
build/editor/index.min.js 41.5 kB +226 B (+1%)
build/element/index.min.js 4.68 kB +407 B (+10%) ⚠️
build/keycodes/index.min.js 1.81 kB +431 B (+31%) 🚨
build/redux-routine/index.min.js 2.74 kB +59 B (+2%)
build/reusable-blocks/index.min.js 2.21 kB -4 B (0%)
build/rich-text/index.min.js 11.2 kB +41 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/theme-rtl.css 110 B
build/block-library/blocks/audio/theme.css 110 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 59 B
build/block-library/blocks/avatar/style.css 59 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 441 B
build/block-library/blocks/button/editor.css 441 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 187 B
build/block-library/blocks/comment-template/style.css 185 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 834 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 630 B
build/block-library/blocks/cover/editor-rtl.css 615 B
build/block-library/blocks/cover/editor.css 616 B
build/block-library/blocks/cover/style-rtl.css 1.55 kB
build/block-library/blocks/cover/style.css 1.55 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 110 B
build/block-library/blocks/embed/theme.css 110 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 253 B
build/block-library/blocks/file/style.css 254 B
build/block-library/blocks/file/view.min.js 346 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/style-rtl.css 627 B
build/block-library/blocks/image/style.css 630 B
build/block-library/blocks/image/theme-rtl.css 110 B
build/block-library/blocks/image/theme.css 110 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 705 B
build/block-library/blocks/navigation-link/editor.css 703 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation-submenu/view.min.js 423 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 493 B
build/block-library/blocks/post-comments-form/style.css 493 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 282 B
build/block-library/blocks/post-template/style.css 282 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 464 B
build/block-library/blocks/shortcode/editor.css 464 B
build/block-library/blocks/site-logo/style-rtl.css 192 B
build/block-library/blocks/site-logo/style.css 192 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.39 kB
build/block-library/blocks/social-links/style.css 1.38 kB
build/block-library/blocks/spacer/editor-rtl.css 322 B
build/block-library/blocks/spacer/editor.css 322 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/table/theme-rtl.css 175 B
build/block-library/blocks/table/theme.css 175 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 561 B
build/block-library/blocks/video/editor.css 563 B
build/block-library/blocks/video/style-rtl.css 159 B
build/block-library/blocks/video/style.css 159 B
build/block-library/blocks/video/theme-rtl.css 110 B
build/block-library/blocks/video/theme.css 110 B
build/block-library/common-rtl.css 1.01 kB
build/block-library/common.css 1 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/theme-rtl.css 695 B
build/block-library/theme.css 700 B
build/block-serialization-default-parser/index.min.js 1.11 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/customize-widgets/style-rtl.css 1.4 kB
build/customize-widgets/style.css 1.4 kB
build/data-controls/index.min.js 653 B
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/style-rtl.css 6.94 kB
build/edit-post/style.css 6.94 kB
build/edit-widgets/style-rtl.css 4.35 kB
build/edit-widgets/style.css 4.35 kB
build/editor/style-rtl.css 3.66 kB
build/editor/style.css 3.65 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 6.75 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.78 kB
build/list-reusable-blocks/index.min.js 1.74 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.93 kB
build/notices/index.min.js 953 B
build/nux/index.min.js 2.05 kB
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.3 kB
build/primitives/index.min.js 933 B
build/priority-queue/index.min.js 612 B
build/react-i18n/index.min.js 696 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.53 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.19 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

Copy link
Contributor

@talldan talldan left a comment

Choose a reason for hiding this comment

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

Thanks for contributing tests! (sorry for the slow review)

I left a few comments, but there shouldn't be anything challenging. The main thing will be agreeing on the right way to implement the user utils, as there are a couple of PRs trying to do the same thing slightly differently.

* @param this
* @param userId The ID of the user.
*/
async function deleteUser( this: RequestUtils, userId: number ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

#43064 is also implementing this function, and generally I prefer the way that version allows deleting a single user by passing a username.

It's a difficult line to tread, whether the function is an exact facsimile of the REST API, or whether there are some convenience features built-in to make writing tests easier.

Though perhaps in both cases deleteAllUsers is the only function needed.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I think only exposing deleteAllUsers is a good approach. If somewhere down the road an individual deleteUser needs to be surfaced for testing, that can happen then.

*/
async function deleteUser( this: RequestUtils, userId: number ) {
// Do not delete main user account.
if ( userId === 1 ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

I think this is more useful in deleteAllUsers than in deleteUser. Maybe filter users before the map call.

If any test does try deleting the main user directly it'd be a big case of the test doing it wrong, and I imagine it'd be quite noticeable.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Okay, I can move the check into the deleteAllUsers. Now that deleteUser is not exported, it will not be accessible where someone could accidentally delete the main user.

Comment on lines 11 to 18
export interface UserData {
username: string;
email: string;
firstName: string;
lastName: string;
password: string;
roles: string[];
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Not every property is required by the REST API. I think email is the only one. A question mark can be used to mark something as optional:

lastName?: string;

Comment on lines 50 to 55
username: user.username,
email: user.email,
first_name: user.firstName,
last_name: user.lastName,
password: user.password,
roles: user.roles,
Copy link
Contributor

Choose a reason for hiding this comment

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

As only some properties are required, I wonder whether it's ok to pass all properties like this even if some are undefined, or whether any undefined properties needs to be omitted first.

Note that there's also other implementations of this in open PRs #43064 and #42695, so we'll need some agreement on the right way to do this before merging.

return responses;
}

export { listUsers, createUser, deleteAllUsers, deleteUser };
Copy link
Contributor

@talldan talldan Aug 10, 2022

Choose a reason for hiding this comment

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

It'd be good to only export the functions that are used in tests. I'm not sure listUsers will be needed, and possibly deleteUser might not be needed either.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sounds good, I can leave them as private members of the users.ts file.

const username = 'Gravatar Gravatar';

const avatarBlock = page.locator(
'role=document[name="Block: Avatar"]'
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
'role=document[name="Block: Avatar"]'
'role=document[name="Block: Avatar"i]'

The i flag is good, it makes it case insensitive. That's useful as if the casing is changed in the code the test will still pass.

'role=document[name="Block: Avatar"]'
);

await expect( avatarBlock ).toBeVisible();
Copy link
Contributor

Choose a reason for hiding this comment

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

This line shouldn't be needed, as there's already await expect( avatarImage ).toBeVisible(); below, which will assert that the block is visible.

'role=option[name="' + username + '"]'
);

await expect( newUser ).toBeVisible();
Copy link
Contributor

Choose a reason for hiding this comment

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

Actions like click will always implicitly wait for an element to be visible in Playwright, so there's no need to make the assertion here.

There's a handy table showing how that works here - https://playwright.dev/docs/actionability


expect( newSrc ).not.toBe( originalSrc );

await expect( userInput ).toBeVisible();
Copy link
Contributor

Choose a reason for hiding this comment

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

I don't think this final assertion is needed.

Comment on lines 52 to 68
const blockInspectorControls = page.locator(
'.block-editor-block-inspector'
);

await expect( blockInspectorControls ).toBeVisible();

const userComboBox = blockInspectorControls.locator(
'.components-combobox-control'
);

await expect( userComboBox ).toBeVisible();

const userInput = userComboBox.locator(
'.components-combobox-control__input'
);

await expect( userInput ).toBeVisible();
Copy link
Contributor

Choose a reason for hiding this comment

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

Generally, there's no need to worry about all the intermediate elements being visible. An action like click will implicitly check that an element is visible.

Another thing is that it's good to prefer role selectors over css selectors. This practice will go some way to helping make sure Gutenberg is using accessible HTML.

You should be able to achieve the same sort of thing by doing:

const userInput = page.locator( 'role=region[name="Editor settings"i] >> role=combobox[name="User"i]' );
await userInput.click()

The accessibility inspector in the browser dev tools is pretty good for figuring this stuff out:
Screen Shot 2022-08-10 at 2 19 00 pm

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sounds good, thank you for the info.

@BE-Webdesign
Copy link
Contributor Author

@talldan Thank you for the review and info!

I believe I have addressed all of your points.

Copy link
Contributor

@talldan talldan left a comment

Choose a reason for hiding this comment

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

Thanks for addressing the feedback!

@talldan talldan added the [Type] Automated Testing Testing infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests. label Aug 25, 2022
@talldan talldan merged commit 2e276d1 into trunk Aug 25, 2022
@talldan talldan deleted the add/e2e-tests/avatar-block branch August 25, 2022 04:21
@github-actions github-actions bot added this to the Gutenberg 14.1 milestone Aug 25, 2022
@cbravobernal cbravobernal added the [Block] Avatar Affects the Avatar Block label Sep 13, 2022
@cbravobernal cbravobernal changed the title E2E Tests: Add test for avatar block to ensure that user image updates when user switched Avatar: Add test to ensure that user image updates when user switched. Sep 14, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Avatar Affects the Avatar Block [Type] Automated Testing Testing infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

e2e Tests: Add test coverage for Avatar block
3 participants