function SimplenewsSendTestCase::testDelete in Simplenews 7.2
Same name and namespace in other branches
- 6.2 tests/simplenews.test \SimplenewsSendTestCase::testDelete()
- 7 tests/simplenews.test \SimplenewsSendTestCase::testDelete()
Create a newsletter, send mails and then delete.
File
- tests/
simplenews.test, line 2612 - Simplenews test functions.
Class
- SimplenewsSendTestCase
- Test cases for creating and sending newsletters.
Code
function testDelete() {
// Verify that the newsletter settings are shown.
$this
->drupalGet('node/add/simplenews');
$this
->assertText(t('Newsletter'));
// Prevent deleting the mail spool entries automatically.
variable_set('simplenews_spool_expire', 1);
$edit = array(
'title' => $this
->randomName(),
);
$this
->drupalPost(NULL, $edit, 'Save');
$this
->assertTrue(preg_match('|node/(\\d+)$|', $this
->getUrl(), $matches), 'Node created');
$node = node_load($matches[1]);
$this
->clickLink(t('Newsletter'));
$this
->assertText(t('Send one test newsletter to the test address'));
$this
->assertText(t('Send newsletter'));
$this
->assertNoText(t('Send newsletter when published'), t('Send on publish is not shown for published nodes.'));
// Verify state.
entity_get_controller('node')
->resetCache();
$this
->assertEqual(SIMPLENEWS_STATUS_SEND_NOT, simplenews_issue_status(node_load($node->nid)), t('Newsletter not sent yet.'));
// Send now.
$this
->drupalPost(NULL, array(
'simplenews[send]' => SIMPLENEWS_COMMAND_SEND_NOW,
), t('Submit'));
// Verify state.
entity_get_controller('node')
->resetCache();
$this
->assertEqual(SIMPLENEWS_STATUS_SEND_PENDING, simplenews_issue_status(node_load($node->nid)), t('Newsletter sending pending.'));
$spooled = db_query('SELECT COUNT(*) FROM {simplenews_mail_spool} WHERE entity_id = :nid AND entity_type = :type', array(
':nid' => $node->nid,
':type' => 'node',
))
->fetchField();
$this
->assertEqual(5, $spooled, t('5 mails remaining in spool.'));
// Verify that deleting isn't possible right now.
$this
->clickLink(t('Edit'));
$this
->assertText(t("You can't delete this newsletter because it has not been sent to all its subscribers."));
$this
->assertNoText(t('Delete'));
// Send mails.
simplenews_cron();
// Verify state.
entity_get_controller('node')
->resetCache();
$this
->assertEqual(SIMPLENEWS_STATUS_SEND_READY, simplenews_issue_status(node_load($node->nid)), t('Newsletter sending finished'));
$spooled = db_query('SELECT COUNT(*) FROM {simplenews_mail_spool} WHERE entity_id = :nid AND entity_type = :type', array(
':nid' => $node->nid,
':type' => 'node',
))
->fetchField();
$this
->assertEqual(5, $spooled, t('Mails are kept in simplenews_mail_spool after being sent.'));
// Verify mails.
$mails = $this
->drupalGetMails();
$this
->assertEqual(5, count($mails), t('All mails were sent.'));
foreach ($mails as $mail) {
$this
->assertEqual($mail['subject'], '[Drupal newsletter] ' . $edit['title'], t('Mail has correct subject'));
$this
->assertTrue(isset($this->subscribers[$mail['to']]), t('Found valid recipient'));
unset($this->subscribers[$mail['to']]);
}
$this
->assertEqual(0, count($this->subscribers), t('all subscribers have been received a mail'));
// Update timestamp to simulate pending lock expiration.
db_update('simplenews_mail_spool')
->fields(array(
'timestamp' => simplenews_get_expiration_time() - 1,
))
->execute();
// Verify that kept mail spool rows are not re-sent.
simplenews_cron();
simplenews_get_spool();
$mails = $this
->drupalGetMails();
$this
->assertEqual(5, count($mails), t('No additional mails have been sent.'));
// Now delete.
entity_get_controller('node')
->resetCache();
$this
->clickLink(t('Edit'));
$this
->drupalPost(NULL, array(), t('Delete'));
$this
->drupalPost(NULL, array(), t('Delete'));
// Verify.
entity_get_controller('node')
->resetCache();
$this
->assertFalse(node_load($node->nid));
$spooled = db_query('SELECT COUNT(*) FROM {simplenews_mail_spool} WHERE entity_id = :nid AND entity_type = :type', array(
':nid' => $node->nid,
':type' => 'node',
))
->fetchField();
$this
->assertEqual(0, $spooled, t('No mails remaining in spool.'));
}