public function test_b() { $gqty = 23; // look bottom for "// $gqty ..." $resDataFoo = function ($data) { return array_map(function ($v) { return $v = array('input' => array($v)); }, $data); }; $inDataFoo = function ($prefix, $qty = 10) use(&$gqty) { $gqty += $qty; return array_fill(0, $qty, uniqid($prefix)); }; $resDataRimma = function ($data) { return array_map(function ($v) { return $v = array('att_1' => '0' . array_shift($v), 'att_2' => '', 'att_3' => ''); }, $data); }; $inDataRimma = function ($prefix, $qty = 10) use(&$gqty) { $gqty += $qty; return array_fill(0, $qty, array(uniqid($prefix))); }; $dataFoo1 = $inDataFoo('data_foo_1', 7); $dataFoo2 = $inDataFoo('data_foo_2', 10); $dataFoo3 = $inDataFoo('data_foo_3', 25); $dataRimma1 = $inDataRimma('data_rimma_1', 12); $dataRimma2 = $inDataRimma('data_rimma_2', 21); $dataRimma3 = $inDataRimma('data_rimma_3', 11); $dataFooA1 = $inDataFoo('data_foo_A1', 9); $dataFooB2 = $inDataFoo('data_foo_B2', 19); $dataFooC3 = $inDataFoo('data_foo_B3', 15); $dataRimmaA1 = $inDataRimma('data_rimma_A1', 11); $dataRimmaB2 = $inDataRimma('data_rimma_B2', 22); $dataRimmaC3 = $inDataRimma('data_rimma_C3', 16); $stack = array($this->repo->addFoo('a'), $this->repo->addFoo('a', 'A'), $this->repo->addRimma(array('rimma_1')), $this->repo->addRimma(array('rimma_2'), 'A'), $this->repo->registerModelsCollection('Foo', $dataFoo1), $this->repo->registerModelsCollection('Foo', $dataFoo2), $this->repo->registerModelsCollection('Foo', $dataFoo3), $this->repo->registerModelsCollection('Rimma', $dataRimma1), $this->repo->registerModelsCollection('Rimma', $dataRimma2), $this->repo->registerModelsCollection('Rimma', $dataRimma3), $this->repo->registerModelsCollection('Foo', $dataFooA1, 'A'), $this->repo->registerModelsCollection('Foo', $dataFooB2, 'B'), $this->repo->registerModelsCollection('Foo', $dataFooC3, 'C'), $this->repo->registerModelsCollection('Rimma', $dataRimmaA1, 'A'), $this->repo->registerModelsCollection('Rimma', $dataRimmaB2, 'B'), $this->repo->registerModelsCollection('Rimma', $dataRimmaC3, 'C')); $ids = array('Foo' => array('type' => 'Foo', 'expectation' => array(array('input' => array('a')))), 'FooA' => array('type' => 'Foo', 'expectation' => array(array('input' => array('a')))), 'Rimma' => array('type' => 'Rimma', 'expectation' => array(array('att_1' => '0rimma_1', 'att_2' => '', 'att_3' => ''))), 'RimmaA' => array('type' => 'Rimma', 'expectation' => array(array('att_1' => '0rimma_2', 'att_2' => '', 'att_3' => ''))), 'Foocollection' => array('type' => 'Foo', 'expectation' => $resDataFoo($dataFoo1)), 'Foocollection1' => array('type' => 'Foo', 'expectation' => $resDataFoo($dataFoo2)), 'Foocollection2' => array('type' => 'Foo', 'expectation' => $resDataFoo($dataFoo3)), 'Rimmacollection' => array('type' => 'Rimma', 'expectation' => $resDataRimma($dataRimma1)), 'Rimmacollection4' => array('type' => 'Rimma', 'expectation' => $resDataRimma($dataRimma2)), 'Rimmacollection5' => array('type' => 'Rimma', 'expectation' => $resDataRimma($dataRimma3)), 'FooAcollection' => array('type' => 'Foo', 'expectation' => $resDataFoo($dataFooA1)), 'FooBcollection' => array('type' => 'Foo', 'expectation' => $resDataFoo($dataFooB2)), 'FooCcollection' => array('type' => 'Foo', 'expectation' => $resDataFoo($dataFooC3)), 'RimmaAcollection' => array('type' => 'Rimma', 'expectation' => $resDataRimma($dataRimmaA1)), 'RimmaBcollection' => array('type' => 'Rimma', 'expectation' => $resDataRimma($dataRimmaB2)), 'RimmaCcollection' => array('type' => 'Rimma', 'expectation' => $resDataRimma($dataRimmaC3))); $expectation = implode(', ', array_keys($ids)); $this->assertSame($expectation, implode(', ', $stack)); $self = $this; $examine = function (array $models, $type, $expectation) use(&$gqty, $self) { foreach ($models as $item) { $gqty--; $self->assertInstanceOf('ViewModelServiceTest\\TestAsset\\ViewModel\\' . $type . 'ViewModel', $item); $self->assertSame(array_shift($expectation), get_object_vars($item)); } }; $models = $this->repo->collectionGetFoo(); $examine($models, 'Foo', $resDataFoo($dataFoo1)); // $gqty += 7 $models = $this->repo->collectionGetRimma(); $examine($models, 'Rimma', $resDataRimma($dataRimma1)); // $gqty += 12 foreach ($ids as $id => $element) { if (strpos($id, 'collection') !== false) { $methodName = 'collectionGet' . $element['type']; $argument = $id; if (false === strpos($id, $element['type'] . 'collection')) { $argument = substr(substr($id, strlen($element['type'])), 0, -(strlen($id) - strpos($id, 'collection'))); } $models = $this->repo->{$methodName}($argument); } else { $methodName = 'get' . $element['type']; $argument = null; if (strlen($id) > strlen($element['type'])) { $argument = substr($id, strlen($element['type'])); } $model = $this->repo->{$methodName}($argument); $models = array($model); } //echo "$methodName($argument)\n"; $examine($models, $element['type'], $element['expectation']); } $this->assertSame(0, $gqty); }
/** * @expectedException InvalidArgumentException * @expectedExceptionMessage Recipe can not be attached because does not known about handling with less than one or more than two arguments */ public function test_Add_View_Model_Should_Thrown_Exception_By_Invalid_Arguments_Count_More_Than_Two() { $this->repo->addFoo(array(1, 2, 3), 'name-add-on', 'unexpected argument'); }