diff options
author | Joas Schilling <coding@schilljs.com> | 2019-07-24 12:11:09 +0300 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2019-07-30 10:33:41 +0300 |
commit | c145140c7341700302ddc794b9cfd197891306ff (patch) | |
tree | dd12d55d7370e5f3bac5a89ef2ecda385755384b /tests | |
parent | e3e3e8e741f5bc94510b2002031e2777e64a42ba (diff) |
Add integration tests for replies
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/integration/features/bootstrap/FeatureContext.php | 57 | ||||
-rw-r--r-- | tests/integration/features/chat/reply.feature | 192 |
2 files changed, 243 insertions, 6 deletions
diff --git a/tests/integration/features/bootstrap/FeatureContext.php b/tests/integration/features/bootstrap/FeatureContext.php index 62e17349a..1b39994ff 100644 --- a/tests/integration/features/bootstrap/FeatureContext.php +++ b/tests/integration/features/bootstrap/FeatureContext.php @@ -39,6 +39,8 @@ class FeatureContext implements Context, SnippetAcceptingContext { protected static $tokenToIdentifier; /** @var array[] */ protected static $sessionIdToUser; + /** @var array[] */ + protected static $messages; /** @var string */ protected $currentUser; @@ -80,6 +82,7 @@ class FeatureContext implements Context, SnippetAcceptingContext { self::$identifierToToken = []; self::$tokenToIdentifier = []; self::$sessionIdToUser = []; + self::$messages = []; $this->createdUsers = []; $this->createdGroups = []; @@ -582,6 +585,37 @@ class FeatureContext implements Context, SnippetAcceptingContext { ); $this->assertStatusCode($this->response, $statusCode); sleep(1); // make sure Postgres manages the order of the messages + + $response = $this->getDataFromResponse($this->response); + if (isset($response['id'])) { + self::$messages[$message] = $response['id']; + } + } + + /** + * @Then /^user "([^"]*)" sends reply "([^"]*)" on message "([^"]*)" to room "([^"]*)" with (\d+)$/ + * + * @param string $user + * @param string $reply + * @param string $message + * @param string $identifier + * @param string $statusCode + */ + public function userSendsReplyToRoom($user, $reply, $message, $identifier, $statusCode) { + $replyTo = self::$messages[$message]; + + $this->setCurrentUser($user); + $this->sendRequest( + 'POST', '/apps/spreed/api/v1/chat/' . self::$identifierToToken[$identifier], + new TableNode([['message', $reply], ['replyTo', $replyTo]]) + ); + $this->assertStatusCode($this->response, $statusCode); + sleep(1); // make sure Postgres manages the order of the messages + + $response = $this->getDataFromResponse($this->response); + if (isset($response['id'])) { + self::$messages[$reply] = $response['id']; + } } /** @@ -609,19 +643,24 @@ class FeatureContext implements Context, SnippetAcceptingContext { PHPUnit_Framework_Assert::assertEmpty($messages); return; } + $includeParents = in_array('parentMessage', $formData->getRow(0), true); PHPUnit_Framework_Assert::assertCount(count($formData->getHash()), $messages, 'Message count does not match'); - PHPUnit_Framework_Assert::assertEquals($formData->getHash(), array_map(function($message) { - return [ + PHPUnit_Framework_Assert::assertEquals($formData->getHash(), array_map(function($message) use($includeParents) { + $data = [ 'room' => self::$tokenToIdentifier[$message['token']], - 'actorType' => (string) $message['actorType'], - 'actorId' => ($message['actorType'] === 'guests')? self::$sessionIdToUser[$message['actorId']]: (string) $message['actorId'], - 'actorDisplayName' => (string) $message['actorDisplayName'], + 'actorType' => $message['actorType'], + 'actorId' => ($message['actorType'] === 'guests')? self::$sessionIdToUser[$message['actorId']]: $message['actorId'], + 'actorDisplayName' => $message['actorDisplayName'], // TODO test timestamp; it may require using Runkit, php-timecop // or something like that. - 'message' => (string) $message['message'], + 'message' => $message['message'], 'messageParameters' => json_encode($message['messageParameters']), ]; + if ($includeParents) { + $data['parentMessage'] = $message['parent']['message'] ?? ''; + } + return $data; }, $messages)); } @@ -642,6 +681,12 @@ class FeatureContext implements Context, SnippetAcceptingContext { return $message['systemMessage'] !== ''; }); + foreach ($messages as $systemMessage) { + // Include the received system messages in the list of messages used + // for replies. + self::$messages[$systemMessage['systemMessage']] = $systemMessage['id']; + } + if ($formData === null) { PHPUnit_Framework_Assert::assertEmpty($messages); return; diff --git a/tests/integration/features/chat/reply.feature b/tests/integration/features/chat/reply.feature new file mode 100644 index 000000000..39c83c116 --- /dev/null +++ b/tests/integration/features/chat/reply.feature @@ -0,0 +1,192 @@ +Feature: chat/reply + Background: + Given user "participant1" exists + Given user "participant2" exists + Given user "participant3" exists + And group "attendees1" exists + And user "participant2" is member of group "attendees1" + + Scenario: user can reply to own message + Given user "participant1" creates room "group room" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" sends message "Message 1" to room "group room" with 201 + When user "participant1" sends reply "Message 1-1" on message "Message 1" to room "group room" with 201 + Then user "participant1" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant1 | participant1-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + And user "participant2" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant1 | participant1-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + + Scenario: user can reply to other's messages + Given user "participant1" creates room "group room" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" sends message "Message 1" to room "group room" with 201 + When user "participant2" sends reply "Message 1-1" on message "Message 1" to room "group room" with 201 + Then user "participant1" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant2 | participant2-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + And user "participant2" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant2 | participant2-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + + Scenario: several users can reply to the same message several times + Given user "participant1" creates room "group room" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" sends message "Message 1" to room "group room" with 201 + When user "participant1" sends reply "Message 1-1" on message "Message 1" to room "group room" with 201 + And user "participant2" sends reply "Message 1-2" on message "Message 1" to room "group room" with 201 + And user "participant1" sends reply "Message 1-3" on message "Message 1" to room "group room" with 201 + And user "participant2" sends reply "Message 1-4" on message "Message 1" to room "group room" with 201 + Then user "participant1" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant2 | participant2-displayname | Message 1-4 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1-3 | [] | Message 1 | + | group room | users | participant2 | participant2-displayname | Message 1-2 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + And user "participant2" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant2 | participant2-displayname | Message 1-4 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1-3 | [] | Message 1 | + | group room | users | participant2 | participant2-displayname | Message 1-2 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + + + + Scenario: user can reply to private commands + Given user "participant1" creates room "group room" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" sends message "/help" to room "group room" with 201 + # In the tests the reference for the message to reply to is got from the + # messages originally sent, not from how they are returned by the server. + When user "participant1" sends reply "Message X-1" on message "/help" to room "group room" with 201 + Then user "participant1" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant1 | participant1-displayname | Message X-1 | [] | There are currently no commands available. | + | group room | bots | talk | talk-bot | There are currently no commands available. | [] | | + And user "participant2" sees the following messages in room "group room" with 200 + + Scenario: user can reply to system messages + Given user "participant1" creates room "group room" + | roomType | 2 | + | invite | attendees1 | + # The system messages need to be got so they are added to the list of known + # messages to reply to. + And user "participant1" sees the following system messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | systemMessage | + | group room | users | participant1 | participant1-displayname | user_added | + | group room | users | participant1 | participant1-displayname | conversation_created | + When user "participant1" sends reply "Message X-1" on message "conversation_created" to room "group room" with 201 + Then user "participant1" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant1 | participant1-displayname | Message X-1 | [] | You created the conversation | + And user "participant2" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant1 | participant1-displayname | Message X-1 | [] | {actor} created the conversation | + + + + Scenario: user can reply to own replies + Given user "participant1" creates room "group room" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" sends message "Message 1" to room "group room" with 201 + And user "participant1" sends reply "Message 1-1" on message "Message 1" to room "group room" with 201 + When user "participant1" sends reply "Message 1-1-1" on message "Message 1-1" to room "group room" with 201 + Then user "participant1" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant1 | participant1-displayname | Message 1-1-1 | [] | Message 1-1 | + | group room | users | participant1 | participant1-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + And user "participant2" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant1 | participant1-displayname | Message 1-1-1 | [] | Message 1-1 | + | group room | users | participant1 | participant1-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + + Scenario: user can reply to other's replies + Given user "participant1" creates room "group room" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" sends message "Message 1" to room "group room" with 201 + And user "participant2" sends reply "Message 1-1" on message "Message 1" to room "group room" with 201 + When user "participant1" sends reply "Message 1-1-1" on message "Message 1-1" to room "group room" with 201 + And user "participant2" sends reply "Message 1-1-1-1" on message "Message 1-1-1" to room "group room" with 201 + Then user "participant1" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant2 | participant2-displayname | Message 1-1-1-1 | [] | Message 1-1-1 | + | group room | users | participant1 | participant1-displayname | Message 1-1-1 | [] | Message 1-1 | + | group room | users | participant2 | participant2-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + And user "participant2" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant2 | participant2-displayname | Message 1-1-1-1 | [] | Message 1-1-1 | + | group room | users | participant1 | participant1-displayname | Message 1-1-1 | [] | Message 1-1 | + | group room | users | participant2 | participant2-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + + Scenario: several users can reply to the same reply several times + Given user "participant1" creates room "group room" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" sends message "Message 1" to room "group room" with 201 + And user "participant2" sends reply "Message 1-1" on message "Message 1" to room "group room" with 201 + When user "participant1" sends reply "Message 1-1-1" on message "Message 1-1" to room "group room" with 201 + And user "participant2" sends reply "Message 1-1-2" on message "Message 1-1" to room "group room" with 201 + And user "participant1" sends reply "Message 1-1-3" on message "Message 1-1" to room "group room" with 201 + And user "participant2" sends reply "Message 1-1-4" on message "Message 1-1" to room "group room" with 201 + Then user "participant1" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant2 | participant2-displayname | Message 1-1-4 | [] | Message 1-1 | + | group room | users | participant1 | participant1-displayname | Message 1-1-3 | [] | Message 1-1 | + | group room | users | participant2 | participant2-displayname | Message 1-1-2 | [] | Message 1-1 | + | group room | users | participant1 | participant1-displayname | Message 1-1-1 | [] | Message 1-1 | + | group room | users | participant2 | participant2-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + And user "participant2" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant2 | participant2-displayname | Message 1-1-4 | [] | Message 1-1 | + | group room | users | participant1 | participant1-displayname | Message 1-1-3 | [] | Message 1-1 | + | group room | users | participant2 | participant2-displayname | Message 1-1-2 | [] | Message 1-1 | + | group room | users | participant1 | participant1-displayname | Message 1-1-1 | [] | Message 1-1 | + | group room | users | participant2 | participant2-displayname | Message 1-1 | [] | Message 1 | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + + + + Scenario: user can not reply when not in the room + Given user "participant1" creates room "group room" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" sends message "Message 1" to room "group room" with 201 + When user "participant3" sends reply "Message 1-1" on message "Message 1" to room "group room" with 404 + Then user "participant1" sees the following messages in room "group room" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | parentMessage | + | group room | users | participant1 | participant1-displayname | Message 1 | [] | | + And user "participant3" sees the following messages in room "group room" with 404 + + + + Scenario: user can not reply to a message from another room + Given user "participant1" creates room "group room1" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" creates room "group room2" + | roomType | 2 | + | invite | attendees1 | + And user "participant1" sends message "Message 1" to room "group room1" with 201 + When user "participant1" sends reply "Message 1-1" on message "Message 1" to room "group room2" with 400 + Then user "participant1" sees the following messages in room "group room1" with 200 + | room | actorType | actorId | actorDisplayName | message | messageParameters | + | group room1 | users | participant1 | participant1-displayname | Message 1 | [] | + And user "participant1" sees the following messages in room "group room2" with 200 |