Skip to content

Commit dedc5ec

Browse files
committed
test: Add tests for Listeners
Signed-off-by: provokateurin <[email protected]>
1 parent 8f0bccd commit dedc5ec

8 files changed

+377
-1
lines changed

.github/workflows/phpunit-mysql.yml

+12
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,13 @@ jobs:
9292
repository: nextcloud/server
9393
ref: ${{ matrix.server-versions }}
9494

95+
- name: Checkout Circles
96+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
97+
with:
98+
repository: nextcloud/circles
99+
ref: master
100+
path: apps/circles
101+
95102
- name: Checkout app
96103
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
97104
with:
@@ -113,6 +120,10 @@ jobs:
113120
echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
114121
echo 'SELECT @@sql_mode;' | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
115122
123+
- name: Set up Circles dependencies
124+
working-directory: apps/circles
125+
run: composer i
126+
116127
- name: Check composer file existence
117128
id: check_composer
118129
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
@@ -131,6 +142,7 @@ jobs:
131142
run: |
132143
mkdir data
133144
./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
145+
./occ app:enable --force circles
134146
./occ app:enable --force ${{ env.APP_NAME }}
135147
136148
- name: Check PHPUnit script is defined

.github/workflows/phpunit-oci.yml

+12
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ jobs:
105105
repository: nextcloud/server
106106
ref: ${{ matrix.server-versions }}
107107

108+
- name: Checkout Circles
109+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
110+
with:
111+
repository: nextcloud/circles
112+
ref: master
113+
path: apps/circles
114+
108115
- name: Checkout app
109116
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
110117
with:
@@ -121,6 +128,10 @@ jobs:
121128
env:
122129
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
123130

131+
- name: Set up Circles dependencies
132+
working-directory: apps/circles
133+
run: composer i
134+
124135
- name: Check composer file existence
125136
id: check_composer
126137
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
@@ -139,6 +150,7 @@ jobs:
139150
run: |
140151
mkdir data
141152
./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=autotest --database-pass=owncloud --admin-user admin --admin-pass admin
153+
./occ app:enable --force circles
142154
./occ app:enable --force ${{ env.APP_NAME }}
143155
144156
- name: Check PHPUnit script is defined

.github/workflows/phpunit-pgsql.yml

+12
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,13 @@ jobs:
9595
repository: nextcloud/server
9696
ref: ${{ matrix.server-versions }}
9797

98+
- name: Checkout Circles
99+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
100+
with:
101+
repository: nextcloud/circles
102+
ref: master
103+
path: apps/circles
104+
98105
- name: Checkout app
99106
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
100107
with:
@@ -111,6 +118,10 @@ jobs:
111118
env:
112119
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
113120

121+
- name: Set up Circles dependencies
122+
working-directory: apps/circles
123+
run: composer i
124+
114125
- name: Check composer file existence
115126
id: check_composer
116127
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
@@ -129,6 +140,7 @@ jobs:
129140
run: |
130141
mkdir data
131142
./occ maintenance:install --verbose --database=pgsql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
143+
./occ app:enable --force circles
132144
./occ app:enable --force ${{ env.APP_NAME }}
133145
134146
- name: Check PHPUnit script is defined

.github/workflows/phpunit-sqlite.yml

+12
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ jobs:
8484
repository: nextcloud/server
8585
ref: ${{ matrix.server-versions }}
8686

87+
- name: Checkout Circles
88+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
89+
with:
90+
repository: nextcloud/circles
91+
ref: master
92+
path: apps/circles
93+
8794
- name: Checkout app
8895
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
8996
with:
@@ -100,6 +107,10 @@ jobs:
100107
env:
101108
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
102109

110+
- name: Set up Circles dependencies
111+
working-directory: apps/circles
112+
run: composer i
113+
103114
- name: Check composer file existence
104115
id: check_composer
105116
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
@@ -118,6 +129,7 @@ jobs:
118129
run: |
119130
mkdir data
120131
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
132+
./occ app:enable --force circles
121133
./occ app:enable --force ${{ env.APP_NAME }}
122134
123135
- name: Check PHPUnit script is defined
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace OCA\GroupFolders\Tests\Listeners;
11+
12+
use OCA\Circles\Events\CircleDestroyedEvent;
13+
use OCA\Circles\Model\Circle;
14+
use OCA\GroupFolders\Folder\FolderManager;
15+
use OCA\GroupFolders\Listeners\CircleDestroyedEventListener;
16+
use OCP\EventDispatcher\Event;
17+
use PHPUnit\Framework\MockObject\MockObject;
18+
use Test\TestCase;
19+
20+
class CircleDestroyedEventListenerTest extends TestCase {
21+
private FolderManager&MockObject $folderManager;
22+
private CircleDestroyedEventListener $listener;
23+
24+
protected function setUp(): void {
25+
parent::setUp();
26+
27+
$this->folderManager = $this->createMock(FolderManager::class);
28+
29+
$this->listener = new CircleDestroyedEventListener($this->folderManager);
30+
}
31+
32+
public function testHandleInvalid(): void {
33+
$event = $this->createMock(Event::class);
34+
35+
$this->folderManager
36+
->expects($this->never())
37+
->method('deleteCircle');
38+
39+
/** @psalm-suppress InvalidArgument on purpose */
40+
$this->listener->handle($event);
41+
}
42+
43+
public function testHandle(): void {
44+
$circle = $this->createMock(Circle::class);
45+
$circle
46+
->expects($this->once())
47+
->method('getSingleId')
48+
->willReturn('123');
49+
50+
$event = $this->createMock(CircleDestroyedEvent::class);
51+
$event
52+
->expects($this->once())
53+
->method('getCircle')
54+
->willReturn($circle);
55+
56+
$this->folderManager
57+
->expects($this->once())
58+
->method('deleteCircle')
59+
->with('123');
60+
61+
$this->listener->handle($event);
62+
}
63+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace OCA\GroupFolders\Tests\Listeners;
11+
12+
use OCA\Files\Event\LoadAdditionalScriptsEvent;
13+
use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent;
14+
use OCA\GroupFolders\Listeners\LoadAdditionalScriptsListener;
15+
use OCP\EventDispatcher\Event;
16+
use OCP\Util;
17+
use Test\TestCase;
18+
19+
class LoadAdditionalScriptsListenerTest extends TestCase {
20+
private LoadAdditionalScriptsListener $listener;
21+
22+
protected function setUp(): void {
23+
parent::setUp();
24+
25+
$this->listener = new LoadAdditionalScriptsListener();
26+
}
27+
28+
public static function handleProvider(): array {
29+
$expectedScripts = [
30+
'groupfolders/l10n/en',
31+
'groupfolders/js/groupfolders-init',
32+
'groupfolders/js/groupfolders-files',
33+
];
34+
return [
35+
[Event::class, []],
36+
[LoadAdditionalScriptsEvent::class, $expectedScripts],
37+
[BeforeTemplateRenderedEvent::class, $expectedScripts],
38+
];
39+
}
40+
41+
/**
42+
* @dataProvider handleProvider
43+
* @param class-string<LoadAdditionalScriptsEvent|BeforeTemplateRenderedEvent> $class
44+
*/
45+
public function testHandle(string $class, array $expectedScripts): void {
46+
$event = $this->createMock($class);
47+
48+
$this->listener->handle($event);
49+
$this->assertEquals($expectedScripts, array_values(Util::getScripts()));
50+
}
51+
}

0 commit comments

Comments
 (0)