/**
   * Test Case to Create Single Use Token with Missing Card Expiry Year Field.
   *
   * @throws Exception
   */
  public void testMissingCardExpiryYear() throws Exception {

    client = new OptimalApiClient(apiKey, apiPassword, Environment.TEST, accountNumber);

    try {
      SingleUseToken sObjResponse =
          client
              .customerVaultService()
              .createSingleUseToken(
                  SingleUseToken.builder()
                      .card()
                      .holderName("Mr. John Smith")
                      .cardNum("4917480000000008")
                      .cardExpiry()
                      .month(7)
                      .done()
                      .billingAddress()
                      .street("100 Queen Street West")
                      .street2("Unit 201")
                      .city("Toronto")
                      .country("CA")
                      .state("ON")
                      .zip("M5H 2N2")
                      .done()
                      .done()
                      .build());

      Assert.assertEquals("5068", sObjResponse.getError().getCode());
      Assert.assertEquals(
          "card.cardExpiry.year", sObjResponse.getError().getFieldErrors().get(0).getField());
      Assert.assertEquals(
          "must be greater than or equal to 1900",
          sObjResponse.getError().getFieldErrors().get(0).getError());
      Assert.assertEquals("cardExpiry", sObjResponse.getError().getFieldErrors().get(1).getField());
      Assert.assertEquals(
          "Card expired", sObjResponse.getError().getFieldErrors().get(1).getError());

    } catch (IOException ioExp) {
      // Log IO Exception
      if (Constants.TAG_LOG) Log.e(LOG_APPLICATION_TEST, ioExp.getMessage());
    } catch (OptimalException oExp) {
      // Log Optimal Exception
      if (Constants.TAG_LOG) Log.e(LOG_APPLICATION_TEST, oExp.getMessage());
    } catch (Exception e) {
      // Log Exception
      if (Constants.TAG_LOG) Log.e(LOG_APPLICATION_TEST, e.getMessage());
    }
  } // end of testMissingCardExpiryYear()
  /**
   * Test Case to Create Single Use Token With All Fields.
   *
   * @throws Exception
   */
  public void testCreateSingleUseToken() throws Exception {

    client = new OptimalApiClient(apiKey, apiPassword, Environment.TEST, accountNumber);

    try {
      SingleUseToken sObjResponse =
          client
              .customerVaultService()
              .createSingleUseToken(
                  SingleUseToken.builder()
                      .card()
                      .holderName("Mr. John Smith")
                      .cardNum("4917480000000008")
                      .cardExpiry()
                      .month(7)
                      .year(2019)
                      .done()
                      .billingAddress()
                      .street("100 Queen Street West")
                      .street2("Unit 201")
                      .city("Toronto")
                      .country("CA")
                      .state("ON")
                      .zip("M5H 2N2")
                      .done()
                      .done()
                      .build());

      Assert.assertNotNull("Single Use Token should have an id", sObjResponse.getId());

    } catch (IOException ioExp) {
      // Log IO Exception
      if (Constants.TAG_LOG) Log.e(LOG_APPLICATION_TEST, ioExp.getMessage());
    } catch (OptimalException oExp) {
      // Log Optimal Exception
      if (Constants.TAG_LOG) Log.e(LOG_APPLICATION_TEST, oExp.getMessage());
    } catch (Exception e) {
      // Log Exception
      if (Constants.TAG_LOG) Log.e(LOG_APPLICATION_TEST, e.getMessage());
    }
  } // end of testCreateSingleUseToken()
  /**
   * Test Case to Create Single Use Token with Missing Billing Address Details.
   *
   * @throws Exception
   */
  public void testMissingBillingAddressDetails() throws Exception {

    client = new OptimalApiClient(apiKey, apiPassword, Environment.TEST, accountNumber);

    try {
      SingleUseToken sObjResponse =
          client
              .customerVaultService()
              .createSingleUseToken(
                  SingleUseToken.builder()
                      .card()
                      .holderName("Mr. John Smith")
                      .cardNum("4917480000000008")
                      .cardExpiry()
                      .month(7)
                      .year(2019)
                      .done()
                      .done()
                      .build());

      Assert.assertEquals("5068", sObjResponse.getError().getCode());
      Assert.assertEquals(
          "card.billingAddress", sObjResponse.getError().getFieldErrors().get(0).getField());
      Assert.assertEquals(
          "Missing billing address details",
          sObjResponse.getError().getFieldErrors().get(0).getError());

    } catch (IOException ioExp) {
      // Log IO Exception
      if (Constants.TAG_LOG) Log.e(LOG_APPLICATION_TEST, ioExp.getMessage());
    } catch (OptimalException oExp) {
      // Log Optimal Exception
      if (Constants.TAG_LOG) Log.e(LOG_APPLICATION_TEST, oExp.getMessage());
    } catch (Exception e) {
      // Log Exception
      if (Constants.TAG_LOG) Log.e(LOG_APPLICATION_TEST, e.getMessage());
    }
  } // end of testMissingBillingAddressDetails()