1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
<?php
use JsonApi\Routes\Blubber\Rel\Mentions;
use JsonApi\Schemas\User as UsersSchema;
require_once 'BlubberTestHelper.php';
class BlubberMentionsRelationshipTest extends \Codeception\Test\Unit
{
use BlubberTestHelper;
/**
* @var \UnitTester
*/
protected $tester;
protected function _before()
{
\DBManager::getInstance()->setConnection('studip', $this->getModule('\\Helper\\StudipDb')->dbh);
}
protected function _after()
{
}
// tests
public function testFetchRelationship()
{
$credentials = $this->tester->getCredentialsForTestAutor();
$thread = $this->createPrivateBlubberThreadForUser($credentials, [$credentials]);
$app = $this->tester->createApp(
$credentials,
'get',
'/blubber-threads/{id}/relationships/mentions',
Mentions::class);
$requestBuilder = $this->tester->createRequestBuilder($credentials);
$requestBuilder->setUri('/blubber-threads/'.$thread->id.'/relationships/mentions')->fetch();
$response = $this->tester->sendMockRequest($app, $requestBuilder->getRequest());
$this->tester->assertTrue($response->isSuccessfulDocument([200]));
$document = $response->document();
$this->tester->assertTrue($document->isResourceCollectionDocument());
$resources = $document->primaryResources();
$this->tester->assertCount(count($thread->mentions), $resources);
}
public function testAddRelationship()
{
$credentials = $this->tester->getCredentialsForTestAutor();
$thread = $this->createPrivateBlubberThreadForUser($credentials, [$credentials]);
$this->tester->assertCount(1, $thread->mentions);
$app = $this->tester->createApp(
$credentials,
'post',
'/blubber-threads/{id}/relationships/mentions',
Mentions::class);
$requestBuilder = $this->tester->createRequestBuilder($credentials);
$requestBuilder->setUri('/blubber-threads/'.$thread->id.'/relationships/mentions')
->create()
->setJsonApiBody($this->prepareValidBody([$this->tester->getCredentialsForTestDozent()]));
$response = $this->tester->sendMockRequest($app, $requestBuilder->getRequest());
$this->tester->assertSame(204, $response->getStatusCode());
$this->tester->assertCount(2, \BlubberThread::find($thread->id)->mentions);
}
public function testRemoveRelationship()
{
$credentials1 = $this->tester->getCredentialsForTestAutor();
$credentials2 = $this->tester->getCredentialsForTestDozent();
$credentials3 = $this->tester->getCredentialsForTestAdmin();
$thread = $this->createPrivateBlubberThreadForUser($credentials1, [$credentials1, $credentials2, $credentials3]);
$this->tester->assertCount(3, $thread->mentions);
$app = $this->tester->createApp(
$credentials1,
'delete',
'/blubber-threads/{id}/relationships/mentions',
Mentions::class);
$requestBuilder = $this->tester->createRequestBuilder($credentials1);
$requestBuilder->setUri('/blubber-threads/'.$thread->id.'/relationships/mentions')
->delete()
->setJsonApiBody($this->prepareValidBody([$credentials1]));
$response = $this->tester->sendMockRequest($app, $requestBuilder->getRequest());
$this->tester->assertSame(204, $response->getStatusCode());
$this->tester->assertCount(2, \BlubberThread::find($thread->id)->mentions);
}
private function prepareValidBody(array $users)
{
return [
'data' => array_map(
function ($user) {
return [
'type' => UsersSchema::TYPE,
'id' => $user['id'],
];
},
$users
),
];
}
}
|