Skip to content

Commit 8db65bf

Browse files
committed
Introduce Fixure-Class and adapt tests accordingly
1 parent 5299745 commit 8db65bf

23 files changed

+532
-395
lines changed

src/Util/EnvLoader.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
/*
4+
* BigBlueButton open source conferencing system - https://www.bigbluebutton.org/.
5+
*
6+
* Copyright (c) 2016-2024 BigBlueButton Inc. and by respective authors (see below).
7+
*
8+
* This program is free software; you can redistribute it and/or modify it under the
9+
* terms of the GNU Lesser General Public License as published by the Free Software
10+
* Foundation; either version 3.0 of the License, or (at your option) any later
11+
* version.
12+
*
13+
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
14+
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
15+
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU Lesser General Public License along
18+
* with BigBlueButton; if not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
namespace BigBlueButton\Util;
22+
23+
use Dotenv\Dotenv;
24+
25+
/**
26+
* @see https://github.com/vlucas/phpdotenv
27+
*/
28+
class EnvLoader
29+
{
30+
public static function loadEnvironmentVariables(): void
31+
{
32+
$envPath = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR;
33+
$envFileMain = '.env';
34+
$envFileLocal = '.env.local';
35+
36+
if (file_exists($envPath . $envFileLocal)) {
37+
$envFile = $envFileLocal;
38+
} elseif (file_exists($envPath . $envFileMain)) {
39+
$envFile = $envFileMain;
40+
} else {
41+
$envPath = realpath($envPath);
42+
throw new \RuntimeException("Environment file ('{$envFileMain}' nor '{$envFileLocal}') not found in directory '{$envPath}'!");
43+
}
44+
45+
$dotenv = Dotenv::createUnsafeImmutable($envPath, $envFile);
46+
$dotenv->load();
47+
$dotenv->required(['BBB_SECRET', 'BBB_SERVER_BASE_URL']);
48+
}
49+
}

src/Util/Fixtures.php

Lines changed: 363 additions & 0 deletions
Large diffs are not rendered by default.

tests/BigBlueButtonTest.php

Lines changed: 28 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@
2828
use BigBlueButton\Parameters\GetRecordingsParameters;
2929
use BigBlueButton\Parameters\IsMeetingRunningParameters;
3030
use BigBlueButton\Parameters\PublishRecordingsParameters;
31+
use BigBlueButton\Util\EnvLoader;
32+
use BigBlueButton\Util\Fixtures;
3133
use BigBlueButton\Util\ParamsIterator;
32-
use Dotenv\Dotenv;
3334

