entity-command/features/comment.feature
Alain Schlesser 646603fac8
Modernize deprecated syntax in Behat tests
WP-CLI now emits deprecation warnings when it rewrites legacy command syntax. Use the modern forms in the Behat scenarios so the standard run step can continue to require clean STDERR.
2026-07-23 07:41:54 +02:00

477 lines
13 KiB
Gherkin

Feature: Manage WordPress comments
Background:
Given a WP install
Scenario: Creating/updating/deleting comments
When I run `wp comment create --comment_post_ID=1 --comment_content='Hello' --comment_author='Billy' --porcelain`
Then STDOUT should be a number
And save STDOUT as {COMMENT_ID}
When I run `wp comment exists {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Comment with ID {COMMENT_ID} exists.
"""
When I run `wp comment update {COMMENT_ID} --comment_author='Johnny'`
Then STDOUT should not be empty
When I run `wp comment get {COMMENT_ID} --field=author`
Then STDOUT should be:
"""
Johnny
"""
When I run `wp comment delete {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Trashed comment {COMMENT_ID}.
"""
When I run `wp comment get {COMMENT_ID} --field=comment_approved`
Then STDOUT should be:
"""
trash
"""
When I run `wp comment delete {COMMENT_ID} --force`
Then STDOUT should be:
"""
Success: Deleted comment {COMMENT_ID}.
"""
When I try `wp comment get {COMMENT_ID}`
Then STDERR should be:
"""
Error: Invalid comment ID.
"""
And the return code should be 1
When I run `wp comment create --comment_post_ID=1`
And I run `wp comment create --comment_post_ID=1`
And I run `wp comment delete 3 4`
Then STDOUT should be:
"""
Success: Trashed comment 3.
Success: Trashed comment 4.
"""
When I run `wp comment delete 3`
Then STDOUT should be:
"""
Success: Deleted comment 3.
"""
When I try `wp comment get 3`
Then STDERR should be:
"""
Error: Invalid comment ID.
"""
And the return code should be 1
Scenario: Updating an invalid comment should return an error
Given a WP install
When I try `wp comment update 22 --comment_author=Foo`
Then the return code should be 1
And STDERR should contain:
"""
Warning: Could not update comment.
"""
Scenario: Get details about an existing comment
When I run `wp comment get 1`
Then STDOUT should be a table containing rows:
| Field | Value |
| comment_approved | 1 |
When I run `wp comment get 1 --fields=comment_approved --format=json`
Then STDOUT should be JSON containing:
"""
{"comment_approved":"1"}
"""
When I run `wp comment list --fields=comment_approved`
Then STDOUT should be a table containing rows:
| comment_approved |
| 1 |
When I run `wp comment list --field=approved`
Then STDOUT should be:
"""
1
"""
When I run `wp comment list --format=ids`
Then STDOUT should be:
"""
1
"""
When I run `wp comment list --comment__in=1 --orderby=comment__in --field=url`
Then STDOUT should contain:
"""
#comment-1
"""
When I run `wp comment get 1 --field=url`
Then STDOUT should contain:
"""
#comment-1
"""
Scenario: List the URLs of comments
When I run `wp comment create --comment_post_ID=1 --porcelain`
Then save STDOUT as {COMMENT_ID}
When I run `wp comment list --comment__in=1,{COMMENT_ID} --orderby=comment__in --field=url`
Then STDOUT should be:
"""
https://example.com/?p=1#comment-1
https://example.com/?p=1#comment-{COMMENT_ID}
"""
When I run `wp comment list --comment__in={COMMENT_ID},1 --orderby=comment__in --field=url`
Then STDOUT should be:
"""
https://example.com/?p=1#comment-{COMMENT_ID}
https://example.com/?p=1#comment-1
"""
Scenario: Count comments
When I run `wp comment count 1`
Then STDOUT should contain:
"""
approved: 1
"""
And STDOUT should contain:
"""
moderated: 0
"""
And STDOUT should contain:
"""
total_comments: 1
"""
When I run `wp comment count`
Then STDOUT should contain:
"""
approved: 1
"""
And STDOUT should contain:
"""
moderated: 0
"""
And STDOUT should contain:
"""
total_comments: 1
"""
@require-mysql
Scenario: Approving/unapproving comments
Given I run `wp comment create --comment_post_ID=1 --comment_approved=0 --porcelain`
And save STDOUT as {COMMENT_ID}
# With site url set.
When I run `wp comment approve {COMMENT_ID} --url=www.example.com`
Then STDOUT should be:
"""
Success: Approved comment {COMMENT_ID}.
"""
When I try the previous command again
Then STDERR should contain:
"""
Error: Could not update comment status
"""
And STDOUT should be empty
And the return code should be 1
When I run `wp comment get --field=comment_approved {COMMENT_ID}`
Then STDOUT should be:
"""
1
"""
When I run `wp comment unapprove {COMMENT_ID} --url=www.example.com`
Then STDOUT should be:
"""
Success: Unapproved comment {COMMENT_ID}.
"""
When I run `wp comment get --field=comment_approved {COMMENT_ID}`
Then STDOUT should be:
"""
0
"""
# Without site url set.
When I try `wp comment approve {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Approved comment {COMMENT_ID}.
"""
And STDERR should be:
"""
Warning: Site url not set - defaulting to 'example.com'. Any notification emails sent to post author may appear to come from 'example.com'.
"""
And the return code should be 0
When I try `wp comment unapprove {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Unapproved comment {COMMENT_ID}.
"""
And STDERR should be:
"""
Warning: Site url not set - defaulting to 'example.com'. Any notification emails sent to post author may appear to come from 'example.com'.
"""
And the return code should be 0
# Approving an approved comment works in SQLite
@require-sqlite
Scenario: Approving/unapproving comments
Given I run `wp comment create --comment_post_ID=1 --comment_approved=0 --porcelain`
And save STDOUT as {COMMENT_ID}
# With site url set.
When I run `wp comment approve {COMMENT_ID} --url=www.example.com`
Then STDOUT should be:
"""
Success: Approved comment {COMMENT_ID}.
"""
When I try the previous command again
Then STDOUT should be:
"""
Success: Approved comment {COMMENT_ID}.
"""
When I run `wp comment get --field=comment_approved {COMMENT_ID}`
Then STDOUT should be:
"""
1
"""
When I run `wp comment unapprove {COMMENT_ID} --url=www.example.com`
Then STDOUT should be:
"""
Success: Unapproved comment {COMMENT_ID}.
"""
When I run `wp comment get --field=comment_approved {COMMENT_ID}`
Then STDOUT should be:
"""
0
"""
# Without site url set.
When I try `wp comment approve {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Approved comment {COMMENT_ID}.
"""
And STDERR should be:
"""
Warning: Site url not set - defaulting to 'example.com'. Any notification emails sent to post author may appear to come from 'example.com'.
"""
And the return code should be 0
When I try `wp comment unapprove {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Unapproved comment {COMMENT_ID}.
"""
And STDERR should be:
"""
Warning: Site url not set - defaulting to 'example.com'. Any notification emails sent to post author may appear to come from 'example.com'.
"""
And the return code should be 0
@skip-windows
Scenario: Approving/unapproving comments with multidigit comment ID
Given I run `wp comment delete $(wp comment list --field=ID)`
And I run `wp comment generate --count=10 --quiet`
And I run `wp comment create --comment_post_ID=1 --porcelain`
And save STDOUT as {COMMENT_ID}
# With site url set.
When I run `wp comment unapprove {COMMENT_ID} --url=www.example.com`
Then STDOUT should be:
"""
Success: Unapproved comment {COMMENT_ID}.
"""
When I run `wp comment list --format=count --status=approve`
Then STDOUT should be:
"""
10
"""
When I run `wp comment approve {COMMENT_ID} --url=www.example.com`
Then STDOUT should be:
"""
Success: Approved comment {COMMENT_ID}.
"""
When I run `wp comment list --format=count --status=approve`
Then STDOUT should be:
"""
11
"""
# Without site url set.
When I try `wp comment unapprove {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Unapproved comment {COMMENT_ID}.
"""
And STDERR should be:
"""
Warning: Site url not set - defaulting to 'example.com'. Any notification emails sent to post author may appear to come from 'example.com'.
"""
And the return code should be 0
When I try `wp comment approve {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Approved comment {COMMENT_ID}.
"""
And STDERR should be:
"""
Warning: Site url not set - defaulting to 'example.com'. Any notification emails sent to post author may appear to come from 'example.com'.
"""
And the return code should be 0
@skip-windows
Scenario: Spam/unspam comments with multidigit comment ID
Given I run `wp comment delete $(wp comment list --field=ID)`
And I run `wp comment generate --count=10 --quiet`
And I run `wp comment create --comment_post_ID=1 --porcelain`
And save STDOUT as {COMMENT_ID}
# With site url set.
When I run `wp comment spam {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Marked comment {COMMENT_ID} as spam.
"""
When I run `wp comment list --format=count --status=spam`
Then STDOUT should be:
"""
1
"""
When I run `wp comment unspam {COMMENT_ID} --url=www.example.com`
Then STDOUT should be:
"""
Success: Unspammed comment {COMMENT_ID}.
"""
When I run `wp comment list --format=count --status=spam`
Then STDOUT should be:
"""
0
"""
# Without site url set.
When I run `wp comment spam {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Marked comment {COMMENT_ID} as spam.
"""
When I try `wp comment unspam {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Unspammed comment {COMMENT_ID}.
"""
And STDERR should be:
"""
Warning: Site url not set - defaulting to 'example.com'. Any notification emails sent to post author may appear to come from 'example.com'.
"""
And the return code should be 0
@skip-windows
Scenario: Trash/untrash comments with multidigit comment ID
Given I run `wp comment delete $(wp comment list --field=ID) --force`
And I run `wp comment generate --count=10 --quiet`
And I run `wp comment create --comment_post_ID=1 --porcelain`
And save STDOUT as {COMMENT_ID}
# With site url set.
When I run `wp comment trash {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Trashed comment {COMMENT_ID}.
"""
When I run `wp comment list --format=count --status=trash`
Then STDOUT should be:
"""
1
"""
When I run `wp comment untrash {COMMENT_ID} --url=www.example.com`
Then STDOUT should be:
"""
Success: Untrashed comment {COMMENT_ID}.
"""
When I run `wp comment list --format=count --status=trash`
Then STDOUT should be:
"""
0
"""
# Without site url set.
When I run `wp comment trash {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Trashed comment {COMMENT_ID}.
"""
When I try `wp comment untrash {COMMENT_ID}`
Then STDOUT should be:
"""
Success: Untrashed comment {COMMENT_ID}.
"""
And STDERR should be:
"""
Warning: Site url not set - defaulting to 'example.com'. Any notification emails sent to post author may appear to come from 'example.com'.
"""
And the return code should be 0
Scenario: Make sure WordPress receives the slashed data it expects
When I run `wp comment create --comment_content='My\Comment' --porcelain`
Then save STDOUT as {COMMENT_ID}
When I run `wp comment get {COMMENT_ID} --field=comment_content`
Then STDOUT should be:
"""
My\Comment
"""
When I run `wp comment update {COMMENT_ID} --comment_content='My\New\Comment'`
Then STDOUT should not be empty
When I run `wp comment get {COMMENT_ID} --field=comment_content`
Then STDOUT should be:
"""
My\New\Comment
"""
@require-wp-4.4
Scenario: Approving/unapproving/unspamming/untrashing (approved) comments with no comment post id should not produce PHP notices for WP >= 4.4
Given I run `wp comment create --comment_approved=0 --porcelain`
And save STDOUT as {COMMENT_ID}
When I run `wp comment approve {COMMENT_ID} --url=www.example.com`
And I run `wp comment unapprove {COMMENT_ID} --url=www.example.com`
Given I run `wp comment approve {COMMENT_ID} --url=www.example.com`
When I run `wp comment spam {COMMENT_ID} --url=www.example.com`
And I run `wp comment unspam {COMMENT_ID} --url=www.example.com`
And I run `wp comment trash {COMMENT_ID} --url=www.example.com`
And I run `wp comment untrash {COMMENT_ID} --url=www.example.com`