/**
  * {@inheritdoc}
  */
 public function create(array $values = [])
 {
     /** @var \Drupal\payment\Entity\PaymentInterface $payment */
     $payment = parent::create($values);
     $payment_type = $this->paymentTypeManager->createInstance($values['bundle']);
     $payment_type->setPayment($payment);
     $payment->get('payment_type')->setValue($payment_type);
     $status = $this->paymentStatusManager->createInstance('payment_created')->setCreated(time());
     $payment->setPaymentStatus($status);
     return $payment;
 }
 /**
  * Tests queue service.
  */
 function testQueue()
 {
     $category_id_prefix = $this->randomMachineName();
     $category_id = $category_id_prefix . $this->randomMachineName();
     $payment = Generate::createPayment(2);
     $payment->setPaymentStatus($this->paymentStatusManager->createInstance('payment_success'));
     $payment->save();
     // Tests save().
     $this->queue->save($category_id, $payment->id());
     $payment_ids = $this->queue->loadPaymentIds($category_id, $payment->getOwnerId());
     $this->assertTrue(in_array($payment->id(), $payment_ids));
     // Tests claimPayment().
     $this->assertTrue(is_string($this->queue->claimPayment($payment->id())));
     $this->assertFalse($this->queue->claimPayment($payment->id()));
     $acquisition_code = $this->queue->claimPayment($payment->id());
     $this->assertTrue(is_string($acquisition_code));
     // Tests releaseClaim().
     $released = $this->queue->releaseClaim($payment->id(), $acquisition_code);
     $this->assertTrue($released);
     $acquisition_code = $this->queue->claimPayment($payment->id());
     $this->assertTrue(is_string($acquisition_code));
     // Tests acquirePayment().
     $acquired = $this->queue->acquirePayment($payment->id(), $acquisition_code);
     $this->assertTrue($acquired);
     $acquisition_code = $this->queue->claimPayment($payment->id());
     $this->assertFalse($acquisition_code);
     // Save another payment to the queue, because acquiring the previous one
     // deleted it.
     $payment = Generate::createPayment(2);
     $payment->setPaymentStatus($this->paymentStatusManager->createInstance('payment_success'));
     $payment->save();
     $this->queue->save($category_id, $payment->id());
     // Tests loadPaymentIds().
     $loaded_payment_ids = $this->queue->loadPaymentIds($category_id, $payment->getOwnerId());
     $this->assertEqual($loaded_payment_ids, array($payment->id()));
     // Tests deleteByPaymentId().
     $this->queue->deleteByPaymentId($payment->id());
     $payment_ids = $this->queue->loadPaymentIds($category_id, $payment->getOwnerId());
     $this->assertFalse(in_array($payment->id(), $payment_ids));
     // Tests deleteByCategoryIdPrefix().
     $this->queue->save($category_id, $payment->id());
     $this->queue->deleteByCategoryIdPrefix($category_id_prefix);
     $payment_ids = $this->queue->loadPaymentIds($category_id, $payment->getOwnerId());
     $this->assertFalse(in_array($payment->id(), $payment_ids));
     // Tests deleteByCategoryId().
     $this->queue->save($category_id, $payment->id());
     $this->queue->deleteByCategoryId($category_id);
     $payment_ids = $this->queue->loadPaymentIds($category_id, $payment->getOwnerId());
     $this->assertFalse(in_array($payment->id(), $payment_ids));
 }
 /**
  * Tests setPaymentStatuses() and getPaymentStatuses().
  */
 protected function testGetPaymentStatuses()
 {
     $statuses = array($this->statusManager->createInstance('payment_pending'), $this->statusManager->createInstance('payment_failed'));
     $this->assertEqual(spl_object_hash($this->payment->setPaymentStatuses($statuses)), spl_object_hash($this->payment));
     $retrieved_statuses = $this->payment->getPaymentStatuses();
     $this->assertEqual(spl_object_hash(reset($retrieved_statuses)), spl_object_hash(reset($statuses)));
     $this->assertEqual(spl_object_hash(end($retrieved_statuses)), spl_object_hash(end($statuses)));
     // Make sure we always get the last status.
     $this->assertEqual(spl_object_hash($this->payment->getPaymentStatus()), spl_object_hash(end($statuses)));
 }
 /**
  * {@inheritdoc}
  */
 public function doRefundPayment()
 {
     $this->getPayment()->setPaymentStatus($this->paymentStatusManager->createInstance($this->getRefundStatusId()));
     $this->getPayment()->save();
 }