Skip to content

Commit 62d7ced

Browse files
mejo-backportbot[bot]
authored andcommitted
test(phpunit): Add basic phpunit integration tests for CirclesManager
Signed-off-by: Jonas <[email protected]> [skip ci]
1 parent 344e1c5 commit 62d7ced

File tree

3 files changed

+164
-2
lines changed

3 files changed

+164
-2
lines changed

tests/unit/CirclesManagerTest.php

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
<?php
2+
/**
3+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
4+
* SPDX-License-Identifier: AGPL-3.0-or-later
5+
*/
6+
7+
namespace OCA\Circles\Tests;
8+
9+
use OCA\Circles\CirclesManager;
10+
use OCA\Circles\Model\Circle;
11+
use OCA\Circles\Model\FederatedUser;
12+
use OCA\Circles\Model\Member;
13+
use OCA\Circles\Model\Probes\DataProbe;
14+
use OCP\IGroupManager;
15+
use OCP\IUserManager;
16+
use Test\TestCase;
17+
18+
/**
19+
* @group DB
20+
*/
21+
class CirclesManagerTest extends TestCase {
22+
private CirclesManager $circlesManager;
23+
private string $userId = 'circles-testuser';
24+
private string $groupId = 'circles-testgroup';
25+
private string $circleName;
26+
27+
public function setUp(): void {
28+
parent::setUp();
29+
30+
// Random circle name
31+
$this->circleName = sha1(uniqId(mt_rand(), true));
32+
33+
// Create test user
34+
$userManager = \OC::$server->get(IUserManager::class);
35+
if (!$userManager->userExists($this->userId)) {
36+
$user = $userManager->createUser($this->userId, $this->userId);
37+
} else {
38+
$user = $userManager->get($this->userId);
39+
}
40+
41+
// Create test group and add user
42+
$groupManager = \OC::$server->get(IGroupManager::class);
43+
if (!$groupManager->groupExists($this->groupId)) {
44+
$group = $groupManager->createGroup($this->groupId);
45+
$group->addUser($user);
46+
}
47+
48+
$this->circlesManager = \OC::$server->get(CirclesManager::class);
49+
50+
}
51+
52+
// Start user session as user (default: test user)
53+
private function startSession(?string $userId = null): FederatedUser {
54+
if (!$userId) {
55+
$userId = $this->userId;
56+
}
57+
$federatedUser = $this->circlesManager->getLocalFederatedUser($userId);
58+
$this->circlesManager->startSession($federatedUser, true);
59+
return $federatedUser;
60+
}
61+
62+
public function testCreateCircle(): void {
63+
$federatedUser = $this->startSession();
64+
65+
// Created circle has properties
66+
$circle = $this->circlesManager->createCircle($this->circleName);
67+
$this->assertEquals($this->circleName, $circle->getName());
68+
$this->assertEquals($this->circleName, $circle->getDisplayName());
69+
$this->assertEquals($this->circleName, $circle->getSanitizedName());
70+
$this->assertEquals($federatedUser->getSingleId(), $circle->getOwner()->getSingleId());
71+
$this->assertEquals($federatedUser->getSingleId(), $circle->getInitiator()->getSingleId());
72+
73+
// Created circle returned by probeCircle()
74+
$circles = $this->circlesManager->probeCircles();
75+
$this->assertCount(1, array_filter($circles, function (Circle $c) { return $c->getName() === $this->circleName; }));
76+
77+
// Destroyed circle not returned by probeCircle()
78+
$this->circlesManager->destroyCircle($circle->getSingleId());
79+
$circles = $this->circlesManager->probeCircles();
80+
$this->assertCount(0, array_filter($circles, function (Circle $c) { return $c->getName() === $this->circleName; }));
81+
}
82+
83+
public function testGetCirclesWithInitiator(): void {
84+
// Create circle as user 'admin' and add test user as member
85+
$this->startSession('admin');
86+
$adminCircle = $this->circlesManager->createCircle($this->circleName);
87+
$this->circlesManager->addMember($adminCircle->getSingleId(), $this->circlesManager->getLocalFederatedUser($this->userId));
88+
89+
// Get circles as test user
90+
$federatedUser = $this->startSession();
91+
$circles = $this->circlesManager->getCircles();
92+
$circle = null;
93+
foreach ($circles as $c) {
94+
if ($c->getSingleId() === $adminCircle->getSingleId()) {
95+
$circle = $c;
96+
}
97+
}
98+
99+
// Initiator of probed circle has correct properties
100+
$this->assertEquals($federatedUser->getSingleId(), $circle->getInitiator()->getSingleId());
101+
$this->assertEquals(1, $circle->getInitiator()->getLevel());
102+
103+
// Destroy circle as user 'admin'
104+
$this->startSession('admin');
105+
$this->circlesManager->destroyCircle($adminCircle->getSingleId());
106+
}
107+
108+
public function testProbeCirclesWithInitiator(): void {
109+
// Create circle as user 'admin' and add test user as member
110+
$this->startSession('admin');
111+
$adminCircle = $this->circlesManager->createCircle($this->circleName);
112+
$this->circlesManager->addMember($adminCircle->getSingleId(), $this->circlesManager->getLocalFederatedUser($this->userId));
113+
114+
// Probe circles as test user
115+
$federatedUser = $this->startSession();
116+
$dataProbe = new DataProbe();
117+
$dataProbe->add(DataProbe::INITIATOR);
118+
$circles = $this->circlesManager->probeCircles(null, $dataProbe);
119+
$circle = null;
120+
foreach ($circles as $c) {
121+
if ($c->getSingleId() === $adminCircle->getSingleId()) {
122+
$circle = $c;
123+
}
124+
}
125+
126+
// Initiator of probed circle has correct properties
127+
$this->assertEquals($federatedUser->getSingleId(), $circle->getInitiator()->getSingleId());
128+
$this->assertEquals(1, $circle->getInitiator()->getLevel());
129+
130+
// Destroy circle as user 'admin'
131+
$this->startSession('admin');
132+
$this->circlesManager->destroyCircle($adminCircle->getSingleId());
133+
}
134+
135+
public function testProbeCirclesWithInitiatorAsGroupMember(): void {
136+
// Create circle as user 'admin' and add test group as member
137+
$this->startSession('admin');
138+
$adminCircle = $this->circlesManager->createCircle($this->circleName);
139+
$federatedGroup = $this->circlesManager->getFederatedUser($this->groupId, Member::TYPE_GROUP);
140+
$this->circlesManager->addMember($adminCircle->getSingleId(), $federatedGroup);
141+
142+
// Probe circles as test user
143+
$federatedUser = $this->startSession();
144+
$dataProbe = new DataProbe();
145+
$dataProbe->add(DataProbe::INITIATOR);
146+
$circles = $this->circlesManager->probeCircles(null, $dataProbe);
147+
$circle = null;
148+
foreach ($circles as $c) {
149+
if ($c->getSingleId() === $adminCircle->getSingleId()) {
150+
$circle = $c;
151+
}
152+
}
153+
154+
// Initiator of probed circle has correct properties
155+
$this->assertEquals($federatedGroup->getSingleId(), $circle->getInitiator()->getSingleId());
156+
$this->assertEquals(1, $circle->getInitiator()->getLevel());
157+
158+
// Destroy circle as user 'admin'
159+
$this->startSession('admin');
160+
$this->circlesManager->destroyCircle($adminCircle->getSingleId());
161+
}
162+
}

tests/unit/lib/Controller/AdminControllerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public function testCirclesList(int $limit, int $offset): void {
125125
$this->assertEquals($response, $this->adminController->circles('an-user-id', $limit, $offset));
126126
}
127127

128-
public function dataForCirclesList(): array {
128+
public static function dataForCirclesList(): array {
129129
return [
130130
[-1, 0],
131131
[1, 1]

tests/unit/lib/Controller/LocalControllerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public function testCirclesList(int $limit, int $offset): void {
134134
$this->assertEquals($response, $this->localController->circles($limit, $offset));
135135
}
136136

137-
public function dataForCirclesList(): array {
137+
public static function dataForCirclesList(): array {
138138
return [
139139
[-1, 0],
140140
[1, 1]

0 commit comments

Comments
 (0)