Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2019-07-24 12:11:09 +0300
committerJoas Schilling <coding@schilljs.com>2019-07-30 10:33:41 +0300
commitc145140c7341700302ddc794b9cfd197891306ff (patch)
treedd12d55d7370e5f3bac5a89ef2ecda385755384b /tests
parente3e3e8e741f5bc94510b2002031e2777e64a42ba (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.php57
-rw-r--r--tests/integration/features/chat/reply.feature192
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