@Test
  public void test_creating_cchat_during_customer_signup() {
    Client client = JerseyClientBuilder.createClient();
    HttpAuthenticationFeature feature =
        HttpAuthenticationFeature.basic("*****@*****.**", "password");
    client.register(feature);

    CChat cchat = new CChat("awais-zara");
    List<CChat> cchats = new ArrayList<CChat>();
    cchats.add(cchat);

    Customer customer = new Customer();
    customer.setUsername("*****@*****.**");
    customer.setPassword("password");
    customer.setCchat(cchats);

    Customer customerPersisted =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(new StringBuilder("/customer").append("/signup").toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(customer), Customer.class);

    assertThat(customerPersisted.getId()).isNotNull();
    assertThat(customerPersisted.getCchat().get(0).getId()).isNotNull();
    assertThat(customerPersisted.getCchat().get(0).getUniqueName())
        .isEqualToIgnoringCase("awais-zara");
  }
  @Test
  public void test_edit_customer_shipping() {
    Client client = JerseyClientBuilder.createClient();
    HttpAuthenticationFeature feature =
        HttpAuthenticationFeature.basic("*****@*****.**", "password");
    client.register(feature);

    // CREATE NEW USER
    Customer customer = new Customer();
    customer.setUsername("*****@*****.**");
    customer.setPassword("password");
    Customer customerPersisted =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(new StringBuilder("/customer").append("/signup").toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(customer), Customer.class);
    assertThat(customerPersisted.getId()).isNotNull();

    // ADD CUSTOMERSHIPPING TO USER
    CustomerShipping customerShipping =
        new CustomerShipping(
            "Usman", "Chaudhri", "2460 Fulton", "San Francisco", "CA", "94118", "USA", "Y");
    CustomerShipping persistedCustomerShipping =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(
                new StringBuilder("/customer/")
                    .append(customerPersisted.getId())
                    .append("/customershipping")
                    .toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(customerShipping), CustomerShipping.class);
    assertThat(persistedCustomerShipping.getId()).isNotNull();

    // EDIT CUSTOMER SHIPPING
    CustomerShipping customerShippingNew =
        new CustomerShipping(
            "Zarka", "Ahmed", "92E Street 3", "Lahore", "PJ", "04004", "Pakistan", "Y");
    CustomerShipping customerShippingUpdated =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(
                new StringBuilder("/customer/")
                    .append(customerPersisted.getId())
                    .append("/customershipping/")
                    .append(persistedCustomerShipping.getId())
                    .toString())
            .request(MediaType.APPLICATION_JSON)
            .put(Entity.json(customerShippingNew), CustomerShipping.class);

    assertThat(customerShippingUpdated.getId()).isNotNull();
    assertThat(customerShippingUpdated.getFirstName()).isEqualTo("Zarka");
    assertThat(customerShippingUpdated.getLastName()).isEqualTo("Ahmed");
    assertThat(customerShippingUpdated.getAddress()).isEqualTo("92E Street 3");
    assertThat(customerShippingUpdated.getCity()).isEqualTo("Lahore");
  }
  @Ignore
  @Test
  public void test_delete_customer_shipping_address()
      throws JsonParseException, JsonMappingException, IOException {
    Client client = JerseyClientBuilder.createClient();
    HttpAuthenticationFeature feature =
        HttpAuthenticationFeature.basic("*****@*****.**", "password");
    client.register(feature);

    // CREATE NEW USER
    Customer customer = new Customer();
    customer.setUsername("*****@*****.**");
    customer.setPassword("password");
    Customer customerPersisted =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(new StringBuilder("/customer").append("/signup").toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(customer), Customer.class);
    assertThat(customerPersisted.getId()).isNotNull();

    // ADD CUSTOMERSHIPPING TO USER
    CustomerShipping customerShipping =
        new CustomerShipping(
            "Usman", "Chaudhri", "2460 Fulton", "San Francisco", "CA", "94118", "USA", "Y");
    CustomerShipping persistedCustomerShipping =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(new StringBuilder("/customershipping").toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(customerShipping), CustomerShipping.class);
    assertThat(persistedCustomerShipping.getId()).isNotNull();
    assertThat(persistedCustomerShipping.getIsActive()).isNotNull();

    // DELETED CUSTOMERSHIPPING ADDRESS
    CustomerShipping deletedCustomerShipping =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(
                new StringBuilder("/customershipping/")
                    .append(persistedCustomerShipping.getId())
                    .toString())
            .request(MediaType.APPLICATION_JSON)
            .delete(CustomerShipping.class);
    assertThat(deletedCustomerShipping.getId()).isNotNull();
  }
  @Test
  public void test_customer_update_cchat_list() {
    Client client = JerseyClientBuilder.createClient();
    HttpAuthenticationFeature feature =
        HttpAuthenticationFeature.basic("*****@*****.**", "password");
    client.register(feature);

    CChat cchat1 = new CChat("Usman-Safina-1");
    CChat cchat2 = new CChat("Usman-Amjad-1");
    CChat cchat3 = new CChat("Usman-Talha-1");
    List<CChat> cchats = new ArrayList<CChat>();
    cchats.add(cchat1);
    cchats.add(cchat2);
    cchats.add(cchat3);

    Customer customer = new Customer();
    customer.setUsername("*****@*****.**");
    customer.setPassword("password");
    customer.setCchat(cchats);
    Customer customerPersisted =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(new StringBuilder("/customer").append("/signup").toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(customer), Customer.class);
    assertThat(customerPersisted.getId()).isNotNull();

    CChat cchat4 = new CChat("Usman-Safina-2");
    CChat cchatPersisted =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(
                new StringBuilder("/customer/")
                    .append(customerPersisted.getId())
                    .append("/cchat")
                    .toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(cchat4), CChat.class);

    assertThat(cchatPersisted.getId()).isNotNull();
  }
  @Test
  public void test_customer_creating_multiple_chat() {
    Client client = JerseyClientBuilder.createClient();
    HttpAuthenticationFeature feature =
        HttpAuthenticationFeature.basic("*****@*****.**", "password");
    client.register(feature);

    CChat cchat1 = new CChat("Talha-Amjad");
    CChat cchat2 = new CChat("Talha-Talha");
    CChat cchat3 = new CChat("Talha-Zunabia");

    List<CChat> cchats = new ArrayList<CChat>();
    cchats.add(cchat1);
    cchats.add(cchat2);
    cchats.add(cchat3);

    Customer customer = new Customer();
    customer.setUsername("*****@*****.**");
    customer.setPassword("password");
    customer.setCchat(cchats);

    Customer customerPersisted =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(new StringBuilder("/customer").append("/signup").toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(customer), Customer.class);

    assertThat(customerPersisted.getId()).isNotNull();
    List<CChat> cchatsPersisted = customerPersisted.getCchat();

    assertThat(cchatsPersisted.get(0).getId()).isNotNull();
    assertThat(cchatsPersisted.get(1).getId()).isNotNull();
    assertThat(cchatsPersisted.get(2).getId()).isNotNull();

    for (CChat cchat : cchatsPersisted) {
      cchats.contains(cchat.getUniqueName());
    }
  }
  @Test
  public void test_add_customer_shipping_to_customer()
      throws JsonParseException, JsonMappingException, IOException {
    Client client = JerseyClientBuilder.createClient();
    HttpAuthenticationFeature feature =
        HttpAuthenticationFeature.basic("*****@*****.**", "password");
    client.register(feature);

    // CREATE NEW USER
    Customer customer = new Customer();
    customer.setUsername("*****@*****.**");
    customer.setPassword("password");
    Customer customerPersisted =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(new StringBuilder("/customer").append("/signup").toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(customer), Customer.class);
    assertThat(customerPersisted.getId()).isNotNull();

    // ADD CCHAT TO USER
    CChat cchat = new CChat("Usman-Asifa");
    CChat persistedCchat =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(
                new StringBuilder("/customer/")
                    .append(customerPersisted.getId())
                    .append("/cchat")
                    .toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(cchat), CChat.class);
    assertThat(persistedCchat.getId()).isNotNull();
    // assertThat(persistedCchat.getUniqueName()).isEqualTo("Usman-Asifa");

    // ADD CCHAT1 TO USER
    CChat cchat1 = new CChat("Usman-Gulgs");
    CChat persistedCchat1 =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(
                new StringBuilder("/customer/")
                    .append(customerPersisted.getId())
                    .append("/cchat")
                    .toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(cchat1), CChat.class);
    assertThat(persistedCchat1.getId()).isNotNull();
    // assertThat(persistedCchat1.getUniqueName()).isEqualTo("Usman-Gulgs");

    // ADD CUSTOMERSHIPPING TO USER
    CustomerShipping customerShipping =
        new CustomerShipping(
            "Usman", "Chaudhri", "2460 Fulton", "San Francisco", "CA", "94118", "USA", "Y");
    CustomerShipping persistedCustomerShipping =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(
                new StringBuilder("/customer/")
                    .append(customerPersisted.getId())
                    .append("/customershipping")
                    .toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(customerShipping), CustomerShipping.class);
    assertThat(persistedCustomerShipping.getId()).isNotNull();
    assertThat(persistedCustomerShipping.getFirstName()).isEqualTo("Usman");
    assertThat(persistedCustomerShipping.getLastName()).isEqualTo("Chaudhri");

    // ADD ORDER TO USER
    Order orderRequest = new Order();
    orderRequest.setProductId("101");
    orderRequest.setProductCategoryId("10");
    orderRequest.setProductImagePath("/image/listing");
    orderRequest.setProductName("shirt");
    orderRequest.setProductPrice("10.99");
    orderRequest.setProductQuantity("5");
    orderRequest.setProductShopId("40");
    orderRequest.setProductSku("SKU_101");
    orderRequest.setStatus("Processed");
    Order persistedOrder =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(new StringBuilder("/orders").toString())
            .request(MediaType.APPLICATION_JSON)
            .post(Entity.json(orderRequest), Order.class);
    assertThat(persistedOrder.getId()).isNotNull();

    // GET PERSISTED CUSTOMER
    Customer getPersistedCustomer =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(new StringBuilder("/customer").append("/login").toString())
            .request(MediaType.APPLICATION_JSON)
            .get(Customer.class);
    assertThat(getPersistedCustomer.getId()).isNotNull();
    assertThat(getPersistedCustomer.getCustomerShipping().get(0).getId()).isNotNull();
    assertThat(getPersistedCustomer.getCustomerShipping().get(0).getFirstName()).isNotNull();

    // lazy load cchat
    JsonNode getPersistedCustomerCchat =
        client
            .target(String.format(REST_PRODUCT_SERVICE_URL, RULE.getLocalPort()))
            .path(
                new StringBuilder("/customer/")
                    .append(getPersistedCustomer.getId())
                    .append("/cchat")
                    .toString())
            .request(MediaType.APPLICATION_JSON)
            .get(JsonNode.class);

    ObjectMapper mapper = new ObjectMapper();
    List<CChat> getPersistedCChats =
        mapper.readValue(
            mapper.treeAsTokens(getPersistedCustomerCchat), new TypeReference<List<CChat>>() {});
    assertThat(getPersistedCChats.get(0).getId()).isNotNull();
    assertThat(getPersistedCChats.get(1).getId()).isNotNull();
  }