mirror of
https://github.com/silverstripe/silverstripe-spamprotection.git
synced 2024-10-22 14:05:59 +02:00
Tests for EditableSpamProtectionField validation
Requires setFormField() method to avoid excessive mocking
This commit is contained in:
parent
529960d485
commit
84bbe9d153
@ -31,6 +31,7 @@ before_script:
|
||||
- php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss
|
||||
- cd ~/builds/ss
|
||||
- composer install
|
||||
- composer require silverstripe/userforms
|
||||
|
||||
script:
|
||||
- vendor/bin/phpunit spamprotection/tests
|
||||
|
@ -24,8 +24,17 @@ if (class_exists('EditableFormField')) {
|
||||
'EditableNumericField'
|
||||
);
|
||||
|
||||
/**
|
||||
* @var FormField
|
||||
*/
|
||||
protected $formField = null;
|
||||
|
||||
public function getFormField()
|
||||
{
|
||||
if ($this->formField) {
|
||||
return $this->formField;
|
||||
}
|
||||
|
||||
// Get protector
|
||||
$protector = FormSpamProtectionExtension::get_protector();
|
||||
if (!$protector) {
|
||||
@ -45,6 +54,17 @@ if (class_exists('EditableFormField')) {
|
||||
return $protector->getFormField($this->Name, $this->Title, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param FormField $field
|
||||
* @return self
|
||||
*/
|
||||
public function setFormField(FormField $field)
|
||||
{
|
||||
$this->formField = $field;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of all candidate spam detectable fields on this field's form
|
||||
*
|
||||
|
135
tests/EditableSpamProtectionFieldTest.php
Normal file
135
tests/EditableSpamProtectionFieldTest.php
Normal file
@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
class EditableSpamProtectionFieldTest extends SapphireTest
|
||||
{
|
||||
|
||||
protected $usesDatabase = true;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
Config::inst()->update(
|
||||
'FormSpamProtectionExtension', 'default_spam_protector',
|
||||
'EditableSpamProtectionFieldTest_Protector'
|
||||
);
|
||||
}
|
||||
|
||||
public function testValidateFieldDoesntAddErrorOnSuccess()
|
||||
{
|
||||
if (!class_exists('EditableSpamProtectionField')) {
|
||||
$this->markTestSkipped('"userforms" module not installed');
|
||||
}
|
||||
|
||||
$formMock = $this->getFormMock();
|
||||
$formFieldMock = $this->getEditableFormFieldMock();
|
||||
|
||||
$formFieldMock
|
||||
->getFormField() // mock
|
||||
->expects($this->once())
|
||||
->method('validate')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$formMock
|
||||
->expects($this->never())
|
||||
->method('addErrorMessage');
|
||||
|
||||
$formFieldMock->validateField(array('MyField' => null), $formMock);
|
||||
}
|
||||
|
||||
public function testValidateFieldAddsErrorFromField()
|
||||
{
|
||||
if (!class_exists('EditableSpamProtectionField')) {
|
||||
$this->markTestSkipped('"userforms" module not installed');
|
||||
}
|
||||
|
||||
$formMock = $this->getFormMock();
|
||||
$formFieldMock = $this->getEditableFormFieldMock();
|
||||
|
||||
$formFieldMock
|
||||
->getFormField() // mock
|
||||
->expects($this->once())
|
||||
->method('validate')
|
||||
->will($this->returnValue(false));
|
||||
|
||||
$formMock->getValidator()->validationError('MyField', 'some field message', 'required');
|
||||
|
||||
$formMock
|
||||
->expects($this->once())
|
||||
->method('addErrorMessage')
|
||||
->with($this->anything(), $this->stringContains('some field message'), $this->anything(), $this->anything());;
|
||||
|
||||
$formFieldMock->validateField(array('MyField' => null), $formMock);
|
||||
}
|
||||
|
||||
public function testValidateFieldAddsDefaultError()
|
||||
{
|
||||
if (!class_exists('EditableSpamProtectionField')) {
|
||||
$this->markTestSkipped('"userforms" module not installed');
|
||||
}
|
||||
|
||||
$formMock = $this->getFormMock();
|
||||
$formFieldMock = $this->getEditableFormFieldMock();
|
||||
|
||||
$formFieldMock
|
||||
->getFormField() // mock
|
||||
->expects($this->once())
|
||||
->method('validate')
|
||||
->will($this->returnValue(false));
|
||||
|
||||
// field doesn't set any validation errors here
|
||||
|
||||
$formMock
|
||||
->expects($this->once())
|
||||
->method('addErrorMessage')
|
||||
->with($this->anything(), $this->stringContains('default error message'), $this->anything(), $this->anything());
|
||||
|
||||
$formFieldMock->validateField(array('MyField' => null), $formMock);
|
||||
}
|
||||
|
||||
protected function getFormMock()
|
||||
{
|
||||
$formMock = $this->getMockBuilder('Form', array('addErrorMessage'))
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$formMock
|
||||
->expects($this->any())
|
||||
->method('getValidator')
|
||||
->will($this->returnValue(new RequiredFields()));
|
||||
|
||||
return $formMock;
|
||||
}
|
||||
|
||||
protected function getEditableFormFieldMock()
|
||||
{
|
||||
$page = new UserDefinedForm();
|
||||
$page->write();
|
||||
|
||||
$formFieldMock = $this->getMockBuilder('TextField')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$editableFormFieldMock = new EditableSpamProtectionField(array(
|
||||
'ParentID' => $page->ID,
|
||||
'Name' => 'MyField',
|
||||
'CustomErrorMessage' => 'default error message'
|
||||
));
|
||||
$editableFormFieldMock->write();
|
||||
$editableFormFieldMock->setFormField($formFieldMock);
|
||||
|
||||
return $editableFormFieldMock;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class EditableSpamProtectionFieldTest_Protector implements SpamProtector, TestOnly
|
||||
{
|
||||
public function getFormField($name = null, $title = null, $value = null)
|
||||
{
|
||||
return new TextField($name, 'Foo', $value);
|
||||
}
|
||||
|
||||
public function setFieldMapping($fieldMapping)
|
||||
{
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user