dateTimeBetween('-1 week'); $data = [ 'fecha' => $fecha->format('Y-m-d'), 'valor' => $faker->randomFloat(2, 100, 1000), ]; $uf = $faker->randomFloat(2, 20000, 40000); $pago = new Model\Venta\Pago(); $pago->id = $faker->randomNumber(); $pago->fecha = $fecha; $pago->valor = $data['valor'] * $uf; $pago->uf = $uf; $bonoPie = new Model\Venta\BonoPie(); $bonoPie->valor = $data['valor']; $bonoPie->pago = $pago; $logger = $this->getMockBuilder(LoggerInterface::class) ->disableOriginalConstructor() ->getMock(); $bonoPieRepository = $this->getMockBuilder(Repository\Venta\BonoPie::class) ->disableOriginalConstructor() ->getMock(); $bonoPieRepository->method('fetchByPago')->willThrowException(new Implement\Exception\EmptyResult('fetchByPago')); $bonoPieRepository->method('create')->willReturn($bonoPie); $bonoPieRepository->method('save')->willReturnCallback(function($bonoPie) use ($faker) { $bonoPie->id = $faker->randomNumber(); return $bonoPie; }); $bonoPieRepository->method('filterData')->willReturnCallback(function($data) { return array_intersect_key($data, array_flip(['valor', 'pago'])); }); $valorService = $this->getMockBuilder(Service\Valor::class) ->disableOriginalConstructor() ->getMock(); $valorService->method('toUF')->willReturn($data['valor']); $ufService = $this->getMockBuilder(Service\UF::class) ->disableOriginalConstructor() ->getMock(); $ufService->method('get')->with($fecha)->willReturn($uf); $pagoService = $this->getMockBuilder(Service\Venta\Pago::class) ->disableOriginalConstructor() ->getMock(); $pagoService->method('add')->willReturn($pago); $bonoPieService = new Service\Venta\BonoPie($logger, $bonoPieRepository, $valorService, $ufService, $pagoService); $this->assertEquals($bonoPie, $bonoPieService->add($data)); } }