$browser->responseContains('An email has been sent to you, in order to verify your address.');
$limeTest->plan += 3;
$subscriber = SubscriberPeer::retrieveByEmail($email);
$limeTest->isa_ok($subscriber, 'Subscriber', 'Subscriber found.');
$limeTest->is($subscriber->getName(), $name, 'Name matches.');
$limeTest->is($subscriber->getEmail(), $email, 'Email matches.');
$limeTest->plan += 3;
$activationHash = $subscriber->getActivateHash();
$unsubscribeHash = $subscriber->getUnsubscribeHash();
$limeTest->isnt(empty($activationHash), true, 'Activation Hash set.');
$limeTest->isnt(empty($unsubscribeHash), true, 'Unsubscribe Hash set.');
$limeTest->isnt($subscriber->isSubscribed(), true, 'Subscriber is not activated, yet.');
# test activation and unsubscribe with fixtures
$limeTest->plan += 1;
$subscriber = SubscriberPeer::retrieveByEmail('*****@*****.**');
$limeTest->ok(!$subscriber->isSubscribed(), 'Subscriber not activated, yet.');
$browser->getAndCheck('sfSubscription', 'activate', '/newsletter/subscription/activate/' . $subscriber->getId() * 42 . '?' . activateAction::PARAMETER_NAME . '=invalid', 404);
$browser->getAndCheck('sfSubscription', 'activate', '/newsletter/subscription/activate/' . $subscriber->getId() . '?' . activateAction::PARAMETER_NAME . '=5uhj32l4', 200);
$browser->isRequestParameter('id', $subscriber->getId());
$browser->isRequestParameter(activateAction::PARAMETER_NAME, '5uhj32l4');
$browser->responseContains('Your email address has been verified.');
$limeTest->plan += 1;
$subscriber = SubscriberPeer::retrieveByEmail('*****@*****.**');
$limeTest->ok($subscriber->isSubscribed(), 'Subscriber activated.');
$browser->getAndCheck('sfSubscription', 'unsubscribe', '/newsletter/subscription/unsubscribe/' . urlencode($subscriber->getEmail()) . '?' . unsubscribeAction::PARAMETER_NAME . '=asd87324', 200);
$browser->isRequestParameter('email', $subscriber->getEmail());
$browser->isRequestParameter(unsubscribeAction::PARAMETER_NAME, 'asd87324');
$browser->responseContains('Your email address has been unsubscribed from the newsletter.');
$limeTest->plan += 1;
$subscriber = SubscriberPeer::retrieveByEmail('*****@*****.**');
$limeTest->ok(!$subscriber->isSubscribed(), 'Subscriber unsubscribed again.');
$requestData = array('name' => 'Too short', 'email' => '*****@*****.**');
$form->bind($requestData);
$limeTest->ok($form->hasErrors(), 'The form contains errors.');
$limeTest->is(count($form->getErrorSchema()->getNamedErrors()), 1, 'Contains one error.');
/* @var $eachError sfValidatorError */
foreach ($form->getErrorSchema()->getNamedErrors() as $field => $eachError) {
    switch ($field) {
        case 'name':
            $limeTest->like($eachError->getMessage(), '/too short/', 'Name is too short.');
            break;
    }
}
$form = new sfSubscribeForm();
$requestData = array('name' => 'One valid name', 'email' => '*****@*****.**');
$form->bind($requestData);
$limeTest->ok($form->isValid(), 'The form contains no errors.');
$limeTest->ok($form->save(), 'The form has been saved.');
$subscriber = SubscriberPeer::retrieveByEmail('*****@*****.**');
$limeTest->is($subscriber->getName(), 'One valid name', 'Subscriber found.');
$form = new sfSubscribeForm();
$requestData = array('name' => 'Another valid name', 'email' => '*****@*****.**');
$form->bind($requestData);
$limeTest->ok($form->hasErrors(), 'The form contains errors.');
try {
    $form->save();
    $limeTest->fail('The second form should not be saved.');
} catch (Exception $e) {
    $limeTest->is($e->getCode(), 'email [invalid]', 'Error code matches.');
}
$subscriber = SubscriberPeer::retrieveByEmail('*****@*****.**');
$limeTest->is($subscriber->getName(), 'One valid name', 'Subscriber found.');