mirror of
https://github.com/roundcube/roundcubemail.git
synced 2026-02-28 13:24:01 +01:00
* Add PHPUnit 10.x and 11.x support * fix undefined TestCase::getName() for PHPUnit 10+ * Add PHPUnit attributes but keep annotations
134 lines
5.0 KiB
PHP
134 lines
5.0 KiB
PHP
<?php
|
|
|
|
namespace Roundcube\Tests\Browser\Mail;
|
|
|
|
use PHPUnit\Framework\Attributes\Depends;
|
|
use Roundcube\Tests\Browser\Bootstrap;
|
|
use Roundcube\Tests\Browser\Components\Toolbarmenu;
|
|
use Roundcube\Tests\Browser\TestCase;
|
|
|
|
class ListTest extends TestCase
|
|
{
|
|
protected static $msgcount = 0;
|
|
|
|
#[\Override]
|
|
public static function setUpBeforeClass(): void
|
|
{
|
|
Bootstrap::init_imap(true);
|
|
Bootstrap::purge_mailbox('INBOX');
|
|
|
|
// import email messages
|
|
foreach (glob(TESTS_DIR . 'data/mail/list_??.eml') as $f) {
|
|
Bootstrap::import_message($f, 'INBOX');
|
|
self::$msgcount++;
|
|
}
|
|
}
|
|
|
|
public function testList()
|
|
{
|
|
$this->browse(function ($browser) {
|
|
$browser->go('mail');
|
|
|
|
$browser->waitUntilNotBusy()
|
|
->assertElementsCount('#messagelist tbody tr', self::$msgcount);
|
|
|
|
// check message list
|
|
$browser->assertVisible('#messagelist tbody tr:first-child.unread');
|
|
|
|
$this->assertSame('Test HTML with local and remote image',
|
|
$browser->text('#messagelist tbody tr:first-child span.subject'));
|
|
|
|
// Note: This element icon has width=0, use assertPresent() not assertVisible()
|
|
$browser->assertPresent('#messagelist tbody tr:first-child span.msgicon.unread');
|
|
|
|
// List toolbar menu
|
|
$browser->assertVisible('#layout-list .header a.toolbar-button.refresh:not(.disabled)');
|
|
|
|
if ($browser->isDesktop()) {
|
|
$browser->with('#toolbar-list-menu', static function ($browser) {
|
|
$browser->assertVisible('a.select:not(.disabled)');
|
|
$browser->assertVisible('a.options:not(.disabled)');
|
|
|
|
$imap = Bootstrap::get_storage();
|
|
if ($imap->get_threading()) {
|
|
$browser->assertVisible('a.threads:not(.disabled)');
|
|
} else {
|
|
$browser->assertMissing('a.threads');
|
|
}
|
|
});
|
|
} elseif ($browser->isTablet()) {
|
|
$browser->click('.toolbar-list-button')
|
|
->waitFor('#toolbar-list-menu');
|
|
|
|
$browser->with('#toolbar-list-menu', static function ($browser) {
|
|
$browser->assertVisible('a.select:not(.disabled)');
|
|
$browser->assertVisible('a.options:not(.disabled)');
|
|
|
|
$imap = Bootstrap::get_storage();
|
|
if ($imap->get_threading()) {
|
|
$browser->assertVisible('a.threads:not(.disabled)');
|
|
} else {
|
|
$browser->assertMissing('a.threads');
|
|
}
|
|
});
|
|
|
|
$browser->click(); // hide the popup menu
|
|
} else { // phone
|
|
// On phones list options are in the toolbar menu
|
|
$browser->with(new Toolbarmenu(), static function ($browser) {
|
|
$active = ['select', 'options'];
|
|
$missing = [];
|
|
$imap = Bootstrap::get_storage();
|
|
|
|
if ($imap->get_threading()) {
|
|
$active[] = 'threads';
|
|
} else {
|
|
$missing[] = 'threads';
|
|
}
|
|
|
|
$browser->assertMenuState($active, [], $missing);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* @depends testList
|
|
*/
|
|
#[Depends('testList')]
|
|
public function testListSelection()
|
|
{
|
|
$this->browse(static function ($browser) {
|
|
if ($browser->isPhone()) {
|
|
$browser->with(new Toolbarmenu(), static function ($browser) {
|
|
$browser->clickMenuItem('select', null, false);
|
|
});
|
|
} elseif ($browser->isTablet()) {
|
|
$browser->click('.toolbar-list-button');
|
|
$browser->click('#toolbar-list-menu a.select');
|
|
} else {
|
|
$browser->click('#toolbar-list-menu a.select');
|
|
$browser->assertFocused('#toolbar-list-menu a.select');
|
|
}
|
|
|
|
// Popup menu content
|
|
$browser->waitFor('#listselect-menu');
|
|
$browser->with('#listselect-menu', static function ($browser) {
|
|
$browser->assertVisible('a.selection:not(.disabled)');
|
|
$browser->assertVisible('a.select.all:not(.disabled)');
|
|
$browser->assertVisible('a.select.page:not(.disabled)');
|
|
$browser->assertVisible('a.select.unread:not(.disabled)');
|
|
$browser->assertVisible('a.select.flagged:not(.disabled)');
|
|
$browser->assertVisible('a.select.invert:not(.disabled)');
|
|
$browser->assertVisible('a.select.none:not(.disabled)');
|
|
});
|
|
|
|
// Close the menu(s) by clicking the page body
|
|
$browser->click();
|
|
$browser->waitUntilMissing('#listselect-menu');
|
|
|
|
// TODO: Test selection actions
|
|
});
|
|
}
|
|
}
|