withWooCommerceListImportPageDisplayed(true); (new Settings())->withCookieRevenueTrackingDisabled(); } public function viewUserRoleSegmentSubscribers(\AcceptanceTester $i) { $i->wantTo('View WP user role segment subscribers'); $wpAdminEmail = 'test-admin@example.com'; $wpEditorEmail = 'test-editor@example.com'; $wpAuthorEmail = 'test-author@example.com'; $segmentTitle = 'User Role Segment Test'; $this->createUser('Test Admin', 'admin', $wpAdminEmail); $this->createUser('Test Editor', 'editor', $wpEditorEmail); $this->createUser('Test Author', 'author', $wpAuthorEmail); $segmentFactory = new DynamicSegment(); $segment = $segmentFactory ->withName($segmentTitle) ->withUserRoleFilter('Editor') ->create(); $i->login(); $i->amOnMailpoetPage('Lists'); $i->waitForElement('[data-automation-id="dynamic-segments-tab"]'); $i->click('[data-automation-id="dynamic-segments-tab"]'); $listingAutomationSelector = '[data-automation-id="listing_item_' . $segment->id . '"]'; $i->waitForText($segmentTitle, 10, $listingAutomationSelector); $i->clickItemRowActionByItemName($segmentTitle, 'View Subscribers'); $i->seeInCurrentUrl('mailpoet-subscribers#'); $i->seeInCurrentUrl('segment=' . $segment->id); $i->waitForText($wpEditorEmail, 20); $i->see($segmentTitle, ['css' => 'select[name=segment]']); $i->dontSee($wpAdminEmail); $i->dontSee($wpAuthorEmail); $i->seeNoJSErrors(); } public function createEditTrashRestoreAndDeleteExistingSegment(\AcceptanceTester $i) { $i->wantTo('Create, edit, trash, restore and delete existing segment'); $segmentTitle = 'User Segment'; $segmentEditedTitle = 'User Segment EDITED'; $segmentDesc = 'Lorem ipsum dolor sit amet'; $segmentEditedDesc = 'Lorem ipsum dolor sit amet EDITED'; // Prepare (2) additional segments for the test $segmentFactory = new DynamicSegment(); $segment = $segmentFactory ->withName($segmentTitle . ' TRASHED 1') ->withUserRoleFilter('Administrator') ->withDeleted() ->create(); $segmentFactory ->withName($segmentTitle . ' TRASHED 2') ->withUserRoleFilter('Administrator') ->withDeleted() ->create(); // Create a new segment $i->login(); $i->amOnMailpoetPage('Lists'); $i->waitForElement('[data-automation-id="dynamic-segments-tab"]'); $i->click('[data-automation-id="dynamic-segments-tab"]'); $i->click('[data-automation-id="new-segment"]'); $i->fillField(['name' => 'name'], $segmentTitle); $i->fillField(['name' => 'description'], $segmentDesc); $i->selectOption('form select[name=segmentType]', 'WordPress user roles'); $i->selectOption('form select[name=wordpressRole]', 'Subscriber'); $i->click('Save'); $i->waitForElement('[data-automation-id="dynamic-segments-tab"]'); $i->click('[data-automation-id="dynamic-segments-tab"]'); $i->waitForText($segmentTitle); // Edit existing segment $i->clickItemRowActionByItemName($segmentTitle, 'Edit'); $i->waitForElementNotVisible('.mailpoet_form_loading'); $i->fillField(['name' => 'name'], $segmentEditedTitle); $i->fillField(['name' => 'description'], $segmentEditedDesc); $i->selectOption('form select[name=segmentType]', 'WordPress user roles'); $i->selectOption('form select[name=wordpressRole]', 'Editor'); $i->click('Save'); $i->waitForElement('[data-automation-id="dynamic-segments-tab"]'); $i->click('[data-automation-id="dynamic-segments-tab"]'); $i->waitForText($segmentEditedTitle); $i->seeNoJSErrors(); // Trash existing segment $i->clickItemRowActionByItemName($segmentEditedTitle, 'Move to trash'); $i->waitForText('1 segment was moved to the trash.'); $i->click('[data-automation-id="filters_trash"]'); $i->waitForText($segmentEditedTitle); $i->seeNoJSErrors(); // Restore trashed segment $i->clickItemRowActionByItemName($segmentEditedTitle, 'Restore'); $i->waitForText('1 segment has been restored from the Trash.'); $i->seeInCurrentURL(urlencode('group[trash]')); $i->click('[data-automation-id="filters_all"]'); $i->waitForText($segmentEditedTitle); $i->seeNoJSErrors(); // Trash and delete existing segment $i->clickItemRowActionByItemName($segmentEditedTitle, 'Move to trash'); $i->waitForText('1 segment was moved to the trash.'); $i->click('[data-automation-id="filters_trash"]'); $i->waitForText($segmentEditedTitle); $i->clickItemRowActionByItemName($segmentEditedTitle, 'Delete permanently'); $i->waitForText('1 segment was permanently deleted.'); $i->seeNoJSErrors(); $i->waitForText($segmentTitle . ' TRASHED 1'); $i->waitForText($segmentTitle . ' TRASHED 2'); // Empty trash from other (2) segments $i->click('[data-automation-id="empty_trash"]'); $i->waitForText('2 segments were permanently deleted.'); $listingAutomationSelector = '[data-automation-id="listing_item_' . $segment->id . '"]'; $i->dontSeeElement($listingAutomationSelector); $i->seeInCurrentURL(urlencode('group[all]')); $i->seeNoJSErrors(); } public function createEmailSegment(\AcceptanceTester $i) { $i->wantTo('Create a new email segment'); $emailSubject = 'Segment Email Test'; $newsletterFactory = new Newsletter(); $newsletterFactory->withSubject($emailSubject)->create(); $segmentTitle = 'Create Email Segment Test'; $segmentDesc = 'Lorem ipsum dolor sit amet'; $i->login(); $i->amOnMailpoetPage('Lists'); $i->click('[data-automation-id="new-segment"]'); $i->fillField(['name' => 'name'], $segmentTitle); $i->fillField(['name' => 'description'], $segmentDesc); $i->selectOption('form select[name=segmentType]', 'Email'); $i->selectOption('form select[name=action]', 'opened'); $i->click('#select2-newsletter_id-container'); $i->selectOptionInSelect2($emailSubject); $i->click('Save'); $i->amOnMailpoetPage('Lists'); $i->waitForElement('[data-automation-id="dynamic-segments-tab"]'); $i->click('[data-automation-id="dynamic-segments-tab"]'); $i->waitForText($segmentTitle, 20); } private function createUser($name, $role, $email) { $userId = wp_create_user($name, "$name-password", $email); assert(is_int($userId)); $user = get_user_by('ID', $userId); assert($user instanceof \WP_User); foreach ($user->roles as $defaultRole) { $user->remove_role($defaultRole); } $user->add_role($role); return $user; } }