Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Browser/Meet/RoomSetupTest.php
Show First 20 Lines • Show All 364 Lines • ▼ Show 20 Lines | public function testSubscribers(): void | ||||
// 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 .meet-subscriber:not(.self)'); | $browser->waitUntilMissing('@session .meet-subscriber:not(.self)'); | ||||
}); | }); | ||||
} | } | ||||
/** | |||||
* Test demoting publisher to a subscriber | |||||
* | |||||
* @group openvidu | |||||
* @depends testSubscribers | |||||
*/ | |||||
public function testDemoteToSubscriber(): 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') | |||||
->clickWhenEnabled('@setup-button') | |||||
->waitFor('@session') | |||||
->assertMissing('@setup-form') | |||||
->waitFor('@session video'); | |||||
// In one browser window act as a guest | |||||
$guest->visit(new RoomPage('john')) | |||||
->waitUntilMissing('@setup-status-message', 10) | |||||
->assertSeeIn('@setup-button', "JOIN") | |||||
->clickWhenEnabled('@setup-button') | |||||
->waitFor('@session') | |||||
->assertMissing('@setup-form') | |||||
->waitFor('div.meet-video.self') | |||||
->waitFor('div.meet-video:not(.self)') | |||||
->assertElementsCount('@session div.meet-video', 2) | |||||
->assertElementsCount('@session video', 2) | |||||
->assertElementsCount('@session div.meet-subscriber', 0) | |||||
// assert there's no moderator-related features for this guess available | |||||
->click('@session .meet-video.self .meet-nickname') | |||||
->whenAvailable('@session .meet-video.self .dropdown-menu', function (Browser $browser) { | |||||
$browser->assertMissing('.permissions'); | |||||
}) | |||||
->click('@session .meet-video:not(.self) .meet-nickname') | |||||
->pause(50) | |||||
->assertMissing('.dropdown-menu'); | |||||
// Demote the guest to a subscriber | |||||
$browser | |||||
->waitFor('div.meet-video.self') | |||||
->waitFor('div.meet-video:not(.self)') | |||||
->assertElementsCount('@session div.meet-video', 2) | |||||
->assertElementsCount('@session video', 2) | |||||
->assertElementsCount('@session .meet-subscriber', 0) | |||||
->click('@session .meet-video:not(.self) .meet-nickname') | |||||
->whenAvailable('@session .meet-video:not(.self) .dropdown-menu', function (Browser $browser) { | |||||
$browser->assertSeeIn('.action-role-publisher', 'Audio & Video publishing') | |||||
->click('.action-role-publisher') | |||||
->waitUntilMissing('.dropdown-menu'); | |||||
}) | |||||
->waitUntilMissing('@session .meet-video:not(.self)') | |||||
->waitFor('@session div.meet-subscriber') | |||||
->assertElementsCount('@session div.meet-video', 1) | |||||
->assertElementsCount('@session video', 1) | |||||
->assertElementsCount('@session div.meet-subscriber', 1); | |||||
$guest | |||||
->waitUntilMissing('@session .meet-video.self') | |||||
->waitFor('@session div.meet-subscriber') | |||||
->assertElementsCount('@session div.meet-video', 1) | |||||
->assertElementsCount('@session video', 1) | |||||
->assertElementsCount('@session div.meet-subscriber', 1); | |||||
// Promote the guest back to a publisher | |||||
$browser | |||||
->click('@session .meet-subscriber .meet-nickname') | |||||
->whenAvailable('@session .meet-subscriber .dropdown-menu', function (Browser $browser) { | |||||
$browser->assertSeeIn('.action-role-publisher', 'Audio & Video publishing') | |||||
->assertNotChecked('.action-role-publisher input') | |||||
->click('.action-role-publisher') | |||||
->waitUntilMissing('.dropdown-menu'); | |||||
}) | |||||
->waitFor('@session .meet-video:not(.self)') | |||||
->assertElementsCount('@session div.meet-video', 2) | |||||
->assertElementsCount('@session video', 2) | |||||
->assertElementsCount('@session div.meet-subscriber', 0); | |||||
$guest | |||||
->waitFor('@session .meet-video.self') | |||||
->assertElementsCount('@session div.meet-video', 2) | |||||
->assertElementsCount('@session video', 2) | |||||
->assertElementsCount('@session div.meet-subscriber', 0); | |||||
// Demote the owner to a subscriber | |||||
$browser | |||||
->click('@session .meet-video.self .meet-nickname') | |||||
->whenAvailable('@session .meet-video.self .dropdown-menu', function (Browser $browser) { | |||||
$browser->assertSeeIn('.action-role-publisher', 'Audio & Video publishing') | |||||
->assertChecked('.action-role-publisher input') | |||||
->click('.action-role-publisher') | |||||
->waitUntilMissing('.dropdown-menu'); | |||||
}) | |||||
->waitUntilMissing('@session .meet-video.self') | |||||
->waitFor('@session div.meet-subscriber.self') | |||||
->assertElementsCount('@session div.meet-video', 1) | |||||
->assertElementsCount('@session video', 1) | |||||
->assertElementsCount('@session div.meet-subscriber', 1); | |||||
// Promote the owner to a publisher | |||||
$browser | |||||
->click('@session .meet-subscriber.self .meet-nickname') | |||||
->whenAvailable('@session .meet-subscriber.self .dropdown-menu', function (Browser $browser) { | |||||
$browser->assertSeeIn('.action-role-publisher', 'Audio & Video publishing') | |||||
->assertNotChecked('.action-role-publisher input') | |||||
->click('.action-role-publisher') | |||||
->waitUntilMissing('.dropdown-menu'); | |||||
}) | |||||
->waitUntilMissing('@session .meet-subscriber.self') | |||||
->waitFor('@session div.meet-video.self') | |||||
->assertElementsCount('@session div.meet-video', 2) | |||||
->assertElementsCount('@session video', 2) | |||||
->assertElementsCount('@session div.meet-subscriber', 0); | |||||
}); | |||||
} | |||||
} | } |