Page MenuHomePhorge

Room.php
No OneTemporary

Size
6 KB
Referenced Files
None
Subscribers
None

Room.php

<?php
namespace Tests\Browser\Pages\Meet;
use Laravel\Dusk\Page;
use PHPUnit\Framework\Assert;
class Room extends Page
{
public const BUTTON_ACTIVE = 1;
public const BUTTON_ENABLED = 2;
public const BUTTON_INACTIVE = 4;
public const BUTTON_DISABLED = 8;
public const ICO_MODERATOR = 'moderator';
public const ICO_USER = 'user';
public const ICO_INTERPRETER = 'interpreter';
protected $roomName;
/**
* Object constructor.
*
* @param string $name Room name
*/
public function __construct($name)
{
$this->roomName = $name;
}
/**
* Get the URL for the page.
*
* @return string
*/
public function url()
{
return '/meet/' . $this->roomName;
}
/**
* Assert that the browser is on the page.
*
* @param \Laravel\Dusk\Browser $browser The browser object
*
* @return void
*/
public function assert($browser)
{
$browser->waitForLocation($this->url())
->waitUntilMissing('.app-loader')
->waitUntilMissing('#meet-setup div.status-message.loading');
}
/**
* Get the element shortcuts for the page.
*
* @return array
*/
public function elements()
{
return [
'@app' => '#app',
'@setup-form' => '#meet-setup form',
'@setup-title' => '#meet-setup .card-title',
'@setup-mic-select' => '#setup-microphone',
'@setup-cam-select' => '#setup-camera',
'@setup-nickname-input' => '#setup-nickname',
'@setup-password-input' => '#setup-password',
'@setup-preview' => '#meet-setup .media-setup-preview',
'@setup-volume' => '#meet-setup .media-setup-preview .volume',
'@setup-video' => '#meet-setup .media-setup-preview video',
'@setup-status-message' => '#meet-setup div.status-message',
'@setup-button' => '#join-button',
'@toolbar' => '#meet-session-toolbar',
'@menu' => '#meet-session-menu',
'@counter' => '#meet-counter',
'@session' => '#meet-session',
'@subscribers' => '#meet-subscribers',
'@queue' => '#meet-queue',
'@chat' => '#meet-chat',
'@chat-input' => '#meet-chat textarea',
'@chat-list' => '#meet-chat .chat',
'@login-form' => '#meet-auth',
'@login-email-input' => '#inputEmail',
'@login-password-input' => '#inputPassword',
'@login-second-factor-input' => '#secondfactor',
'@login-button' => '#meet-auth button',
];
}
/**
* Assert menu state.
*
* @param \Tests\Browser $browser The browser object
* @param array $menu Menu items/state
*/
public function assertToolbar($browser, array $menu): void
{
$browser->assertElementsCount('@menu button', count($menu));
foreach ($menu as $item => $state) {
$this->assertToolbarButtonState($browser, $item, $state);
}
}
/**
* Assert menu button state.
*
* @param \Tests\Browser $browser The browser object
* @param string $button Button name
* @param int $state Expected button state (sum of BUTTON_* consts)
*/
public function assertToolbarButtonState($browser, $button, $state): void
{
$class = '';
if ($state & self::BUTTON_ACTIVE) {
$class .= '.on';
}
if ($state & self::BUTTON_INACTIVE) {
$class .= ':not(.on)';
}
if ($state & self::BUTTON_DISABLED) {
$class .= '[disabled]';
}
if ($state & self::BUTTON_ENABLED) {
$class .= ':not([disabled])';
}
$browser->assertVisible('@menu button.link-' . $button . $class);
}
/**
* Assert the <video> element's 'muted' property state
*
* @param \Tests\Browser $browser The browser object
* @param string $selector Video element selector
* @param bool $state Expected state
*/
public function assertAudioMuted($browser, $selector, $state): void
{
$selector = addslashes($browser->resolver->format($selector));
$result = $browser->script(
"var video = document.querySelector('$selector'); return video.muted"
);
Assert::assertSame((bool) $result[0], $state);
}
/**
* Assert the participant icon type
*
* @param \Tests\Browser $browser The browser object
* @param string $selector Element selector
* @param string $type Participant icon type
*/
public function assertUserIcon($browser, $selector, $type): void
{
$browser->assertVisible("{$selector} svg.{$type}")
->assertMissing("{$selector} svg:not(.{$type})");
}
/**
* Set the nickname for the participant
*
* @param \Tests\Browser $browser The browser object
* @param string $selector Participant element selector
* @param string $nickname Nickname
*/
public function setNickname($browser, $selector, $nickname): void
{
$element = "$selector .meet-nickname .content";
$browser->click("$selector .meet-nickname")
->waitFor("$selector .dropdown-menu")
->assertSeeIn("$selector .dropdown-menu > .action-nickname", 'Nickname')
->click("$selector .dropdown-menu > .action-nickname")
->waitUntilMissing('.dropdown-menu')
// Use script() because type() does not work with this contenteditable widget
->script(
"var element = document.querySelector('$element');"
. "element.innerText = '$nickname';"
. "element.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 27 }))"
);
}
/**
* Submit logon form.
*
* @param \Tests\Browser $browser The browser object
* @param string $username User name
* @param string $password User password
* @param array $config Client-site config
*/
public function submitLogon($browser, $username, $password, $config = []): void
{
$browser->type('@login-email-input', $username)
->type('@login-password-input', $password);
if ($username == 'ned@kolab.org') {
$code = \App\Auth\SecondFactor::code('ned@kolab.org');
$browser->type('@login-second-factor-input', $code);
}
if (!empty($config)) {
$browser->script(
sprintf('Object.assign(window.config, %s)', \json_encode($config))
);
}
$browser->click('@login-button');
}
}

File Metadata

Mime Type
text/x-php
Expires
Fri, Nov 21, 11:49 AM (1 d, 19 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
387473
Default Alt Text
Room.php (6 KB)

Event Timeline