Files
piratepoet/mailpoet/tests/integration/Automation/Integrations/WordPress/Fields/CommentFieldsTest.php
Rostislav Wolny 0eb531f675 Fix comment fields test
Adding a WpPostEntity caused a side effect that the cleanup extension
for integration tests started processing also the post table
and removed the post the test was relying on.

This commit fixes the issue by creating the post for the test within the test.

[MAILPOET-5813]
2024-01-08 11:33:18 -06:00

227 lines
7.3 KiB
PHP

<?php declare(strict_types = 1);
namespace integration\Automation\Integrations\WordPress\Fields;
use MailPoet\Automation\Engine\Data\Field;
use MailPoet\Automation\Engine\WordPress;
use MailPoet\Automation\Integrations\WordPress\Payloads\CommentPayload;
use MailPoet\Automation\Integrations\WordPress\Subjects\CommentSubject;
class CommentFieldsTest extends \MailPoetTest {
/** @var WordPress */
private $wp;
public function _before() {
$this->wp = $this->diContainer->get(WordPress::class);
}
public function testCommentIdField() {
$fields = $this->getFieldsMap();
$field = $fields['wordpress:comment:id'];
$this->assertSame('Comment ID', $field->getName());
$this->assertSame('integer', $field->getType());
$this->assertSame([], $field->getArgs());
$commentId = wp_insert_comment([]);
$this->assertNotFalse($commentId);
$this->assertSame($commentId, $field->getValue(new CommentPayload($commentId, $this->wp)));
}
/**
* @dataProvider dataForSimpleFields
*/
public function testSimpleFields($fieldName, $name, $type, $commentField, $expectation) {
$fields = $this->getFieldsMap();
$field = $fields[$fieldName];
$this->assertSame($name, $field->getName());
$this->assertSame($type, $field->getType());
$this->assertSame([], $field->getArgs());
$this->assertNull($field->getValue(new CommentPayload(0, $this->wp)));
$commentId = wp_insert_comment([
$commentField => $expectation,
]);
$this->assertNotFalse($commentId);
$this->assertSame($expectation, $field->getValue(new CommentPayload($commentId, $this->wp)));
}
public function dataForSimpleFields(): array {
return [
'wordpress:comment:author-name' => [
'field' => 'wordpress:comment:author-name',
'name' => 'Comment author name',
'type' => 'string',
'commentField' => 'comment_author',
'expectation' => 'John Doe',
],
'wordpress:comment:author-email' => [
'field' => 'wordpress:comment:author-email',
'name' => 'Comment author email',
'type' => 'string',
'commentField' => 'comment_author_email',
'expectation' => 'john.doe@example.com',
],
'wordpress:comment:author-url' => [
'field' => 'wordpress:comment:author-url',
'name' => 'Comment author URL',
'type' => 'string',
'commentField' => 'comment_author_url',
'expectation' => 'https://johndoe.com',
],
'wordpress:comment:author-ip' => [
'field' => 'wordpress:comment:author-ip',
'name' => 'Comment author IP',
'type' => 'string',
'commentField' => 'comment_author_IP',
'expectation' => '127.0.0.1',
],
'wordpress:comment:content' => [
'field' => 'wordpress:comment:content',
'name' => 'Comment content',
'type' => 'string',
'commentField' => 'comment_content',
'expectation' => 'the comment content',
],
'wordpress:comment:karma' => [
'field' => 'wordpress:comment:karma',
'name' => 'Comment karma',
'type' => 'integer',
'commentField' => 'comment_karma',
'expectation' => 1,
],
'wordpress:comment:comment-agent' => [
'field' => 'wordpress:comment:comment-agent',
'name' => 'Comment user agent',
'type' => 'string',
'commentField' => 'comment_agent',
'expectation' => 'The user agent',
],
'wordpress:comment:comment-type' => [
'field' => 'wordpress:comment:comment-type',
'name' => 'Comment type',
'type' => 'string',
'commentField' => 'comment_type',
'expectation' => 'type',
],
'wordpress:comment:comment-parent' => [
'field' => 'wordpress:comment:comment-parent',
'name' => 'Comment parent ID',
'type' => 'integer',
'commentField' => 'comment_parent',
'expectation' => 1,
],
];
}
public function testDateField() {
$fields = $this->getFieldsMap();
$field = $fields['wordpress:comment:date'];
$this->assertSame('Comment date', $field->getName());
$this->assertSame('datetime', $field->getType());
$this->assertSame([], $field->getArgs());
$this->assertNull($field->getValue(new CommentPayload(0, $this->wp)));
$commentId = wp_insert_comment([]);
$this->assertNotFalse($commentId);
$comment = \WP_Comment::get_instance($commentId);
$this->assertNotFalse($comment);
$this->assertSame($comment->comment_date_gmt, $field->getValue(new CommentPayload($commentId, $this->wp))); //phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
}
public function testStatusField() {
$fields = $this->getFieldsMap();
$field = $fields['wordpress:comment:status'];
$this->assertSame('Comment status', $field->getName());
$this->assertSame('enum', $field->getType());
$this->assertSame([
'options' => [
[
'id' => 'hold',
'name' => 'Unapproved',
],
[
'id' => 'approve',
'name' => 'Approved',
],
[
'id' => 'spam',
'name' => 'Spam',
],
[
'id' => 'trash',
'name' => 'Trash',
],
],
], $field->getArgs());
$this->assertNull($field->getValue(new CommentPayload(0, $this->wp)));
$commentId = wp_insert_comment([
'comment_approved' => 0,
]);
$this->assertNotFalse($commentId);
$this->assertSame('hold', $field->getValue(new CommentPayload($commentId, $this->wp)));
wp_update_comment([
'comment_ID' => $commentId,
'comment_approved' => '1',
]);
$this->assertSame('approve', $field->getValue(new CommentPayload($commentId, $this->wp)));
wp_update_comment([
'comment_ID' => $commentId,
'comment_approved' => 'spam',
]);
$this->assertSame('spam', $field->getValue(new CommentPayload($commentId, $this->wp)));
wp_update_comment([
'comment_ID' => $commentId,
'comment_approved' => 'trash',
]);
$this->assertSame('trash', $field->getValue(new CommentPayload($commentId, $this->wp)));
}
public function testHasChildrenField() {
$postId = wp_insert_post([
'post_title' => 'Hello World!',
]);
$fields = $this->getFieldsMap();
$field = $fields['wordpress:comment:has-children'];
$this->assertSame('Comment has replies', $field->getName());
$this->assertSame('boolean', $field->getType());
$this->assertSame([], $field->getArgs());
$this->assertFalse($field->getValue(new CommentPayload(0, $this->wp)));
$commentId = wp_insert_comment([
'comment_post_ID' => $postId,
]);
$this->assertNotFalse($commentId);
$comment = get_comment($commentId);
$this->assertInstanceOf(\WP_Comment::class, $comment);
$this->assertFalse($field->getValue(new CommentPayload($commentId, $this->wp)));
$childId = wp_insert_comment([
'comment_parent' => $commentId,
'comment_post_ID' => $postId,
]);
$this->assertNotFalse($childId);
$this->assertTrue($field->getValue(new CommentPayload($commentId, $this->wp)));
}
/** @return array<string, Field> */
private function getFieldsMap(): array {
$factory = $this->diContainer->get(CommentSubject::class);
$fields = [];
foreach ($factory->getFields() as $field) {
$fields[$field->getKey()] = $field;
}
return $fields;
}
}