Browse Source

ContactForm

euromark 11 years ago
parent
commit
cd33745c17
2 changed files with 137 additions and 0 deletions
  1. 50 0
      src/Form/ContactForm.php
  2. 87 0
      tests/TestCase/Form/ContactFormTest.php

+ 50 - 0
src/Form/ContactForm.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace Tools\Form;
+
+use Cake\Form\Form;
+use Cake\Form\Schema;
+use Cake\Validation\Validator;
+
+/**
+ * A default ContactForm form fitting most apps.
+ * Extend in your app to fill _execute() and to customize
+ *
+ * @author Mark Scherer
+ * @license MIT
+ */
+class ContactForm extends Form {
+
+	protected function _buildSchema(Schema $schema) {
+		return $schema->addField('name', ['type' => 'string', 'length' => 40])
+			->addField('email', ['type' => 'string', 'length' => 50])
+			->addField('subject', ['type' => 'string', 'length' => 60])
+			->addField('body', ['type' => 'text']);
+	}
+
+	protected function _buildValidator(Validator $validator) {
+		return $validator
+			->add('name', 'length', [
+					'rule' => ['minLength', 1],
+					'message' => 'A name is required'
+			])
+			->add('email', 'format', [
+					'rule' => 'email',
+					'message' => 'A valid email address is required',
+			])
+			->add('subject', 'length', [
+					'rule' => ['minLength', 1],
+					'message' => 'A subject is required',
+			])
+			->add('message', 'length', [
+					'rule' => ['minLength', 1],
+					'message' => 'A message body is required',
+			]);
+	}
+
+	protected function _execute(array $data) {
+		// Overwrite in your extending class
+		return true;
+	}
+
+}

+ 87 - 0
tests/TestCase/Form/ContactFormTest.php

@@ -0,0 +1,87 @@
+<?php
+
+namespace Tools\Form;
+
+use Tools\TestSuite\TestCase;
+use Tools\Form\ContactForm;
+
+use Cake\ORM\Entity;
+use Cake\ORM\Query;
+use Cake\ORM\Table;
+use Cake\Core\Configure;
+use Cake\Auth\DefaultPasswordHasher;
+use Cake\ORM\TableRegistry;
+use Cake\Utility\Security;
+use Cake\Routing\Router;
+use Cake\Network\Request;
+use Cake\Auth\PasswordHasherFactory;
+use Cake\I18n\Time;
+use Cake\Datasource\ConnectionManager;
+
+class ContactFormTest extends TestCase {
+
+	public $fixtures = array(
+		'core.posts', 'core.authors',
+		'plugin.tools.tools_users', 'plugin.tools.roles',
+	);
+
+	public $Form;
+
+	/**
+	 * SetUp method
+	 *
+	 * @return void
+	 */
+	public function setUp() {
+		parent::setUp();
+
+		Configure::write('App.namespace', 'TestApp');
+
+		$this->Form = new ContactForm();
+	}
+
+	/**
+	 * Test testValidate
+	 *
+	 * @return void
+	 */
+	public function testValidate() {
+		$requestData = array(
+			'name' => 'Foo',
+			'email' => 'foo',
+			'subject' => '',
+			'message' => 'Some message'
+		);
+		$result = $this->Form->validate($requestData);
+		$this->assertFalse($result);
+
+		$errors = $this->Form->errors();
+		$this->assertSame(['email', 'subject'], array_keys($errors));
+
+		$requestData = array(
+			'name' => 'Foo',
+			'email' => 'foo@example.org',
+			'subject' => 'Yeah',
+			'message' => 'Some message'
+		);
+		$result = $this->Form->validate($requestData);
+		$this->assertTrue($result);
+	}
+
+	/**
+	 * Test testExecute
+	 *
+	 * @return void
+	 */
+	public function testExecute() {
+		$requestData = array(
+			'name' => 'Foo',
+			'email' => 'foo@example.org',
+			'subject' => 'Yeah',
+			'message' => 'Some message'
+		);
+		$result = $this->Form->execute($requestData);
+		$this->assertTrue($result);
+	}
+
+}