Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Browser/Meet/RoomSetupTest.php
Show First 20 Lines • Show All 164 Lines • ▼ Show 20 Lines | public function testTwoUsersInARoom(): void | ||||
->waitFor('@setup-status-message') | ->waitFor('@setup-status-message') | ||||
->assertSeeIn('@setup-status-message', "The room is closed. It will be open for others after you join.") | ->assertSeeIn('@setup-status-message', "The room is closed. It will be open for others after you join.") | ||||
->assertSeeIn('@setup-button', "JOIN") | ->assertSeeIn('@setup-button', "JOIN") | ||||
->type('@setup-nickname-input', 'john') | ->type('@setup-nickname-input', 'john') | ||||
// Join the room | // Join the room | ||||
->click('@setup-button') | ->click('@setup-button') | ||||
->waitFor('@session') | ->waitFor('@session') | ||||
->assertMissing('@setup-form') | ->assertMissing('@setup-form') | ||||
->whenAvailable('div.meet-video.publisher', function (Browser $browser) { | ->whenAvailable('div.meet-video.self', function (Browser $browser) { | ||||
$browser->assertVisible('video') | $browser->assertVisible('video') | ||||
->assertSeeIn('.nickname', 'john') | ->assertSeeIn('.meet-nickname', 'john') | ||||
->assertVisible('.controls button.link-fullscreen') | ->assertVisible('.controls button.link-fullscreen') | ||||
->assertMissing('.controls button.link-audio') | ->assertMissing('.controls button.link-audio') | ||||
->assertMissing('.status .status-audio') | ->assertMissing('.status .status-audio') | ||||
->assertMissing('.status .status-video'); | ->assertMissing('.status .status-video'); | ||||
}) | }) | ||||
->within(new Menu(), function ($browser) { | ->within(new Menu(), function ($browser) { | ||||
$browser->assertMenuItems(['explore', 'blog', 'support', 'dashboard', 'logout']); | $browser->assertMenuItems(['explore', 'blog', 'support', 'dashboard', 'logout']); | ||||
}); | }); | ||||
if ($browser->isDesktop()) { | if ($browser->isDesktop()) { | ||||
$browser->within(new Menu('footer'), function ($browser) { | $browser->within(new Menu('footer'), function ($browser) { | ||||
$browser->assertMenuItems(['explore', 'blog', 'support', 'tos', 'dashboard', 'logout']); | $browser->assertMenuItems(['explore', 'blog', 'support', 'tos', 'dashboard', 'logout']); | ||||
}); | }); | ||||
} | } | ||||
// After the owner "opened the room" guest should be able to join | // After the owner "opened the room" guest should be able to join | ||||
$guest->waitUntilMissing('@setup-status-message', 10) | $guest->waitUntilMissing('@setup-status-message', 10) | ||||
->assertSeeIn('@setup-button', "JOIN") | ->assertSeeIn('@setup-button', "JOIN") | ||||
// Join the room, disable cam/mic | // Join the room, disable cam/mic | ||||
->select('@setup-mic-select', '') | ->select('@setup-mic-select', '') | ||||
->select('@setup-cam-select', '') | //->select('@setup-cam-select', '') | ||||
->click('@setup-button') | ->click('@setup-button') | ||||
->waitFor('@session') | ->waitFor('@session') | ||||
->assertMissing('@setup-form') | ->assertMissing('@setup-form') | ||||
->whenAvailable('div.meet-video.publisher', function (Browser $browser) { | ->whenAvailable('div.meet-video.self', function (Browser $browser) { | ||||
$browser->assertVisible('video') | $browser->assertVisible('video') | ||||
->assertVisible('.nickname') | ->assertVisible('.meet-nickname') | ||||
->assertVisible('.controls button.link-fullscreen') | ->assertVisible('.controls button.link-fullscreen') | ||||
->assertMissing('.controls button.link-audio') | ->assertMissing('.controls button.link-audio') | ||||
->assertVisible('.status .status-audio') | ->assertVisible('.status .status-audio') | ||||
->assertVisible('.status .status-video'); | ->assertMissing('.status .status-video'); | ||||
}) | }) | ||||
->whenAvailable('div.meet-video:not(.publisher)', function (Browser $browser) { | ->whenAvailable('div.meet-video:not(.self)', function (Browser $browser) { | ||||
$browser->assertVisible('video') | $browser->assertVisible('video') | ||||
->assertSeeIn('.nickname', 'john') | ->assertSeeIn('.meet-nickname', 'john') | ||||
->assertVisible('.controls button.link-fullscreen') | ->assertVisible('.controls button.link-fullscreen') | ||||
->assertVisible('.controls button.link-audio') | ->assertVisible('.controls button.link-audio') | ||||
->assertMissing('.status .status-audio') | ->assertMissing('.status .status-audio') | ||||
->assertMissing('.status .status-video'); | ->assertMissing('.status .status-video'); | ||||
}) | }) | ||||
->assertElementsCount('@session div.meet-video', 2) | ->assertElementsCount('@session div.meet-video', 2) | ||||
->within(new Menu(), function ($browser) { | ->within(new Menu(), function ($browser) { | ||||
$browser->assertMenuItems(['explore', 'blog', 'support', 'signup', 'login']); | $browser->assertMenuItems(['explore', 'blog', 'support', 'signup', 'login']); | ||||
}); | }); | ||||
if ($guest->isDesktop()) { | if ($guest->isDesktop()) { | ||||
$guest->within(new Menu('footer'), function ($browser) { | $guest->within(new Menu('footer'), function ($browser) { | ||||
$browser->assertMenuItems(['explore', 'blog', 'support', 'tos', 'signup', 'login']); | $browser->assertMenuItems(['explore', 'blog', 'support', 'tos', 'signup', 'login']); | ||||
}); | }); | ||||
} | } | ||||
// Check guest's elements in the owner's window | // Check guest's elements in the owner's window | ||||
$browser->waitFor('@session div.meet-video:nth-child(2)') | $browser | ||||
->assertElementsCount('@session div.meet-video', 2) | ->whenAvailable('div.meet-video:not(.self)', function (Browser $browser) { | ||||
->whenAvailable('div.meet-video:not(.publisher)', function (Browser $browser) { | $browser->assertVisible('video') | ||||
$browser->assertMissing('video') | ->assertVisible('.meet-nickname') | ||||
->assertVisible('.nickname') | |||||
->assertVisible('.controls button.link-fullscreen') | ->assertVisible('.controls button.link-fullscreen') | ||||
->assertVisible('.controls button.link-audio') | ->assertVisible('.controls button.link-audio') | ||||
->assertVisible('.status .status-audio') | ->assertVisible('.status .status-audio') | ||||
->assertVisible('.status .status-video'); | ->assertMissing('.status .status-video'); | ||||
}); | }) | ||||
->assertElementsCount('@session div.meet-video', 2); | |||||
// Test leaving the room | // Test leaving the room | ||||
// Guest is leaving | // Guest is leaving | ||||
$guest->click('@menu button.link-logout') | $guest->click('@menu button.link-logout') | ||||
->waitForLocation('/login'); | ->waitForLocation('/login'); | ||||
// Expect the participant removed from other users windows | // Expect the participant removed from other users windows | ||||
$browser->waitUntilMissing('@session div.meet-video:nth-child(2)'); | $browser->waitUntilMissing('@session div.meet-video:not(.self)'); | ||||
// Join the room as guest again | // Join the room as guest again | ||||
$guest->visit(new RoomPage('john')) | $guest->visit(new RoomPage('john')) | ||||
->assertMissing('@toolbar') | ->assertMissing('@toolbar') | ||||
->assertMissing('@menu') | ->assertMissing('@menu') | ||||
->assertMissing('@session') | ->assertMissing('@session') | ||||
->assertMissing('@chat') | ->assertMissing('@chat') | ||||
->assertMissing('@login-form') | ->assertMissing('@login-form') | ||||
->waitFor('@setup-form') | ->waitFor('@setup-form') | ||||
->waitUntilMissing('@setup-status-message.loading') | ->waitUntilMissing('@setup-status-message.loading') | ||||
->assertMissing('@setup-status-message') | ->assertMissing('@setup-status-message') | ||||
->assertSeeIn('@setup-button', "JOIN") | ->assertSeeIn('@setup-button', "JOIN") | ||||
// Join the room, disable cam/mic | // Join the room, disable cam/mic | ||||
->select('@setup-mic-select', '') | ->select('@setup-mic-select', '') | ||||
->select('@setup-cam-select', '') | //->select('@setup-cam-select', '') | ||||
->click('@setup-button') | ->click('@setup-button') | ||||
->waitFor('@session'); | ->waitFor('@session'); | ||||
// Leave the room as the room owner | // Leave the room as the room owner | ||||
// TODO: Test leaving the room by closing the browser window, | // TODO: Test leaving the room by closing the browser window, | ||||
// it should not destroy the session | // it should not destroy the session | ||||
$browser->click('@menu button.link-logout') | $browser->click('@menu button.link-logout') | ||||
->waitForLocation('/dashboard'); | ->waitForLocation('/dashboard'); | ||||
// Expect other participants be informed about the end of the session | // Expect other participants be informed about the end of the session | ||||
$guest->with(new Dialog('#leave-dialog'), function (Browser $browser) { | $guest->with(new Dialog('#leave-dialog'), function (Browser $browser) { | ||||
$browser->assertSeeIn('@title', 'Room closed') | $browser->assertSeeIn('@title', 'Room closed') | ||||
->assertSeeIn('@body', "The session has been closed by the room owner.") | ->assertSeeIn('@body', "The session has been closed by the room owner.") | ||||
->assertMissing('@button-cancel') | ->assertMissing('@button-cancel') | ||||
->assertSeeIn('@button-action', 'Close') | ->assertSeeIn('@button-action', 'Close') | ||||
->click('@button-action'); | ->click('@button-action'); | ||||
}) | }) | ||||
->assertMissing('#leave-dialog') | ->assertMissing('#leave-dialog') | ||||
->waitForLocation('/login'); | ->waitForLocation('/login'); | ||||
}); | }); | ||||
} | } | ||||
/** | |||||
* Test two subscribers-only users in a room | |||||
* | |||||
* @group openvidu | |||||
* @depends testTwoUsersInARoom | |||||
*/ | |||||
public function testSubscribers(): void | |||||
{ | |||||
$this->assignBetaEntitlement('john@kolab.org', 'meet'); | |||||
$this->browse(function (Browser $browser, Browser $guest) { | |||||
// Join the room as the owner | |||||
$browser->visit(new RoomPage('john')) | |||||
->waitFor('@setup-form') | |||||
->waitUntilMissing('@setup-status-message.loading') | |||||
->waitFor('@setup-status-message') | |||||
->type('@setup-nickname-input', 'john') | |||||
->select('@setup-mic-select', '') | |||||
->select('@setup-cam-select', '') | |||||
->click('@setup-button') | |||||
->waitFor('@session') | |||||
->assertMissing('@setup-form') | |||||
->whenAvailable('@subscribers .meet-subscriber.self', function (Browser $browser) { | |||||
$browser->assertSeeIn('.meet-nickname', 'john'); | |||||
}) | |||||
->assertElementsCount('@session div.meet-video', 0) | |||||
->assertElementsCount('@session video', 0) | |||||
->assertElementsCount('@session .meet-subscriber', 1) | |||||
->assertToolbar([ | |||||
'audio' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_DISABLED, | |||||
'video' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_DISABLED, | |||||
'screen' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_DISABLED, | |||||
'chat' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | |||||
'fullscreen' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | |||||
'security' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | |||||
'logout' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | |||||
]); | |||||
// After the owner "opened the room" guest should be able to join | |||||
// In one browser window act as a guest | |||||
$guest->visit(new RoomPage('john')) | |||||
->waitUntilMissing('@setup-status-message', 10) | |||||
->assertSeeIn('@setup-button', "JOIN") | |||||
// Join the room, disable cam/mic | |||||
->select('@setup-mic-select', '') | |||||
->select('@setup-cam-select', '') | |||||
->click('@setup-button') | |||||
->waitFor('@session') | |||||
->assertMissing('@setup-form') | |||||
->whenAvailable('@subscribers .meet-subscriber.self', function (Browser $browser) { | |||||
$browser->assertVisible('.meet-nickname'); | |||||
}) | |||||
->whenAvailable('@subscribers .meet-subscriber:not(.self)', function (Browser $browser) { | |||||
$browser->assertSeeIn('.meet-nickname', 'john'); | |||||
}) | |||||
->assertElementsCount('@session div.meet-video', 0) | |||||
->assertElementsCount('@session video', 0) | |||||
->assertElementsCount('@session div.meet-subscriber', 2) | |||||
->assertToolbar([ | |||||
'audio' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_DISABLED, | |||||
'video' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_DISABLED, | |||||
'screen' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_DISABLED, | |||||
'chat' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | |||||
'fullscreen' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | |||||
'logout' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | |||||
]); | |||||
// Check guest's elements in the owner's window | |||||
$browser | |||||
->whenAvailable('@subscribers .meet-subscriber:not(.self)', function (Browser $browser) { | |||||
$browser->assertVisible('.meet-nickname'); | |||||
}) | |||||
->assertElementsCount('@session div.meet-video', 0) | |||||
->assertElementsCount('@session video', 0) | |||||
->assertElementsCount('@session .meet-subscriber', 2); | |||||
// Test leaving the room | |||||
// Guest is leaving | |||||
$guest->click('@menu button.link-logout') | |||||
->waitForLocation('/login'); | |||||
// Expect the participant removed from other users windows | |||||
$browser->waitUntilMissing('@session .meet-subscriber:not(.self)'); | |||||
}); | |||||
} | |||||
} | } |