@Test(groups = "slow", description = "refresh payment methods")
  public void testRefreshPaymentMethods() throws Exception {
    Account account = createAccountWithDefaultPaymentMethod("someExternalKey");

    final PaymentMethods paymentMethodsBeforeRefreshing =
        killBillClient.getPaymentMethodsForAccount(account.getAccountId());
    assertEquals(paymentMethodsBeforeRefreshing.size(), 1);
    assertEquals(paymentMethodsBeforeRefreshing.get(0).getExternalKey(), "someExternalKey");

    // WITH NAME OF AN EXISTING PLUGIN
    killBillClient.refreshPaymentMethods(
        account.getAccountId(),
        PLUGIN_NAME,
        ImmutableMap.<String, String>of(),
        createdBy,
        reason,
        comment);

    final PaymentMethods paymentMethodsAfterExistingPluginCall =
        killBillClient.getPaymentMethodsForAccount(account.getAccountId());

    assertEquals(paymentMethodsAfterExistingPluginCall.size(), 1);
    assertEquals(paymentMethodsAfterExistingPluginCall.get(0).getExternalKey(), "someExternalKey");

    // WITHOUT PLUGIN NAME
    killBillClient.refreshPaymentMethods(
        account.getAccountId(), ImmutableMap.<String, String>of(), createdBy, reason, comment);

    final PaymentMethods paymentMethodsAfterNoPluginNameCall =
        killBillClient.getPaymentMethodsForAccount(account.getAccountId());
    assertEquals(paymentMethodsAfterNoPluginNameCall.size(), 1);
    assertEquals(paymentMethodsAfterNoPluginNameCall.get(0).getExternalKey(), "someExternalKey");

    // WITH WRONG PLUGIN NAME
    try {
      killBillClient.refreshPaymentMethods(
          account.getAccountId(),
          "GreatestPluginEver",
          ImmutableMap.<String, String>of(),
          createdBy,
          reason,
          comment);
      Assert.fail();
    } catch (KillBillClientException e) {
      Assert.assertEquals(
          e.getBillingException().getCode(),
          (Integer) ErrorCode.PAYMENT_NO_SUCH_PAYMENT_PLUGIN.getCode());
    }
  }
  @Test(groups = "slow", description = "Verify external key is unique")
  public void testUniqueExternalKey() throws Exception {
    // Verify the external key is not mandatory
    final Account inputWithNoExternalKey =
        getAccount(UUID.randomUUID().toString(), null, UUID.randomUUID().toString());
    Assert.assertNull(inputWithNoExternalKey.getExternalKey());

    final Account account =
        killBillClient.createAccount(inputWithNoExternalKey, createdBy, reason, comment);
    Assert.assertNotNull(account.getExternalKey());

    final Account inputWithSameExternalKey =
        getAccount(
            UUID.randomUUID().toString(), account.getExternalKey(), UUID.randomUUID().toString());
    try {
      killBillClient.createAccount(inputWithSameExternalKey, createdBy, reason, comment);
      Assert.fail();
    } catch (final KillBillClientException e) {
      Assert.assertEquals(
          e.getBillingException().getCode(), (Integer) ErrorCode.ACCOUNT_ALREADY_EXISTS.getCode());
    }
  }