Skip to content

Commit

Permalink
MNT Add behat tests
Browse files Browse the repository at this point in the history
  • Loading branch information
emteknetnz committed Sep 28, 2021
1 parent 62b726e commit 052808a
Show file tree
Hide file tree
Showing 2 changed files with 206 additions and 0 deletions.
188 changes: 188 additions & 0 deletions tests/behat/features/userforms.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
Feature: Userforms
As a website user
I want to user userforms

Background:
Given the "group" "EDITOR group" has permissions "CMS_ACCESS_LeftAndMain"
# Explicitly create an admin group with the default administrators code for UserDefinedFormAdmin
And the "group" "ADMIN group" has permissions "Full administrative rights"
And a "group" "ADMIN group" has the "Code" "administrators"

@sboyd
Scenario: Operate userforms
Given I am logged in with "ADMIN" permissions
When I go to "/admin/pages"
And I press the "Add new" button
And I select the "User Defined Form" radio button
And I press the "Create" button
And I fill in "Page name" with "My userform"
And I press the "Save" button

When I click the "Form Fields" CMS tab

# Create drop down field
And I press the "Add Field" button
And I fill in "Form_Fields_GridFieldEditableColumns_2_Title" with "My dropdown"
And I select "Dropdown Field" from "Form_Fields_GridFieldEditableColumns_2_ClassName"
And I press the "Save" button
And I click on the ".ss-gridfield-item[data-id='2'] .edit-link" element
And I click the "Options" CMS tab
And I press the "Add" button
And I fill in "Options[GridFieldAddNewInlineButton][1][Title]" with "My option 1"
And I fill in "Options[GridFieldAddNewInlineButton][1][Value]" with "1"
And I check "Options_GridFieldAddNewInlineButton_o_num_Default"
And I press the "Add" button
And I fill in "Options[GridFieldAddNewInlineButton][2][Title]" with "My option 2"
And I fill in "Options[GridFieldAddNewInlineButton][2][Value]" with "2"
And I press the "Save" button
And I follow "My userform"

# Create textfields
And I press the "Add Field" button
And I press the "Add Field" button
When I fill in "Form_Fields_GridFieldEditableColumns_3_Title" with "My textfield 1"
When I fill in "Form_Fields_GridFieldEditableColumns_4_Title" with "My textfield 2"
And I press the "Save" button
When I press the "Add Page Break" button
And I press the "Add Field" button
And I press the "Add Field" button
And I fill in "Form_Fields_GridFieldEditableColumns_5_Title" with "Second Page"
When I fill in "Form_Fields_GridFieldEditableColumns_6_Title" with "My textfield 3"
And I fill in "Form_Fields_GridFieldEditableColumns_7_Title" with "My upload field"
# Weird behat limitation where the only the select field on the first row is selectable
And I drag the ".ss-gridfield-item[data-id='7'] .handle" element to the ".ss-gridfield-item[data-id='2'] .handle" element
And I select "File Upload Field" from the "Form_Fields_GridFieldEditableColumns_7_ClassName" field
# Click save on the file upload modal to use the default "Form-submissions" folder
And I press the "Save and continue" button
And I wait for 5 seconds
And I press the "Save" button

# Edit My textfield 3
When I click on the ".ss-gridfield-item[data-id='6'] .edit-link" element
And I click the "Validation" CMS tab
And I check "Is this field Required?"
And I press the "Save" button
And I follow "My userform"

# Drag and drop my text field 2 to Page Two
Then I drag the ".ss-gridfield-item[data-id='4'] .handle" element to the ".ss-gridfield-item[data-id='6'] .handle" element
And I press the "Publish" button

# Add email recipient with custom text and custom rules
When I click the "Recipients" CMS tab
And I press the "Add Email Recipient" button
And I fill in "Type subject" with "New userform submission"
And I fill in "Type to address" with "[email protected]"
And I fill in "Send email from" with "[email protected]"
And I press the "Create" button
And I click the "Custom Rules" CMS tab
And I press the "Add" button
And I select "My textfield 2" from the "CustomRules[GridFieldAddNewInlineButton][1][ConditionFieldID]" field with javascript
And I select "Equals" from "CustomRules[GridFieldAddNewInlineButton][1][ConditionOption]"
And I fill in "CustomRules[GridFieldAddNewInlineButton][1][ConditionValue]" with "do send"
And I click the "Email Content" CMS tab
And I fill in "<p>Custom body</p>" for the "EmailBodyHtml" HTML field
And I press the "Save" button