3435
/**
3536
* Class BigBlueButtonTest.
@@ -47,7 +48,7 @@ public function setUp(): void
4748
{
4849
parent::setUp();
4950

50-
$this->loadEnvironmentVariables();
51+
EnvLoader::loadEnvironmentVariables();
5152

5253
$this->bbb = new BigBlueButton();
5354
}
@@ -88,8 +89,8 @@ public function testApiVersion(): void
8889
*/
8990
public function testCreateMeetingUrl(): void
9091
{
91-
$params = $this->generateCreateParams();
92-
$url = $this->bbb->getCreateMeetingUrl($this->getCreateMock($params));
92+
$params = Fixtures::generateCreateParams();
93+
$url = $this->bbb->getCreateMeetingUrl(Fixtures::getCreateMeetingParametersMock($params));
9394

9495
$paramsIterator = new ParamsIterator();
9596
$paramsIterator->iterate($params, $url);
@@ -100,8 +101,9 @@ public function testCreateMeetingUrl(): void
100101
*/
101102
public function testCreateMeeting(): void
102103
{
103-
$params = $this->generateCreateParams();
104-
$result = $this->bbb->createMeeting($this->getCreateMock($params));
104+
$createMeetingParams = Fixtures::getCreateMeetingParametersMock(Fixtures::generateCreateParams());
105+
106+
$result = $this->bbb->createMeeting($createMeetingParams);
105107

106108
$this->assertEquals('SUCCESS', $result->getReturnCode());
107109
$this->assertTrue($result->success());
@@ -112,7 +114,7 @@ public function testCreateMeeting(): void
112114
*/
113115
public function testCreateMeetingWithDocumentUrl(): void
114116
{
115-
$params = $this->getCreateMock($this->generateCreateParams());
117+
$params = Fixtures::getCreateMeetingParametersMock(Fixtures::generateCreateParams());
116118
$params->addPresentation('https://picsum.photos/3840/2160/?random');
117119

118120
$result = $this->bbb->createMeeting($params);
@@ -127,7 +129,7 @@ public function testCreateMeetingWithDocumentUrl(): void
127129
*/
128130
public function testCreateMeetingWithDocumentUrlAndFileName(): void
129131
{
130-
$params = $this->getCreateMock($this->generateCreateParams());
132+
$params = Fixtures::getCreateMeetingParametersMock(Fixtures::generateCreateParams());
131133
$params->addPresentation('https://picsum.photos/3840/2160/?random', null, 'placeholder.png');
132134

133135
$result = $this->bbb->createMeeting($params);
@@ -142,7 +144,7 @@ public function testCreateMeetingWithDocumentUrlAndFileName(): void
142144
*/
143145
public function testCreateMeetingWithDocumentEmbedded(): void
144146
{
145-
$params = $this->getCreateMock($this->generateCreateParams());
147+
$params = Fixtures::getCreateMeetingParametersMock(Fixtures::generateCreateParams());
146148

147149
$params->addPresentation('bbb_logo.png', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'fixtures' . DIRECTORY_SEPARATOR . 'bbb_logo.png'));
148150

@@ -158,7 +160,7 @@ public function testCreateMeetingWithDocumentEmbedded(): void
158160
*/
159161
public function testCreateMeetingWithMultiDocument(): void
160162
{
161-
$params = $this->getCreateMock($this->generateCreateParams());
163+
$params = Fixtures::getCreateMeetingParametersMock(Fixtures::generateCreateParams());
162164
$params->addPresentation('https://picsum.photos/3840/2160/?random', null, 'presentation.png');
163165
$params->addPresentation('logo.png', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'fixtures' . DIRECTORY_SEPARATOR . 'bbb_logo.png'));
164166

@@ -176,9 +178,9 @@ public function testCreateMeetingWithMultiDocument(): void
176178
*/
177179
public function testCreateJoinMeetingUrl(): void
178180
{
179-
$joinMeetingParams = $this->generateJoinMeetingParams();
181+
$joinMeetingParams = Fixtures::generateJoinMeetingParams();
180182

181-
$joinMeetingMock = $this->getJoinMeetingMock($joinMeetingParams);
183+
$joinMeetingMock = Fixtures::getJoinMeetingMock($joinMeetingParams);
182184

183185
$url = $this->bbb->getJoinMeetingURL($joinMeetingMock);
184186
$paramsIterator = new ParamsIterator();
@@ -195,13 +197,15 @@ public function testJoinMeeting(): void
195197
// create a meeting that can be joined
196198
$createMeetingParameters = new CreateMeetingParameters($this->faker->uuid(), $this->faker->word());
197199
$createMeetingResponse = $this->bbb->createMeeting($createMeetingParameters);
200+
$this->assertEquals('SUCCESS', $createMeetingResponse->getReturnCode());
201+
$this->assertTrue($createMeetingResponse->success());
198202

199203
// prepare to join the meeting
200-
$joinMeetingParams = $this->generateJoinMeetingParams();
201-
$joinMeetingMock = $this->getJoinMeetingMock($joinMeetingParams);
202-
$joinMeetingMock->setRedirect(false);
204+
$joinMeetingParams = Fixtures::generateJoinMeetingParams();
205+
$joinMeetingMock = Fixtures::getJoinMeetingMock($joinMeetingParams);
203206

204207
// adapt to join the above created meeting
208+
$joinMeetingMock->setRedirect(false);
205209
$joinMeetingMock->setMeetingId($createMeetingResponse->getMeetingId());
206210
$joinMeetingMock->setCreationTime($createMeetingResponse->getCreationTime());
207211

@@ -228,8 +232,8 @@ public function testJoinMeeting(): void
228232
*/
229233
public function testCreateEndMeetingUrl(): void
230234
{
231-
$params = $this->generateEndMeetingParams();
232-
$url = $this->bbb->getEndMeetingURL($this->getEndMeetingMock($params));
235+
$params = Fixtures::generateEndMeetingParams();
236+
$url = $this->bbb->getEndMeetingURL(Fixtures::getEndMeetingMock($params));
233237
$paramsIterator = new ParamsIterator();
234238
$paramsIterator->iterate($params, $url);
235239
}
@@ -246,13 +250,13 @@ public function testEndMeeting(): void
246250

247251
public function testEndNonExistingMeeting(): void
248252
{
249-
$params = $this->generateEndMeetingParams();
250-
$result = $this->bbb->endMeeting($this->getEndMeetingMock($params));
253+
$params = Fixtures::generateEndMeetingParams();
254+
$result = $this->bbb->endMeeting(Fixtures::getEndMeetingMock($params));
251255
$this->assertEquals('FAILED', $result->getReturnCode());
252256
$this->assertTrue($result->failed());
253257
}
254258

255-
// Is Meeting Running
259+
// Is Meeting Running / Existing
256260

257261
public function testIsMeetingRunning(): void
258262
{
@@ -340,39 +344,17 @@ public function testDeleteRecordings(): void
340344

341345
public function testUpdateRecordingsUrl(): void
342346
{
343-
$params = $this->generateUpdateRecordingsParams();
344-
$url = $this->bbb->getUpdateRecordingsUrl($this->getUpdateRecordingsParamsMock($params));
347+
$params = Fixtures::generateUpdateRecordingsParams();
348+
$url = $this->bbb->getUpdateRecordingsUrl(Fixtures::getUpdateRecordingsParamsMock($params));
345349
$paramsIterator = new ParamsIterator();
346350
$paramsIterator->iterate($params, $url);
347351
}
348352

349353
public function testUpdateRecordings(): void
350354
{
351-
$params = $this->generateUpdateRecordingsParams();
352-
$result = $this->bbb->updateRecordings($this->getUpdateRecordingsParamsMock($params));
355+
$params = Fixtures::generateUpdateRecordingsParams();
356+
$result = $this->bbb->updateRecordings(Fixtures::getUpdateRecordingsParamsMock($params));
353357
$this->assertEquals('FAILED', $result->getReturnCode());
354358
$this->assertTrue($result->failed());
355359
}
356-
357-
/**
358-
* @see https://github.com/vlucas/phpdotenv
359-
*/
360-
private function loadEnvironmentVariables(): void
361-
{
362-
$envPath = __DIR__ . '/..';
363-
$envFileMain = '.env';
364-
$envFileLocal = '.env.local';
365-
366-
if (file_exists("{$envPath}/{$envFileLocal}")) {
367-
$envFile = $envFileLocal;
368-
} elseif (file_exists("{$envPath}/{$envFileMain}")) {
369-
$envFile = $envFileMain;
370-
} else {
371-
throw new \RuntimeException("Environment file ('{$envFileMain}' nor '{$envFileLocal}') not found!");
372-
}
373-
374-
$dotenv = Dotenv::createUnsafeImmutable($envPath, $envFile);
375-
$dotenv->load();
376-
$dotenv->required(['BBB_SECRET', 'BBB_SERVER_BASE_URL']);
377-
}
378360
}

tests/Parameters/CreateMeetingParametersTest.php

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
namespace BigBlueButton\Parameters;
2222

2323
use BigBlueButton\TestCase;
24+
use BigBlueButton\Util\Fixtures;
2425

2526
/**
2627
* Class CreateMeetingParametersTest.
@@ -33,9 +34,9 @@ class CreateMeetingParametersTest extends TestCase
3334
{
3435
public function testCreateMeetingParameters(): void
3536
{
36-
$params = $this->generateCreateParams();
37+
$params = Fixtures::generateCreateParams();
3738

38-
$createMeetingParams = $this->getCreateMock($params);
39+
$createMeetingParams = Fixtures::getCreateMeetingParametersMock($params);
3940

4041
$this->assertEquals($params['meetingName'], $createMeetingParams->getMeetingName());
4142
$this->assertEquals($params['meetingId'], $createMeetingParams->getMeetingId());
@@ -115,8 +116,8 @@ public function testCreateMeetingParameters(): void
115116

116117
public function testCreateBreakoutMeeting(): void
117118
{
118-
$params = $this->generateBreakoutCreateParams($this->generateCreateParams());
119-
$createBreakoutMeetingParams = $this->getBreakoutCreateMock($params);
119+
$params = Fixtures::generateBreakoutCreateParams(Fixtures::generateCreateParams());
120+
$createBreakoutMeetingParams = Fixtures::getBreakoutCreateMock($params);
120121
$this->assertEquals($params['isBreakout'], $createBreakoutMeetingParams->isBreakout());
121122
$this->assertEquals($params['parentMeetingId'], $createBreakoutMeetingParams->getParentMeetingId());
122123
$this->assertEquals($params['sequence'], $createBreakoutMeetingParams->getSequence());
@@ -132,24 +133,21 @@ public function testCreateBreakoutMeeting(): void
132133

133134
public function testGetPresentationsAsXMLWithUrl(): void
134135
{
135-
$params = $this->generateCreateParams();
136-
$createMeetingParams = $this->getCreateMock($params);
136+
$createMeetingParams = Fixtures::getCreateMeetingParametersMock(Fixtures::generateCreateParams());
137137
$createMeetingParams->addPresentation('http://test-install.blindsidenetworks.com/default.pdf');
138138
$this->assertXmlStringEqualsXmlFile(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'fixtures' . DIRECTORY_SEPARATOR . 'presentation_with_url.xml', $createMeetingParams->getPresentationsAsXML());
139139
}
140140

141141
public function testGetPresentationsAsXMLWithUrlAndFilename(): void
142142
{
143-
$params = $this->generateCreateParams();
144-
$createMeetingParams = $this->getCreateMock($params);
143+
$createMeetingParams = Fixtures::getCreateMeetingParametersMock(Fixtures::generateCreateParams());
145144
$createMeetingParams->addPresentation('http://test-install.blindsidenetworks.com/default.pdf', null, 'presentation.pdf');
146145
$this->assertXmlStringEqualsXmlFile(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'fixtures' . DIRECTORY_SEPARATOR . 'presentation_with_filename.xml', $createMeetingParams->getPresentationsAsXML());
147146
}
148147

149148
public function testGetPresentationsAsXMLWithFile(): void
150149
{
151-
$params = $this->generateCreateParams();
152-
$createMeetingParams = $this->getCreateMock($params);
150+
$createMeetingParams = Fixtures::getCreateMeetingParametersMock(Fixtures::generateCreateParams());
153151
$createMeetingParams->addPresentation('bbb_logo.png', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'fixtures' . DIRECTORY_SEPARATOR . 'bbb_logo.png'));
154152
$this->assertXmlStringEqualsXmlFile(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'fixtures' . DIRECTORY_SEPARATOR . 'presentation_with_embedded_file.xml', $createMeetingParams->getPresentationsAsXML());
155153
}

tests/Parameters/JoinMeetingParametersTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use BigBlueButton\Enum\MeetingLayout;
2424
use BigBlueButton\Enum\Role;
2525
use BigBlueButton\TestCase;
26+
use BigBlueButton\Util\Fixtures;
2627

2728
/**
2829
* @internal
@@ -33,8 +34,8 @@ class JoinMeetingParametersTest extends TestCase
3334
{
3435
public function testJoinMeetingParameters(): void
3536
{
36-
$params = $this->generateJoinMeetingParams();
37-
$joinMeetingParams = $this->getJoinMeetingMock($params);
37+
$params = Fixtures::generateJoinMeetingParams();
38+
$joinMeetingParams = Fixtures::getJoinMeetingMock($params);
3839

3940
$this->assertEquals($params['meetingId'], $joinMeetingParams->getMeetingId());
4041
$this->assertEquals($params['userName'], $joinMeetingParams->getUsername());

tests/Parameters/UpdateRecordingsParametersTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
namespace BigBlueButton\Parameters;
2222

2323
use BigBlueButton\TestCase;
24+
use BigBlueButton\Util\Fixtures;
2425

2526
/**
2627
* @internal
@@ -31,8 +32,8 @@ class UpdateRecordingsParametersTest extends TestCase
3132
{
3233
public function testUpdateRecordingsParameters(): void
3334
{
34-
$params = $this->generateUpdateRecordingsParams();
35-
$updateRecordingsParams = $this->getUpdateRecordingsParamsMock($params);
35+
$params = Fixtures::generateUpdateRecordingsParams();
36+
$updateRecordingsParams = Fixtures::getUpdateRecordingsParamsMock($params);
3637

3738
$this->assertEquals($params['recordingId'], $updateRecordingsParams->getRecordingId());
3839
$this->assertEquals($params['meta_presenter'], $updateRecordingsParams->getMeta('presenter'));

tests/Responses/ApiVersionResponseTest.php

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,35 +21,36 @@
2121
namespace BigBlueButton\Responses;
2222

2323
use BigBlueButton\TestCase;
24+
use BigBlueButton\Util\Fixtures;
2425

2526
/**
2627
* @internal
27-
*
28-
* @coversNothing
2928
*/
3029
class ApiVersionResponseTest extends TestCase
3130
{
32-
private ApiVersionResponse $version;
31+
private ApiVersionResponse $apiVersionResponse;
3332

3433
public function setUp(): void
3534
{
3635
parent::setUp();
3736

38-
$xml = $this->loadXmlFile(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'fixtures' . DIRECTORY_SEPARATOR . 'api_version.xml');
37+
$fixtures = new Fixtures();
38+
39+
$xml = $fixtures->fromXmlFile('api_version.xml');
3940

40-
$this->version = new ApiVersionResponse($xml);
41+
$this->apiVersionResponse = new ApiVersionResponse($xml);
4142
}
4243

4344
public function testApiVersionResponseContent(): void
4445
{
45-
$this->assertEquals('SUCCESS', $this->version->getReturnCode());
46-
$this->assertEquals('2.0', $this->version->getVersion());
47-
$this->assertEquals('2.0', $this->version->getApiVersion());
48-
$this->assertEquals('2.4-rc-7', $this->version->getBbbVersion());
46+
$this->assertEquals('SUCCESS', $this->apiVersionResponse->getReturnCode());
47+
$this->assertEquals('2.0', $this->apiVersionResponse->getVersion());
48+
$this->assertEquals('2.0', $this->apiVersionResponse->getApiVersion());
49+
$this->assertEquals('2.4-rc-7', $this->apiVersionResponse->getBbbVersion());
4950
}
5051

5152
public function testApiVersionResponseTypes(): void
5253
{
53-
$this->assertEachGetterValueIsString($this->version, ['getReturnCode', 'getVersion', 'getApiVersion', 'getBbbVersion']);
54+
$this->assertEachGetterValueIsString($this->apiVersionResponse, ['getReturnCode', 'getVersion', 'getApiVersion', 'getBbbVersion']);
5455
}
5556
}

tests/Responses/CreateMeetingResponseTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
namespace BigBlueButton\Responses;
2222

2323
use BigBlueButton\TestCase;
24+
use BigBlueButton\Util\Fixtures;
2425

2526
/**
2627
* @internal
@@ -33,7 +34,9 @@ public function setUp(): void
3334
{
3435
parent::setUp();
3536

36-
$xml = $this->loadXmlFile(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'fixtures' . DIRECTORY_SEPARATOR . 'create_meeting.xml');
37+
$fixtures = new Fixtures();
38+
39+
$xml = $fixtures->fromXmlFile('create_meeting.xml');
3740

3841
$this->meeting = new CreateMeetingResponse($xml);
3942
}

0 commit comments

Comments
 (0)