File tree Expand file tree Collapse file tree 8 files changed +128
-12
lines changed Expand file tree Collapse file tree 8 files changed +128
-12
lines changed Original file line number Diff line number Diff line change 11<?php
22namespace TestDbAcle \Commands ;
33
4+ use TestDbAcle \Db \AbstractPdoFacade ;
5+ use TestDbAcle \Db \AbstractTableFactory ;
6+ use TestDbAcle \Db \Mysql \Pdo \PdoFacade ;
7+ use TestDbAcle \Db \TableList ;
8+ use TestDbAcle \Filter \FilterQueue ;
9+ use TestDbAcle \Psv \PsvParser ;
10+ use TestDbAcle \Psv \Table \Table ;
11+
412/**
513 * @TODO this is currently covered only by the functional tests.
614 */
715class FilterTableStateByPsvCommand implements CommandInterface
816{
17+ /**
18+ * @var PsvParser $parser
19+ */
920 protected $ parser ;
21+
22+ /**
23+ * @var FilterQueue $filterQueue
24+ */
1025 protected $ filterQueue ;
26+
27+ /**
28+ * @var TableList
29+ */
1130 protected $ tableList ;
31+
32+ /** @var AbstractPdoFacade */
1233 protected $ pdoFacade ;
34+
35+ /**
36+ * @var AbstractTableFactory $tableFactory
37+ */
1338 protected $ tableFactory ;
14-
39+
40+ /**
41+ * @var array $placeHolders
42+ */
1543 protected $ placeHolders ;
1644 protected $ sourcePsv ;
1745
@@ -36,7 +64,9 @@ public function execute()
3664 $ this ->tableFactory ->populateTableList (array_keys ($ filteredParsedTree ->getTables ()),$ this ->tableList );
3765
3866 foreach ($ filteredParsedTree ->getTables () as $ table ){
67+ /** @var Table $table */
3968 $ tableName = $ table ->getName ();
69+
4070 $ expectedData [$ tableName ]=$ table ->toArray ();
4171
4272 if (isset ($ expectedData [$ tableName ][0 ])) {
Original file line number Diff line number Diff line change 11<?php
22namespace TestDbAcle \Commands ;
3+
4+ use TestDbAcle \Db \AbstractTableFactory ;
5+ use TestDbAcle \Db \DataInserter \DataInserter ;
6+ use TestDbAcle \Db \TableList ;
7+ use TestDbAcle \Filter \FilterQueue ;
8+ use TestDbAcle \Psv \PsvParser ;
9+
310/**
411 * @TODO this is currently covered only by the functional tests.
512 */
613class SetupTablesCommand implements CommandInterface
714{
15+ /**
16+ * @var PsvParser
17+ */
818 protected $ parser ;
19+
20+ /**
21+ * @var DataInserter
22+ */
923 protected $ dataInserter ;
24+
25+ /**
26+ * @var FilterQueue
27+ */
1028 protected $ filterQueue ;
29+
30+ /**
31+ * @var TableList
32+ */
1133 protected $ tableList ;
34+
35+ /**
36+ * @var AbstractTableFactory
37+ */
1238 protected $ tableFactory ;
1339
1440 protected $ placeHolders ;
@@ -25,7 +51,7 @@ public function execute()
2551 {
2652 $ parsedTree = $ this ->parser ->parsePsvTree ($ this ->sourcePsv );
2753 $ this ->tableFactory ->populateTableList (array_keys ($ parsedTree ->getTables ()),$ this ->tableList );
28- return $ this ->dataInserter ->process ($ this ->filterQueue ->filterDataTree ($ parsedTree ));
54+ $ this ->dataInserter ->process ($ this ->filterQueue ->filterDataTree ($ parsedTree ));
2955 }
3056
3157 public function initialise (\TestDbAcle \ServiceLocator $ serviceLocator )
Original file line number Diff line number Diff line change 11<?php
22namespace TestDbAcle \Filter ;
33
4- class AddDefaultValuesRowFilter implements RowFilter {
4+ use TestDbAcle \Psv \Table \Table ;
5+
6+ class AddDefaultValuesRowFilter extends AbstractRowFilter
7+ {
58
69 protected $ tableList ;
710
@@ -38,6 +41,11 @@ public function getDecorateWithNullPlaceHolders(array $tableRow)
3841
3942
4043 }
44+
45+ public function skip (Table $ table )
46+ {
47+ return $ table ->getMeta ()->isReplaceMode ();
48+ }
4149
4250}
4351
Original file line number Diff line number Diff line change 22
33namespace TestDbAcle \Filter ;
44
5+ use TestDbAcle \Psv \Table \Table ;
6+
57class FilterQueue
68{
79
@@ -20,18 +22,22 @@ function filterDataTree(\TestDbAcle\Psv\PsvTree $dataTree)
2022 return $ dataTree ;
2123 }
2224
23- protected function filterTable (\TestDbAcle \Filter \RowFilter $ filter , $ table , array $ tableData )
25+ protected function filterTable (\TestDbAcle \Filter \RowFilter $ filter , Table $ table )
2426 {
27+ $ tableName = $ table ->getName ();
28+ $ tableData = $ table ->toArray ();
2529 foreach ($ tableData as $ index => $ tableRow ) {
26- $ tableData [$ index ] = $ filter ->filter ($ table , $ tableRow );
30+ if (!$ filter ->skip ($ table )) {
31+ $ tableData [$ index ] = $ filter ->filter ($ tableName , $ tableRow );
32+ }
2733 }
2834 return $ tableData ;
2935 }
3036
3137 protected function applyRowFilter ($ filter , \TestDbAcle \Psv \PsvTree $ dataTree )
3238 {
3339 foreach ($ dataTree ->getTables () as $ table ) {
34- $ table ->setData ( $ this ->filterTable ($ filter , $ table-> getName (), $ table -> toArray () ));
40+ $ table ->setData ( $ this ->filterTable ($ filter , $ table ));
3541 }
3642 return $ dataTree ;
3743 }
Original file line number Diff line number Diff line change 11<?php
22namespace TestDbAcle \Filter ;
33
4- class PlaceholderRowFilter implements RowFilter {
4+ class PlaceholderRowFilter extends AbstractRowFilter
5+ {
56
67 protected $ replace ;
78
Original file line number Diff line number Diff line change 11<?php
22
33namespace TestDbAcle \Filter ;
4+ use TestDbAcle \Psv \Table \Table ;
5+
46interface RowFilter{
57 public function filter ($ tableName , array $ row );
8+ public function skip (Table $ table );
69}
Original file line number Diff line number Diff line change @@ -245,7 +245,44 @@ function test_SetupAndAssertWithNullColumn()
245245 $ countResult = $ this ->pdo ->query ("select count(*) n from address where address2 is NULL " )->fetch (\PDO ::FETCH_ASSOC );
246246 $ this ->assertEquals (1 , $ countResult ['n ' ]);
247247 }
248-
248+
249+ /**
250+ * @covers \TestDbAcle\Commands\FilterTableStateByPsvCommand::execute()
251+ * @covers \TestDbAcle\Commands\FilterTableStateByPsvCommand::FilterTableStateByPsvCommand() with placeholders
252+ * @covers \TestDbAcle\Commands\FilterTableStateByPsvCommand::SetAutoIncrementCommand()
253+ * @covers \TestDbAcle::getDefaultFactories()
254+ *
255+ * @link https://github.com/malteriesch/test-db-acle/issues/10
256+ */
257+
258+ function test_Setup_Bug_ReplaceModeOverwritesNonNullColumns ()
259+ {
260+
261+ $ this ->setupTables ("
262+ [address]
263+ address_id |address1 |postcode
264+ 1 |val 1 |foo1
265+ 3 |val 2 |foo2
266+ 1000 |val3 |foo3
267+
268+ " );
269+
270+ $ this ->setupTables ("
271+ [address|mode:replace;identifiedBy:address_id]
272+ address_id |address1
273+ 3 |val 2 amended
274+ " );
275+
276+ $ this ->assertTableStateContains ("
277+ [address]
278+ address_id |address1 |postcode
279+ 1 |val 1 |foo1
280+ 3 |val 2 amended |foo2
281+ 1000 |val3 |foo3
282+
283+ " );
284+ }
285+
249286 /**
250287 * @covers \TestDbAcle\Commands\FilterTableStateByPsvCommand::execute()
251288 * @covers \TestDbAcle\Commands\FilterTableStateByPsvCommand::FilterTableStateByPsvCommand() with placeholders
Original file line number Diff line number Diff line change @@ -37,6 +37,8 @@ function test_filterDataTree_withOneRowFilter()
3737
3838
3939 $ mockRowFilter1 = \Mockery::mock ('\TestDbAcle\Filter\RowFilter ' );
40+
41+ $ mockRowFilter1 ->shouldReceive ('skip ' )->andReturn (false );
4042
4143 $ mockRowFilter1 ->shouldReceive ('filter ' )->once ()->with ('user ' , array ("user.row1 " ))->ordered ()
4244 ->andReturn (array ('user.filtered_filter1_row1 ' ));
@@ -84,11 +86,12 @@ function test_filterDataTree_withTwoRowFilters()
8486
8587 $ dataTree ->addTable (
8688 new \TestDbAcle \Psv \Table \Table ('emptyTable ' ));
87-
88-
89-
89+
90+
9091 $ mockRowFilter1 = \Mockery::mock ('\TestDbAcle\Filter\RowFilter ' );
91-
92+
93+ $ mockRowFilter1 ->shouldReceive ('skip ' )->andReturn (false );
94+
9295 $ mockRowFilter1 ->shouldReceive ('filter ' )->once ()->with ('user ' , array ("user.row1 " ))->ordered ()
9396 ->andReturn (array ('user.filtered_filter1_row1 ' ));
9497 $ mockRowFilter1 ->shouldReceive ('filter ' )->once ()->with ('user ' , array ("user.row2 " ))->ordered ()
@@ -101,6 +104,8 @@ function test_filterDataTree_withTwoRowFilters()
101104
102105 $ mockRowFilter2 = \Mockery::mock ('\TestDbAcle\Filter\RowFilter ' );
103106
107+ $ mockRowFilter2 ->shouldReceive ('skip ' )->andReturn (false );
108+
104109 $ mockRowFilter2 ->shouldReceive ('filter ' )->once ()->with ('user ' , array ("user.filtered_filter1_row1 " ))->ordered ()
105110 ->andReturn (array ('user.filtered_filter2_row1 ' ));
106111 $ mockRowFilter2 ->shouldReceive ('filter ' )->once ()->with ('user ' , array ("user.filtered_filter1_row2 " ))->ordered ()
You can’t perform that action at this time.
0 commit comments