You are here

facebook_tracking_pixel.commerce.test in Facebook Tracking Pixel 7

Same filename and directory in other branches
  1. 8 tests/facebook_tracking_pixel.commerce.test

File

tests/facebook_tracking_pixel.commerce.test
View source
<?php

/**
 * @file
 * Contains tests for the Facebook Tracking Pixel module commerce testing.
 */
require_once 'facebook_tracking_pixel.helper.php';

/**
 * Test case.
 */
class FacebookTrackingPixelTestCaseCommerce extends CommerceBaseTestCase {

  /**
   * {@inheritdoc}
   */
  public static function getInfo() {
    return [
      'name' => 'Commerce Test',
      'description' => 'Test the Drupal Commerce features.',
      'group' => 'Facebook Tracking Pixel',
    ];
  }

  /**
   * Administrative user.
   *
   * @var object
   */
  protected $admin_user;

  /**
   * Dummy customer account.
   *
   * @var object
   */
  protected $store_customer;

  /**
   * Dummy product type.
   *
   * @var object
   */
  protected $product_type;

  /**
   * Dummy product.
   *
   * @var object
   */
  protected $product;

  /**
   * Facebook Basecode database ID number.
   *
   * @var string
   */
  protected $baseCodeID = '';

  /**
   * Test base code FB ID number.
   *
   * @var string
   */
  protected $baseCodeFBID = '789789789';

  /**
   * Test SKU number.
   *
   * @var int
   */
  protected $product_sku = 555;

  /**
   * Test product display node id.
   *
   * @var string
   */
  protected $product_node_nid = '';

  /**
   * Testing product name.
   *
   * @var string
   */
  protected $product_name = 'FB Test Product';

  /**
   * {@inheritdoc}
   */
  function setUp() {

    // Setup the modules needed for testing.
    $modules = parent::setUpHelper('all', [
      'facebook_tracking_pixel',
    ]);
    parent::setUp($modules);

    // Enable all roles for tracking.
    $fbHelper = new facebookTrackingPixel\FacebookTrackingPixelTestHelper();
    $fbHelper
      ->enable_tracking_all_roles();
    $permissions = array_merge($this
      ->permissionBuilder('store admin'), [
      'administer facebook tracking pixels',
      'access content',
      'create page content',
      'edit own page content',
      'administer url aliases',
      'create url aliases',
      'administer users',
      'administer permissions',
    ]);
    $this->admin_user = $this
      ->drupalCreateUser($permissions);
    $this->store_customer = $this
      ->createStoreCustomer();

    // Create a Dummy product type for testing.
    $this->product_type = $this
      ->createDummyProductType();

    // Create a Dummy product using the product type just created with SKU 555.
    $this->product = $this
      ->createDummyProduct($this->product_sku, $this->product_name, -1, 'USD', 1, $this->product_type['type']);

    // Create a product display content type and attach a product field to it.
    $this
      ->createDummyProductDisplayContentType();

    // Create a product display node using the testing SKU.
    $node = $this
      ->createDummyProductNode([
      $this->product->product_id,
    ], 'Test Product Page');
    $this->product_node_nid = $node->nid;

    // Just in case, we clear all caches.
    cache_clear_all();

    // Test Basecode ID.
    db_insert('facebook_tracking_pixel_base_codes')
      ->fields([
      'base_code_name' => 'Test Basecode',
      'base_code_fbid' => $this->baseCodeFBID,
      'base_code_global' => 1,
      'weight' => 10,
    ])
      ->execute();

    // Retreieve the base id created.
    $this->baseCodeID = db_select('facebook_tracking_pixel_base_codes', 'c')
      ->fields('c', [
      'base_code_id',
    ])
      ->condition('base_code_fbid', $this->baseCodeFBID, '=')
      ->execute()
      ->fetchField();
  }

