Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Feature/Controller/OpenViduTest.php
Show First 20 Lines • Show All 326 Lines • ▼ Show 20 Lines | public function testJoinRequests(): void | ||||
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", $post); | $response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", $post); | ||||
$response->assertStatus(200); | $response->assertStatus(200); | ||||
$json = $response->json(); | $json = $response->json(); | ||||
$this->assertSame(Room::ROLE_PUBLISHER, $json['role']); | $this->assertSame(Room::ROLE_PUBLISHER, $json['role']); | ||||
$this->assertTrue(strpos($json['token'], 'wss://') === 0); | $this->assertTrue(strpos($json['token'], 'wss://') === 0); | ||||
// TODO: Test a scenario where both password and lock are enabled | // TODO: Test a scenario where both password and lock are enabled | ||||
// TODO: Test accepting/denying as a non-owner moderator | |||||
} | } | ||||
/** | /** | ||||
* Test joining the room | * Test joining the room | ||||
* | * | ||||
* @group openvidu | * @group openvidu | ||||
* @depends testJoinRoom | * @depends testJoinRoom | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 128 Lines • ▼ Show 20 Lines | public function testDismissConnection(): void | ||||
// Expected success | // Expected success | ||||
$response = $this->actingAs($john)->post("api/v4/openvidu/rooms/{$room->name}/connections/{$conn_id}/dismiss"); | $response = $this->actingAs($john)->post("api/v4/openvidu/rooms/{$room->name}/connections/{$conn_id}/dismiss"); | ||||
$response->assertStatus(200); | $response->assertStatus(200); | ||||
$json = $response->json(); | $json = $response->json(); | ||||
$this->assertSame('success', $json['status']); | $this->assertSame('success', $json['status']); | ||||
$this->assertNull($room->getOVConnection($conn_id)); | $this->assertNull($room->getOVConnection($conn_id)); | ||||
// Test acting as a moderator | |||||
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", ['init' => 1]); | |||||
$response->assertStatus(200); | |||||
$json = $response->json(); | |||||
$conn_id = $json['connectionId']; | |||||
// Note: We're acting as Jack because there's no easy way to unset a 'actingAs' user | |||||
// throughout the test | |||||
$response = $this->actingAs($jack) | |||||
->withHeaders([OpenViduController::AUTH_HEADER => $this->getModeratorToken($room)]) | |||||
->post("api/v4/openvidu/rooms/{$room->name}/connections/{$conn_id}/dismiss"); | |||||
$response->assertStatus(200); | |||||
} | } | ||||
/** | /** | ||||
* Test configuring the room (session) | * Test configuring the room (session) | ||||
* | * | ||||
* @group openvidu | * @group openvidu | ||||
*/ | */ | ||||
public function testSetRoomConfig(): void | public function testSetRoomConfig(): void | ||||
▲ Show 20 Lines • Show All 84 Lines • ▼ Show 20 Lines | public function testUpdateConnection(): void | ||||
$this->assignMeetEntitlement($john); | $this->assignMeetEntitlement($john); | ||||
// First we create the session | // First we create the session | ||||
$response = $this->actingAs($john)->post("api/v4/openvidu/rooms/{$room->name}", ['init' => 1]); | $response = $this->actingAs($john)->post("api/v4/openvidu/rooms/{$room->name}", ['init' => 1]); | ||||
$response->assertStatus(200); | $response->assertStatus(200); | ||||
$json = $response->json(); | $json = $response->json(); | ||||
$owner_conn_id = $json['connectionId']; | |||||
// And the other user connection | // And the other user connection | ||||
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", ['init' => 1]); | $response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", ['init' => 1]); | ||||
$response->assertStatus(200); | $response->assertStatus(200); | ||||
$json = $response->json(); | $json = $response->json(); | ||||
$conn_id = $json['connectionId']; | $conn_id = $json['connectionId']; | ||||
$auth_token = $json['authToken']; | |||||
$room->refresh(); | $room->refresh(); | ||||
$conn_data = $room->getOVConnection($conn_id); | $conn_data = $room->getOVConnection($conn_id); | ||||
$this->assertSame($conn_id, $conn_data['connectionId']); | $this->assertSame($conn_id, $conn_data['connectionId']); | ||||
// Non-existing room name | // Non-existing room name | ||||
$response = $this->actingAs($john)->put("api/v4/openvidu/rooms/non-existing/connections/{$conn_id}", []); | $response = $this->actingAs($john)->put("api/v4/openvidu/rooms/non-existing/connections/{$conn_id}", []); | ||||
$response->assertStatus(404); | $response->assertStatus(404); | ||||
Show All 16 Lines | public function testUpdateConnection(): void | ||||
$post = ['role' => Room::ROLE_PUBLISHER | Room::ROLE_MODERATOR]; | $post = ['role' => Room::ROLE_PUBLISHER | Room::ROLE_MODERATOR]; | ||||
$response = $this->actingAs($john)->put("api/v4/openvidu/rooms/{$room->name}/connections/{$conn_id}", $post); | $response = $this->actingAs($john)->put("api/v4/openvidu/rooms/{$room->name}/connections/{$conn_id}", $post); | ||||
$response->assertStatus(200); | $response->assertStatus(200); | ||||
$json = $response->json(); | $json = $response->json(); | ||||
$this->assertSame('success', $json['status']); | $this->assertSame('success', $json['status']); | ||||
$this->assertSame($post['role'], Connection::find($conn_id)->role); | $this->assertSame($post['role'], Connection::find($conn_id)->role); | ||||
// Access as moderator | |||||
// Note: We're acting as Jack because there's no easy way to unset a 'actingAs' user | |||||
// throughout the test | |||||
$token = $this->getModeratorToken($room); | |||||
$post = ['role' => Room::ROLE_PUBLISHER]; | |||||
$response = $this->actingAs($jack)->withHeaders([OpenViduController::AUTH_HEADER => $token]) | |||||
->put("api/v4/openvidu/rooms/{$room->name}/connections/{$conn_id}", $post); | |||||
$response->assertStatus(200); | |||||
$this->assertSame('success', $json['status']); | |||||
$this->assertSame($post['role'], Connection::find($conn_id)->role); | |||||
// Assert that it's not possible to add/remove the 'owner' role | |||||
$post = ['role' => Room::ROLE_PUBLISHER | Room::ROLE_OWNER]; | |||||
$response = $this->actingAs($jack)->withHeaders([OpenViduController::AUTH_HEADER => $token]) | |||||
->put("api/v4/openvidu/rooms/{$room->name}/connections/{$conn_id}", $post); | |||||
$response->assertStatus(403); | |||||
$post = ['role' => Room::ROLE_PUBLISHER]; | |||||
$response = $this->actingAs($jack)->withHeaders([OpenViduController::AUTH_HEADER => $token]) | |||||
->put("api/v4/openvidu/rooms/{$room->name}/connections/{$owner_conn_id}", $post); | |||||
$response->assertStatus(403); | |||||
// Assert that removing a 'moderator' role from the owner is not possible | |||||
$post = ['role' => Room::ROLE_PUBLISHER | Room::ROLE_OWNER]; | |||||
$response = $this->actingAs($jack)->withHeaders([OpenViduController::AUTH_HEADER => $token]) | |||||
->put("api/v4/openvidu/rooms/{$room->name}/connections/{$owner_conn_id}", $post); | |||||
$response->assertStatus(200); | |||||
$this->assertSame($post['role'] | Room::ROLE_MODERATOR, Connection::find($owner_conn_id)->role); | |||||
// Assert that non-moderator token does not allow access | |||||
$post = ['role' => Room::ROLE_SUBSCRIBER]; | |||||
$response = $this->actingAs($jack)->withHeaders([OpenViduController::AUTH_HEADER => $auth_token]) | |||||
->put("api/v4/openvidu/rooms/{$room->name}/connections/{$conn_id}", $post); | |||||
$response->assertStatus(403); | |||||
} | |||||
/** | |||||
* Create a moderator connection to the room session. | |||||
* | |||||
* @param \App\Room $room The room | |||||
* | |||||
* @return string The connection authentication token | |||||
*/ | |||||
private function getModeratorToken(Room $room): string | |||||
{ | |||||
$result = $room->getSessionToken(Room::ROLE_MODERATOR); | |||||
return $result['authToken']; | |||||
} | } | ||||
} | } |