public function testImportDataWithAddressAndPaymentProfileInstances()
 {
     $subscriptionId = 111;
     $addressId = 123;
     $profileId = 131;
     $addressMock = $this->createAddressMock();
     $addressMock->expects($this->once())->method('getId')->willReturn($addressId);
     $profileMock = $this->createProfileMock();
     $profileMock->expects($this->once())->method('getId')->willReturn($profileId);
     $data = [SubscriptionInterface::ID => $subscriptionId, SubscriptionInterface::SHIPPING_ADDRESS => $addressMock, SubscriptionInterface::PAYMENT_PROFILE => $profileMock];
     $this->subscription->importData($data);
     $this->assertEquals($subscriptionId, $this->subscription->getId());
     $this->assertEquals($addressId, $this->subscription->getShippingAddressId());
     $this->assertEquals($profileId, $this->subscription->getPaymentProfileId());
     $this->assertSame($profileMock, $this->subscription->getPaymentProfile());
     $this->assertSame($addressMock, $this->subscription->getShippingAddress());
 }
 /**
  * @param \SubscribePro\Service\Subscription\SubscriptionInterface $subscription
  * @return \SubscribePro\Service\Subscription\SubscriptionInterface
  * @throws \SubscribePro\Exception\EntityInvalidDataException
  * @throws \SubscribePro\Exception\HttpException
  */
 public function saveSubscription(SubscriptionInterface $subscription)
 {
     if (!$subscription->isValid()) {
         throw new EntityInvalidDataException('Not all required fields are set.');
     }
     $url = $subscription->isNew() ? '/services/v2/subscription.json' : "/services/v2/subscriptions/{$subscription->getId()}.json";
     $response = $this->httpClient->post($url, [self::API_NAME_SUBSCRIPTION => $subscription->getFormData()]);
     return $this->retrieveItem($response, self::API_NAME_SUBSCRIPTION, $subscription);
 }