  /**
   * Test tracking of items added to the cart.
   */
  public function testCommerceBaseTrackingAddtoCart() {
    $this
      ->drupalLogin($this->admin_user);
    $edit = [];
    $this
      ->drupalGet('admin/config/system/facebook_tracking_pixel/commercetracking');
    $edit['facebook_tracking_pixel_commerce_tracking_enable'] = TRUE;
    $this
      ->drupalPostAJAX(NULL, $edit, 'facebook_tracking_pixel_commerce_tracking_enable');
    $edit['facebook_tracking_pixel_commerce_tracking_options_selection[addtocart]'] = TRUE;
    $edit['facebook_tracking_pixel_commerce_tracking_basecode'] = $this->baseCodeID;
    $this
      ->drupalPost(NULL, $edit, t('Save configuration'));
    $this
      ->assertText(t('Commerce Tracking Settings Saved.'), t('Commerce checkout start settings saved.'), 'FBTrkPx');

    // Order must be created via the UI and not programatically.
    // Access the product display node.
    $this
      ->drupalGet('node/' . $this->product_node_nid);
    $edit = [];
    $this
      ->drupalPost(NULL, $edit, t('Add to cart'));
    $this
      ->assertText(t($this->product_name . ' added to your cart'), t('Product added to cart successfully.'));
    $this
      ->assertRaw('facebook_tracking_pixel/commercetracking/fb_trk_addtocart_' . $this->baseCodeFBID . '.js', t('Add to cart tracking code JS found in head.'), 'FBTrkPx');
  }

  /**
   * Test tracking based on starting checkout.
   */
  public function testCommerceBaseTrackingCheckoutStart() {
    $this
      ->drupalLogin($this->admin_user);
    $edit = [];
    $this
      ->drupalGet('admin/config/system/facebook_tracking_pixel/commercetracking');
    $edit['facebook_tracking_pixel_commerce_tracking_enable'] = TRUE;
    $this
      ->drupalPostAJAX(NULL, $edit, 'facebook_tracking_pixel_commerce_tracking_enable');
    $edit['facebook_tracking_pixel_commerce_tracking_options_selection[checkoutstart]'] = TRUE;
    $edit['facebook_tracking_pixel_commerce_tracking_basecode'] = $this->baseCodeID;
    $this
      ->drupalPost(NULL, $edit, t('Save configuration'));
    $this
      ->assertText(t('Commerce Tracking Settings Saved.'), t('Commerce checkout start settings saved.'), 'FBTrkPx');

    // Order must be created via the UI and not programatically.
    // Access the product display node.
    $this
      ->drupalGet('node/' . $this->product_node_nid);

    // Add product to the shopping cart.
    $edit = [];
    $this
      ->drupalPost(NULL, $edit, t('Add to cart'));
    $this
      ->assertText(t($this->product_name . ' added to your cart'), t('Product added to cart successfully.'));
    $this
      ->drupalGet('checkout');
    $this
      ->assertRaw('facebook_tracking_pixel/commercetracking/fb_trk_checkoutstart_' . $this->baseCodeFBID . '.js', t('Checkout start tracking code JS found in head.'), 'FBTrkPx');
  }

