2010-09-03 07:06:13 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @package userforms
|
|
|
|
*/
|
|
|
|
class UserDefinedFormTest extends FunctionalTest {
|
|
|
|
|
2015-07-24 04:37:48 +02:00
|
|
|
static $fixture_file = 'UserDefinedFormTest.yml';
|
2010-09-03 07:06:13 +02:00
|
|
|
|
2015-08-10 07:03:36 +02:00
|
|
|
public function testRollbackToVersion() {
|
2012-05-07 12:00:18 +02:00
|
|
|
$this->markTestSkipped(
|
|
|
|
'UserDefinedForm::rollback() has not been implemented completely'
|
|
|
|
);
|
2015-07-13 05:36:20 +02:00
|
|
|
|
|
|
|
// @todo
|
2010-09-03 07:06:13 +02:00
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
|
|
|
|
|
|
|
$form->SubmitButtonText = 'Button Text';
|
|
|
|
$form->write();
|
|
|
|
$form->doPublish();
|
|
|
|
$origVersion = $form->Version;
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$form->SubmitButtonText = 'Updated Button Text';
|
|
|
|
$form->write();
|
|
|
|
$form->doPublish();
|
|
|
|
|
|
|
|
// check published site
|
|
|
|
$updated = Versioned::get_one_by_stage("UserDefinedForm", "Stage", "\"UserDefinedForm\".\"ID\" = $form->ID");
|
|
|
|
$this->assertEquals($updated->SubmitButtonText, 'Updated Button Text');
|
|
|
|
|
|
|
|
$form->doRollbackTo($origVersion);
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$orignal = Versioned::get_one_by_stage("UserDefinedForm", "Stage", "\"UserDefinedForm\".\"ID\" = $form->ID");
|
|
|
|
$this->assertEquals($orignal->SubmitButtonText, 'Button Text');
|
|
|
|
}
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2015-08-10 07:03:36 +02:00
|
|
|
public function testGetCMSFields() {
|
2010-09-03 07:06:13 +02:00
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$fields = $form->getCMSFields();
|
|
|
|
|
|
|
|
$this->assertTrue($fields->dataFieldByName('Fields') !== null);
|
|
|
|
$this->assertTrue($fields->dataFieldByName('EmailRecipients') != null);
|
2014-10-27 16:38:14 +01:00
|
|
|
$this->assertTrue($fields->dataFieldByName('Submissions') != null);
|
2010-09-03 07:06:13 +02:00
|
|
|
$this->assertTrue($fields->dataFieldByName('OnCompleteMessage') != null);
|
|
|
|
}
|
|
|
|
|
2015-08-10 07:03:36 +02:00
|
|
|
public function testEmailRecipientPopup() {
|
2010-09-03 07:06:13 +02:00
|
|
|
$this->logInWithPermission('ADMIN');
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$popup = new UserDefinedForm_EmailRecipient();
|
2015-07-13 05:36:20 +02:00
|
|
|
$popup->FormID = $form->ID;
|
|
|
|
|
2012-04-22 21:17:42 +02:00
|
|
|
$fields = $popup->getCMSFields();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$this->assertTrue($fields->dataFieldByName('EmailSubject') !== null);
|
|
|
|
$this->assertTrue($fields->dataFieldByName('EmailFrom') !== null);
|
|
|
|
$this->assertTrue($fields->dataFieldByName('EmailAddress') !== null);
|
|
|
|
$this->assertTrue($fields->dataFieldByName('HideFormData') !== null);
|
|
|
|
$this->assertTrue($fields->dataFieldByName('SendPlain') !== null);
|
|
|
|
$this->assertTrue($fields->dataFieldByName('EmailBody') !== null);
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
// add an email field, it should now add a or from X address picker
|
|
|
|
$email = $this->objFromFixture('EditableEmailField','email-field');
|
|
|
|
$form->Fields()->add($email);
|
2010-09-08 00:44:43 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$popup->write();
|
|
|
|
|
2012-04-22 21:17:42 +02:00
|
|
|
$fields = $popup->getCMSFields();
|
2015-07-13 05:36:20 +02:00
|
|
|
$this->assertThat($fields->dataFieldByName('SendEmailToFieldID'), $this->isInstanceOf('DropdownField'));
|
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
// if the front end has checkboxs or dropdown they can select from that can also be used to send things
|
|
|
|
$dropdown = $this->objFromFixture('EditableDropdown', 'department-dropdown');
|
|
|
|
$form->Fields()->add($dropdown);
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2012-04-22 21:17:42 +02:00
|
|
|
$fields = $popup->getCMSFields();
|
2010-09-03 07:06:13 +02:00
|
|
|
$this->assertTrue($fields->dataFieldByName('SendEmailToFieldID') !== null);
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$popup->delete();
|
|
|
|
}
|
2015-07-16 05:06:53 +02:00
|
|
|
|
|
|
|
function testGetEmailBodyContent() {
|
|
|
|
$recipient = new UserDefinedForm_EmailRecipient();
|
|
|
|
|
|
|
|
$emailBody = 'not html';
|
|
|
|
$emailBodyHtml = '<p>html</p>';
|
|
|
|
|
|
|
|
$recipient->EmailBody = $emailBody;
|
|
|
|
$recipient->EmailBodyHtml = $emailBodyHtml;
|
|
|
|
$recipient->write();
|
|
|
|
|
|
|
|
$this->assertEquals($recipient->SendPlain, 0);
|
|
|
|
$this->assertEquals($recipient->getEmailBodyContent(), $emailBodyHtml);
|
|
|
|
|
|
|
|
$recipient->SendPlain = 1;
|
|
|
|
$recipient->write();
|
|
|
|
|
|
|
|
$this->assertEquals($recipient->getEmailBodyContent(), $emailBody);
|
|
|
|
|
|
|
|
$recipient->delete();
|
|
|
|
}
|
|
|
|
|
|
|
|
function testGetEmailTemplateDropdownValues() {
|
|
|
|
$recipient = new UserDefinedForm_EmailRecipient();
|
|
|
|
|
|
|
|
$defaultValues = array('SubmittedFormEmail' => 'SubmittedFormEmail');
|
|
|
|
|
|
|
|
$this->assertEquals($recipient->getEmailTemplateDropdownValues(), $defaultValues);
|
|
|
|
}
|
|
|
|
|
|
|
|
function testEmailTemplateExists() {
|
|
|
|
$recipient = new UserDefinedForm_EmailRecipient();
|
|
|
|
|
|
|
|
// Set the default template
|
|
|
|
$recipient->EmailTemplate = current(array_keys($recipient->getEmailTemplateDropdownValues()));
|
|
|
|
$recipient->write();
|
|
|
|
|
|
|
|
// The default template exists
|
|
|
|
$this->assertTrue($recipient->emailTemplateExists());
|
|
|
|
|
|
|
|
// A made up template doesn't exists
|
|
|
|
$this->assertFalse($recipient->emailTemplateExists('MyTemplateThatsNotThere'));
|
|
|
|
|
|
|
|
$recipient->delete();
|
|
|
|
}
|
|
|
|
|
2010-09-08 00:44:43 +02:00
|
|
|
function testCanEditAndDeleteRecipient() {
|
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
|
|
|
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
foreach($form->EmailRecipients() as $recipient) {
|
|
|
|
$this->assertTrue($recipient->canEdit());
|
|
|
|
$this->assertTrue($recipient->canDelete());
|
|
|
|
}
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-08 00:44:43 +02:00
|
|
|
$member = Member::currentUser();
|
|
|
|
$member->logOut();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-08 00:44:43 +02:00
|
|
|
$this->logInWithPermission('SITETREE_VIEW_ALL');
|
|
|
|
foreach($form->EmailRecipients() as $recipient) {
|
|
|
|
$this->assertFalse($recipient->canEdit());
|
|
|
|
$this->assertFalse($recipient->canDelete());
|
|
|
|
}
|
|
|
|
}
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
function testPublishing() {
|
|
|
|
$this->logInWithPermission('ADMIN');
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
|
|
|
$form->write();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$form->doPublish();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID");
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$this->assertNotNull($live);
|
2015-08-10 07:03:36 +02:00
|
|
|
$this->assertEquals(2, $live->Fields()->Count()); // one page and one field
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$dropdown = $this->objFromFixture('EditableDropdown', 'basic-dropdown');
|
|
|
|
$form->Fields()->add($dropdown);
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$stage = Versioned::get_one_by_stage("UserDefinedForm", "Stage", "\"UserDefinedForm\".\"ID\" = $form->ID");
|
2015-08-10 07:03:36 +02:00
|
|
|
$this->assertEquals(3, $stage->Fields()->Count());
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
// should not have published the dropdown
|
|
|
|
$liveDropdown = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $dropdown->ID");
|
2012-05-07 12:00:18 +02:00
|
|
|
$this->assertNull($liveDropdown);
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
// when publishing it should have added it
|
|
|
|
$form->doPublish();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID");
|
2015-08-10 07:03:36 +02:00
|
|
|
$this->assertEquals(3, $live->Fields()->Count());
|
2015-07-13 05:36:20 +02:00
|
|
|
|
|
|
|
// edit the title
|
2015-08-10 07:03:36 +02:00
|
|
|
$text = $form->Fields()->limit(1, 1)->First();
|
2010-09-03 07:06:13 +02:00
|
|
|
$text->Title = 'Edited title';
|
|
|
|
$text->write();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$liveText = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $text->ID");
|
|
|
|
$this->assertFalse($liveText->Title == $text->Title);
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$form->doPublish();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$liveText = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $text->ID");
|
|
|
|
$this->assertTrue($liveText->Title == $text->Title);
|
|
|
|
}
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
function testUnpublishing() {
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
|
|
|
$form->write();
|
2015-08-10 07:03:36 +02:00
|
|
|
$this->assertEquals(0, DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value());
|
2010-09-03 07:06:13 +02:00
|
|
|
$form->doPublish();
|
|
|
|
|
|
|
|
// assert that it exists and has a field
|
|
|
|
$live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID");
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$this->assertTrue(isset($live));
|
2015-08-10 07:03:36 +02:00
|
|
|
$this->assertEquals(2, DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value());
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
// unpublish
|
|
|
|
$form->doUnpublish();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2012-05-07 12:00:18 +02:00
|
|
|
$this->assertNull(Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID"));
|
2015-08-10 07:03:36 +02:00
|
|
|
$this->assertEquals(0, DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value());
|
2010-09-03 07:06:13 +02:00
|
|
|
}
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
function testDoRevertToLive() {
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
2012-05-07 12:00:18 +02:00
|
|
|
$field = $form->Fields()->First();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2012-05-07 12:00:18 +02:00
|
|
|
$field->Title = 'Title';
|
|
|
|
$field->write();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2012-05-07 12:00:18 +02:00
|
|
|
$form->doPublish();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2012-05-07 12:00:18 +02:00
|
|
|
$field->Title = 'Edited title';
|
|
|
|
$field->write();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2012-05-07 12:00:18 +02:00
|
|
|
// check that the published version is not updated
|
|
|
|
$live = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $field->ID");
|
|
|
|
$this->assertEquals('Title', $live->Title);
|
2010-09-03 07:06:13 +02:00
|
|
|
|
|
|
|
// revert back to the live data
|
|
|
|
$form->doRevertToLive();
|
2012-05-07 12:00:18 +02:00
|
|
|
$form->flushCache();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2012-05-07 12:00:18 +02:00
|
|
|
$check = Versioned::get_one_by_stage("EditableFormField", "Stage", "\"EditableFormField\".\"ID\" = $field->ID");
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2012-05-07 12:00:18 +02:00
|
|
|
$this->assertEquals('Title', $check->Title);
|
2010-09-03 07:06:13 +02:00
|
|
|
}
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
function testDuplicatingForm() {
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$duplicate = $form->duplicate();
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$this->assertEquals($form->Fields()->Count(), $duplicate->Fields()->Count());
|
|
|
|
$this->assertEquals($form->EmailRecipients()->Count(), $form->EmailRecipients()->Count());
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
// can't compare object since the dates/ids change
|
|
|
|
$this->assertEquals($form->Fields()->First()->Title, $duplicate->Fields()->First()->Title);
|
|
|
|
}
|
|
|
|
|
|
|
|
function testFormOptions() {
|
|
|
|
$this->logInWithPermission('ADMIN');
|
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
2015-07-13 05:36:20 +02:00
|
|
|
|
2010-09-03 07:06:13 +02:00
|
|
|
$fields = $form->getFormOptions();
|
|
|
|
$submit = $fields->fieldByName('SubmitButtonText');
|
|
|
|
$reset = $fields->fieldByName('ShowClearButton');
|
|
|
|
|
|
|
|
$this->assertEquals($submit->Title(), 'Text on submit button:');
|
|
|
|
$this->assertEquals($reset->Title(), 'Show Clear Form Button');
|
|
|
|
}
|
2015-07-13 05:36:20 +02:00
|
|
|
|
|
|
|
public function testEmailRecipientFilters() {
|
|
|
|
$form = $this->objFromFixture('UserDefinedForm', 'filtered-form-page');
|
|
|
|
|
|
|
|
// Check unfiltered recipients
|
|
|
|
$result0 = $form
|
|
|
|
->EmailRecipients()
|
|
|
|
->sort('EmailAddress')
|
|
|
|
->column('EmailAddress');
|
|
|
|
$this->assertEquals(
|
|
|
|
array(
|
|
|
|
'filtered1@example.com',
|
|
|
|
'filtered2@example.com',
|
|
|
|
'unfiltered@example.com'
|
|
|
|
),
|
|
|
|
$result0
|
|
|
|
);
|
|
|
|
|
|
|
|
// check filters based on given data
|
|
|
|
$result1 = $form->FilteredEmailRecipients(
|
|
|
|
array(
|
|
|
|
'your-name' => 'Value',
|
|
|
|
'address' => '',
|
|
|
|
'street' => 'Anything',
|
|
|
|
'city' => 'Matches Not Equals',
|
|
|
|
'colours' => array('Red') // matches 2
|
|
|
|
), null
|
|
|
|
)
|
|
|
|
->sort('EmailAddress')
|
|
|
|
->column('EmailAddress');
|
|
|
|
$this->assertEquals(
|
|
|
|
array(
|
|
|
|
'filtered2@example.com',
|
|
|
|
'unfiltered@example.com'
|
|
|
|
),
|
|
|
|
$result1
|
|
|
|
);
|
|
|
|
|
|
|
|
// Check all positive matches
|
|
|
|
$result2 = $form->FilteredEmailRecipients(
|
|
|
|
array(
|
|
|
|
'your-name' => '',
|
|
|
|
'address' => 'Anything',
|
|
|
|
'street' => 'Matches Equals',
|
|
|
|
'city' => 'Anything',
|
|
|
|
'colours' => array('Red', 'Blue') // matches 2
|
|
|
|
), null
|
|
|
|
)
|
|
|
|
->sort('EmailAddress')
|
|
|
|
->column('EmailAddress');
|
|
|
|
$this->assertEquals(
|
|
|
|
array(
|
|
|
|
'filtered1@example.com',
|
|
|
|
'filtered2@example.com',
|
|
|
|
'unfiltered@example.com'
|
|
|
|
),
|
|
|
|
$result2
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
$result3 = $form->FilteredEmailRecipients(
|
|
|
|
array(
|
|
|
|
'your-name' => 'Should be blank but is not',
|
|
|
|
'address' => 'Anything',
|
|
|
|
'street' => 'Matches Equals',
|
|
|
|
'city' => 'Anything',
|
|
|
|
'colours' => array('Blue')
|
|
|
|
), null
|
|
|
|
)->column('EmailAddress');
|
|
|
|
$this->assertEquals(
|
|
|
|
array(
|
|
|
|
'unfiltered@example.com'
|
|
|
|
),
|
|
|
|
$result3
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
$result4 = $form->FilteredEmailRecipients(
|
|
|
|
array(
|
|
|
|
'your-name' => '',
|
|
|
|
'address' => 'Anything',
|
|
|
|
'street' => 'Wrong value for this field',
|
|
|
|
'city' => '',
|
|
|
|
'colours' => array('Blue', 'Green')
|
|
|
|
), null
|
|
|
|
)->column('EmailAddress');
|
|
|
|
$this->assertEquals(
|
|
|
|
array(
|
|
|
|
'unfiltered@example.com'
|
|
|
|
),
|
|
|
|
$result4
|
|
|
|
);
|
|
|
|
}
|
2015-08-19 04:22:03 +02:00
|
|
|
|
|
|
|
public function testIndex() {
|
|
|
|
// Test that the $UserDefinedForm is stripped out
|
|
|
|
$page = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
|
|
|
$page->publish('Stage', 'Live');
|
|
|
|
|
|
|
|
$result = $this->get($page->Link());
|
|
|
|
$body = Convert::nl2os($result->getBody(), ''); // strip out newlines
|
|
|
|
$this->assertFalse($result->isError());
|
|
|
|
$this->assertContains('<p>Here is my form</p><form', $body);
|
|
|
|
$this->assertContains('</form><p>Thank you for filling it out</p>', $body);
|
|
|
|
|
|
|
|
$this->assertNotContains('<p>$UserDefinedForm</p>', $body);
|
|
|
|
$this->assertNotContains('<p></p>', $body);
|
|
|
|
$this->assertNotContains('</p><p>Thank you for filling it out</p>', $body);
|
|
|
|
}
|
2010-09-03 07:06:13 +02:00
|
|
|
}
|