/** * * * @since 1.1.0 * * @group one * @group group * @group destination * * @covers \ingot\testing\tests\click\destination\hooks::track_by_id() */ public function testPageTracking() { $post = get_post(wp_insert_post(['post_title' => 'Hi Chris'])); $args = ['name' => rand(), 'type' => 'click', 'sub_type' => 'destination', 'meta' => ['destination' => 'page', 'link' => 'https://bats.com', 'page' => 11, 'is_tagline' => true]]; $group_id = \ingot\testing\crud\group::create($args, true); $group = \ingot\testing\crud\group::read($group_id); $content_1 = 'hats'; $args = ['type' => 'click', 'group_ID' => $group_id, 'content' => $content_1]; $variant_1 = \ingot\testing\crud\variant::create($args, true); $content_2 = 'bats'; $args = ['type' => 'click', 'group_ID' => $group_id, 'content' => $content_2]; $variant_2 = \ingot\testing\crud\variant::create($args, true); $group['variants'] = [$variant_1, $variant_2]; $update = \ingot\testing\crud\group::update($group, $group_id); $this->assertEquals($group_id, $update); $group = \ingot\testing\crud\group::read($group_id); $this->assertTrue(is_array($group)); $this->assertFalse(empty($group['variants'])); new \ingot\testing\bandit\content($group_id); $group = \ingot\testing\crud\group::read($group_id); $this->assertFalse(empty($group['levers'])); $groups = \ingot\testing\tests\click\destination\init::set_tracking(); new \ingot\testing\tests\click\destination\hooks($groups); $variant_id = \ingot\testing\tests\click\destination\init::get_test($group_id); $tracking = new \ingot\testing\tests\click\destination\hooks([$group_id]); $tracking->track_by_id(11); $totals = \ingot\testing\utility\group::get_total($group, true); $this->assertEquals(1, $totals['total']); $this->assertEquals(1, $totals['conversions']); }
/** * Create a group * * @since 0.4.0 * * @param \WP_REST_Request $request Full data about the request. * @return \WP_Error|\WP_REST_Response */ public function create_item($request) { $variants = helpers::sanitize($request->get_param('variants')); $group_args = $this->prepare_item_for_database($request, true); $group_args['variants'] = []; $id = group::create($group_args); $item = new \WP_Error('ingot-unknown-error'); if (is_wp_error($id)) { $item = $id; } if (is_numeric($id)) { $item = group::read($id); $item['variants'] = $variants; if (is_array($item)) { $variants_ids = $this->save_variants($item); if (is_wp_error($variants_ids)) { return ingot_rest_response($variants_ids, 500); } $item['variants'] = $variants_ids; group::update($item, $item['ID']); $item = group::read($item['ID']); if (is_array($item)) { $item = $this->prepare_group($item, $request->get_param('context')); return ingot_rest_response($item, 201, 1); } } } return ingot_rest_response($item, 500); }
/** * Create the group * * @return int|WP_Error Should return group ID. May return WP_Error if there was an error */ protected function create_group() { /** * @TODO -- Set up the group arguments here. You should modify the name and link as needed */ $group_args = ['name' => 'My Custom Banner', 'type' => 'click', 'sub_type' => 'my_custom_banner', 'meta' => ['link' => get_permalink(42)]]; //create the group $group_id = \ingot\testing\crud\group::create($group_args); return $group_id; }
/** * Test create with extra params to make sure they don't return/get saved * * @since 0.4.0 * * @group crud * @group group * @group group_crud * * @covers \ingot\testing\crud\crud::prepare_data() * @covers \ingot\testing\object\group::get_group_config() * @covers \ingot\testing\object\group::set_group() * @covers \ingot\testing\object\group::validate_group() */ public function testExtraParams() { $params = array('type' => 'click', 'sub_type' => 'button', 'meta' => ['link' => 'https://bats.com'], 'hats' => 'bats'); $id = \ingot\testing\crud\group::create($params); $obj = new \ingot\testing\object\group($id); $this->assertArrayNotHasKey('hats', $obj->get_group_config()); $obj->update_group(['cats' => 'dogs']); $this->assertArrayNotHasKey('cats', $obj->get_group_config()); $group = \ingot\testing\crud\group::read($id); $this->assertArrayNotHasKey('cats', $group); $this->assertArrayNotHasKey('hats', $group); }
/** * * * @since 1.1.0 * * @group group * @group group_crud * @group destination * * @covers \ingot\testing\tests\click\destination\types::allowed_destination_type() * @covers \ingot\testing\utility\destination::prepare_meta() */ public function testPrepareMeta() { foreach (\ingot\testing\tests\click\destination\types::destination_types() as $type) { if ('hook' == $type) { continue; } if (\ingot\testing\tests\click\destination\types::allowed_destination_type($type)) { $args = ingot_test_desitnation::group_args($type); $id = \ingot\testing\crud\group::create($args); $this->assertTrue(is_numeric($id)); $group = \ingot\testing\crud\group::read($id); $this->assertInternalType('array', $group); $this->assertTrue($this->verify_meta($group['meta']), var_export($group, true)); } } }
/** * Create groups with variants, optionally added to them. * * @param bool $add_variants Optional. If true, the default, variants are added to groups via groups object. If false, they are created, IDs are returned but they will nto be associated with a group properly. * @param int $total_groups Optional. Default is 5. * @param int $variants_per_group Optional. Default is 3. * @param array $args Optional * * @return array */ public static function make_groups($add_variants = true, $total_groups = 5, $variants_per_group = 3, $args = array()) { $defaults = ['group_args' => ['name' => rand(), 'type' => 'click', 'sub_type' => 'button', 'meta' => ['link' => 'https://bats.com']], 'variant_args' => ['type' => 'click', 'group_ID' => 1, 'content' => rand()]]; $keys = array_keys($defaults); foreach ($keys as $i => $key) { if (!empty($args[$key])) { $args[$key] = wp_parse_args($args[$key], $defaults[$key]); } else { $args[$key] = $defaults[$key]; } } $groups = ['ids' => [], 'variants' => []]; $group_args = $args['group_args']; $variant_args = $args['variant_args']; for ($g = 0; $g <= $total_groups; $g++) { $variants = []; $group_args['name'] = (string) $g . rand(); $group_id = \ingot\testing\crud\group::create($group_args, true); $groups['ids'][] = $group_id; $variant_args['group_ID'] = $group_id; for ($v = 0; $v <= $variants_per_group; $v++) { $variant_id = \ingot\testing\crud\variant::create($variant_args, true); $variants[] = $variant_id; } $groups['variants'][$group_id] = $variants; if ($add_variants) { if (is_user_logged_in()) { $obj = new \ingot\testing\object\group($group_id); $obj->update_group(['variants' => $variants]); } else { $_group = \ingot\testing\crud\group::read($group_id); $_group['variants'] = $variants; $saved = \ingot\testing\crud\group::update($_group, $group_id, true); } } } return $groups; }
/** * Test that EDD sale of non-variable product is properly priced/recorded * * @since 1.1.0 * * @group pricez * @group edd_price * * @covers \ingot\testing\tests\price\plugins\edd */ public function testPriceTrackingNonVariableProduct() { $price_is = 10; $product = ingot_test_data_price::edd_create_simple_download($price_is); $group_id = \ingot\testing\crud\group::create(['type' => 'price', 'sub_type' => 'edd', 'meta' => ['product_ID' => $product->ID], 'wp_ID' => $product->ID], true); $variant_one = \ingot\testing\crud\variant::create(['group_ID' => $group_id, 'type' => 'price', 'meta' => ['price' => [0.5]], 'content' => $product->ID], true); $variant_two = \ingot\testing\crud\variant::create(['group_ID' => $group_id, 'type' => 'price', 'meta' => ['price' => [0.5]], 'content' => $product->ID], true); $group = \ingot\testing\crud\group::read($group_id); $group['variants'] = [$variant_one, $variant_two]; \ingot\testing\crud\group::update($group, $group_id, true); $cookie_class = new \ingot\testing\cookies\price([]); $price_cookie = $cookie_class->get_cookie(); $this->assertArrayHasKey('edd', $price_cookie); $this->assertFalse(empty($price_cookie['edd'])); $this->assertInternalType('array', $price_cookie['edd']); $product_id = \ingot\testing\utility\price::get_product_ID($group); $this->assertEquals($product_id, $product->ID); $this->assertArrayHasKey($product_id, $price_cookie['edd']); new \ingot\testing\tests\price\plugins\edd($price_cookie['edd']); $test = \ingot\testing\utility\price::get_price_test_from_cookie('edd', $product->ID, $price_cookie); $this->assertInternalType('object', $test); $price_should_be = $test->get_price(); //NOTE: USING edd_get_download_price here is to ensure we don't have recursion $this->assertEquals(edd_get_download_price($product->ID), $price_should_be); $group_obj = new \ingot\testing\object\group($group_id); $lever = $group_obj->get_lever($test->ID); $this->assertInternalType('object', $lever); $before_wins = $lever->getNumerator(); $payment_id = ingot_test_data_price::edd_create_simple_payment($product); edd_complete_purchase($payment_id, 'publish', 'pending'); $group_obj = new \ingot\testing\object\group($group_id); $lever = $group_obj->get_lever($test->ID); $this->assertInternalType('object', $lever); $after_wins = $lever->getNumerator(); $this->assertEquals($before_wins + 1, $after_wins); }
/** * Test that we can query by plugin and exclude those without variants * * @since 1.1.0 * * @group xs * @group price_query * @group price * * @covers \ingot\testing\crud\price_query::find_by_plugin() */ public function testQueryByPluginNoVariant() { $args = ['type' => 'price', 'sub_type' => 'edd', 'meta' => ['product_ID' => 5], 'wp_ID' => 5]; $variant_args = ['type' => 'price', 'meta' => ['price' => []], 'content' => 5]; for ($i = 0; $i <= 5; $i++) { $group_id = \ingot\testing\crud\group::create($args); $args['wp_ID'] = $args['wp_ID'] + 1; if (3 == $i) { $expected_id = $group_id; $variant_args['group_ID'] = $group_id; $variant_args['meta']['price'] = rand_float(); $variant_id = \ingot\testing\crud\variant::create($variant_args, true); $this->assertTrue(is_numeric($variant_id)); $group = \ingot\testing\crud\group::read($group_id); $group['variants'] = [$variant_id]; \ingot\testing\crud\group::update($group, $group_id, true); } } $groups = \ingot\testing\crud\price_query::find_by_plugin('edd', true); $this->assertInternalType('array', $groups); $this->assertFalse(empty($groups)); $ids = wp_list_pluck($groups, 'ID'); $this->assertTrue(in_array($expected_id, $ids)); $this->assertSame(1, count($groups)); }
/** * Test that when we ask for too high of a page, we get nothing back * * @since 0.0.7 * * @group crud * @group group * @group group_crud * * @covers \ingot\testing\crud\group::get_items() */ public function testGetItemsPaginationTooHigh() { \ingot\testing\crud\group::delete('all'); for ($i = 1; $i <= 11; $i++) { $params = array('name' => $i, 'type' => 'click', 'sub_type' => 'button', 'meta' => ['link' => 'https://bats.com']); $created[$i] = \ingot\testing\crud\group::create($params); } $params = array('limit' => 5, 'page' => 4); $items = \ingot\testing\crud\group::get_items($params); $this->assertEmpty($items); }
/** * Test that we can't create a group for a product that is already being tested * * @since 1.1.0 * * @group price * @group helper * @covers \ingot\testing\utility\price::product_test_exists() */ public function testPriceTestExists() { $group = \ingot\testing\crud\group::create(['name' => 'd', 'type' => 'price', 'sub_type' => 'edd', 'meta' => ['product_ID' => 169], 'wp_ID' => 169], true); $this->assertTrue(is_numeric($group)); $existing = \ingot\testing\utility\price::product_test_exists(169); $this->assertEquals($existing, $group); }
/** * Test item exists method * * @since 1.1.0 * * @group group * @group group_crud * @group crud * * @covers \ingot\testing\crud\group::exists() */ public function testExists() { $id = \ingot\testing\crud\group::create(['name' => 'd', 'type' => 'price', 'sub_type' => 'edd', 'meta' => ['product_ID' => 169], 'wp_ID' => 169], true); $this->assertTrue(is_numeric($id)); $this->assertTrue(\ingot\testing\crud\group::exists($id)); $this->assertFalse(\ingot\testing\crud\group::exists(99999)); \ingot\testing\crud\group::delete($id); $this->assertFalse(\ingot\testing\crud\group::exists($id)); }