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

impliment select by user ID feature

parent 56bee1e4
No related branches found
No related tags found
No related merge requests found
<?php
namespace calderawp\CalderaFormsQuery\Tests\Integration\Features;
use calderawp\CalderaFormsQuery\Features\FeatureContainer;
use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase;
class FeatureContainerTest extends IntegrationTestCase
{
/**
* Test the table names
*
* @covers FeatureContainer::getQueries()
* @covers FeatureContainer::bindServices()
*/
public function testTableNames()
{
$container = $this->containerFactory();
//Select entry
$this->assertEquals( $this->entryTableName(),
$container
->getQueries()
->entrySelect()
->getTableName()
);
//Select entry value
$this->assertEquals( $this->entryValueTableName(),
$container
->getQueries()
->entryValuesSelect()
->getTableName()
);
//Delete entry
$this->assertEquals( $this->entryTableName(),
$container
->getQueries()
->entryDelete()
->getTableName()
);
//Delete entry values
$this->assertEquals( $this->entryValueTableName(),
$container
->getQueries()
->entryValueDelete()
->getTableName()
);
}
}
\ No newline at end of file
......@@ -11,23 +11,20 @@ class QueryByUserIdTest extends IntegrationTestCase
use CanCreateEntryWithEmailField;
/**
* Test selecting by entry ID
*
* @covers CreatesSelectQueries::selectByUserId()
*/
public function testByUserId()
{
$email = 'nom@noms.noms';
$container = $this->containerFactory();
//Create an entry for a known user.
$email = 'nom@noms.noms';
$userId = $this->factory()->user->create(
[ 'user_email' => $email ]
);
wp_set_current_user( $userId );
$entryId = $this->createEntryWithEmail( $email );
$queries = $this->selectQueriesFactory();
$results = $queries->selectByUserId( $userId );
$results = $container->selectByUserId( $userId );
$this->assertEquals( $entryId, $results[0]['entry']->id);
$this->assertEquals( $entryId, $results[0]['entry']->id);
......@@ -42,5 +39,6 @@ class QueryByUserIdTest extends IntegrationTestCase
$this->assertTrue( $found );
}
}
\ No newline at end of file
......@@ -3,7 +3,9 @@
namespace calderawp\CalderaFormsQuery\Tests\Traits;
use calderawp\CalderaContainers\Service\Container;
use calderawp\CalderaFormsQuery\DeleteQueries;
use calderawp\CalderaFormsQuery\Features\FeatureContainer;
use calderawp\CalderaFormsQuery\SelectQueries;
use calderawp\CalderaFormsQuery\Tests\Unit\Features\QueriesTest;
......@@ -102,6 +104,17 @@ trait HasFactories
);
}
/**
* @return FeatureContainer
*/
protected function containerFactory()
{
return new FeatureContainer(
new Container(),
$this->getWPDB()
);
}
/**
* Gets a WPDB instance
*
......
......@@ -16,6 +16,7 @@ class FeatureContainerTest extends TestCase
{
/**
* Test getting the main MySQL Builder
*
* @covers FeatureContainer::getBuilder()
* @covers FeatureContainer::bindServices()
......@@ -42,6 +43,7 @@ class FeatureContainerTest extends TestCase
}
/**
* Test getting the main query builder
*
* @covers FeatureContainer::bindServices()
* @covers FeatureContainer::getQueries()
......@@ -51,7 +53,6 @@ class FeatureContainerTest extends TestCase
$serviceContainer = new TheServiceContainer();
$container = new FeatureContainer($serviceContainer, $this->getWPDB());
$this->assertTrue(
is_a(
$container->getQueries(),
......@@ -64,4 +65,48 @@ class FeatureContainerTest extends TestCase
$container->getQueries()
);
}
/**
* Test the table names
*
* @covers FeatureContainer::getQueries()
* @covers FeatureContainer::bindServices()
*/
public function testTableNames()
{
$container = $this->containerFactory();
//Select entry
$this->assertEquals( $this->entryTableName(),
$container
->getQueries()
->entrySelect()
->getTableName()
);
//Select entry value
$this->assertEquals( $this->entryValueTableName(),
$container
->getQueries()
->entryValuesSelect()
->getTableName()
);
//Delete entry
$this->assertEquals( $this->entryTableName(),
$container
->getQueries()
->entryDelete()
->getTableName()
);
//Delete entry values
$this->assertEquals( $this->entryValueTableName(),
$container
->getQueries()
->entryValueDelete()
->getTableName()
);
}
}
\ No newline at end of file
......@@ -17,5 +17,8 @@ use PHPUnit\Framework\TestCase as FrameworkTestCase;
*/
abstract class TestCase extends FrameworkTestCase
{
//Factories go in this trait so they are share with integration tests
use HasFactories;
}
<?php
namespace calderawp\CalderaFormsQuery;
trait CanCollectResults
{
/**
* Collect results using Caldera_Forms_Entry_Entry and Caldera_Forms_Entry_Field to represent values
*
* @param \stdClass[] $entriesValues
* @return array
*/
private function collectResults($entriesValues)
{
$results = [];
foreach ($entriesValues as $entry) {
$this->resetEntryValueGenerator();
$entry = new \Caldera_Forms_Entry_Entry($entry);
$this
->getEntryValueGenerator()
->queryByEntryId($entry->id);
$entriesValues =$this->getResults(
$this->getEntryValueGenerator()
->getPreparedSql()
);
$entryValuesPrepared = $this->collectEntryValues($entriesValues);
$results[] = [
'entry' => $entry,
'values' => $entryValuesPrepared
];
}
return $results;
}
/**
* Collect entry values as Caldera_Forms_Entry_Field objects
*
* @param \stdClass[] $entriesValues
* @return array
*/
private function collectEntryValues($entriesValues): array
{
$entryValuesPrepared = [];
if (!empty($entriesValues)) {
foreach ($entriesValues as $entryValue) {
$entryValuesPrepared[] = new \Caldera_Forms_Entry_Field($entryValue);
}
}
return $entryValuesPrepared;
}
/**
* Reset entry generator
*/
private function resetEntryGenerator()
{
$this->entryGenerator->resetQuery();
}
/**
* Reset entry value generator
*/
private function resetEntryValueGenerator()
{
$this->entryValueGenerator->resetQuery();
}
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ use calderawp\CalderaFormsQuery\Select\EntryValues;
/**
* Interface QueriesEntries
*
* Interface that all classes that query for entries MUST impliment
* Interface that all classes that query for entries MUST implement
*/
interface CreatesSelectQueries extends GetsResults
{
......@@ -25,4 +25,10 @@ interface CreatesSelectQueries extends GetsResults
* @return Entry
*/
public function getEntryGenerator();
/**
* @param $sql
* @return \stdClass[]
*/
public function getResults($sql);
}
......@@ -7,12 +7,16 @@ namespace calderawp\CalderaFormsQuery\Features;
use calderawp\CalderaContainers\Container;
use calderawp\CalderaContainers\Interfaces\ServiceContainer;
use calderawp\CalderaFormsQuery\Delete\DeleteQueryBuilder;
use calderawp\CalderaFormsQuery\Delete\DoesDeleteQuery;
use calderawp\CalderaFormsQuery\DeleteQueries;
use calderawp\CalderaFormsQuery\MySqlBuilder;
use calderawp\CalderaFormsQuery\Delete\Entry as EntryDelete;
use \calderawp\CalderaFormsQuery\Delete\EntryValues as EntryValuesDelete;
use calderawp\CalderaFormsQuery\Select\DoesSelectQuery;
use \calderawp\CalderaFormsQuery\Select\Entry as EntrySelect;
use \calderawp\CalderaFormsQuery\Select\EntryValues as EntryValueSelect;
use calderawp\CalderaFormsQuery\Select\SelectQueryBuilder;
use calderawp\CalderaFormsQuery\SelectQueries;
class FeatureContainer extends Container
......@@ -44,11 +48,13 @@ class FeatureContainer extends Container
*/
protected function bindServices()
{
//@TODO move these to service provider classes
$this->serviceContainer->singleton( MySqlBuilder::class, function(){
return new MySqlBuilder();
});
$this->serviceContainer->bind( SelectQueries::class, function (){
//@TODO Factory
return new SelectQueries(
new EntrySelect(
$this->getBuilder(),
......@@ -56,13 +62,14 @@ class FeatureContainer extends Container
),
new EntryValueSelect(
$this->getBuilder(),
$this->entryTableName()
$this->entryValueTableName()
),
$this->wpdb
);
});
$this->serviceContainer->bind( DeleteQueries::class, function (){
//@TODO Factory
return new DeleteQueries(
new EntryDelete(
$this->getBuilder(),
......@@ -70,7 +77,7 @@ class FeatureContainer extends Container
),
new EntryValuesDelete(
$this->getBuilder(),
$this->entryTableName()
$this->entryValueTableName()
),
$this->wpdb
);
......@@ -112,12 +119,25 @@ class FeatureContainer extends Container
->make( Queries::class );
}
/**
* Select all entries and entry values by user ID
*
* @param int $userId
* @return array
*/
public function selectByUserId($userId)
{
$query = $this
->getQueries()
->entrySelect()
->queryByUserId($userId);
return $this->collectResults( $this->select( $query ) );
}
/**
* @return string
*/
protected function entryValueTableName(): string
protected function entryValueTableName()
{
return "{$this->wpdb->prefix}cf_form_entry_values";
}
......@@ -125,9 +145,80 @@ class FeatureContainer extends Container
/**
* @return string
*/
protected function entryTableName(): string
protected function entryTableName()
{
return "{$this->wpdb->prefix}cf_form_entries";
}
/**
* Collect results using Caldera_Forms_Entry_Entry and Caldera_Forms_Entry_Field to represent values
*
* @param \stdClass[] $entriesValues
* @return array
*/
private function collectResults($entriesValues)
{
$results = [];
foreach ($entriesValues as $entry) {
$entry = new \Caldera_Forms_Entry_Entry($entry);
$query = $this
->getQueries()
->entryValuesSelect()
->queryByEntryId($entry->id);
$entriesValues = $this->select($query);
$entryValuesPrepared = $this->collectEntryValues($entriesValues);
$results[] = [
'entry' => $entry,
'values' => $entryValuesPrepared
];
}
return $results;
}
/**
* Collect entry values as Caldera_Forms_Entry_Field objects
*
* @param \stdClass[] $entriesValues
* @return array
*/
private function collectEntryValues($entriesValues): array
{
$entryValuesPrepared = [];
if (!empty($entriesValues)) {
foreach ($entriesValues as $entryValue) {
$entryValuesPrepared[] = new \Caldera_Forms_Entry_Field($entryValue);
}
}
return $entryValuesPrepared;
}
/**
* Do a select query
*
* @param SelectQueryBuilder $query
* @return \stdClass[]
*/
private function select(SelectQueryBuilder $query)
{
return $this
->getQueries()
->select($query);
}
/**
* Do a delete query
*
* @param DeleteQueryBuilder $query
* @return \stdClass[]
*/
private function delete(DeleteQueryBuilder $query)
{
return $this->
getQueries()
->delete($query);
}
}
\ No newline at end of file
......@@ -5,10 +5,15 @@ namespace calderawp\CalderaFormsQuery\Features;
use calderawp\CalderaFormsQuery\CreatesDeleteQueries;
use calderawp\CalderaFormsQuery\CreatesSelectQueries;
use calderawp\CalderaFormsQuery\Delete\DeleteQueryBuilder;
use calderawp\CalderaFormsQuery\Delete\DoesDeleteQuery;
use calderawp\CalderaFormsQuery\Delete\Entry as EntryDelete;
use \calderawp\CalderaFormsQuery\Delete\EntryValues as EntryValuesDelete;
use calderawp\CalderaFormsQuery\DeleteQueries;
use calderawp\CalderaFormsQuery\Select\DoesSelectQuery;
use \calderawp\CalderaFormsQuery\Select\Entry as EntrySelect;
use \calderawp\CalderaFormsQuery\Select\EntryValues as EntryValueSelect;
use calderawp\CalderaFormsQuery\Select\SelectQueryBuilder;
class Queries implements DoesQueries
{
......@@ -34,6 +39,32 @@ class Queries implements DoesQueries
$this->deleteQueries = $deleteQueries;
}
/**
* @param SelectQueryBuilder $query
* @return \stdClass[]
*/
public function select( SelectQueryBuilder $query )
{
return $this
->selectQueries
->getResults(
$query->getPreparedSql()
);
}
/**
* @param DeleteQueryBuilder $query
* @return \stdClass[]
*/
public function delete( DeleteQueryBuilder $query )
{
return $this
->deleteQueries
->getResults(
$query->getPreparedSql()
);
}
/**
* Create a new SELECT query for Entry table
*
......
......@@ -62,26 +62,6 @@ class SelectQueries implements CreatesSelectQueries
return $this->entryGenerator;
}
/**
* Get all data for a user by Id
*
* @param $userId
* @return array
*/
public function selectByUserId($userId)
{
$this->resetEntryGenerator();
$this
->getEntryGenerator()
->queryByUserId($userId);
$entries = $this->getResults($this->getEntryGenerator()->getPreparedSql());
return $this->collectResults($entries);
}
/**
* Reset entry generator
*/
......@@ -98,49 +78,5 @@ class SelectQueries implements CreatesSelectQueries
$this->entryValueGenerator->resetQuery();
}
/**
* Collect results using Caldera_Forms_Entry_Entry and Caldera_Forms_Entry_Field to represent values
*
* @param \stdClass[] $entriesValues
* @return array
*/
private function collectResults($entriesValues)
{
$results = [];
foreach ($entriesValues as $entry) {
$this->resetEntryValueGenerator();
$entry = new \Caldera_Forms_Entry_Entry($entry);
$this
->getEntryValueGenerator()
->queryByEntryId($entry->id);
$entriesValues =$this->getResults(
$this->getEntryValueGenerator()
->getPreparedSql()
);
$entryValuesPrepared = $this->collectEntryValues($entriesValues);
$results[] = [
'entry' => $entry,
'values' => $entryValuesPrepared
];
}
return $results;
}
/**
* Collect entry values as Caldera_Forms_Entry_Field objects
*
* @param \stdClass[] $entriesValues
* @return array
*/
private function collectEntryValues($entriesValues): array
{
$entryValuesPrepared = [];
if (!empty($entriesValues)) {
foreach ($entriesValues as $entryValue) {
$entryValuesPrepared[] = new \Caldera_Forms_Entry_Field($entryValue);
}
}
return $entryValuesPrepared;
}
}
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