Skip to content
Snippets Groups Projects
Commit 730e9c32 authored by Josh Pollock's avatar Josh Pollock
Browse files

Basic select and deletes

parent 92413f65
No related branches found
No related tags found
No related merge requests found
Showing
with 1036 additions and 64 deletions
<?php
namespace calderawp\CalderaFormsQuery\Tests\Integration\Delete;
use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase;
class EntryTest extends IntegrationTestCase
{
/**
* Test deleting by entry ID
*
* @covers Entry::deleteByFormId()
*/
public function testDeleteByFormId()
{
//Create three entries
$this->createEntryWithMockForm();
$this->createEntryWithMockForm();
$this->createEntryWithMockForm();
//Delete all entries for this form Id
$this->queryWithWPDB(
$this
->entryDeleteGeneratorFactory()
->deleteByFormId($this->mock_form_id)
->getPreparedSql()
);
//Prepare SQL to query for entries
$entryGenerator = $this->entryGeneratorFactory();
$entryGenerator->queryByFormsId($this->mock_form_id);
$sql = $entryGenerator->getPreparedSql();
//No entries -> No results
$this->assertSame([], $this->queryWithWPDB($sql));
}
/**
* Test we can delete the right entry ID without effecting other entries
*
* @covers Delete::deleteByEntryId()
*/
public function testDeleteByEntryId()
{
//Create two entries
$entryToDeleteDetails = $this->createEntryWithMockForm();
$entryNotToDeleteDetails = $this->createEntryWithMockForm();
//Delete one of the new entries
$this->queryWithWPDB(
$this
->entryDeleteGeneratorFactory()
->deleteByEntryId($entryToDeleteDetails['id'])
->getPreparedSql()
);
//Prepare SQL to query for the entry that was deleted.
$entryGenerator = $this->entryGeneratorFactory();
$entryGenerator->queryByEntryId($entryToDeleteDetails['id']);
$sql = $entryGenerator->getPreparedSql();
//No entries -> No results
$this->assertSame([], $this->queryWithWPDB($sql));
//Prepare SQL to query for the entry that was Not deleted.
$entryGenerator = $this->entryGeneratorFactory();
$entryGenerator->queryByEntryId($entryNotToDeleteDetails['id']);
$sql = $entryGenerator->getPreparedSql();
//One result: This entry should NOT have been deleted
$this->assertEquals(1, count($this->queryWithWPDB($sql)));
}
/**
* Test we can delete entries by user ID
*
* @covers Delete::deleteByUserId()
*/
public function testDeleteByUserId()
{
//Create two entries for not logged in user
$entryDetailsNotLoggedInOne = $this->create_entry($this->mock_form);
$entryDetailsNotLoggedInTwo = $this->create_entry($this->mock_form);
//Create two entries for logged in user
$this->factory()->user->create();
$userId = $this->factory()->user->create();
wp_set_current_user($userId);
$this->assertEquals($userId, get_current_user_id());
$entryDetailsLoggedInOne = $this->create_entry($this->mock_form);
$entryDetailsLoggedInTwo = $this->create_entry($this->mock_form);
$entryGeneratorLoggedIn = $this->entryGeneratorFactory();
$entryGeneratorLoggedIn->queryByEntryId($entryDetailsLoggedInOne['id']);
$sql = $entryGeneratorLoggedIn->getPreparedSql();
//Delete the entries for logged in user and make sure those entries are gone
$this->queryWithWPDB(
$this->entryDeleteGeneratorFactory()
->deleteByUserId($userId)
->getPreparedSql()
);
//Check first entry was deleted
$entryGeneratorLoggedIn = $this->entryGeneratorFactory();
$entryGeneratorLoggedIn->queryByEntryId($entryDetailsLoggedInOne['id']);
$sql = $entryGeneratorLoggedIn->getPreparedSql();
$results = $this->queryWithWPDB($sql);
$this->assertSame(0, count($results));
//Check second entry was also deleted
$entryGeneratorLoggedIn = $this->entryGeneratorFactory();
$entryGeneratorLoggedIn->queryByEntryId($entryDetailsLoggedInTwo['id']);
$sql = $entryGeneratorLoggedIn->getPreparedSql();
$results = $this->queryWithWPDB($sql);
$this->assertSame(0, count($results));
//Check that we get no result for querying by entries of the user ID we just deleted
$entryGenerator = $this->entryGeneratorFactory();
$this->assertSame(0, count(
$this->queryWithWPDB(
$entryGenerator
->queryByUserId($userId)
->getPreparedSql()
)
));
//Test entries from non-logged in user is still there
$entryGenerator = $this->entryGeneratorFactory();
$this->assertSame(1, count(
$this->queryWithWPDB(
$entryGenerator
->queryByEntryId($entryDetailsNotLoggedInOne['id'])
->getPreparedSql()
)
));
$entryGenerator = $this->entryGeneratorFactory();
$this->assertSame(1, count(
$this->queryWithWPDB(
$entryGenerator
->queryByEntryId($entryDetailsNotLoggedInTwo['id'])
->getPreparedSql()
)
));
$entryGenerator = $this->entryGeneratorFactory();
$this->assertSame(2, count(
$this->queryWithWPDB(
$entryGenerator
->queryByUserId(0)
->getPreparedSql()
)
));
}
}
\ No newline at end of file
<?php
namespace calderawp\CalderaFormsQuery\Tests\Integration\Delete;
use calderawp\CalderaFormsQuery\Delete\EntryValues;
use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase;
use calderawp\CalderaFormsQuery\Tests\Traits\CanCreateEntryWithEmailField;
class EntryValuesTest extends IntegrationTestCase
{
use CanCreateEntryWithEmailField;
/**
* Test deleting by entry ID
*
* @covers EntryValues::deleteByEntryId()
*/
public function testDeleteByEntryId()
{
//Save an entry
$entry = $this->createEntryWithMockForm();
$entryId = $entry['id'];
//SQL to count entries
$entryValuesQueryGenerator = $this->entryValuesGeneratorFactory();
$entryValuesQueryGenerator->queryByEntryId($entryId);
$sql = $entryValuesQueryGenerator->getPreparedSql();
//We have four values -- four fields saved.
$results = $this->queryWithWPDB($sql);
$this->assertTrue( ! empty( $results ));
$this->assertSame( 4, count( $results ) );
//Delete entry
$this->queryWithWPDB(
$this
->entryValuesDeleteGeneratorFactory()
->deleteByEntryId($entryId)
->getPreparedSql()
);
//We have no values -- all fields saved.
$results = $this->queryWithWPDB($sql);
$this->assertSame( 0, count( $results ) );
}
/**
* Test deleting when field value equals something
*
* @covers EntryValues::deleteByFieldValue()
*/
public function testDeleteByFieldValueEquals()
{
$entryId = $this->createEntryWithEmail( 'roy@roysivan.com' );
//Delete entry
$this->queryWithWPDB(
$this
->entryValuesDeleteGeneratorFactory()
->deleteByFieldValue(
$this->getEmailFieldSlug(),
'roy@roysivan.com'
)
->getPreparedSql()
);
//We have no values for this field -- all fields saved.
$entryValuesQueryGenerator = $this->entryValuesGeneratorFactory();
$entryValuesQueryGenerator->queryByFieldValue(
$this->getEmailFieldSlug(),
'roy@roysivan.com'
);
$sql = $entryValuesQueryGenerator->getPreparedSql();
$results = $this->queryWithWPDB($sql);
$this->assertSame( 0, count( $results ) );
}
}
\ No newline at end of file
<?php
namespace calderawp\CalderaFormsQuery\Tests\Integration;
use calderawp\CalderaFormsQuery\EntryQueries;
use calderawp\CalderaFormsQuery\Tests\Traits\HasFactories;
use calderawp\CalderaFormsQuery\Tests\Traits\UsersMockFormAsDBForm;
class EntryQueriesTest extends IntegrationTestCase
{
use UsersMockFormAsDBForm;
public function setUp()
{
global $wpdb;
$tables = new \Caldera_Forms_DB_Tables($wpdb);
$tables->add_if_needed();
$this->set_mock_form();
$this->mock_form_id = \Caldera_Forms_Forms::import_form( $this->mock_form );
$this->mock_form = \Caldera_Forms_Forms::get_form( $this->mock_form_id );
parent::setUp();
}
/**
* Test that getResults method runs queries against WordPress correctly
*
* @covers EntryQueries::getResults()
*/
public function testGetResultsCanDoSQL(){
$details = $this->create_entry( $this->mock_form );
$details = $this->create_entry( $this->mock_form );
global $wpdb;
$sql = $wpdb->prepare( "SELECT COUNT(`id`) AS `total` FROM `" . $wpdb->prefix . "cf_form_entries` WHERE `form_id` = %s", $this->mock_form_id );
$results = $this->entryQueriesFactory()->getResults( $sql );
$this->assertTrue( ! empty( $results ) );
$this->assertEquals( 2, $results[0]->total);
$wpdbDirectResults = $wpdb->get_results( $sql );
$this->assertEquals( 2, $wpdbDirectResults[0]->total);
}
/**
* Test that we can run queries and the environment can update DB
*
* @covers EntryQueries::getResults()
*/
public function testCanQuery()
{
global $wpdb;
$sql = $wpdb->prepare( "SELECT COUNT(`id`) AS `total` FROM `" . $wpdb->prefix . "cf_form_entries` WHERE `form_id` = %s", $this->mock_form_id );
$resultsOne = $this->entryQueriesFactory()->getResults( $sql );
$this->assertTrue( ! empty( $resultsOne ) );
$entry_details = $this->create_entry( $this->mock_form );
$sql = $wpdb->prepare("SELECT * FROM `" . $wpdb->prefix . "cf_form_entries` WHERE `id` = %s", $entry_details['id'] );
$resultsTwo = $this->entryQueriesFactory()->getResults( $sql );
$this->assertTrue( ! empty( $resultsTwo ), var_export( $resultsTwo, true ) );
}
}
\ No newline at end of file
......@@ -3,6 +3,10 @@
namespace calderawp\CalderaFormsQuery\Tests\Integration;
use calderawp\CalderaFormsQuery\EntryQueries;
use calderawp\CalderaFormsQuery\Tests\Traits\HasFactories;
use calderawp\CalderaFormsQuery\Tests\Traits\UsersMockFormAsDBForm;
/**
* Class IntegrationTestCase
*
......@@ -12,6 +16,91 @@ namespace calderawp\CalderaFormsQuery\Tests\Integration;
*/
abstract class IntegrationTestCase extends \WP_UnitTestCase
{
use \Caldera_Forms_Has_Data, HasFactories;
public function setUp()
{
global $wpdb;
$tables = new \Caldera_Forms_DB_Tables($wpdb);
$tables->add_if_needed();
$this->set_mock_form();
$this->mock_form_id = \Caldera_Forms_Forms::import_form( $this->mock_form );
$this->mock_form = \Caldera_Forms_Forms::get_form( $this->mock_form_id );
parent::setUp();
}
/** @inheritdoc */
public function tearDown()
{
//Delete entries
$this->deleteAllEntriesForMockForm();
//Delete all forms
$forms = \Caldera_Forms_Forms::get_forms();
if (!empty($forms)) {
foreach ($forms as $form_id => $config) {
\Caldera_Forms_Forms::delete_form($form_id);
}
}
parent::tearDown();
}
/**
* Gets a WPDB instance
*
* @return \wpdb
*/
protected function getWPDB()
{
global $wpdb;
return $wpdb;
}
/**
* @return EntryQueries
*/
protected function entryQueriesFactory()
{
return new EntryQueries(
$this->entryGeneratorFactory(),
$this->entryValuesGeneratorFactory(),
$this->getWPDB()
);
}
/**
* Use $wpdb->get_results() to do a SQL query directly.
*
* @param $sql
* @return object|null
*/
protected function queryWithWPDB( $sql )
{
global $wpdb;
return $wpdb->get_results( $sql );
}
/**
*
*/
protected function deleteAllEntriesForMockForm()
{
$this->entryDeleteGeneratorFactory()->deleteByFormId($this->mock_form_id);
}
/**
* @return array
*/
protected function createEntryWithMockForm()
{
return $this->create_entry( $this->mock_form );
}
}
<?php
namespace calderawp\CalderaFormsQuery\Tests\Integration\Select;
use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase;
use calderawp\CalderaFormsQuery\Tests\Traits\HasFactories;
use calderawp\CalderaFormsQuery\Tests\Traits\UsersMockFormAsDBForm;
class EntryTest extends IntegrationTestCase
{
/** @inheritdoc */
protected $mock_form_id;
/** @inheritdoc */
protected $mock_form;
/** @inheritdoc */
/**
* Test query by form ID
*
* @covers Entry::queryByFormsId()
*/
public function testQueryByFormsId()
{
$entryGenerator = $this->entryGeneratorFactory();
$entryGenerator->queryByFormsId($this->mock_form_id);
$sql = $entryGenerator->getPreparedSql();
//No entries -> No results
$this->assertSame([], $this->queryWithWPDB( $sql) );
//One entry -> One result, with the right form ID.
$this->createEntryWithMockForm();
$results = $this->queryWithWPDB( $sql);
$this->assertTrue( ! empty( $this->queryWithWPDB( $sql) ) );
$this->assertSame( 1, count($results));
$this->assertSame( $results[0]->form_id, $this->mock_form_id );
//Two entries -> Two result, with the right form ID.
$this->createEntryWithMockForm();
$results = $this->queryWithWPDB( $sql);
$this->assertTrue( ! empty( $this->queryWithWPDB( $sql) ) );
$this->assertSame( 2, count($results));
$this->assertSame( $results[0]->form_id, $this->mock_form_id );
$this->assertSame( $results[1]->form_id, $this->mock_form_id );
}
/**
* Test query by entry ID
*
* @covers Entry::queryByEntryId()
*/
public function testQueryByEntryId()
{
$entry = $this->createEntryWithMockForm();
$entryGenerator = $this->entryGeneratorFactory();
//No results for a non-existent entry
$entryGenerator->queryByEntryId(42);
$sql = $entryGenerator->getPreparedSql();
$this->assertSame( [], $this->queryWithWPDB($sql));
//One entry: one result with the correct ID
$entryGenerator = $this->entryGeneratorFactory();
$entryGenerator->queryByEntryId($entry['id']);
$sql = $entryGenerator->getPreparedSql();
$results = $this->queryWithWPDB($sql);
$this->assertTrue( ! empty( $results ));
$this->assertSame( 1, count( $results ) );
$this->assertEquals( $results[0]->id, $entry['id']);
//Two more entries: one result for original entry ID
$this->createEntryWithMockForm();
$this->createEntryWithMockForm();
$entryGenerator = $this->entryGeneratorFactory();
$entryGenerator->queryByEntryId($entry['id']);
$sql = $entryGenerator->getPreparedSql();
$results = $this->queryWithWPDB($sql);
$this->assertTrue( ! empty( $results ));
$this->assertSame( 1, count( $results ) );
}
/**
* Test query by user ID
*
* @covers Entry::queryByUserId()
*/
/**
* Test query by user ID
*
* @covers Entry::queryByUserId()
*/
public function testQueryByUserId()
{
//Create an entry for without a user
$this->deleteAllEntriesForMockForm();
$entryDetailsNotLoggedIn = $this->create_entry($this->mock_form);
//Create an entry for a known user.
$this->factory()->user->create();
$userId = $this->factory()->user->create();
wp_set_current_user( $userId );
$this->assertEquals( $userId, get_current_user_id() );
$entryDetailsLoggedIn = $this->create_entry($this->mock_form);
//Make sure there is one entry with with this user
$entryGeneratorLoggedIn = $this->entryGeneratorFactory();
$entryGeneratorLoggedIn->queryByEntryId($entryDetailsLoggedIn['id']);
$sql= $entryGeneratorLoggedIn->getPreparedSql();
$resultsByEntryId = $this->queryWithWPDB($sql);
$this->assertTrue( ! empty( $resultsByEntryId ));
$this->assertSame( 1, count( $resultsByEntryId ) );
$this->assertEquals( $userId, $resultsByEntryId[0]->user_id );
//Test that query by User ID gets the right entry
$entryGeneratorLoggedIn = $this->entryGeneratorFactory();
$entryGeneratorLoggedIn->queryByUserId($userId);
$sql= $entryGeneratorLoggedIn->getPreparedSql();
$resultsByUserId = $this->queryWithWPDB($sql);
$this->assertEqualSets((array)$resultsByEntryId[0], (array)$resultsByUserId[0]);
//Test that non-logged in user is tracked in DB as 0, not some actual user ID and we can select that way
$entryGeneratorNotLoggedIn = $this->entryGeneratorFactory();
$entryGeneratorNotLoggedIn->queryByEntryId($entryDetailsNotLoggedIn['id'] );
$sql= $entryGeneratorLoggedIn->getPreparedSql();
$resultsByEntryId = $this->queryWithWPDB($sql);
$this->assertTrue( ! empty( $resultsByEntryId ));
$this->assertSame( 1, count( $resultsByEntryId ) );
$this->assertEquals( $userId, $resultsByEntryId[0]->user_id );
}
}
\ No newline at end of file
<?php
namespace calderawp\CalderaFormsQuery\Tests\Integration\Select;
use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase;
use calderawp\CalderaFormsQuery\Tests\Traits\CanCreateEntryWithEmailField;
class EntryValuesTest extends IntegrationTestCase
{
use CanCreateEntryWithEmailField;
/**
* Test query by entry ID
*
* @covers EntryValues::queryByEntryId()
*/
public function testQueryByEntryId()
{
$entry = $this->createEntryWithMockForm();
$entryValuesQueryGenerator = $this->entryValuesGeneratorFactory();
$entryValuesQueryGenerator->queryByEntryId($entry['id']);
$sql = $entryValuesQueryGenerator->getPreparedSql();
$results = $this->queryWithWPDB($sql);
$this->assertTrue( ! empty( $results ));
$this->assertSame( 4, count( $results ) );
$this->assertEquals( $results[0]->entry_id, $entry['id']);
$this->assertEquals( $results[1]->entry_id, $entry['id']);
$this->assertEquals( $results[2]->entry_id, $entry['id']);
$this->assertEquals( $results[3]->entry_id, $entry['id']);
}
/**
* Test query by field where field value equals a value
*
* @covers \calderawp\CalderaFormsQuery\Select\EntryValues::queryByFieldValue()
*/
public function testQueryByFieldValueEquals()
{
//Entry with no real email
$this->createEntryWithMockForm();
//Create entries for each of two emails
$emailOne = 'one@hiroy.club';
$emailTwo = 'two@hiroy.club';
$this->createEntryWithEmail( $emailOne );
$this->createEntryWithEmail( $emailTwo );
//One entry when querying by first email
$entryValuesQueryGenerator = $this->entryValuesGeneratorFactory();
$this->assertSame( 1, count(
$this->queryWithWPDB(
$entryValuesQueryGenerator
->queryByFieldValue(
$this->getEmailFieldSlug(),
$emailOne
)
->getPreparedSql()
)
) );
//One entry when querying by second email
$entryValuesQueryGenerator = $this->entryValuesGeneratorFactory();
$this->assertSame( 1, count(
$this->queryWithWPDB(
$entryValuesQueryGenerator
->queryByFieldValue(
$this->getEmailFieldSlug(),
$emailTwo
)
->getPreparedSql()
)
) );
}
/**
* Test query by field where field does not equals a value
*
* @covers \calderawp\CalderaFormsQuery\Select\EntryValues::queryByFieldValue()
*/
public function testQueryByFieldValueNotEquals()
{
//Entry with no real email
$this->createEntryWithMockForm();
//Create entries for each of two emails
$emailOne = 'one@hiroy.club';
$emailTwo = 'two@hiroy.club';
$this->createEntryWithEmail( $emailOne );
$this->createEntryWithEmail( $emailTwo );
//Two entries when querying by NOT first email
$entryValuesQueryGenerator = $this->entryValuesGeneratorFactory();
$this->assertSame( 2, count(
$this->queryWithWPDB(
$entryValuesQueryGenerator
->queryByFieldValue(
$this->getEmailFieldSlug(),
$emailOne,
'notEquals'
)
->getPreparedSql()
)
) );
//Two entries when querying by NOT second email
$entryValuesQueryGenerator = $this->entryValuesGeneratorFactory();
$this->assertSame( 2, count(
$this->queryWithWPDB(
$entryValuesQueryGenerator
->queryByFieldValue(
$this->getEmailFieldSlug(),
$emailTwo,
'notEquals'
)
->getPreparedSql()
)
) );
}
}
\ No newline at end of file
......@@ -3,6 +3,10 @@
namespace calderawp\CalderaFormsQuery\Tests\Integration;
use calderawp\CalderaFormsQuery\EntryQueries;
use calderawp\CalderaFormsQuery\Select\Entry;
use calderawp\CalderaFormsQuery\Select\EntryValues;
/**
* Class TestsTest
*
......@@ -11,6 +15,8 @@ namespace calderawp\CalderaFormsQuery\Tests\Integration;
*/
class TestsTest extends IntegrationTestCase
{
//Using this so we can test that CF's testing traits are available
use \Caldera_Forms_Has_Mock_Form;
/**
* Check that Caldera Forms is usable
......@@ -21,4 +27,28 @@ class TestsTest extends IntegrationTestCase
$this->assertTrue( class_exists( '\Caldera_Forms' ) );
}
/**
* Make sure the trait worked
*/
public function testMockForm()
{
$this->set_mock_form();
$this->assertTrue( is_array( $this->mock_form ) );
}
/**
* Test that factories work for integration tests
*
* @covers HasFactories::entryQueriesFactory()
* @covers HasFactories::entryValuesGeneratorFactory()
* @covers HasFactories::entryGeneratorFactory()
*/
public function testFactory()
{
$this->assertTrue(is_a($this->entryQueriesFactory(), EntryQueries::class));
$this->assertTrue(is_a($this->entryValuesGeneratorFactory(), EntryValues::class));
$this->assertTrue(is_a($this->entryGeneratorFactory(), Entry::class));
}
}
\ No newline at end of file
......@@ -6,6 +6,16 @@ if( class_exists( 'wpdb')){
class wpdb
{
/**
* @var string
*/
public $prefix = 'wp_';
/**
* @param null $query
* @param string $output
* @return array
*/
public function get_results( $query = null, $output = OBJECT )
{
return [
......
<?php
namespace calderawp\CalderaFormsQuery\Tests\Traits;
/**
* Trait CreatesEntryWithEmailField
*
* Helper functions for testing entry by email
*/
trait CanCreateEntryWithEmailField
{
use \Caldera_Forms_Has_Mock_Form;
/**
* Create an entry associated with an email
*
* @param string $email
*
* @return int
*/
protected function createEntryWithEmail( $email = 'hiroy@hiroy.club' )
{
$fieldData = [];
$emailFieldConfig = $this->getEmailField();
foreach( $this->mock_form[ 'fields' ] as $fieldId => $fieldConfig ){
if ( $fieldId === $emailFieldConfig[ 'ID'] ) {
$fieldData[ $fieldId ] = $email;
} else {
$fieldData[ $fieldId ] = rand() . $fieldId;
}
}
return \Caldera_Forms_Save_Final::create_entry( $this->mock_form, $fieldData );
}
/**
* Get the email field's config array
*
* @return array|bool
*/
protected function getEmailField()
{
return \Caldera_Forms_Field_Util::get_field_by_slug( 'email', $this->mock_form );
}
/**
* Get slug of email field
*
* @return string
*/
protected function getEmailFieldSlug()
{
return $this->getEmailField()[ 'slug' ];
}
}
\ No newline at end of file
<?php
namespace calderawp\CalderaFormsQuery\Tests\Traits;
use calderawp\CalderaFormsQuery\EntryQueries;
trait HasFactories
{
/**
* @return \calderawp\CalderaFormsQuery\Select\Entry
*/
protected function entryGeneratorFactory()
{
return new \calderawp\CalderaFormsQuery\Select\Entry(
$this->mySqlBuilderFactory(),
$this->entryTableName()
);
}
/**
* @return \calderawp\CalderaFormsQuery\Delete\Entry
*/
protected function entryDeleteGeneratorFactory()
{
return new \calderawp\CalderaFormsQuery\Delete\Entry(
$this->mySqlBuilderFactory(),
$this->entryTableName()
);
}
/**
* @return \calderawp\CalderaFormsQuery\Select\EntryValues
*/
protected function entryValuesGeneratorFactory()
{
return new \calderawp\CalderaFormsQuery\Select\EntryValues(
$this->mySqlBuilderFactory(),
$this->entryValueTableName()
);
}
/**
* @return \calderawp\CalderaFormsQuery\Delete\EntryValues
*/
protected function entryValuesDeleteGeneratorFactory()
{
return new \calderawp\CalderaFormsQuery\Delete\EntryValues(
$this->mySqlBuilderFactory(),
$this->entryValueTableName()
);
}
/**
* @return \calderawp\CalderaFormsQuery\MySqlBuilder
*/
protected function mySqlBuilderFactory()
{
return new \calderawp\CalderaFormsQuery\MySqlBuilder();
}
/**
* @return EntryQueries
*/
protected function entryQueriesFactory()
{
return new EntryQueries(
$this->entryGeneratorFactory(),
$this->entryValuesGeneratorFactory(),
$this->getWPDB()
);
}
/**
* Gets a WPDB instance
*
* @return \wpdb
*/
protected function getWPDB()
{
global $wpdb;
if (! class_exists( '\WP_User')) {
include_once dirname(dirname(__FILE__)) . '/Mock/wpdb.php';
}
if (! $wpdb) {
$wpdb = new \wpdb('', '', '', '');
}
return $wpdb;
}
/**
* @return string
*/
protected function entryValueTableName(): string
{
return "{$this->getWPDB()->prefix}cf_form_entry_values";
}
/**
* @return string
*/
protected function entryTableName(): string
{
return "{$this->getWPDB()->prefix}cf_form_entries";
}
}
<?php
namespace calderawp\CalderaFormsQuery\Tests\Traits;
trait UsersMockFormAsDBForm
{
use \Caldera_Forms_Has_Data, HasFactories;
/** @inheritdoc */
protected $mock_form_id;
/** @inheritdoc */
protected $mock_form;
/** @inheritdoc */
public function setUp()
{
global $wpdb;
$tables = new \Caldera_Forms_DB_Tables($wpdb);
$tables->add_if_needed();
$this->set_mock_form();
$this->mock_form_id = \Caldera_Forms_Forms::import_form($this->mock_form);
$this->mock_form = \Caldera_Forms_Forms::get_form($this->mock_form_id);
parent::setUp();
}
}
<?php
namespace calderawp\CalderaFormsQuery\Tests\Unit\Delete;
use calderawp\CalderaFormsQuery\Delete\DeleteQueryBuilder;
use calderawp\CalderaFormsQuery\MySqlBuilder;
use calderawp\CalderaFormsQuery\Tests\Unit\TestCase;
use NilPortugues\Sql\QueryBuilder\Manipulation\Delete;
class DeleteQueryBuilderTest extends TestCase
{
/**
* Test table names
*
* @covers DeleteQueryBuilder::getTableName()
* @covers DeleteQueryBuilder::$tableName
*/
public function testGetTableName()
{
$entry = $this->entryDeleteGeneratorFactory();
$this->assertEquals($this->entryTableName(), $entry->getTableName());
$entryValues = $this->entryValuesDeleteGeneratorFactory();
$this->assertSame($this->entryValueTableName(), $entryValues->getTableName());
}
/**
* Test getting SQL builder
*
* @covers DeleteQueryBuilder::getBuilder()
* @covers DeleteQueryBuilder::$builder
*/
public function testGetBuilder()
{
$entry = $this->entryDeleteGeneratorFactory();
$this->assertTrue(is_a($entry->getBuilder(), MySqlBuilder::class));
$entryValues = $this->entryValuesDeleteGeneratorFactory();
$this->assertTrue(is_a($entryValues->getBuilder(), MySqlBuilder::class));
}
/**
* Ensure that getDeleteQuery returns the delete query
*
* @covers DeleteQueryBuilder::getDeleteQuery()
* @covers DeleteQueryBuilder::$deleteQuery
*/
public function testGetDeleteQueryReturnsDeleteQuery()
{
$entry = $this->entryDeleteGeneratorFactory();
$this->assertTrue(is_a($entry->getDeleteQuery(), Delete::class));
$entryValues = $this->entryValuesDeleteGeneratorFactory();
$this->assertTrue(is_a($entryValues->getDeleteQuery(), Delete::class));
}
/**
* Ensure deleteQuery and currentQuery are the same
*
* @covers DeleteQueryBuilder::getDeleteQuery()
* @covers DeleteQueryBuilder::getCurrentQuery()
*/
public function testGetDeleteQueryAndCurrentQueryAreSame()
{
$entry = $this->entryDeleteGeneratorFactory();
$this->assertSame( $entry->getDeleteQuery(), $entry->getCurrentQuery() );
$entryValues = $this->entryValuesDeleteGeneratorFactory();
$this->assertSame( $entryValues->getDeleteQuery(), $entryValues->getCurrentQuery() );
}
/**
* Test table name is set on query builder correctly
*
* @covers DeleteQueryBuilder::getDeleteQuery()
*/
public function testTableNameForQueryBuilder()
{
$entry = $this->entryDeleteGeneratorFactory();
$this->assertEquals(
$this->entryTableName(),
$entry
->getDeleteQuery()
->getTable()
->getName()
);
$entryValues = $this->entryValuesDeleteGeneratorFactory();
$this->assertEquals(
$this->entryValueTableName(),
$entryValues
->getDeleteQuery()
->getTable()
->getName()
);
}
}
\ No newline at end of file
......@@ -28,20 +28,21 @@ class EntryQueriesTest extends TestCase
*
* @covers EntryQueries::getEntryValueGenerator()
* @covers EntryQueries::$entryValueGenerator
*/public function testGetEntryValueGenerator()
*/
public function testGetEntryValueGenerator()
{
$queries = $this->entryQueriesFactory();
$this->assertTrue(is_a($queries->getEntryValueGenerator(), EntryValues::class));
}
}
/**
* Test that getResults method returns an array
*
* @covers EntryQueries::getResults()
*/
public function testGetResults()
{
$queries = $this->entryQueriesFactory();
$this->assertTrue(is_array($queries->getResults("SELECT `roy` FROM sivan WHERE mike = 'roy'")));
}
public function testGetResults()
{
$queries = $this->entryQueriesFactory();
$this->assertTrue(is_array($queries->getResults("SELECT `roy` FROM sivan WHERE mike = 'roy'")));
}
}
......@@ -18,7 +18,7 @@ class MySqlBuilderTest extends TestCase
public function testSubstitutions()
{
$builder = $this->MySqlBuilderFactory();
$builder = $this->mySqlBuilderFactory();
$query = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select('foo');
$query
......
......@@ -16,7 +16,7 @@ class EntryTest extends TestCase
*/
public function testQueryByFormsId()
{
$expectedSql = "SELECT `wp_cf_form_entries`.* FROM `wp_cf_form_entries` WHERE (`wp_cf_form_entries`.`form_id` = 'cf12345')";
$expectedSql = "SELECT `{$this->entryTableName()}`.* FROM `wp_cf_form_entries` WHERE (`{$this->entryTableName()}`.`form_id` = 'cf12345')";
$entryGenerator = $this->entryGeneratorFactory();
$generator = $entryGenerator->queryByFormsId('cf12345');
$this->assertTrue($this->isAEntry($generator));
......@@ -32,7 +32,7 @@ class EntryTest extends TestCase
*/
public function testQueryByEntryId()
{
$expectedSql = "SELECT `wp_cf_form_entries`.* FROM `wp_cf_form_entries` WHERE (`wp_cf_form_entries`.`id` = '42')";
$expectedSql = "SELECT `{$this->entryTableName()}`.* FROM `{$this->entryTableName()}` WHERE (`{$this->entryTableName()}`.`id` = '42')";
$entryGenerator = $this->entryGeneratorFactory();
$generator = $entryGenerator->queryByEntryId(42);
$this->assertTrue($this->isAEntry($generator));
......@@ -48,7 +48,7 @@ class EntryTest extends TestCase
*/
public function testQueryByUserId()
{
$expectedSql = "SELECT `wp_cf_form_entries`.* FROM `wp_cf_form_entries` WHERE (`wp_cf_form_entries`.`user_id` = '42')";
$expectedSql = "SELECT `{$this->entryTableName()}`.* FROM `{$this->entryTableName()}` WHERE (`{$this->entryTableName()}`.`user_id` = '42')";
$entryGenerator = $this->entryGeneratorFactory();
$generator = $entryGenerator->queryByUserId(42);
$this->assertTrue($this->isAEntry($generator));
......
......@@ -15,7 +15,7 @@ class EntryValuesTest extends TestCase
*/
public function testQueryByFieldValueEquals()
{
$expectedSql = "SELECT `cf_form_entry_values`.* FROM `cf_form_entry_values` WHERE (`cf_form_entry_values`.`value` = 'josh@calderawp.com') AND (`cf_form_entry_values`.`slug` = 'email_address')";
$expectedSql = "SELECT `{$this->entryValueTableName()}`.* FROM `{$this->entryValueTableName()}` WHERE (`{$this->entryValueTableName()}`.`value` = 'josh@calderawp.com') AND (`{$this->entryValueTableName()}`.`slug` = 'email_address')";
$entryValues = $this->entryValuesGeneratorFactory();
$generator = $entryValues->queryByFieldValue('email_address', 'josh@calderawp.com');
......@@ -32,7 +32,7 @@ class EntryValuesTest extends TestCase
*/
public function testQueryByFieldValueNotEquals()
{
$expectedSql = "SELECT `cf_form_entry_values`.* FROM `cf_form_entry_values` WHERE (`cf_form_entry_values`.`value` <> 'josh@calderawp.com') AND (`cf_form_entry_values`.`slug` = 'email_address')";
$expectedSql = "SELECT `{$this->entryValueTableName()}`.* FROM `{$this->entryValueTableName()}` WHERE (`{$this->entryValueTableName()}`.`value` <> 'josh@calderawp.com') AND (`{$this->entryValueTableName()}`.`slug` = 'email_address')";
$entryValues = $this->entryValuesGeneratorFactory();
$generator =$entryValues->queryByFieldValue('email_address', 'josh@calderawp.com', 'notEquals');
$this->assertTrue($this->isAEntryValues($generator));
......@@ -49,7 +49,7 @@ class EntryValuesTest extends TestCase
*/
public function testQueryByFieldValueLike()
{
$expectedSql = "SELECT `cf_form_entry_values`.* FROM `cf_form_entry_values` WHERE (`cf_form_entry_values`.`value` LIKE %josh@calderawp.com%)";
$expectedSql = "SELECT `{$this->entryValueTableName()}`.* FROM `{$this->entryValueTableName()}` WHERE (`{$this->entryValueTableName()}`.`value` LIKE '\%josh@calderawp.com\%')";
$entryValues = $this->entryValuesGeneratorFactory();
$generator = $entryValues->queryByFieldValue('email_address', 'josh@calderawp.com', 'like');
......@@ -66,7 +66,7 @@ class EntryValuesTest extends TestCase
*/
public function testQueryByEntryId()
{
$expectedSql = "SELECT `cf_form_entry_values`.* FROM `cf_form_entry_values` WHERE (`cf_form_entry_values`.`entry_id` = '42')";
$expectedSql = "SELECT `{$this->entryValueTableName()}`.* FROM `{$this->entryValueTableName()}` WHERE (`{$this->entryValueTableName()}`.`entry_id` = '42')";
$entryValues = $this->entryValuesGeneratorFactory();
$generator = $entryValues->queryByEntryId(42);
$this->assertTrue($this->isAEntryValues($generator));
......
......@@ -22,10 +22,10 @@ class SelectQueryBuilderTest extends TestCase
public function testGetTableName()
{
$entry = $this->entryGeneratorFactory();
$this->assertEquals('wp_cf_form_entries', $entry->getTableName());
$this->assertEquals($this->entryTableName(), $entry->getTableName());
$entryValues = $this->entryValuesGeneratorFactory();
$this->assertSame('cf_form_entry_values', $entryValues->getTableName());
$this->assertSame($this->entryValueTableName(), $entryValues->getTableName());
}
/**
......@@ -47,7 +47,7 @@ class SelectQueryBuilderTest extends TestCase
* Test getting select query generator
*
* @covers SelectQueryBuilder::getSelectQuery()
* @covers SelectQueryBuilder::$query
* @covers SelectQueryBuilder::$selectQuery
*/
public function testGetSelectQuery()
{
......@@ -66,7 +66,7 @@ class SelectQueryBuilderTest extends TestCase
public function testAddOrderByDesc()
{
$entry = $this->entryGeneratorFactory();
$expectedSql = "SELECT `wp_cf_form_entries`.* FROM `wp_cf_form_entries` WHERE (`wp_cf_form_entries`.`form_id` = 'cf12345') ORDER BY `wp_cf_form_entries`.`form_id` DESC";
$expectedSql = "SELECT `{$this->entryTableName()}`.* FROM `{$this->entryTableName()}` WHERE (`{$this->entryTableName()}`.`form_id` = 'cf12345') ORDER BY `{$this->entryTableName()}`.`form_id` DESC";
$entry->queryByFormsId('cf12345');
$entry->addOrderBy('form_id', false);
$actualSql = $entry->getPreparedSql();
......@@ -81,7 +81,7 @@ class SelectQueryBuilderTest extends TestCase
public function testAddOrderByAsc()
{
$entry = $this->entryGeneratorFactory();
$expectedSql = "SELECT `wp_cf_form_entries`.* FROM `wp_cf_form_entries` WHERE (`wp_cf_form_entries`.`form_id` = 'cf12345') ORDER BY `wp_cf_form_entries`.`form_id` ASC";
$expectedSql = "SELECT `{$this->entryTableName()}`.* FROM `{$this->entryTableName()}` WHERE (`{$this->entryTableName()}`.`form_id` = 'cf12345') ORDER BY `{$this->entryTableName()}`.`form_id` ASC";
$entry->queryByFormsId('cf12345');
$entry->addOrderBy('form_id');
$actualSql = $entry->getPreparedSql();
......@@ -100,7 +100,7 @@ class SelectQueryBuilderTest extends TestCase
}
/**
* Test the SDESC constant
* Test the DESC constant
*
* @covers SelectQueryBuilder::DESC
*/
......
......@@ -6,6 +6,7 @@ namespace calderawp\CalderaFormsQuery\Tests\Unit;
//Import PHP unit test case.
//Must be aliased to avoid having two classes of same name in scope.
use calderawp\CalderaFormsQuery\EntryQueries;
use calderawp\CalderaFormsQuery\Tests\Traits\HasFactories;
use PHPUnit\Framework\TestCase as FrameworkTestCase;
/**
......@@ -16,45 +17,5 @@ use PHPUnit\Framework\TestCase as FrameworkTestCase;
*/
abstract class TestCase extends FrameworkTestCase
{
/**
* @return \calderawp\CalderaFormsQuery\Select\EntryValues
*/
protected function entryValuesGeneratorFactory()
{
return new \calderawp\CalderaFormsQuery\Select\EntryValues(
$this->MySqlBuilderFactory(),
'cf_form_entry_values'
);
}
/**
* @return \calderawp\CalderaFormsQuery\Select\Entry
*/
protected function entryGeneratorFactory()
{
return new \calderawp\CalderaFormsQuery\Select\Entry(
$this->MySqlBuilderFactory(),
'wp_cf_form_entries'
);
}
/**
* @return \calderawp\CalderaFormsQuery\MySqlBuilder
*/
protected function MySqlBuilderFactory(): \calderawp\CalderaFormsQuery\MySqlBuilder
{
return new \calderawp\CalderaFormsQuery\MySqlBuilder();
}
/**
* @return EntryQueries
*/
protected function entryQueriesFactory()
{
return new EntryQueries(
$this->entryGeneratorFactory(),
$this->entryValuesGeneratorFactory(),
new \wpdb()
);
}
use HasFactories;
}
......@@ -18,7 +18,13 @@ require_once $_tests_dir . '/includes/functions.php';
function _manually_load_plugin()
{
require dirname(dirname(__FILE__)) . '/caldera-forms-query.php';
//Add Caldera Forms
require __DIR__ . '/plugins/caldera-forms/caldera-core.php';
//Add some Caldera Forms testing tools
require_once __DIR__ .'/plugins/caldera-forms/tests/includes/traits/has-mock-form.php';
require_once __DIR__ .'/plugins/caldera-forms/tests/includes/traits/has-data.php';
require_once __DIR__ .'/plugins/caldera-forms/tests/includes/traits/imports-form.php';
require_once __DIR__ .'/plugins/caldera-forms/tests/includes/traits/submits-contact-form.php';
}
tests_add_filter('muplugins_loaded', '_manually_load_plugin');
......
......@@ -31,8 +31,8 @@ if (! function_exists('__')) {
return translate($text, $domain);
}
}
//Mock WPDB (not using autoloader so it doesn't load during integration tests
include_once __DIR__ . '/Mock/wpdb.php';
//WordPress WPDB constants
if ( ! defined( 'ARRAY_A')) {
define('OBJECT', 'OBJECT');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment