Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Browser/Meet/RoomControlsTest.php
<?php | <?php | ||||
namespace Tests\Browser\Meet; | namespace Tests\Browser\Meet; | ||||
use App\OpenVidu\Room; | use App\Meet\Room; | ||||
use Tests\Browser; | use Tests\Browser; | ||||
use Tests\Browser\Pages\Meet\Room as RoomPage; | use Tests\Browser\Pages\Meet\Room as RoomPage; | ||||
use Tests\TestCaseDusk; | use Tests\TestCaseDusk; | ||||
class RoomControlsTest extends TestCaseDusk | class RoomControlsTest extends TestCaseDusk | ||||
{ | { | ||||
/** | /** | ||||
* {@inheritDoc} | * {@inheritDoc} | ||||
*/ | */ | ||||
public function setUp(): void | public function setUp(): void | ||||
{ | { | ||||
parent::setUp(); | parent::setUp(); | ||||
$this->setupTestRoom(); | $this->setupTestRoom(); | ||||
} | } | ||||
public function tearDown(): void | public function tearDown(): void | ||||
{ | { | ||||
$this->resetTestRoom(); | $this->resetTestRoom(); | ||||
parent::tearDown(); | parent::tearDown(); | ||||
} | } | ||||
/** | /** | ||||
* Test fullscreen buttons | * Test fullscreen buttons | ||||
* | * | ||||
* @group openvidu | * @group meet | ||||
*/ | */ | ||||
public function testFullscreen(): void | public function testFullscreen(): void | ||||
{ | { | ||||
// TODO: This test does not work in headless mode | // TODO: This test does not work in headless mode | ||||
$this->markTestIncomplete(); | $this->markTestIncomplete(); | ||||
/* | /* | ||||
$this->browse(function (Browser $browser) { | $this->browse(function (Browser $browser) { | ||||
// Join the room as an owner (authenticate) | // Join the room as an owner (authenticate) | ||||
Show All 32 Lines | /* | ||||
->assertVisible('@toolbar'); | ->assertVisible('@toolbar'); | ||||
}); | }); | ||||
*/ | */ | ||||
} | } | ||||
/** | /** | ||||
* Test nickname and audio/video muting/volume controls | * Test nickname and audio/video muting/volume controls | ||||
* | * | ||||
* @group openvidu | * @group meet | ||||
*/ | */ | ||||
public function testNicknameAndMuting(): void | public function testNicknameAndMuting(): void | ||||
{ | { | ||||
$this->browse(function (Browser $owner, Browser $guest) { | $this->browse(function (Browser $owner, Browser $guest) { | ||||
// Join the room as an owner (authenticate) | // Join the room as an owner (authenticate) | ||||
$owner->visit(new RoomPage('john')) | $owner->visit(new RoomPage('john')) | ||||
->click('@setup-button') | ->click('@setup-button') | ||||
->submitLogon('john@kolab.org', 'simple123') | ->submitLogon('john@kolab.org', 'simple123') | ||||
▲ Show 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | public function testNicknameAndMuting(): void | ||||
->assertSeeIn('div.meet-video:not(.self) .meet-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_ACTIVE | RoomPage::BUTTON_ENABLED) | ->assertToolbarButtonState('audio', RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED) | ||||
->waitFor('div.meet-video.self .status .status-audio'); | ->waitFor('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 some API to make sure | ||||
$guest->waitFor('div.meet-video:not(.self) .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_INACTIVE | RoomPage::BUTTON_ENABLED) | ->assertToolbarButtonState('audio', RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED) | ||||
->assertMissing('div.meet-video.self .status .status-audio'); | ->assertMissing('div.meet-video.self .status .status-audio'); | ||||
$guest->waitUntilMissing('div.meet-video:not(.self) .status .status-audio'); | $guest->waitUntilMissing('div.meet-video:not(.self) .status .status-audio'); | ||||
Show All 15 Lines | public function testNicknameAndMuting(): void | ||||
->assertAudioMuted('div.meet-video:not(.self) video', false); | ->assertAudioMuted('div.meet-video:not(.self) video', false); | ||||
// Test muting video | // Test muting 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) | ||||
->assertVisible('div.meet-video.self .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 some API to make sure | ||||
$guest->waitFor('div.meet-video:not(.self) .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_INACTIVE | RoomPage::BUTTON_ENABLED) | ->assertToolbarButtonState('video', RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED) | ||||
->assertMissing('div.meet-video.self .status .status-video'); | ->assertMissing('div.meet-video.self .status .status-video'); | ||||
$guest->waitUntilMissing('div.meet-video:not(.self) .status .status-video'); | $guest->waitUntilMissing('div.meet-video:not(.self) .status .status-video'); | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | public function testNicknameAndMuting(): void | ||||
->waitUntilMissing('.volume'); | ->waitUntilMissing('.volume'); | ||||
}); | }); | ||||
}); | }); | ||||
} | } | ||||
/** | /** | ||||
* Test text chat | * Test text chat | ||||
* | * | ||||
* @group openvidu | * @group meet | ||||
*/ | */ | ||||
public function testChat(): void | public function testChat(): void | ||||
{ | { | ||||
$this->browse(function (Browser $owner, Browser $guest) { | $this->browse(function (Browser $owner, Browser $guest) { | ||||
// Join the room as an owner | // Join the room as an owner | ||||
$owner->visit(new RoomPage('john')) | $owner->visit(new RoomPage('john')) | ||||
->waitFor('@setup-form') | ->waitFor('@setup-form') | ||||
->waitUntilMissing('@setup-status-message.loading') | ->waitUntilMissing('@setup-status-message.loading') | ||||
▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | public function testChat(): void | ||||
// TODO: Test text chat features, e.g. link handling | // TODO: Test text chat features, e.g. link handling | ||||
}); | }); | ||||
} | } | ||||
/** | /** | ||||
* Test screen sharing | * Test screen sharing | ||||
* | * | ||||
* @group openvidu | * @group meet | ||||
*/ | */ | ||||
public function testShareScreen(): void | public function testShareScreen(): void | ||||
{ | { | ||||
$this->browse(function (Browser $owner, Browser $guest) { | $this->browse(function (Browser $owner, Browser $guest) { | ||||
// Join the room as an owner | // Join the room as an owner | ||||
$owner->visit(new RoomPage('john')) | $owner->visit(new RoomPage('john')) | ||||
->waitFor('@setup-form') | ->waitFor('@setup-form') | ||||
->waitUntilMissing('@setup-status-message.loading') | ->waitUntilMissing('@setup-status-message.loading') | ||||
Show All 14 Lines | public function testShareScreen(): void | ||||
// Test screen sharing | // Test screen sharing | ||||
$owner->assertToolbarButtonState('screen', RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED) | $owner->assertToolbarButtonState('screen', RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED) | ||||
->assertElementsCount('@session div.meet-video', 1) | ->assertElementsCount('@session div.meet-video', 1) | ||||
->click('@menu button.link-screen') | ->click('@menu button.link-screen') | ||||
->whenAvailable('div.meet-video:not(.self)', function (Browser $browser) { | ->whenAvailable('div.meet-video:not(.self)', function (Browser $browser) { | ||||
$browser->waitFor('video') | $browser->waitFor('video') | ||||
->assertSeeIn('.meet-nickname', 'john') | ->assertSeeIn('.meet-nickname', 'john') | ||||
->assertVisible('.controls button.link-fullscreen') | ->assertVisible('.controls button.link-fullscreen') | ||||
->assertVisible('.controls button.link-audio') | ->assertMissing('.controls button.link-audio') | ||||
->assertVisible('.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) | ||||
->assertElementsCount('@subscribers .meet-subscriber', 1) | ->assertElementsCount('@subscribers .meet-subscriber', 1) | ||||
->assertToolbarButtonState('screen', RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED); | ->assertToolbarButtonState('screen', RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED); | ||||
$guest | $guest | ||||
->whenAvailable('div.meet-video.screen', function (Browser $browser) { | ->whenAvailable('div.meet-video.screen', function (Browser $browser) { | ||||
$browser->waitFor('video') | $browser->waitFor('video') | ||||
->assertSeeIn('.meet-nickname', 'john') | ->assertSeeIn('.meet-nickname', 'john') | ||||
->assertVisible('.controls button.link-fullscreen') | ->assertVisible('.controls button.link-fullscreen') | ||||
->assertVisible('.controls button.link-audio') | ->assertMissing('.controls button.link-audio') | ||||
->assertVisible('.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) | ||||
->assertElementsCount('@subscribers .meet-subscriber', 1); | ->assertElementsCount('@subscribers .meet-subscriber', 1); | ||||
}); | }); | ||||
} | } | ||||
} | } |