sessions: integration tests
Signed-off-by: chandi Langecker <git@chandi.it>
This commit is contained in:
@@ -11,3 +11,4 @@ default:
|
|||||||
- CommentContext
|
- CommentContext
|
||||||
- AttachmentContext
|
- AttachmentContext
|
||||||
- SearchContext
|
- SearchContext
|
||||||
|
- SessionContext
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ class BoardContext implements Context {
|
|||||||
return $this->card;
|
return $this->card;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLastUsedBoard() {
|
||||||
|
return $this->board;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given /^creates a board with example content$/
|
* @Given /^creates a board with example content$/
|
||||||
*/
|
*/
|
||||||
@@ -57,7 +61,21 @@ class BoardContext implements Context {
|
|||||||
* @When /^fetches the board named "([^"]*)"$/
|
* @When /^fetches the board named "([^"]*)"$/
|
||||||
*/
|
*/
|
||||||
public function fetchesTheBoardNamed($boardName) {
|
public function fetchesTheBoardNamed($boardName) {
|
||||||
$this->requestContext->sendJSONrequest('GET', '/index.php/apps/deck/boards/' . $this->board['id'], []);
|
$id = null;
|
||||||
|
if (!$this->board || $boardName != $this->board['title']) {
|
||||||
|
$this->requestContext->sendJSONrequest('GET', '/index.php/apps/deck/boards', []);
|
||||||
|
$boards = json_decode((string)$this->getResponse()->getBody(), true);
|
||||||
|
foreach ($boards as $board) {
|
||||||
|
if ($board['title'] == $boardName) {
|
||||||
|
$id = $board['id'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Assert::assertNotNull($id, "Could not find board named ".$boardName);
|
||||||
|
} else {
|
||||||
|
$id = $this->board['id'];
|
||||||
|
}
|
||||||
|
$this->requestContext->sendJSONrequest('GET', '/index.php/apps/deck/boards/' . $id, []);
|
||||||
$this->getResponse()->getBody()->seek(0);
|
$this->getResponse()->getBody()->seek(0);
|
||||||
$this->board = json_decode((string)$this->getResponse()->getBody(), true);
|
$this->board = json_decode((string)$this->getResponse()->getBody(), true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,4 +47,8 @@ class ServerContext implements Context {
|
|||||||
public function getReqestToken(): string {
|
public function getReqestToken(): string {
|
||||||
return $this->requestToken;
|
return $this->requestToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getCurrentUser(): string {
|
||||||
|
return $this->currentUser;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
80
tests/integration/features/bootstrap/SessionContext.php
Normal file
80
tests/integration/features/bootstrap/SessionContext.php
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Behat\Behat\Context\Context;
|
||||||
|
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
||||||
|
use PHPUnit\Framework\Assert;
|
||||||
|
|
||||||
|
require_once __DIR__ . '/../../vendor/autoload.php';
|
||||||
|
|
||||||
|
class SessionContext implements Context {
|
||||||
|
use RequestTrait;
|
||||||
|
|
||||||
|
/** @var ServerContext */
|
||||||
|
private $serverContext;
|
||||||
|
|
||||||
|
/** @var BoardContext */
|
||||||
|
private $boardContext;
|
||||||
|
|
||||||
|
private $tokens = [];
|
||||||
|
|
||||||
|
/** @BeforeScenario */
|
||||||
|
public function gatherContexts(BeforeScenarioScope $scope) {
|
||||||
|
$environment = $scope->getEnvironment();
|
||||||
|
|
||||||
|
$this->serverContext = $environment->getContext('ServerContext');
|
||||||
|
$this->boardContext = $environment->getContext('BoardContext');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Given user opens the board named :name
|
||||||
|
*/
|
||||||
|
public function opensTheBoardNamed($name) {
|
||||||
|
$this->boardContext->fetchesTheBoardNamed($name);
|
||||||
|
|
||||||
|
$board = $this->boardContext->getLastUsedBoard();
|
||||||
|
$this->requestContext->sendJSONrequest('PUT', '/index.php/apps/deck/session/create', [
|
||||||
|
'boardId' => $board['id'],
|
||||||
|
]);
|
||||||
|
$res = json_decode((string)$this->getResponse()->getBody(), true);
|
||||||
|
Assert::assertArrayHasKey('token', $res, "session creation did not respond with a token");
|
||||||
|
|
||||||
|
// store token
|
||||||
|
$user = $this->serverContext->getCurrentUser();
|
||||||
|
$this->token[$user] = $res['token'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then the response should have a list of active sessions with the length :length
|
||||||
|
*/
|
||||||
|
public function theResponseShouldHaveActiveSessions($length) {
|
||||||
|
$board = $this->boardContext->getLastUsedBoard();
|
||||||
|
Assert::assertEquals($length, count($board['activeSessions']), "unexpected count of active sessions");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then the user :user should be in the list of active sessions
|
||||||
|
*/
|
||||||
|
public function theUserShouldBeInTheListOfActiveSessions($user) {
|
||||||
|
$board = $this->boardContext->getLastUsedBoard();
|
||||||
|
Assert::assertContains($user, $board['activeSessions'], "user is not found in the list of active sessions");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When user closes the board named :name
|
||||||
|
*/
|
||||||
|
public function closingTheBoardNamed($name) {
|
||||||
|
$board = $this->boardContext->getLastUsedBoard();
|
||||||
|
if (!$board || $board['title'] != $name) {
|
||||||
|
$this->boardContext->fetchesTheBoardNamed($name);
|
||||||
|
$board = $this->boardContext->getLastUsedBoard();
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = $this->serverContext->getCurrentUser();
|
||||||
|
$token = $this->token[$user];
|
||||||
|
Assert::assertNotEmpty($token, "no token for the user found");
|
||||||
|
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/session/close', [
|
||||||
|
'boardId' => $board['id'],
|
||||||
|
'token' => $token
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
33
tests/integration/features/sessions.feature
Normal file
33
tests/integration/features/sessions.feature
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
Feature: Sessions
|
||||||
|
|
||||||
|
Background:
|
||||||
|
Given user "admin" exists
|
||||||
|
And user "user0" exists
|
||||||
|
And user "user1" exists
|
||||||
|
Given acting as user "user0"
|
||||||
|
And creates a board named "Shared board" with color "fafafa"
|
||||||
|
And shares the board with user "user1"
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Open a board with multiple users
|
||||||
|
Given acting as user "user0"
|
||||||
|
And user opens the board named "Shared board"
|
||||||
|
When fetches the board named "Shared board"
|
||||||
|
Then the response should have a status code "200"
|
||||||
|
And the response should have a list of active sessions with the length 1
|
||||||
|
And the user "user0" should be in the list of active sessions
|
||||||
|
|
||||||
|
Given acting as user "user1"
|
||||||
|
And user opens the board named "Shared board"
|
||||||
|
When fetches the board named "Shared board"
|
||||||
|
Then the response should have a status code "200"
|
||||||
|
And the response should have a list of active sessions with the length 2
|
||||||
|
And the user "user0" should be in the list of active sessions
|
||||||
|
And the user "user1" should be in the list of active sessions
|
||||||
|
|
||||||
|
When user closes the board named "Shared board"
|
||||||
|
And fetches the board named "Shared board"
|
||||||
|
Then the response should have a status code "200"
|
||||||
|
And the response should have a list of active sessions with the length 1
|
||||||
|
And the user "user0" should be in the list of active sessions
|
||||||
|
|
||||||
Reference in New Issue
Block a user