Понемногу продвигаюсь дальше.
Значит есть контроллер пользователей:
<?php
class UsersController extends Zend_Controller_Action
{
public function loginAction()
{
$form = $this->_getLoginForm();
$this->view->form = $form;
if ($this->_request->isPost()) {
$formData = $this->_request->getPost();
if ($form->isValid($formData)) {
// setup Zend_Auth adapter for a database table
$authAdapter = new Zend_Auth_Adapter_DbTable(
Zend_Db_Table::getDefaultAdapter(),
'users',
'username',
'passwordHash',
'MD5(CONCAT(?, passwordSalt))'
);
// set the input credential values to authenticate against
$authAdapter->setIdentity($form->getValue('username'));
$authAdapter->setCredential($form->getValue('password'));
// do the authentication
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
// success: store database row to auth's storage system
$authData = $authAdapter->getResultRowObject(
null,
array('passwordHash', 'passwordSalt')
);
$auth->getStorage()->write($authData);
// remember user for 2 weeks
if ($form->getValue('rememberMe')) {
Zend_Session::rememberMe(60*60*24*14);
}
$this->_redirect('/');
} else {
// failure: clear database row from session
$this->view->message = $this->view->translate('Ошибка авторизации.
Проверьте правильность ввода логина и пароля');
}
} else {
$form->populate($formData);
}
}
}
/**
* Форма авторизации
*
* @return Zend_Form
*/
private function _getLoginForm()
{
$form = new Zend_Form();
$form->setName('userLoginForm');
$username = new Zend_Form_Element_Text('username');
$username->setLabel(_('Имя пользователя'))
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('Alnum')
->addValidator('StringLength', false,
array(Model_Users::minUsernameLength,
Model_Users::maxUsernameLength));
$password = new Zend_Form_Element_Password('password');
$password->setLabel(_('Пароль'))
->setRequired(true)
->setValue(null)
->addValidator('StringLength', false,
array(Model_Users::minPasswordLength));
$rememberMe = new Zend_Form_Element_Checkbox('rememberMe');
$rememberMe->setLabel(_('Запомнить меня'));
$submit = new Zend_Form_Element_Submit('submit');
$submit->setLabel(_('Войти'));
$form->addElements(array($username, $password, $rememberMe, $submit));
return $form;
}
}
Есть модель:
<?php
/**
* Модель пользователей
*/
class Model_Users extends Zend_Db_Table_Abstract
{
/**
* Таблица
* @var string
*/
protected $_name = 'users';
/**
* Ключ
* @var string
*/
protected $_primary = 'id';
/**
* Минимальная длина имени пользователя
*/
const minUsernameLength = 3;
/**
* Максимальная длина имени пользователя
*/
const maxUsernameLength = 16;
/**
* Минимальная длинна пароля
*/
const minPasswordLength = 6;
}
И тест для контроллера:
<?php
/**
* @see TestHelper
*/
require_once realpath(dirname(__FILE__) . '/../bootstrap.php');
/**
* Test class for UserController
* @group Controllers
*/
class UsersControllerTest extends ControllerTestCase
{
/**
* Проверка контроллера и дефолтного действия для "/users"
*/
public function testCallWithoutActionShouldPullFromIndexAction()
{
$this->dispatch('/users');
$this->assertController('users');
$this->assertAction('index');
}
/**
* На странице авторизации должна быть форма авторизации
*/
public function testLoginActionShouldContainLoginForm()
{
$this->dispatch('/users/login');
$this->assertController('users');
$this->assertAction('login');
$this->assertQueryCount('form#userLoginForm', 1);
}
/**
* При успешной авторизации происходит редирект на главную страницу
*/
public function testValidLoginShouldGoToMainPage()
{
$this->_loginUser('administrator', 'password');
$this->assertRedirectTo('/');
}
/**
* При неуспешной авторизации редирект не происходит.
* Выводится форма авторизации и список ошибок
*/
public function testInvalidCredentialsShouldResultInRedisplayOfLoginForm()
{
$this->_loginUser('fakeuser', 'fakepassword');
$this->assertNotRedirect();
$this->assertQueryCount('form#userLoginForm', 1);
}
/**
* Авторизация пользователя
*
* @param string $username
* @param string $password
*/
public function _loginUser($username, $password)
{
$this->resetRequest()
->resetResponse();
$this->request->setMethod('POST')
->setPost(array(
'username' => $username,
'password' => $password,
));
$this->dispatch('/users/login');
}
}
Я этот тест рожал часа четыре... В основном по мануалу

На чем теперь затык. Думаю как лучше вставлять данные в базу перед началом тестирования? То что сейчас там есть я ручками вставлял.