@Override
 public void verifyAllFieldsAtProductInventoryPage(
     Product serialProduct,
     Product nonSerialProduct,
     String[] esnNumbers,
     Map<String[], String[]> productQuantityCountAndStatuses) {
   search.searchForProduct(
       ProductSearch.builder()
           .productName(serialProduct.getName().get())
           .active(true)
           .inActive(true)
           .create());
   session.click(FIRST_EDIT_PRODUCT_BTN);
   waits.waitUntilVisible(ProductLocators.TITLE_EDITING_PRODUCT_TYPE);
   verifyCommonFieldsAtProductInventory();
   waits.waitUntilVisible(productAtAllStores(serialProduct));
   Map<String[], String[]> productStatuses = productQuantityCountAndStatuses;
   for (Map.Entry<String[], String[]> entrySet : productStatuses.entrySet()) {
     String[] status = entrySet.getKey();
     String[] quantityCounts = entrySet.getValue();
     for (int i = 0; i < status.length; i++) {
       if (i == 0) {
         int j = Integer.parseInt(quantityCounts[i]) + 1;
         waits.waitUntilVisible(verifyQuantity(status[i], String.valueOf(j)));
       } else {
         waits.waitUntilVisible(verifyQuantity(status[i], quantityCounts[i]));
       }
     }
   }
   waits.waitUntilVisible(
       verifyQuantity(ProductStaticData.QUANTITY, String.valueOf(esnNumbers.length)));
   String newEsnLength = String.valueOf(esnNumbers.length - 1);
   waits.waitUntilVisible(verifyQuantity(ProductStaticData.AVAILABLE, newEsnLength));
   waits.waitUntilVisible(verifyQuantity(ProductStaticData.TRANSFER, "1"));
   // Verify for the non Serialized product.
   search.searchForProduct(
       ProductSearch.builder()
           .productName(nonSerialProduct.getName().get())
           .active(true)
           .inActive(true)
           .create());
   session.click(FIRST_EDIT_PRODUCT_BTN);
   waits.waitUntilVisible(ProductLocators.TITLE_EDITING_PRODUCT_TYPE);
   verifyCommonFieldsAtProductInventory();
   waits.waitUntilVisible(productAtAllStores(nonSerialProduct));
   Map<String[], String[]> productCountAndStatuses = productQuantityCountAndStatuses;
   for (Map.Entry<String[], String[]> entry : productCountAndStatuses.entrySet()) {
     String[] statuses = entry.getKey();
     String[] quantityCount = entry.getValue();
     for (int i = 0; i < statuses.length; i++) {
       waits.waitUntilVisible(verifyQuantity(statuses[i], quantityCount[i]));
     }
   }
 }
 @Test(
     groups = {"P1", "P1_Target", "Smoke_Target", "CycleCountStatusReport"},
     singleThreaded = true)
 public void createTestData() {
   productActions.createProduct(nonSerialProduct);
   List<String> barcodes = new ArrayList<String>();
   {
     barcodes.add(barcode[0]);
   }
   productUPCActions.addProductUPCWithoutVendor(nonSerialProduct.getName().get(), barcodes);
   receivingActions.createShipmentAddingManualNonSerProduct(
       nonSerialProduct.getName().get(), 10, 1.00);
   MerchantStore store =
       MerchantStore.builder().priceGroupText(SetupStaticData.STORE_PRICE_GROUP).create();
   merchantStoreActions.editMerchantStore(LoginData.STORE.value(), store);
 }
 @Override
 public void viewEsnOfInactiveSerialProduct(Product serialProduct, String esnNumber) {
   search.searchForProduct(
       ProductSearch.builder()
           .productName(serialProduct.getName().get())
           .active(true)
           .inActive(true)
           .create());
   session.click(FIRST_EDIT_PRODUCT_BTN);
   waits.waitUntilVisible(ProductLocators.TITLE_EDITING_PRODUCT_TYPE);
   session.click(PRODUCT_INVENTORY_TAB);
   waits.waitUntilVisible(getEditButton(esnNumber));
   session.click(getEditButton(esnNumber));
   waits.waitUntilVisible(verifyEsnAtLocateProduct(esnNumber));
 }
 @Override
 public void verifyWarningMessageIsDisplayedWithUnprivilegedOfLocateProduct(
     Product product, String[] esnNumbers) {
   search.searchForProduct(
       ProductSearch.builder()
           .productName(product.getName().get())
           .active(true)
           .inActive(true)
           .create());
   session.click(FIRST_EDIT_PRODUCT_BTN);
   waits.waitUntilVisible(ProductLocators.TITLE_EDITING_PRODUCT_TYPE);
   session.click(PRODUCT_INVENTORY_TAB);
   waits.waitUntilVisible(TITLE_PRODUCT_INVENTORY);
   waits.waitUntilNotVisible(getEditButton(esnNumbers[0]));
 }
  @Test(
      groups = {"P1", "P1_Target", "Smoke_Target", "CycleCountStatusReport"},
      dependsOnMethods = "createTestData")
  public void viewCycleCountStatusReport() {
    String[] productUPC = barcode;

    CycleCounts cycleCounts =
        CycleCounts.builder()
            .cycleCountName(cycleCountName)
            .indexForSelect(1)
            .daysForCycleCount(0)
            .productUPC(productUPC)
            .nonSerializedProductName(nonSerialProduct.getName().get())
            .reason("Demo Phone")
            .reviewalCode("12345")
            .quantityCount(10)
            .create();
    cycleCountActions.createCycleCountForDifferentProducts(cycleCounts);
    cycleCountActions.startCycleCount(cycleCountName);
    InventoryManagement cycleCountStatusReport =
        InventoryManagement.builder()
            .storeName(StoreData.EXISTING_STORE_NAME)
            .cycleCountStatus("Pending Count")
            .cycleCountName(cycleCountName)
            .create();
    inventoryManagementActions.viewCycleCountStatusReport(
        daysForCycleCountStatus, cycleCountStatusReport);
    cycleCountActions.performCycleCount(cycleCounts);
    InventoryManagement cycleCountStatusReport1 =
        InventoryManagement.builder()
            .storeName(StoreData.EXISTING_STORE_NAME)
            .cycleCountStatus("Pending Review")
            .cycleCountName(cycleCountName)
            .create();
    inventoryManagementActions.viewCycleCountStatusReport(
        daysForCycleCountStatus, cycleCountStatusReport1);
    cycleCountActions.reviewSerializedNonSerializedProductCycleCount(cycleCounts);
    InventoryManagement cycleCountStatusReport2 =
        InventoryManagement.builder()
            .storeName(StoreData.EXISTING_STORE_NAME)
            .cycleCountStatus("Reviewed")
            .cycleCountName(cycleCountName)
            .create();
    inventoryManagementActions.viewCycleCountStatusReport(
        daysForCycleCountStatus, cycleCountStatusReport2);
  }
 @Override
 public void verifyPageNavigateToLocateProduct(Product product, String esnNumbers[]) {
   search.searchForProduct(
       ProductSearch.builder()
           .productName(product.getName().get())
           .active(true)
           .inActive(true)
           .create());
   session.click(FIRST_EDIT_PRODUCT_BTN);
   waits.waitUntilVisible(ProductLocators.TITLE_EDITING_PRODUCT_TYPE);
   session.click(PRODUCT_INVENTORY_TAB);
   waits.waitUntilVisible(TITLE_PRODUCT_INVENTORY);
   session.click(getEditButton(esnNumbers[0]));
   waits.waitUntilVisible(verifyEsnAtLocateProduct(esnNumbers[0]));
   if (session.existsNow(getDefaultPrice(product.getDefaultPrice().get()))) {
     waits.waitUntilVisible(getDefaultPrice(product.getDefaultPrice().get()));
   }
   waits.waitUntilVisible(verifyCategory(product.getCategoryText().get()));
   waits.waitUntilVisible(verifyShortDescription(product.getShortDescription().get()));
   waits.waitUntilVisible(verifyStoreName(LoginData.STORE.value()));
 }