  /**
   * Test completing a purchase tracking.
   */
  public function testCommerceBaseTrackingPurchase() {
    $this
      ->drupalLogin($this->admin_user);
    $edit = [];
    $this
      ->drupalGet('admin/config/system/facebook_tracking_pixel/commercetracking');
    $edit['facebook_tracking_pixel_commerce_tracking_enable'] = TRUE;
    $this
      ->drupalPostAJAX(NULL, $edit, 'facebook_tracking_pixel_commerce_tracking_enable');
    $edit['facebook_tracking_pixel_commerce_tracking_options_selection[purchase]'] = TRUE;
    $edit['facebook_tracking_pixel_commerce_tracking_basecode'] = $this->baseCodeID;
    $this
      ->drupalPost(NULL, $edit, t('Save configuration'));
    $this
      ->assertText(t('Commerce Tracking Settings Saved.'), t('Commerce checkout start settings saved.'), 'FBTrkPx');

    // Order must be created via the UI and not programatically.
    // Access the product display node.
    $this
      ->drupalGet('node/' . $this->product_node_nid);

    // Add product to the shopping cart.
    $edit = [];
    $this
      ->drupalPost(NULL, $edit, t('Add to cart'));
    $this
      ->assertText(t($this->product_name . ' added to your cart'), t('Product added to cart successfully.'));

    // Go to checkout.
    $this
      ->drupalGet('checkout');

    // Fill out the address form and submit.
    $edit = [];

    // Using a US address because of familiarity.
    $edit['customer_profile_billing[commerce_customer_address][und][0][country]'] = 'US';
    $this
      ->drupalPostAJAX(NULL, $edit, 'customer_profile_billing[commerce_customer_address][und][0][country]');
    $edit['customer_profile_billing[commerce_customer_address][und][0][name_line]'] = $this
      ->randomString();
    $edit['customer_profile_billing[commerce_customer_address][und][0][thoroughfare]'] = '123 Main Street';
    $edit['customer_profile_billing[commerce_customer_address][und][0][locality]'] = 'Smallville';
    $edit['customer_profile_billing[commerce_customer_address][und][0][administrative_area]'] = 'AK';
    $edit['customer_profile_billing[commerce_customer_address][und][0][postal_code]'] = '12345';
    $this
      ->drupalPost(NULL, $edit, t('Continue to next step'));
    $this
      ->assertText(t('Review order'), t('Arrived on review order page.'));
    $this
      ->drupalPost(NULL, [], t('Continue to next step'));
    $this
      ->assertRaw('fbq(\'init\', \'' . $this->baseCodeFBID, t('Checkout tracking code JS found in head.'), 'FBTrkPx');
    $this
      ->assertRaw('fbq(\'track\', \'Purchase\'', t('Purchase complete JS found'), 'FBTrkPx');
  }

  /**
   * Test to make sure nothing fires when no options are selected.
   */
  public function testCommerceBaseTrackingNoOptions() {
    $this
      ->drupalLogin($this->admin_user);
    $edit = [];
    $this
      ->drupalGet('admin/config/system/facebook_tracking_pixel/commercetracking');
    $edit['facebook_tracking_pixel_commerce_tracking_enable'] = TRUE;
    $this
      ->drupalPostAJAX(NULL, $edit, 'facebook_tracking_pixel_commerce_tracking_enable');
    $edit['facebook_tracking_pixel_commerce_tracking_basecode'] = $this->baseCodeID;
    $this
      ->drupalPost(NULL, $edit, t('Save configuration'));
    $this
      ->assertText(t('Commerce Tracking Settings Saved.'), t('Commerce checkout start settings saved.'), 'FBTrkPx');

    // Order must be created via the UI and not programatically.
    // Access the product display node.
    $this
      ->drupalGet('node/' . $this->product_node_nid);

    // Add product to the shopping cart.
    $edit = [];
    $this
      ->drupalPost(NULL, $edit, t('Add to cart'));
    $this
      ->assertText(t($this->product_name . ' added to your cart'), t('Product added to cart successfully.'));

    // Go to checkout.
    $this
      ->drupalGet('checkout');

    // Fill out the address form and submit.
    $edit = [];

    // Using a US address because of familiarity.
    $edit['customer_profile_billing[commerce_customer_address][und][0][country]'] = 'US';
    $this
      ->drupalPostAJAX(NULL, $edit, 'customer_profile_billing[commerce_customer_address][und][0][country]');
    $edit['customer_profile_billing[commerce_customer_address][und][0][name_line]'] = $this
      ->randomString();
    $edit['customer_profile_billing[commerce_customer_address][und][0][thoroughfare]'] = '123 Main Street';
    $edit['customer_profile_billing[commerce_customer_address][und][0][locality]'] = 'Smallville';
    $edit['customer_profile_billing[commerce_customer_address][und][0][administrative_area]'] = 'AK';
    $edit['customer_profile_billing[commerce_customer_address][und][0][postal_code]'] = '12345';
    $this
      ->drupalPost(NULL, $edit, t('Continue to next step'));
    $this
      ->assertText(t('Review order'), t('Arrived on review order page.'));
    $this
      ->drupalPost(NULL, [], t('Continue to next step'));
    $this
      ->assertNoRaw('fbq(\'init\', \'' . $this->baseCodeFBID, t('Checkout tracking code JS NOT found in head.'), 'FBTrkPx');
    $this
      ->assertNoRaw('fbq(\'track\', \'Purchase\'', t('Purchase complete JS NOT found'), 'FBTrkPx');
  }

