You are here

function NotificationsBasicTests::testNotificationsBasicAPI in Notifications 7

Same name and namespace in other branches
  1. 6.4 tests/notifications_api.test \NotificationsBasicTests::testNotificationsBasicAPI()
  2. 6 tests/notifications_api.test \NotificationsBasicTests::testNotificationsBasicAPI()
  3. 6.2 tests/notifications_api.test \NotificationsBasicTests::testNotificationsBasicAPI()
  4. 6.3 tests/notifications_api.test \NotificationsBasicTests::testNotificationsBasicAPI()

Play with creating, retrieving, deleting a pair subscriptions

File

tests/notifications_api.test, line 23

Class

NotificationsBasicTests
Class for testing notifications module. Tests basic API functions

Code

function testNotificationsBasicAPI() {
  $test_type = 'test';
  $test_event_type = 'test event';

  // Any user will do for exercising the API
  $user = $this
    ->drupalCreateUser();

  // Create sample subscription object
  $s1 = notifications_build_subscription(array(
    'type' => $test_type,
    'event_type' => $test_event_type,
    'send_method' => 'mail',
    'fields' => array(
      'field1' => 1,
      'field2' => 2,
    ),
    'conditions' => 2,
  ));

  // Fill in other parameters
  $s1
    ->set_user($user);
  $s1
    ->check_destination();
  $s2 = clone $s1;

  // Create the subscription and check assigned sid (do not check, we don't have this type defined)
  $result = notifications_save_subscription($s1, FALSE);
  $this
    ->assertEqual($result == SAVED_NEW && is_numeric($s1->sid) && $s1->sid > 0, TRUE, 'The subscription has been created');

  // Check a destination has been created
  $dest = $s1
    ->get_destination();
  $this
    ->assertEqual(array(
    $s1->mdid,
    $user->uid,
    'mail',
    $user->mail,
  ), array(
    $dest->mdid,
    $dest->uid,
    $dest->type,
    $dest->address,
  ), "A messaging destination has been created. {$dest->mdid}, {$dest->uid}, {$dest->type}, {$dest->address}");

  // Retrieve the subscription and check values
  $s = notifications_load_subscription($s1->sid, TRUE);
  $this
    ->assertEqual(array(
    $s->sid,
    $s->uid,
    $s->fields,
  ), array(
    $s1->sid,
    $s1->uid,
    $s1->fields,
  ), 'The subscription has been retrieved and values are ok');

  // Attempt to create a second one with the same values
  $result = notifications_save_subscription($s2, FALSE);
  $this
    ->assertTrue($result == SAVED_UPDATED && $s1->sid == $s2->sid, 'A duplicate subscription has been detected and updated: ' . $result);

  // Now change some field, try again with a different send method
  unset($s2->sid);
  $s2->send_method = 'simple';
  $s2
    ->check_destination();
  $result = notifications_save_subscription($s2, FALSE);
  $this
    ->assertTrue($result == SAVED_NEW && is_numeric($s2->sid) && $s2->sid > $s1->sid, 'Another subscription has been created');

  // Now change values for the second one
  unset($s2->send_method);
  $s2
    ->check_destination();
  $fields = $s2
    ->get_fields();
  $fields[1]->value = 3;

  // As fields are objects (byref) we can just change the value
  $result = notifications_save_subscription($s2, FALSE);
  $this
    ->assertEqual($result, SAVED_UPDATED, 'The second subscription has been updated');

  // Trying several recovery options
  $subs = notifications_get_subscriptions(array(
    'type' => $test_type,
  ));
  $this
    ->assertEqual(count($subs), 2, 'Retrieved subscriptions by type');
  $subs = notifications_get_subscriptions(array(
    'type' => $test_type,
  ), array(
    'field1' => $s1->fields['field1'],
  ), TRUE);
  $this
    ->assertEqual(count($subs), 0, 'Retrieved subscriptions by type and limited field');
  $subs = notifications_get_subscriptions(array(
    'type' => $test_type,
  ), array(
    'field1' => $s1->fields['field1'],
  ), FALSE);
  $this
    ->assertEqual(count($subs), 2, 'Retrieved subscriptions by type and general field, single field: ' . count($subs));
  $subs = notifications_get_subscriptions(array(
    'type' => $test_type,
  ), array(
    'field1' => $s1->fields['field1'],
    'field2' => $s1->fields['field2'],
  ), FALSE);
  $this
    ->assertEqual(count($subs), 1, 'Retrieved subscriptions by type and general field, two fields: ' . count($subs));

  // Delete the subscriptions and check
  notifications_delete_subscriptions(array(
    'type' => $test_type,
  ));
  $subs = notifications_get_subscriptions(array(
    'type' => $test_type,
  ));
  $this
    ->assertEqual(count($subs), 0, 'The subscriptions have been deleted');

  // Try notifications_lite API
  notifications_lite_send($user->uid, 'Test Subject', 'Test body');
  $this
    ->assertEqual($this
    ->countQueued(array(
    'uid' => $user->uid,
  )), 1, 'Notification queued with notifications_lite');
}