Exemplo n.º 1
0
 public function test_defer()
 {
     $resolver = new IdResolver();
     $fooRepository = Mockery::mock("Prewk\\Seriplating\\Contracts\\RepositoryInterface");
     $barRepository = Mockery::mock("Prewk\\Seriplating\\Contracts\\RepositoryInterface");
     $resolver->bind("foos_0", 1);
     $resolver->defer("bars_2", $fooRepository, 1, "data.bars.0.bar_id");
     $resolver->defer("bars_3", $fooRepository, 1, "data.bars.1.bar_id");
     $resolver->bind("foos_1", 2);
     $resolver->bind("bars_2", 3);
     $resolver->defer("foos_0", $barRepository, 3, "foo_id");
     $resolver->bind("bars_3", 4);
     $resolver->defer("foos_1", $barRepository, 4, "foo_id");
     $bar2Callbacked = false;
     $bar3Callbacked = false;
     $somethingElseCallbacked = false;
     $resolver->onResolve("bars", function ($repo, $id, $barId) use($fooRepository, &$bar2Callbacked, &$bar3Callbacked, &$somethingElseCallbacked) {
         $this->assertEquals($fooRepository, $repo);
         if ($id === 1 && $barId === 3) {
             $bar2Callbacked = true;
         } else {
             if ($id === 1 && $barId === 4) {
                 $bar3Callbacked = true;
             } else {
                 $somethingElseCallbacked = true;
             }
         }
     });
     $fooRepository->shouldReceive("update")->once()->with(1, ["data" => ["bars" => [["bar_id" => 3], ["bar_id" => 4]]]]);
     $barRepository->shouldReceive("update")->once()->with(3, ["foo_id" => 1])->shouldReceive("update")->once()->with(4, ["foo_id" => 2]);
     $resolver->resolve();
     $this->assertTrue($bar2Callbacked);
     $this->assertTrue($bar3Callbacked);
     $this->assertFalse($somethingElseCallbacked);
 }