Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Browser/Meet/RoomControlsTest.php
Show First 20 Lines • Show All 110 Lines • ▼ Show 20 Lines | public function testNicknameAndMuting(): void | ||||
// In another browser act as a guest | // In another browser act as a guest | ||||
$guest->visit(new RoomPage('john')) | $guest->visit(new RoomPage('john')) | ||||
->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'); | ||||
// Assert current UI state | // Assert current UI state | ||||
$owner->assertToolbar([ | $owner->assertToolbar([ | ||||
'audio' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | 'audio' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'video' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | 'video' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'screen' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | 'screen' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'chat' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | 'chat' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'fullscreen' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | 'fullscreen' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'security' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | 'security' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'logout' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | 'logout' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | ||||
]) | ]) | ||||
->whenAvailable('div.meet-video.publisher', function (Browser $browser) { | ->whenAvailable('div.meet-video.self', function (Browser $browser) { | ||||
$browser->assertVisible('video') | $browser->assertVisible('video') | ||||
->assertAudioMuted('video', true) | ->assertAudioMuted('video', true) | ||||
->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'); | ||||
}) | }) | ||||
->whenAvailable('div.meet-video:not(.publisher)', function (Browser $browser) { | ->whenAvailable('div.meet-video:not(.self)', function (Browser $browser) { | ||||
$browser->assertMissing('video') | $browser->assertVisible('video') | ||||
->assertVisible('.nickname') | ->assertVisible('.meet-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); | ->assertElementsCount('@session div.meet-video', 2); | ||||
// Assert current UI state | // Assert current UI state | ||||
$guest->assertToolbar([ | $guest->assertToolbar([ | ||||
'audio' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_DISABLED, | 'audio' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'video' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_DISABLED, | 'video' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'screen' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_DISABLED, | 'screen' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'chat' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | 'chat' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'fullscreen' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | 'fullscreen' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | ||||
'logout' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | 'logout' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED, | ||||
]) | ]) | ||||
->whenAvailable('div.meet-video.publisher', function (Browser $browser) { | ->whenAvailable('div.meet-video:not(.self)', function (Browser $browser) { | ||||
$browser->assertVisible('video') | $browser->assertVisible('video') | ||||
//->assertAudioMuted('video', true) | ->assertSeeIn('.meet-nickname', 'john') | ||||
->assertVisible('.controls button.link-fullscreen') | ->assertVisible('.controls button.link-fullscreen') | ||||
->assertMissing('.controls button.link-audio') | ->assertVisible('.controls button.link-audio') | ||||
->assertVisible('.status .status-audio') | ->assertMissing('.status .status-audio') | ||||
->assertVisible('.status .status-video'); | ->assertMissing('.status .status-video'); | ||||
}) | }) | ||||
->whenAvailable('div.meet-video:not(.publisher)', function (Browser $browser) { | ->whenAvailable('div.meet-video.self', function (Browser $browser) { | ||||
$browser->assertVisible('video') | $browser->assertVisible('video') | ||||
->assertSeeIn('.nickname', 'john') | |||||
->assertVisible('.controls button.link-fullscreen') | ->assertVisible('.controls button.link-fullscreen') | ||||
->assertVisible('.controls button.link-audio') | ->assertMissing('.controls button.link-audio') | ||||
->assertMissing('.status .status-audio') | ->assertVisible('.status .status-audio') | ||||
->assertMissing('.status .status-video'); | ->assertMissing('.status .status-video'); | ||||
}) | }) | ||||
->assertElementsCount('@session div.meet-video', 2); | ->assertElementsCount('@session div.meet-video', 2); | ||||
// Test nickname change propagation | // Test nickname change propagation | ||||
// Use script() because type() does not work with this contenteditable widget | // Use script() because type() does not work with this contenteditable widget | ||||
$guest->setNickname('div.meet-video.publisher', 'guest'); | $guest->setNickname('div.meet-video.self', 'guest'); | ||||
$owner->waitFor('div.meet-video:not(.publisher) .nickname') | $owner->waitFor('div.meet-video:not(.self) .meet-nickname') | ||||
->assertSeeIn('div.meet-video:not(.publisher) .nickname', 'guest'); | ->assertSeeIn('div.meet-video:not(.self) .meet-nickname', 'guest'); | ||||
// Test muting audio | // Test muting audio | ||||
$owner->click('@menu button.link-audio') | $owner->click('@menu button.link-audio') | ||||
->assertToolbarButtonState('audio', RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED) | ->assertToolbarButtonState('audio', RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED) | ||||
->assertVisible('div.meet-video.publisher .status .status-audio'); | ->assertVisible('div.meet-video.self .status .status-audio'); | ||||
// FIXME: It looks that we can't just check the <video> element state | // FIXME: It looks that we can't just check the <video> element state | ||||
// We might consider using OpenVidu API to make sure | // We might consider using OpenVidu API to make sure | ||||
$guest->waitFor('div.meet-video:not(.publisher) .status .status-audio'); | $guest->waitFor('div.meet-video:not(.self) .status .status-audio'); | ||||
// Test unmuting audio | // Test unmuting audio | ||||
$owner->click('@menu button.link-audio') | $owner->click('@menu button.link-audio') | ||||
->assertToolbarButtonState('audio', RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED) | ->assertToolbarButtonState('audio', RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED) | ||||
->assertMissing('div.meet-video.publisher .status .status-audio'); | ->assertMissing('div.meet-video.self .status .status-audio'); | ||||
$guest->waitUntilMissing('div.meet-video:not(.publisher) .status .status-audio'); | $guest->waitUntilMissing('div.meet-video:not(.self) .status .status-audio'); | ||||
// Test muting video | // Test muting video | ||||
$owner->click('@menu button.link-video') | $owner->click('@menu button.link-video') | ||||
->assertToolbarButtonState('video', RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED) | ->assertToolbarButtonState('video', RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED) | ||||
->assertVisible('div.meet-video.publisher .status .status-video'); | ->assertVisible('div.meet-video.self .status .status-video'); | ||||
// FIXME: It looks that we can't just check the <video> element state | // FIXME: It looks that we can't just check the <video> element state | ||||
// We might consider using OpenVidu API to make sure | // We might consider using OpenVidu API to make sure | ||||
$guest->waitFor('div.meet-video:not(.publisher) .status .status-video'); | $guest->waitFor('div.meet-video:not(.self) .status .status-video'); | ||||
// Test unmuting video | // Test unmuting video | ||||
$owner->click('@menu button.link-video') | $owner->click('@menu button.link-video') | ||||
->assertToolbarButtonState('video', RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED) | ->assertToolbarButtonState('video', RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED) | ||||
->assertMissing('div.meet-video.publisher .status .status-video'); | ->assertMissing('div.meet-video.self .status .status-video'); | ||||
$guest->waitUntilMissing('div.meet-video:not(.publisher) .status .status-video'); | $guest->waitUntilMissing('div.meet-video:not(.self) .status .status-video'); | ||||
// Test muting other user | // Test muting other user | ||||
$guest->with('div.meet-video:not(.publisher)', function (Browser $browser) { | $guest->with('div.meet-video:not(.self)', function (Browser $browser) { | ||||
$browser->click('.controls button.link-audio') | $browser->click('.controls button.link-audio') | ||||
->assertAudioMuted('video', true) | ->assertAudioMuted('video', true) | ||||
->assertVisible('.controls button.link-audio.text-danger') | ->assertVisible('.controls button.link-audio.text-danger') | ||||
->click('.controls button.link-audio') | ->click('.controls button.link-audio') | ||||
->assertAudioMuted('video', false) | ->assertAudioMuted('video', false) | ||||
->assertVisible('.controls button.link-audio:not(.text-danger)'); | ->assertVisible('.controls button.link-audio:not(.text-danger)'); | ||||
}); | }); | ||||
}); | }); | ||||
Show All 21 Lines | public function testChat(): void | ||||
// In another browser act as a guest | // In another browser act as a guest | ||||
$guest->visit(new RoomPage('john')) | $guest->visit(new RoomPage('john')) | ||||
->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'); | ||||
// Test chat elements | // Test chat elements | ||||
$owner->click('@menu button.link-chat') | $owner->click('@menu button.link-chat') | ||||
->assertToolbarButtonState('chat', RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED) | ->assertToolbarButtonState('chat', RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED) | ||||
->assertVisible('@chat') | ->assertVisible('@chat') | ||||
Show All 39 Lines | public function testChat(): void | ||||
->assertSeeIn('@chat-list .message:last-child div:last-child', 'guest1'); | ->assertSeeIn('@chat-list .message:last-child div:last-child', 'guest1'); | ||||
$owner->assertElementsCount('@chat-list .message', 2) | $owner->assertElementsCount('@chat-list .message', 2) | ||||
->assertMissing('@chat-list .message:last-child .nickname') | ->assertMissing('@chat-list .message:last-child .nickname') | ||||
->assertSeeIn('@chat-list .message:last-child div:last-child', 'guest1'); | ->assertSeeIn('@chat-list .message:last-child div:last-child', 'guest1'); | ||||
// Test nickname change is propagated to chat messages | // Test nickname change is propagated to chat messages | ||||
$guest->setNickname('div.meet-video.publisher', 'guest') | $guest->setNickname('div.meet-video.self', 'guest') | ||||
->keys('@chat-input', 'guest2', '{enter}') | ->keys('@chat-input', 'guest2', '{enter}') | ||||
->assertElementsCount('@chat-list .message', 2) | ->assertElementsCount('@chat-list .message', 2) | ||||
->assertSeeIn('@chat-list .message:last-child .nickname', 'guest') | ->assertSeeIn('@chat-list .message:last-child .nickname', 'guest') | ||||
->assertSeeIn('@chat-list .message:last-child div:last-child', 'guest2'); | ->assertSeeIn('@chat-list .message:last-child div:last-child', 'guest2'); | ||||
$owner->assertElementsCount('@chat-list .message', 2) | $owner->assertElementsCount('@chat-list .message', 2) | ||||
->assertSeeIn('@chat-list .message:last-child .nickname', 'guest') | ->assertSeeIn('@chat-list .message:last-child .nickname', 'guest') | ||||
->assertSeeIn('@chat-list .message:last-child div:last-child', 'guest2'); | ->assertSeeIn('@chat-list .message:last-child div:last-child', 'guest2'); | ||||
Show All 17 Lines |