sessions: integration tests

Signed-off-by: chandi Langecker <git@chandi.it>
This commit is contained in:
chandi Langecker
2022-10-06 14:06:39 +02:00
parent c82a5a1228
commit 43a1b1a2e5
5 changed files with 137 additions and 1 deletions

View File

@@ -11,3 +11,4 @@ default:
- CommentContext
- AttachmentContext
- SearchContext
- SessionContext

View File

@@ -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);
}

View File

@@ -47,4 +47,8 @@ class ServerContext implements Context {
public function getReqestToken(): string {
return $this->requestToken;
}
public function getCurrentUser(): string {
return $this->currentUser;
}
}

View 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
]);
}
}

View 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