  /**
   * Test disabling tracking with options still selected.
   */
  public function testCommerceBaseTrackingDisable() {
    $this
      ->drupalLogin($this->admin_user);
    $edit = [];
    $this
      ->drupalGet('admin/config/system/facebook_tracking_pixel/commercetracking');
    $edit['facebook_tracking_pixel_commerce_tracking_enable'] = TRUE;
    $this
      ->drupalPostAJAX(NULL, $edit, 'facebook_tracking_pixel_commerce_tracking_enable');

    // Turn on all tracking.
    $edit['facebook_tracking_pixel_commerce_tracking_options_selection[addtocart]'] = TRUE;
    $edit['facebook_tracking_pixel_commerce_tracking_options_selection[checkoutstart]'] = TRUE;
    $edit['facebook_tracking_pixel_commerce_tracking_options_selection[purchase]'] = TRUE;
    $edit['facebook_tracking_pixel_commerce_tracking_basecode'] = $this->baseCodeID;
    $this
      ->drupalPost(NULL, $edit, t('Save configuration'));
    $this
      ->assertText(t('Commerce Tracking Settings Saved.'), t('Commerce checkout start settings saved.'), 'FBTrkPx');

    // Visit the homepage.
    $this
      ->drupalGet('');

    // Return to admin page and disable commerce tracking.
    $edit = [];
    $this
      ->drupalGet('admin/config/system/facebook_tracking_pixel/commercetracking');
    $edit['facebook_tracking_pixel_commerce_tracking_enable'] = FALSE;
    $this
      ->drupalPost(NULL, $edit, t('Save configuration'));
    $this
      ->drupalGet('node/' . $this->product_node_nid);
    $edit = [];

    // Add product to cart and make sure event does NOT fire.
    $this
      ->drupalPost(NULL, $edit, t('Add to cart'));
    $this
      ->assertText(t($this->product_name . ' added to your cart'), t('Product added to cart successfully.'));
    $this
      ->assertNoRaw('facebook_tracking_pixel/commercetracking/fb_trk_addtocart_' . $this->baseCodeFBID . '.js', t('Path tracking code JS NOT found in head.'), 'FBTrkPx');

    // Go to checkout page and make sure event does NOT fire.
    $this
      ->drupalGet('checkout');
    $this
      ->assertNoRaw('facebook_tracking_pixel/commercetracking/fb_trk_checkoutstart_' . $this->baseCodeFBID . '.js', t('Checkout start tracking code JS NOT found in head.'), 'FBTrkPx');

    // Fill out the address form and submit.
    $edit = [];

    // Using a US address because of familiarity.
    $edit['customer_profile_billing[commerce_customer_address][und][0][country]'] = 'US';
    $this
      ->drupalPostAJAX(NULL, $edit, 'customer_profile_billing[commerce_customer_address][und][0][country]');
    $edit['customer_profile_billing[commerce_customer_address][und][0][name_line]'] = $this
      ->randomString();
    $edit['customer_profile_billing[commerce_customer_address][und][0][thoroughfare]'] = '123 Main Street';
    $edit['customer_profile_billing[commerce_customer_address][und][0][locality]'] = 'Smallville';
    $edit['customer_profile_billing[commerce_customer_address][und][0][administrative_area]'] = 'AK';
    $edit['customer_profile_billing[commerce_customer_address][und][0][postal_code]'] = '12345';
    $this
      ->drupalPost(NULL, $edit, t('Continue to next step'));
    $this
      ->assertText(t('Review order'), t('Arrived on review order page.'));
    $this
      ->drupalPost(NULL, [], t('Continue to next step'));
    $this
      ->assertNoRaw('fbq(\'init\', \'' . $this->baseCodeFBID, t('Checkout tracking code JS NOT found in head.'), 'FBTrkPx');
    $this
      ->assertNoRaw('fbq(\'track\', \'Purchase\'', t('Purchase complete JS NOT found'), 'FBTrkPx');
  }

}

Classes