From 75906515ee5397e18c20777ae9103c7e62e9042b Mon Sep 17 00:00:00 2001 From: Josh Pollock <josh@calderawp.com> Date: Wed, 4 Apr 2018 21:11:10 -0400 Subject: [PATCH] make sql builders resetable --- .../EntryQueriesGeneratorsTest.php | 88 +++++++++++++++++++ Tests/Integration/EntryQueriesTest.php | 3 + Tests/Unit/Delete/DeleteQueryBuilderTest.php | 10 +++ Tests/Unit/EntryQueriesTest.php | 1 + src/CreatesSqlQueries.php | 7 ++ src/Delete/DeleteQueryBuilder.php | 16 +++- src/Select/SelectQueryBuilder.php | 15 +++- 7 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 Tests/Integration/EntryQueriesGeneratorsTest.php diff --git a/Tests/Integration/EntryQueriesGeneratorsTest.php b/Tests/Integration/EntryQueriesGeneratorsTest.php new file mode 100644 index 0000000..2f7a464 --- /dev/null +++ b/Tests/Integration/EntryQueriesGeneratorsTest.php @@ -0,0 +1,88 @@ +<?php + + +namespace calderawp\CalderaFormsQuery\Tests\Integration; + + +use calderawp\CalderaFormsQuery\EntryQueries; +use calderawp\CalderaFormsQuery\QueriesEntries; +use calderawp\CalderaFormsQuery\Select\EntryValues; +use calderawp\CalderaFormsQuery\Tests\Traits\CanCreateEntryWithEmailField; +use calderawp\CalderaFormsQuery\Tests\Traits\HasFactories; +use calderawp\CalderaFormsQuery\Tests\Traits\UsersMockFormAsDBForm; + +class EntryQueriesGeneratorsTest extends IntegrationTestCase +{ + use CanCreateEntryWithEmailField; + + /** + * Test reset builder allows us to create new queries on generator + * + * @covers QueriesEntries::getEntryValueGenerator() + * @covers EntryValues::resetQuery() + */ + public function testReset() + { + $emailOne = 'one@email.com'; + $entryIdOne = $this->createEntryWithEmail($emailOne); + $emailTwo = 'two@email.com'; + $entryIdTwo = $this->createEntryWithEmail($emailTwo); + $entryQueries = $this->entryQueriesFactory(); + + //Email one by email + $results = $entryQueries + ->getResults( + $entryQueries + ->getEntryValueGenerator() + ->queryByFieldValue( + $this->getEmailFieldSlug(), + $emailOne + ) + ->getPreparedSql() + ); + $this->assertSame(1, count($results)); + + //Email one by entry_id + $results = $entryQueries + ->getResults( + $entryQueries + ->getEntryValueGenerator() + ->queryByEntryId( + $entryIdOne + ) + ->getPreparedSql() + ); + $this->assertSame(1, count($results)); + + $entryQueries + ->getEntryValueGenerator() + ->resetQuery(); + + //Email two by email + $results = $entryQueries + ->getResults( + $entryQueries + ->getEntryValueGenerator() + ->queryByFieldValue( + $this->getEmailFieldSlug(), + $emailTwo + ) + ->getPreparedSql() + ); + $this->assertSame(1, count($results)); + + //Email two by entry_id + $results = $entryQueries + ->getResults( + $entryQueries + ->getEntryValueGenerator() + ->queryByEntryId( + $entryIdTwo + ) + ->getPreparedSql() + ); + $this->assertSame(1, count($results)); + + } + +} \ No newline at end of file diff --git a/Tests/Integration/EntryQueriesTest.php b/Tests/Integration/EntryQueriesTest.php index c31d0db..50a2f59 100644 --- a/Tests/Integration/EntryQueriesTest.php +++ b/Tests/Integration/EntryQueriesTest.php @@ -5,6 +5,7 @@ namespace calderawp\CalderaFormsQuery\Tests\Integration; use calderawp\CalderaFormsQuery\EntryQueries; +use calderawp\CalderaFormsQuery\Tests\Traits\CanCreateEntryWithEmailField; use calderawp\CalderaFormsQuery\Tests\Traits\HasFactories; use calderawp\CalderaFormsQuery\Tests\Traits\UsersMockFormAsDBForm; @@ -58,4 +59,6 @@ class EntryQueriesTest extends IntegrationTestCase $this->assertTrue( ! empty( $resultsTwo ), var_export( $resultsTwo, true ) ); } + + } \ No newline at end of file diff --git a/Tests/Unit/Delete/DeleteQueryBuilderTest.php b/Tests/Unit/Delete/DeleteQueryBuilderTest.php index be97ae6..10db4db 100644 --- a/Tests/Unit/Delete/DeleteQueryBuilderTest.php +++ b/Tests/Unit/Delete/DeleteQueryBuilderTest.php @@ -110,4 +110,14 @@ class DeleteQueryBuilderTest extends TestCase $entryGenerator->resetBuilder( $newBuilder ); $this->assertSame( $newBuilder, $entryGenerator->getBuilder( ) ); } + + public function testResetOfQuery() + { + $entryGenerator = $this->entryDeleteGeneratorFactory(); + $entryGenerator->deleteByUserId(55 ); + $entryGenerator->resetQuery(); + $entryGenerator->deleteByUserId( 42 ); + $this->assertTrue( is_int( strpos( $entryGenerator->getPreparedSql(), '42' ) ) ); + $this->assertTrue( ! is_int( strpos( $entryGenerator->getPreparedSql(), '55' ) ) ); + } } diff --git a/Tests/Unit/EntryQueriesTest.php b/Tests/Unit/EntryQueriesTest.php index b87a1b3..0ca9c6f 100644 --- a/Tests/Unit/EntryQueriesTest.php +++ b/Tests/Unit/EntryQueriesTest.php @@ -45,4 +45,5 @@ class EntryQueriesTest extends TestCase $queries = $this->entryQueriesFactory(); $this->assertTrue(is_array($queries->getResults("SELECT `roy` FROM sivan WHERE mike = 'roy'"))); } + } diff --git a/src/CreatesSqlQueries.php b/src/CreatesSqlQueries.php index dde4600..5b8eb83 100644 --- a/src/CreatesSqlQueries.php +++ b/src/CreatesSqlQueries.php @@ -39,4 +39,11 @@ interface CreatesSqlQueries * @return $this */ public function resetBuilder( MySqlBuilder $builder = null ); + + /** + * Reset the query + * + * @return $this + */ + public function resetQuery(); } diff --git a/src/Delete/DeleteQueryBuilder.php b/src/Delete/DeleteQueryBuilder.php index f55c08a..94bbd5b 100644 --- a/src/Delete/DeleteQueryBuilder.php +++ b/src/Delete/DeleteQueryBuilder.php @@ -20,7 +20,7 @@ abstract class DeleteQueryBuilder extends QueryBuilder implements DoesDeleteQuer public function getDeleteQuery() { if (! $this->deleteQuery) { - $this->deleteQuery = new Delete($this->getTableName()); + $this->setNewQuery(); } return $this->deleteQuery; @@ -33,4 +33,18 @@ abstract class DeleteQueryBuilder extends QueryBuilder implements DoesDeleteQuer { return $this->getDeleteQuery(); } + + /** @inheritdoc */ + public function resetQuery() + { + $this->setNewQuery(); + } + + /** + * Set a new delete query + */ + private function setNewQuery() + { + $this->deleteQuery = new Delete($this->getTableName()); + } } diff --git a/src/Select/SelectQueryBuilder.php b/src/Select/SelectQueryBuilder.php index 57891b5..d2b37f1 100644 --- a/src/Select/SelectQueryBuilder.php +++ b/src/Select/SelectQueryBuilder.php @@ -23,7 +23,7 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer { if (empty($this->selectQuery)) { - $this->selectQuery = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select($this->getTableName()); + $this->setNewQuery(); } return $this->selectQuery; } @@ -49,4 +49,17 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer } + /** @inheritdoc */ + public function resetQuery() + { + $this->setNewQuery(); + return $this; + } + + private function setNewQuery() + { + $this->selectQuery = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select($this->getTableName()); + } + + } -- GitLab