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

impliment container

parent 4d3c3d5f
No related branches found
No related tags found
No related merge requests found
Showing
with 591 additions and 34 deletions
......@@ -25,7 +25,7 @@ class QueryByUserIdTest extends IntegrationTestCase
);
wp_set_current_user( $userId );
$entryId = $this->createEntryWithEmail( $email );
$queries = $this->entryQueriesFactory();
$queries = $this->selectQueriesFactory();
$results = $queries->selectByUserId( $userId );
$this->assertEquals( $entryId, $results[0]['entry']->id);
......
......@@ -59,7 +59,7 @@ abstract class IntegrationTestCase extends \WP_UnitTestCase
/**
* @return SelectQueries
*/
protected function entryQueriesFactory()
protected function selectQueriesFactory()
{
return new SelectQueries(
......
......@@ -11,7 +11,7 @@ use calderawp\CalderaFormsQuery\Tests\Traits\CanCreateEntryWithEmailField;
use calderawp\CalderaFormsQuery\Tests\Traits\HasFactories;
use calderawp\CalderaFormsQuery\Tests\Traits\UsersMockFormAsDBForm;
class EntryQueriesGeneratorsTest extends IntegrationTestCase
class SelectQueriesGeneratorsTest extends IntegrationTestCase
{
use CanCreateEntryWithEmailField;
......@@ -27,7 +27,7 @@ class EntryQueriesGeneratorsTest extends IntegrationTestCase
$entryIdOne = $this->createEntryWithEmail($emailOne);
$emailTwo = 'two@email.com';
$entryIdTwo = $this->createEntryWithEmail($emailTwo);
$entryQueries = $this->entryQueriesFactory();
$entryQueries = $this->selectQueriesFactory();
//Email one by email
$results = $entryQueries
......
......@@ -9,7 +9,7 @@ use calderawp\CalderaFormsQuery\Tests\Traits\CanCreateEntryWithEmailField;
use calderawp\CalderaFormsQuery\Tests\Traits\HasFactories;
use calderawp\CalderaFormsQuery\Tests\Traits\UsersMockFormAsDBForm;
class EntryQueriesTest extends IntegrationTestCase
class SelectQueriesTest extends IntegrationTestCase
{
use UsersMockFormAsDBForm;
public function setUp()
......@@ -33,7 +33,7 @@ class EntryQueriesTest extends IntegrationTestCase
$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 );
$results = $this->selectQueriesFactory()->getResults( $sql );
$this->assertTrue( ! empty( $results ) );
$this->assertEquals( 2, $results[0]->total);
......@@ -50,12 +50,12 @@ class EntryQueriesTest extends IntegrationTestCase
{
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 );
$resultsOne = $this->selectQueriesFactory()->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 );
$resultsTwo = $this->selectQueriesFactory()->getResults( $sql );
$this->assertTrue( ! empty( $resultsTwo ), var_export( $resultsTwo, true ) );
}
......
......@@ -39,13 +39,13 @@ class TestsTest extends IntegrationTestCase
/**
* Test that factories work for integration tests
*
* @covers HasFactories::entryQueriesFactory()
* @covers HasFactories::selectQueriesFactory()
* @covers HasFactories::entryValuesGeneratorFactory()
* @covers HasFactories::entryGeneratorFactory()
*/
public function testFactory()
{
$this->assertTrue(is_a($this->entryQueriesFactory(), SelectQueries::class));
$this->assertTrue(is_a($this->selectQueriesFactory(), SelectQueries::class));
$this->assertTrue(is_a($this->entryValuesGeneratorFactory(), EntryValues::class));
$this->assertTrue(is_a($this->entryGeneratorFactory(), Entry::class));
......
......@@ -3,7 +3,9 @@
namespace calderawp\CalderaFormsQuery\Tests\Traits;
use calderawp\CalderaFormsQuery\DeleteQueries;
use calderawp\CalderaFormsQuery\SelectQueries;
use calderawp\CalderaFormsQuery\Tests\Unit\Features\QueriesTest;
trait HasFactories
{
......@@ -66,7 +68,7 @@ trait HasFactories
/**
* @return SelectQueries
*/
protected function entryQueriesFactory()
protected function selectQueriesFactory()
{
return new SelectQueries(
......@@ -76,6 +78,30 @@ trait HasFactories
);
}
/**
* @return DeleteQueries
*/
protected function deleteQueriesFactory()
{
return new DeleteQueries(
$this->entryDeleteGeneratorFactory(),
$this->entryValuesDeleteGeneratorFactory(),
$this->getWPDB()
);
}
/**
* @return \calderawp\CalderaFormsQuery\Features\Queries
*/
protected function featureQueriesFactory()
{
return new \calderawp\CalderaFormsQuery\Features\Queries(
$this->selectQueriesFactory(),
$this->deleteQueriesFactory()
);
}
/**
* Gets a WPDB instance
*
......
......@@ -107,17 +107,17 @@ class DeleteQueryBuilderTest extends TestCase
{
$entryGenerator = $this->entryDeleteGeneratorFactory();
$newBuilder = new MySqlBuilder();
$entryGenerator->resetBuilder( $newBuilder );
$this->assertSame( $newBuilder, $entryGenerator->getBuilder( ) );
$entryGenerator->resetBuilder($newBuilder);
$this->assertSame($newBuilder, $entryGenerator->getBuilder());
}
public function testResetOfQuery()
{
$entryGenerator = $this->entryDeleteGeneratorFactory();
$entryGenerator->deleteByUserId(55 );
$entryGenerator->deleteByUserId(55);
$entryGenerator->resetQuery();
$entryGenerator->deleteByUserId( 42 );
$this->assertTrue( is_int( strpos( $entryGenerator->getPreparedSql(), '42' ) ) );
$this->assertTrue( ! is_int( strpos( $entryGenerator->getPreparedSql(), '55' ) ) );
$entryGenerator->deleteByUserId(42);
$this->assertTrue(is_int(strpos($entryGenerator->getPreparedSql(), '42')));
$this->assertTrue(! is_int(strpos($entryGenerator->getPreparedSql(), '55')));
}
}
<?php
namespace calderawp\CalderaFormsQuery\Tests\Unit;
use calderawp\CalderaFormsQuery\Delete\Entry;
use calderawp\CalderaFormsQuery\Delete\EntryValues;
class DeleteQueriesTest extends TestCase
{
/**
* Test getting entry SQL generator
*
* @covers DeleteQueries::getEntryGenerator()
* @covers DeleteQueries::$entryGenerator
*/
public function testGetEntryGenerator()
{
$queries = $this->deleteQueriesFactory();
$this->assertTrue(is_a($queries->getEntryGenerator(), Entry::class));
}
/**
* Test getting entry values SQL generator
*
* @covers DeleteQueries::getEntryValueGenerator()
* @covers DeleteQueries::$entryValueGenerator
*/
public function testGetEntryValueGenerator()
{
$queries = $this->deleteQueriesFactory();
$this->assertTrue(is_a($queries->getEntryValueGenerator(), EntryValues::class));
}
/**
* Test that getResults method returns an array
*
* @covers DeleteQueries::getResults()
*/
public function testGetResults()
{
$queries = $this->deleteQueriesFactory();
$this->assertTrue(is_array($queries->getResults("SELECT `roy` FROM sivan WHERE mike = 'roy'")));
}
}
<?php
namespace calderawp\CalderaFormsQuery\Tests\Unit\Features;
use calderawp\CalderaContainers\Service\Container as TheServiceContainer;
use calderawp\CalderaFormsQuery\Features\DoesQueries;
use calderawp\CalderaFormsQuery\Features\FeatureContainer;
use calderawp\CalderaFormsQuery\Features\Queries;
use calderawp\CalderaFormsQuery\MySqlBuilder;
use calderawp\CalderaFormsQuery\Tests\Unit\TestCase;
use NilPortugues\Sql\QueryBuilder\Builder\BuilderInterface;
class FeatureContainerTest extends TestCase
{
/**
*
* @covers FeatureContainer::getBuilder()
* @covers FeatureContainer::bindServices()
*/
public function testGetBuilder()
{
$serviceContainer = new TheServiceContainer();
$container = new FeatureContainer($serviceContainer, $this->getWPDB());
$this->assertTrue( is_object( $serviceContainer->make( MySqlBuilder::class ) ) );
$this->assertTrue( is_object( $container->getBuilder() ) );
$this->assertTrue(
is_a(
$container->getBuilder(),
BuilderInterface::class
)
);
$this->assertEquals(
$serviceContainer->make( MySqlBuilder::class ),
$container->getBuilder()
);
}
/**
*
* @covers FeatureContainer::bindServices()
* @covers FeatureContainer::getQueries()
*/
public function testGetQueries()
{
$serviceContainer = new TheServiceContainer();
$container = new FeatureContainer($serviceContainer, $this->getWPDB());
$this->assertTrue(
is_a(
$container->getQueries(),
Queries::class
)
);
$this->assertEquals(
$serviceContainer->make( Queries::class ),
$container->getQueries()
);
}
}
\ No newline at end of file
<?php
namespace calderawp\CalderaFormsQuery\Tests\Unit\Features;
use calderawp\CalderaFormsQuery\Delete\Entry;
use calderawp\CalderaFormsQuery\Delete\EntryValues;
use calderawp\CalderaFormsQuery\Tests\Unit\TestCase;
class QueriesTest extends TestCase
{
/**
* Test getting entry delete SQL generator
*
* @covers Queries::entryDelete()
*/
public function testGetDeleteEntryGenerator()
{
$queries = $this->featureQueriesFactory();
$this->assertTrue(is_a($queries->entryDelete(), Entry::class));
}
/**
* Test getting entry delete values SQL generator
*
* @covers Queries::entryValueDelete()
*/
public function testGetDeleteEntryValueGenerator()
{
$queries = $this->featureQueriesFactory();
$this->assertTrue(is_a($queries->entryValueDelete(), EntryValues::class));
}
/**
* Test getting entry select SQL generator
*
* @covers Queries::entrySelect()
*/
public function testGetSelectEntryGenerator()
{
$queries = $this->featureQueriesFactory();
$this->assertTrue(is_a($queries->entrySelect(), \calderawp\CalderaFormsQuery\Select\Entry::class));
}
/**
* Test getting entry values select SQL generator
*
* @covers Queries::entryValuesSelect()
*/
public function testGetSelectEntryValueGenerator()
{
$queries = $this->featureQueriesFactory();
$this->assertTrue(is_a($queries->entryValuesSelect(), \calderawp\CalderaFormsQuery\Select\EntryValues::class));
}
}
......@@ -119,7 +119,7 @@ class SelectQueryBuilderTest extends TestCase
{
$entryGenerator = $this->entryGeneratorFactory();
$newBuilder = new MySqlBuilder();
$entryGenerator->resetBuilder( $newBuilder );
$this->assertSame( $newBuilder, $entryGenerator->getBuilder( ) );
$entryGenerator->resetBuilder($newBuilder);
$this->assertSame($newBuilder, $entryGenerator->getBuilder());
}
}
......@@ -8,7 +8,7 @@ use calderawp\CalderaFormsQuery\Select\Entry;
use calderawp\CalderaFormsQuery\Select\EntryValues;
use calderawp\CalderaFormsQuery\Select\SelectQueryBuilder;
class EntryQueriesTest extends TestCase
class SelectQueriesTest extends TestCase
{
/**
......@@ -19,7 +19,7 @@ class EntryQueriesTest extends TestCase
*/
public function testGetEntryGenerator()
{
$queries = $this->entryQueriesFactory();
$queries = $this->selectQueriesFactory();
$this->assertTrue(is_a($queries->getEntryGenerator(), Entry::class));
}
......@@ -31,7 +31,7 @@ class EntryQueriesTest extends TestCase
*/
public function testGetEntryValueGenerator()
{
$queries = $this->entryQueriesFactory();
$queries = $this->selectQueriesFactory();
$this->assertTrue(is_a($queries->getEntryValueGenerator(), EntryValues::class));
}
......@@ -42,8 +42,7 @@ class EntryQueriesTest extends TestCase
*/
public function testGetResults()
{
$queries = $this->entryQueriesFactory();
$queries = $this->selectQueriesFactory();
$this->assertTrue(is_array($queries->getResults("SELECT `roy` FROM sivan WHERE mike = 'roy'")));
}
}
......@@ -16,7 +16,8 @@
],
"require": {
"php": ">=5.6",
"nilportugues/sql-query-builder": "^1.5"
"nilportugues/sql-query-builder": "^1.5",
"calderawp/caldera-containers": "^0.1.1"
},
"autoload": {
"psr-4": {
......
......@@ -4,8 +4,50 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "90b8c6ac2ab8c558b28b1aea0f40cc18",
"content-hash": "736a984915e9e1f970336e5a8e5b38eb",
"packages": [
{
"name": "calderawp/caldera-containers",
"version": "0.1.1",
"source": {
"type": "git",
"url": "https://github.com/CalderaWP/caldera-containers.git",
"reference": "66eb851926e6872b4e8f5d5fdf7a1b80ebd43fba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/CalderaWP/caldera-containers/zipball/66eb851926e6872b4e8f5d5fdf7a1b80ebd43fba",
"reference": "66eb851926e6872b4e8f5d5fdf7a1b80ebd43fba",
"shasum": ""
},
"require": {
"php": "^5.6|^7.0",
"pimple/pimple": "^3.2",
"psr/container": "^1.0@dev"
},
"require-dev": {
"jakub-onderka/php-parallel-lint": "^1.0",
"phpunit/phpunit": "5.0.*",
"squizlabs/php_codesniffer": "^3.2"
},
"type": "libary",
"autoload": {
"psr-4": {
"calderawp\\CalderaContainers\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0"
],
"authors": [
{
"name": "josh",
"email": "josh@calderawp.com"
}
],
"time": "2018-04-05T19:34:50+00:00"
},
{
"name": "nilportugues/sql-query-builder",
"version": "1.5.1",
......@@ -124,6 +166,105 @@
"tokenizer"
],
"time": "2015-11-02T23:24:39+00:00"
},
{
"name": "pimple/pimple",
"version": "v3.2.3",
"source": {
"type": "git",
"url": "https://github.com/silexphp/Pimple.git",
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32",
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"psr/container": "^1.0"
},
"require-dev": {
"symfony/phpunit-bridge": "^3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2.x-dev"
}
},
"autoload": {
"psr-0": {
"Pimple": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Pimple, a simple Dependency Injection Container",
"homepage": "http://pimple.sensiolabs.org",
"keywords": [
"container",
"dependency injection"
],
"time": "2018-01-21T07:42:36+00:00"
},
{
"name": "psr/container",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common Container Interface (PHP FIG PSR-11)",
"homepage": "https://github.com/php-fig/container",
"keywords": [
"PSR-11",
"container",
"container-interface",
"container-interop",
"psr"
],
"time": "2017-02-14T16:28:37+00:00"
}
],
"packages-dev": [
......
<?php
namespace calderawp\CalderaFormsQuery;
use calderawp\CalderaFormsQuery\Delete\Entry;
use calderawp\CalderaFormsQuery\Delete\EntryValues;
/**
* Interface CreatesDeleteQueries
*
* Interface that all classes that query for entries MUST impliment
*/
interface CreatesDeleteQueries extends GetsResults
{
/**
* Get DELETE query generator for entry values SQL
*
* @return EntryValues
*/
public function getEntryValueGenerator();
/**
* Get DELETE query generator for entry table SQL
*
* @return Entry
*/
public function getEntryGenerator();
}
......@@ -11,7 +11,7 @@ use calderawp\CalderaFormsQuery\Select\EntryValues;
*
* Interface that all classes that query for entries MUST impliment
*/
interface CreatesSelectQueries
interface CreatesSelectQueries extends GetsResults
{
/**
* Get generator for entry values SQL
......@@ -25,10 +25,4 @@ interface CreatesSelectQueries
* @return Entry
*/
public function getEntryGenerator();
/**
* @param $sql
* @return \stdClass[]
*/
public function getResults($sql);
}
......@@ -38,7 +38,7 @@ interface CreatesSqlQueries
* @param MySqlBuilder|null $builder New builder or null to use default empty
* @return $this
*/
public function resetBuilder( MySqlBuilder $builder = null );
public function resetBuilder(MySqlBuilder $builder = null);
/**
* Reset the query
......
<?php
namespace calderawp\CalderaFormsQuery;
use calderawp\CalderaFormsQuery\Delete\Entry;
use calderawp\CalderaFormsQuery\Delete\EntryValues;
class DeleteQueries implements CreatesDeleteQueries
{
/**
* SQL generator for entry table
*
* @var Entry
*/
protected $entryGenerator;
/**
* SQL generator for entry values table
*
* @var EntryValues
*/
protected $entryValueGenerator;
/**
* @var \wpdb
*/
protected $wpdb;
public function __construct(Entry $entryGenerator, EntryValues $entryValueGenerator, \wpdb $wpdb)
{
$this->entryGenerator = $entryGenerator;
$this->entryValueGenerator = $entryValueGenerator;
$this->wpdb = $wpdb;
}
/** @inheritdoc */
public function getResults($sql)
{
$results = $this->wpdb->get_results($sql);
if (empty($results)) {
return [];
}
return $results;
}
/** @inheritdoc */
public function getEntryValueGenerator()
{
return $this->entryValueGenerator;
}
/** @inheritdoc */
public function getEntryGenerator()
{
return $this->entryGenerator;
}
}
<?php
namespace calderawp\CalderaFormsQuery\Features;
interface DoesQueries
{
}
\ No newline at end of file
<?php
namespace calderawp\CalderaFormsQuery\Features;
use calderawp\CalderaContainers\Container;
use calderawp\CalderaContainers\Interfaces\ServiceContainer;
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\Entry as EntrySelect;
use \calderawp\CalderaFormsQuery\Select\EntryValues as EntryValueSelect;
use calderawp\CalderaFormsQuery\SelectQueries;
class FeatureContainer extends Container
{
/**
* @var ServiceContainer
*/
protected $serviceContainer;
/**
* @var \wpdb
*/
protected $wpdb;
/**
* FeatureContainer constructor.
* @param ServiceContainer $serviceContainer
* @param \wpdb $wpdb
*/
public function __construct(ServiceContainer $serviceContainer, \wpdb $wpdb )
{
$this->serviceContainer = $serviceContainer;
$this->wpdb = $wpdb;
$this->bindServices();
}
/**
* Bind services to service container
*/
protected function bindServices()
{
$this->serviceContainer->singleton( MySqlBuilder::class, function(){
return new MySqlBuilder();
});
$this->serviceContainer->bind( SelectQueries::class, function (){
return new SelectQueries(
new EntrySelect(
$this->getBuilder(),
$this->entryTableName()
),
new EntryValueSelect(
$this->getBuilder(),
$this->entryTableName()
),
$this->wpdb
);
});
$this->serviceContainer->bind( DeleteQueries::class, function (){
return new DeleteQueries(
new EntryDelete(
$this->getBuilder(),
$this->entryTableName()
),
new EntryValuesDelete(
$this->getBuilder(),
$this->entryTableName()
),
$this->wpdb
);
});
$this->serviceContainer->singleton( Queries::class, function(){
return new Queries(
$this
->serviceContainer
->make( SelectQueries::class ),
$this
->serviceContainer
->make(DeleteQueries::class )
);
});
}
/**
* Get MySQL builder
*
* @return MySqlBuilder
*/
public function getBuilder()
{
return $this
->serviceContainer
->make( MySqlBuilder::class );
}
/**
* Get query runner
*
* @return Queries
*/
public function getQueries()
{
return $this
->serviceContainer
->make( Queries::class );
}
/**
* @return string
*/
protected function entryValueTableName(): string
{
return "{$this->wpdb->prefix}cf_form_entry_values";
}
/**
* @return string
*/
protected function entryTableName(): string
{
return "{$this->wpdb->prefix}cf_form_entries";
}
}
\ No newline at end of file
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