private void verifySubscriptionAddons(final Subscription subscription) {
   Assert.assertEquals(subscription.getAddOns().size(), 2);
   Assert.assertEquals(subscription.getAddOns().get(0).getAddOnCode(), "extra_users");
   Assert.assertEquals(subscription.getAddOns().get(0).getQuantity(), (Integer) 2);
   Assert.assertEquals(subscription.getAddOns().get(0).getUnitAmountInCents(), (Integer) 1000);
   Assert.assertEquals(subscription.getAddOns().get(1).getAddOnCode(), "extra_ip");
   Assert.assertEquals(subscription.getAddOns().get(1).getQuantity(), (Integer) 3);
   Assert.assertEquals(subscription.getAddOns().get(1).getUnitAmountInCents(), (Integer) 200);
 }
 private void verifyPendingSubscription(final Subscription subscription) {
   Subscription pending = subscription.getPendingSubscription();
   Assert.assertEquals(pending.getPlan().getPlanCode(), "silver");
   Assert.assertEquals(pending.getPlan().getName(), "Silver plan");
   Assert.assertEquals(pending.getUnitAmountInCents(), (Integer) 400);
   Assert.assertEquals(pending.getQuantity(), (Integer) 1);
   Assert.assertEquals(pending.getAddOns().size(), 0);
 }
  @Test(groups = "fast")
  public void testDeserialization() throws Exception {
    // See http://docs.recurly.com/api/subscriptions
    final String subscriptionData =
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
            + "<subscription href=\"https://api.recurly.com/v2/subscriptions/44f83d7cba354d5b84812419f923ea96\">\n"
            + "  <account href=\"https://api.recurly.com/v2/accounts/1\"/>\n"
            + "  <plan href=\"https://api.recurly.com/v2/plans/gold\">\n"
            + "    <plan_code>gold</plan_code>\n"
            + "    <name>Gold plan</name>\n"
            + "  </plan>\n"
            + "  <uuid>44f83d7cba354d5b84812419f923ea96</uuid>\n"
            + "  <state>active</state>\n"
            + "  <unit_amount_in_cents type=\"integer\">800</unit_amount_in_cents>\n"
            + "  <currency>EUR</currency>\n"
            + "  <quantity type=\"integer\">1</quantity>\n"
            + "  <activated_at type=\"datetime\">2011-05-27T07:00:00Z</activated_at>\n"
            + "  <canceled_at nil=\"nil\"></canceled_at>\n"
            + "  <expires_at nil=\"nil\"></expires_at>\n"
            + "  <current_period_started_at type=\"datetime\">2011-06-27T07:00:00Z</current_period_started_at>\n"
            + "  <current_period_ends_at type=\"datetime\">2010-07-27T07:00:00Z</current_period_ends_at>\n"
            + "  <trial_started_at nil=\"nil\"></trial_started_at>\n"
            + "  <trial_ends_at nil=\"nil\"></trial_ends_at>\n"
            + "  <starts_at>2010-07-28T07:00:00Z</starts_at>\n"
            + "  <a name=\"cancel\" href=\"https://api.recurly.com/v2/subscriptions/44f83d7cba354d5b84812419f923ea96/cancel\" method=\"put\"/>\n"
            + "  <a name=\"terminate\" href=\"https://api.recurly.com/v2/subscriptions/44f83d7cba354d5b84812419f923ea96/terminate\" method=\"put\"/>\n"
            + "  <a name=\"postpone\" href=\"https://api.recurly.com/v2/subscriptions/44f83d7cba354d5b84812419f923ea96/postpone\" method=\"put\"/>\n"
            + "  <collection_method>manual</collection_method>\n"
            + "  <net_terms type=\"integer\">10</net_terms>\n"
            + "  <po_number>PO19384</po_number>\n"
            + "  <first_renewal_date type=\"datetime\">2011-07-01T07:00:00Z</first_renewal_date>\n"
            + "  <subscription_add_ons type=\"array\">\n"
            + "  </subscription_add_ons>\n"
            + "  <pending_subscription type=\"subscription\">\n"
            + "    <plan href=\"https://api.recurly.com/v2/plans/silver\">\n"
            + "      <plan_code>silver</plan_code>\n"
            + "      <name>Silver plan</name>\n"
            + "    </plan>\n"
            + "    <unit_amount_in_cents type=\"integer\">400</unit_amount_in_cents>\n"
            + "    <quantity type=\"integer\">1</quantity>\n"
            + "    <subscription_add_ons type=\"array\">\n"
            + "    </subscription_add_ons>\n"
            + "  </pending_subscription>\n"
            + "</subscription>";

    final Subscription subscription = verifySubscription(subscriptionData);
    verifyPaginationData(subscription);
    verifyPendingSubscription(subscription);
    Assert.assertEquals(subscription.getAddOns().size(), 0);
  }