Page MenuHomePhorge

No OneTemporary

Size
22 KB
Referenced Files
None
Subscribers
None
diff --git a/tests/Browser/Contacts/ContactsTest.php b/tests/Browser/Contacts/ContactsTest.php
index 9f8a98fe1..99f4ccad8 100644
--- a/tests/Browser/Contacts/ContactsTest.php
+++ b/tests/Browser/Contacts/ContactsTest.php
@@ -1,81 +1,79 @@
<?php
namespace Tests\Browser\Contacts;
use Tests\Browser\Components\App;
class ContactsTest extends \Tests\Browser\TestCase
{
- protected function setUp()
+ public static function setUpBeforeClass()
{
- parent::setUp();
-
\bootstrap::init_db();
}
/**
* Contacts UI Basics
*/
public function testContactsUI()
{
$this->browse(function ($browser) {
$browser->go('addressbook');
$browser->with(new App(), function ($browser) {
// check task
$browser->assertEnv('task', 'addressbook');
// these objects should be there always
$browser->assertObjects(['qsearchbox', 'folderlist', 'contactslist', 'countdisplay']);
});
if (!$browser->isDesktop()) {
$browser->assertMissing('#directorylist');
$browser->click('a.back-sidebar-button');
}
// Groups/Addressbooks list
$browser->assertVisible('#directorylist');
$browser->assertSeeIn('#directorylist li:first-child', 'Personal Addresses');
$browser->assertMissing('#directorylist .treetoggle.expanded');
// Contacts list
if (!$browser->isDesktop()) {
$browser->assertMissing('#contacts-table');
$browser->click('#directorylist li:first-child');
$browser->waitFor('#contacts-table');
}
else {
$browser->assertVisible('#contacts-table');
}
// Contacts list menu
if ($browser->isPhone()) {
$browser->assertToolbarMenu(['select'], []);
}
else if ($browser->isTablet()) {
$browser->click('.toolbar-list-button')
->waitFor('#toolbar-list-menu')
->assertVisible('#toolbar-list-menu a.select:not(.disabled)')
->click();
}
else {
$browser->assertVisible('#toolbar-list-menu a.select:not(.disabled)');
}
// Toolbar menu
$browser->assertToolbarMenu(
['create', 'search', 'import', 'export'], // active items
['print', 'delete', 'more'], // inactive items
);
// Contact frame
if (!$browser->isPhone()) {
$browser->assertVisible('#contact-frame');
}
// Task menu
$browser->assertTaskMenu('contacts');
});
}
}
diff --git a/tests/Browser/Contacts/ExportTest.php b/tests/Browser/Contacts/ExportTest.php
index 807ff6386..2378e182c 100644
--- a/tests/Browser/Contacts/ExportTest.php
+++ b/tests/Browser/Contacts/ExportTest.php
@@ -1,55 +1,58 @@
<?php
namespace Tests\Browser\Contacts;
class ExportTest extends \Tests\Browser\TestCase
{
+ public static function setUpBeforeClass()
+ {
+ \bootstrap::init_db();
+ }
+
/**
* Test exporting all contacts
*/
public function testExportAll()
{
- \bootstrap::init_db();
-
$this->browse(function ($browser) {
$browser->go('addressbook');
$browser->clickToolbarMenuItem('export');
// Parse the downloaded vCard file
$vcard_content = $browser->readDownloadedFile('contacts.vcf');
$vcard = new \rcube_vcard();
$contacts = $vcard->import($vcard_content);
$this->assertCount(2, $contacts);
$this->assertSame('John Doe', $contacts[0]->displayname);
$this->assertSame('Jane Stalone', $contacts[1]->displayname);
$browser->removeDownloadedFile('contacts.vcf');
});
}
/**
* Test exporting selected contacts
*
* @depends testExportAll
*/
public function testExportSelected()
{
$this->browse(function ($browser) {
$browser->ctrlClick('#contacts-table tbody tr:first-child');
$browser->clickToolbarMenuItem('export', 'export.select');
$vcard_content = $browser->readDownloadedFile('contacts.vcf');
$vcard = new \rcube_vcard();
$contacts = $vcard->import($vcard_content);
// Parse the downloaded vCard file
$this->assertCount(1, $contacts);
$this->assertSame('John Doe', $contacts[0]->displayname);
$browser->removeDownloadedFile('contacts.vcf');
});
}
}
diff --git a/tests/Browser/Contacts/GroupsTest.php b/tests/Browser/Contacts/GroupsTest.php
index c5989cb29..4d7dc7a7d 100644
--- a/tests/Browser/Contacts/GroupsTest.php
+++ b/tests/Browser/Contacts/GroupsTest.php
@@ -1,181 +1,184 @@
<?php
namespace Tests\Browser\Contacts;
use Tests\Browser\Components\Popupmenu;
class GroupsTest extends \Tests\Browser\TestCase
{
+ public static function setUpBeforeClass()
+ {
+ \bootstrap::init_db();
+ }
+
/**
* Contact groups UI basics
*/
public function testGroups()
{
- \bootstrap::init_db();
-
$this->browse(function ($browser) {
$browser->go('addressbook');
if (!$browser->isDesktop()) {
$browser->assertMissing('#directorylist');
$browser->click('a.back-sidebar-button');
}
// Groups/Addressbooks list
$browser->assertVisible('#directorylist');
$browser->assertSeeIn('#directorylist li:first-child', 'Personal Addresses');
$browser->assertSeeIn('#layout-sidebar .header', 'Groups');
$browser->click('#layout-sidebar .header .sidebar-menu');
$browser->with(new Popupmenu('groupoptions-menu'), function ($browser) {
// Note: These are button class names, not action names
$active = ['create'];
$disabled = ['group.rename', 'group.delete', 'search', 'search.delete'];
$browser->assertMenuState($active, $disabled);
$browser->closeMenu();
});
});
}
/**
* Contact group creation
*/
public function testGroupCreate()
{
$this->browse(function ($browser) {
$browser->go('addressbook');
if (!$browser->isDesktop()) {
$browser->click('a.back-sidebar-button');
}
$browser->click('#layout-sidebar .header .sidebar-menu');
$browser->with(new Popupmenu('groupoptions-menu'), function ($browser) {
$browser->clickMenuItem('create');
});
$browser->waitFor('.ui-dialog');
$browser->with('.ui-dialog', function ($browser) {
$browser
->assertSeeIn('.ui-dialog-titlebar', 'Create new group')
->assertFocused('input.form-control')
->type('input.form-control', 'New Group')
->click('button.mainaction');
});
$browser->waitUntilMissing('.ui-dialog');
$browser->with('#directorylist', function ($browser) {
$browser->waitFor('li:first-child ul.groups')
->assertVisible('.treetoggle.expanded')
->assertElementsCount('ul.groups > li.contactgroup', 1)
->assertSeeIn('ul.groups > li.contactgroup', 'New Group');
// Test expand toggle
$browser->click('.treetoggle.expanded')
->assertMissing('ul.groups')
->click('.treetoggle.collapsed')
->assertSeeIn('ul.groups > li.contactgroup', 'New Group');
});
});
}
/**
* Contact group rename
*
* @depends testGroupCreate
*/
public function testGroupRename()
{
$this->browse(function ($browser) {
$browser->go('addressbook');
if (!$browser->isDesktop()) {
$browser->click('a.back-sidebar-button');
}
$browser->click('#directorylist ul.groups > li:first-child');
if (!$browser->isDesktop()) {
$browser->click('a.back-sidebar-button');
}
$browser->click('#layout-sidebar .header .sidebar-menu');
$browser->with(new Popupmenu('groupoptions-menu'), function ($browser) {
$browser->clickMenuItem('group.rename');
});
$browser->waitFor('.ui-dialog');
$browser->with('.ui-dialog', function ($browser) {
$browser->assertSeeIn('.ui-dialog-titlebar', 'Rename group')
->assertFocused('input.form-control')
->assertValue('input.form-control', 'New Group')
->type('input.form-control', 'Renamed')
->click('button.mainaction');
});
$browser->waitUntilMissing('.ui-dialog');
$browser->with('#directorylist', function ($browser) {
$browser->waitFor('li:first-child ul.groups')
->assertVisible('.treetoggle.expanded')
->assertElementsCount('ul.groups > li.contactgroup', 1)
->assertSeeIn('ul.groups > li.contactgroup', 'Renamed');
// Test if expand toggle is still working
$browser->click('.treetoggle.expanded')
->assertMissing('ul.groups')
->click('.treetoggle.collapsed')
->assertSeeIn('ul.groups > li.contactgroup', 'Renamed');
});
});
}
/**
* Contact group deletion
*
* @depends testGroupRename
*/
public function testGroupDelete()
{
$this->browse(function ($browser) {
$browser->go('addressbook');
if (!$browser->isDesktop()) {
$browser->click('a.back-sidebar-button');
}
$browser->click('#directorylist ul.groups > li:first-child');
if (!$browser->isDesktop()) {
$browser->click('a.back-sidebar-button');
}
$browser->click('#layout-sidebar .header .sidebar-menu');
$browser->with(new Popupmenu('groupoptions-menu'), function ($browser) {
$browser->clickMenuItem('group.delete');
});
$browser->waitFor('.ui-dialog');
$browser->with('.ui-dialog', function ($browser) {
$browser->assertSeeIn('.ui-dialog-titlebar', 'Are you sure...')
->assertSeeIn('.ui-dialog-content', 'Do you really want to delete selected group?')
->assertFocused('button.mainaction.delete')
->click('button.mainaction.delete');
});
$browser->waitUntilMissing('.ui-dialog');
$browser->with('#directorylist', function ($browser) {
$browser->assertMissing('.treetoggle.expanded')
->assertMissing('ul.groups');
});
});
}
}
diff --git a/tests/Browser/Contacts/ImportTest.php b/tests/Browser/Contacts/ImportTest.php
index aad53306f..48a2e0b24 100644
--- a/tests/Browser/Contacts/ImportTest.php
+++ b/tests/Browser/Contacts/ImportTest.php
@@ -1,106 +1,109 @@
<?php
namespace Tests\Browser\Contacts;
use Tests\Browser\Components\App;
class ImportTest extends \Tests\Browser\TestCase
{
+ public static function setUpBeforeClass()
+ {
+ \bootstrap::init_db();
+ }
+
/**
* Test basic elements of contacts import UI
*/
public function testImportUI()
{
- \bootstrap::init_db();
-
$this->browse(function ($browser) {
$browser->go('addressbook');
$browser->clickToolbarMenuItem('import');
$browser->assertSeeIn('.ui-dialog-title', 'Import contacts');
$browser->assertVisible('.ui-dialog button.mainaction.import');
$browser->assertVisible('.ui-dialog button.cancel');
$browser->withinFrame('.ui-dialog iframe', function ($browser) {
// check task and action
$browser->with(new App(), function ($browser) {
$browser->assertEnv('task', 'addressbook');
$browser->assertEnv('action', 'import');
// these objects should be there always
$browser->assertObjects(['importform']);
});
$browser->assertSee('You can upload');
$browser->assertVisible('#rcmImportForm');
$browser->assertVisible('#rcmImportForm select');
$browser->assertVisible('#rcmImportForm .custom-switch');
// FIXME: selecting the file input directly does not work
$browser->assertVisible('#rcmImportForm .custom-file');
$browser->assertSelected('#rcmImportForm select', 0);
});
// Close the dialog
$browser->click('.ui-dialog button.cancel');
$browser->assertMissing('.ui-dialog');
});
}
/**
* Import contacts from a vCard file
*
* @depends testImportUI
*/
public function testImportProcess()
{
$this->browse(function ($browser) {
// Open the dialog again
$browser->clickToolbarMenuItem('import');
$browser->assertSeeIn('.ui-dialog-title', 'Import contacts');
// Submit the form with no file attached
$browser->click('.ui-dialog button.mainaction');
$browser->waitForText('Attention');
$browser->assertSee('Please select a file');
$browser->driver->getKeyboard()->sendKeys(\Facebook\WebDriver\WebDriverKeys::ESCAPE);
$browser->assertElementsCount('.ui-dialog', 1);
$browser->withinFrame('.ui-dialog iframe', function ($browser) {
$browser->attach('.custom-file input', TESTS_DIR . 'data/contacts.vcf');
});
$browser->click('.ui-dialog button.mainaction');
$browser->withinFrame('.ui-dialog iframe', function ($browser) {
$browser->waitForText('Successfully imported 2 contacts:');
});
// Close the dialog
$browser->click('.ui-dialog button.cancel');
// Expected existing contacts + imported
$browser->waitFor('#contacts-table tr')
->assertElementsCount('#contacts-table tbody tr', 4)
->assertSeeIn('#rcmcountdisplay', '1 – 4 of 4');
});
}
/**
* Test imported contact
*
* @depends testImportProcess
*/
public function testImportResult()
{
$this->browse(function ($browser) {
// Open the dialog again
$browser->click('#contacts-table tr:last-child');
$browser->withinFrame('#contact-frame', function ($browser) {
$browser->waitFor('a.email'); // wait for iframe to load
$browser->assertSeeIn('.names', 'Sylvester Stalone');
$browser->assertSeeIn('a.email', 's.stalone@rambo.tv');
});
});
}
}
diff --git a/tests/Browser/Contacts/PrintTest.php b/tests/Browser/Contacts/PrintTest.php
new file mode 100644
index 000000000..fd4083db2
--- /dev/null
+++ b/tests/Browser/Contacts/PrintTest.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Tests\Browser\Contacts;
+
+use Tests\Browser\Components\App;
+
+class PrintTest extends \Tests\Browser\TestCase
+{
+ public static function setUpBeforeClass()
+ {
+ \bootstrap::init_db();
+ }
+
+ /**
+ * Test Print action
+ */
+ public function testPrint()
+ {
+ $this->browse(function ($browser) {
+ $browser->go('addressbook');
+
+ $browser->waitFor('#contacts-table tbody tr:first-child')
+ ->ctrlClick('#contacts-table tbody tr:first-child');
+
+ list($current_window, $new_window) = $browser->openWindow(function ($browser) {
+ if ($browser->isPhone()) {
+ $this->markTestSkipped();
+ }
+
+ $browser->clickToolbarMenuItem('print');
+ });
+
+ $browser->driver->switchTo()->window($new_window);
+
+ $browser->with(new App(), function ($browser) {
+ $browser->assertEnv([
+ 'task' => 'addressbook',
+ 'action' => 'print',
+ ]);
+ });
+
+ $browser->assertVisible('#contactphoto img')
+ ->assertSeeIn('#contacthead .firstname', 'John')
+ ->assertSeeIn('#contacthead .surname', 'Doe')
+ ->assertSeeIn('#contacttabs fieldset:first-child legend', 'Properties')
+ ->assertSeeIn('#contacttabs', 'johndoe@example.org');
+
+ $browser->driver->close();
+ $browser->driver->switchTo()->window($current_window);
+ });
+ }
+}
diff --git a/tests/Browser/Mail/ListTest.php b/tests/Browser/Mail/ListTest.php
index 8405b1b2f..3efe16816 100644
--- a/tests/Browser/Mail/ListTest.php
+++ b/tests/Browser/Mail/ListTest.php
@@ -1,133 +1,134 @@
<?php
namespace Tests\Browser\Mail;
use Tests\Browser\Components\Toolbarmenu;
class ListTest extends \Tests\Browser\TestCase
{
protected static $msgcount = 0;
public static function setUpBeforeClass()
{
\bootstrap::init_imap();
\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->assertElementsCount('#messagelist tbody tr', self::$msgcount);
// check message list
$browser->assertVisible('#messagelist tbody tr:first-child.unread');
$this->assertEquals('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', 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');
}
});
}
else if ($browser->isTablet()) {
$browser->click('.toolbar-list-button')
->waitFor('#toolbar-list-menu');
$browser->with('#toolbar-list-menu', 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(), 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
*/
public function testListSelection()
{
$this->browse(function ($browser) {
if ($browser->isPhone()) {
$browser->with(new Toolbarmenu(), function ($browser) {
$browser->clickMenuItem('select');
});
}
else if ($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', 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
});
}
}

File Metadata

Mime Type
text/x-diff
Expires
Thu, Mar 19, 8:46 AM (19 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
456390
Default Alt Text
(22 KB)

Event Timeline