Browse Source

Add integration tests for replies

Signed-off-by: Joas Schilling <coding@schilljs.com>
pull/2000/head
Joas Schilling 6 years ago
parent
commit
c145140c73
No known key found for this signature in database GPG Key ID: 7076EA9751AACDDA
  1. 57
      tests/integration/features/bootstrap/FeatureContext.php
  2. 192
      tests/integration/features/chat/reply.feature

57
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;

192
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
Loading…
Cancel
Save