# Preview HTML email
When I preview the email
Then the rendered HTML should contain "<p>Custom body</p>"

# Logout
Given I go to "/Security/login"
And I press the "Log in as someone else" button

# View frontend as anonymous user
When I go to "/my-userform"
Then I should see "Page 1 of 2"
Then I should see "First Page"
And I should not see "Second Page"
And I should see "My upload field"
And I should see "My dropdown"
And I should see "My textfield 1"
And I should not see "My textfield 2"
And I should not see "My textfield 3"

# Pressing '2' buton should do nothing at this stage
When I press the "2" button
Then I should see "First Page"

When I press the "Next" button
Then I should see "Page 2 of 2"
Then I should not see "First Page"
And I should see "Second Page"
And I should not see "My upload field"
And I should not see "My dropdown"
And I should not see "My textfield 1"
And I should see "My textfield 2"
And I should see "My textfield 3"

When I press the "1" button
Then I should see "First Page"
When I press the "2" button
Then I should see "Second Page"
When I press the "Prev" button
Then I should see "First Page"

When I attach the file "testfile.txt" to the "input.file" field
And I fill in "My textfield 1" with "My value 1"
And I press the "Next" button
And I fill in "My textfield 2" with "do not send"
And I press the "Submit" button
Then I should see "'My textfield 3' is required"

When I fill in "My textfield 3" with "My value 3"
And I press the "Submit" button
Then I should see "Thanks, we've received your submission."
And there should not be an email to "[email protected]" titled "New userform submission"

# Do again this time with sending email because it did pass custom rule
When I go to "/my-userform"
And I press the "Next" button
And I fill in "My textfield 2" with "do send"
And I fill in "My textfield 3" with "lorem ipsum"
And I press the "Submit" button
Then there should be an email to "[email protected]" titled "New userform submission"
And the email should contain "<p>Custom body</p>"

# View submission in backend
When I am logged in with "ADMIN" permissions
When I go to "/admin/pages"
And I follow "My userform"
And I click the "Submissions" CMS tab
Then I should see a ".ss-gridfield-item .col-ID" element

# View uploaded file in backend
When I go to "/admin/assets"
# We don't have access to asset-admin FeatureContext here, so using CSS selectors instead
# Go to the Form-submissions folder, which will be the first/only folder
And I click on the ".gallery__folders .gallery-item__title" element
# Assert uploaded file, there will only be one file
Then I should see a ".gallery__files .gallery-item__title" element
And the rendered HTML should contain "testfile"
# Assert is protected file
And I should see a ".gallery__files .gallery-item__thumbnail .font-icon-user-lock" element
# Assert has form submission icon
And I should see a ".gallery__files .gallery-item__thumbnail .font-icon-address-card" element

# Duplicate userform
When I go to "/admin/pages"
And I right click on "My userform" in the tree
And I hover on "Duplicate" in the context menu
And I click on "This page only" in the context menu
When I click the "Form Fields" CMS tab
Then the rendered HTML should contain "My dropdown"
And the rendered HTML should contain "My textfield 3"

When I click on the ".ss-gridfield-item[data-id='10'] .edit-link" element
And I click the "Options" CMS tab
Then the rendered HTML should contain "My option 1"
And the rendered HTML should contain "My option 2"

When I follow "My userform"
And I click the "Recipients" CMS tab

# This is a bug, recipient isn't duplicating
# Then the rendered HTML should contain "[email protected]"
# When I click the "Custom Rules" CMS tab
# Then the rendered HTML should contain "do send"
18 changes: 18 additions & 0 deletions tests/behat/src/FeatureContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,22 @@

class FeatureContext extends SilverStripeContext
{
/**
* The preview email button is a hyperlink with target="_blank"
* Behat won't view the newly opened tab
*
* @When /^I preview the email$/
*/
public function iPreviewTheEmail()
{
$js = <<<JS
document.querySelectorAll('a.btn').forEach(link => {
if (link.innerHTML.trim() == 'Preview email') {
document.location.href = link.href;
}
});
JS;
$result = $this->getSession()->getDriver()->executeScript($js);
sleep(5);
}
}

0 comments on commit 052808a

Please sign in to comment.