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
|
- php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss
|
||||||
- cd ~/builds/ss
|
- cd ~/builds/ss
|
||||||
- composer install
|
- composer install
|
||||||
|
- composer require silverstripe/userforms
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- vendor/bin/phpunit spamprotection/tests
|
- vendor/bin/phpunit spamprotection/tests
|
||||||
|
@ -24,8 +24,17 @@ if (class_exists('EditableFormField')) {
|
|||||||
'EditableNumericField'
|
'EditableNumericField'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var FormField
|
||||||
|
*/
|
||||||
|
protected $formField = null;
|
||||||
|
|
||||||
public function getFormField()
|
public function getFormField()
|
||||||
{
|
{
|
||||||
|
if ($this->formField) {
|
||||||
|
return $this->formField;
|
||||||
|
}
|
||||||
|
|
||||||
// Get protector
|
// Get protector
|
||||||
$protector = FormSpamProtectionExtension::get_protector();
|
$protector = FormSpamProtectionExtension::get_protector();
|
||||||
if (!$protector) {
|
if (!$protector) {
|
||||||
@ -45,6 +54,17 @@ if (class_exists('EditableFormField')) {
|
|||||||
return $protector->getFormField($this->Name, $this->Title, null);
|
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
|
* 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