/**
  * @param Order $order
  * @return Invoice
  */
 public function createFromOrder(Order $order)
 {
     $invoice = new Invoice();
     $invoice->setOrder($order);
     $invoice->setInvoiceDate(new \DateTime());
     $invoice->setTotal($order->getTotal());
     return $invoice;
 }
describe('Persistence\\Hydrator\\InvoiceHydrator', function () {
    beforeEach(function () {
        $this->repository = $this->getProphet()->prophesize('CleanPhp\\Invoicer\\Domain\\Repository\\OrderRepositoryInterface');
        $this->hydrator = new InvoiceHydrator(new ClassMethods(), $this->repository->reveal());
    });
    describe('->extract()', function () {
        it('should perform simple extraction on the object', function () {
            $invoice = new Invoice();
            $invoice->setTotal(300.14);
            $data = $this->hydrator->extract($invoice);
            expect($data['total'])->to->equal($invoice->getTotal());
        });
        it('should extract a DateTime object to a string', function () {
            $invoiceDate = new \DateTime();
            $invoice = new Invoice();
            $invoice->setInvoiceDate($invoiceDate);
            $data = $this->hydrator->extract($invoice);
            expect($data['invoice_date'])->to->equal($invoice->getInvoiceDate()->format('Y-m-d'));
        });
        it('should extract the order object', function () {
            $invoice = new Invoice();
            $invoice->setOrder(new Order())->setId(14);
            $data = $this->hydrator->extract($invoice);
            expect($data['order_id'])->to->equal($invoice->getOrder()->getId());
        });
        describe('->hydrate()', function () {
            it('should perform simple hydration on the object', function () {
                $data = ['total' => 300.14];
                $invoice = $this->hydrator->hydrate($data, new Invoice());
                expect($invoice->getTotal())->to->equal($data['total']);
            });