sessions: integration tests
Signed-off-by: chandi Langecker <git@chandi.it>
This commit is contained in:
@@ -11,3 +11,4 @@ default:
|
||||
- CommentContext
|
||||
- AttachmentContext
|
||||
- SearchContext
|
||||
- SessionContext
|
||||
|
||||
@@ -32,6 +32,10 @@ class BoardContext implements Context {
|
||||
return $this->card;
|
||||
}
|
||||
|
||||
public function getLastUsedBoard() {
|
||||
return $this->board;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given /^creates a board with example content$/
|
||||
*/
|
||||
@@ -57,7 +61,21 @@ class BoardContext implements Context {
|
||||
* @When /^fetches the board named "([^"]*)"$/
|
||||
*/
|
||||
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->board = json_decode((string)$this->getResponse()->getBody(), true);
|
||||
}
|
||||
|
||||
@@ -47,4 +47,8 @@ class ServerContext implements Context {
|
||||
public function getReqestToken(): string {
|
||||
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