/**
   * Test Case Name: Verify multiple Windows Servers can be added and modeled correctly
   *
   * <p>Summary: This test case verifies the ability to add and model multiple Server Window targets
   * simultaneously to discover the windows device components.
   *
   * <p>Pre-requisites: Zenoss instance is running Python Collector ZenPack is installed Microsoft
   * Windows ZenPack is installed
   *
   * <p>Post-requisites: The added devices must be deleted
   *
   * <p>Author Alexander Sanchez
   *
   * @param testCaseId The id of the test case
   * @param username User name of the application to test
   * @param password User password of the application to test
   * @param deviceName Name of the win 2008 device to add
   * @param windowsUser the windows user credential needed to model the windows 2003 device
   * @param windowsPassword the windows password credential needed to model the device
   * @param zenPackName the zenpack name
   * @param expectedComponents The list of components that need to be checked
   * @throws Exception Exception
   */
  @Test(groups = {"tc_32428"})
  @Parameters({
    "tc_32428_testcaseid",
    "tc_32428_username",
    "tc_32428_password",
    "tc_ps_win_devicename",
    "tc_32428_windowsuser",
    "tc_32428_windowspassword",
    "zenpack_microsoftwindowsname",
    "tc_win2008_expected_components"
  })
  public void verifyAddMultipleDevicesFunctionalityForWindowsZenpack(
      String testCaseId,
      String username,
      String password,
      String deviceName,
      String windowsUser,
      String windowsPassword,
      String zenPackName,
      String expectedComponents) {
    // ***Pre-Test
    setTestCaseSection(TEST_CASE_SECTION_PRETEST);
    TestlinkCommands.addStepDescription(TEST_CASE_SECTION_PRETEST_LABEL);
    TestlinkCommands.setTestCaseID(testCaseId);
    CommonPage commonPage = new CommonPage();
    String endPoint = getEndPoint();
    String targetNameSpace = getTargetNameSpace();
    String host = getHostName();
    Autoinstall autoinstall = new Autoinstall();

    ZenPacksCommon.validateZenpackInstalledCompleteWorkFlow(username, password, zenPackName);
    Utilities.waitTime(ConstantsClass.TIMEOUT_2_SECONDS);

    DevicesPage devicesPage =
        (DevicesPage) commonPage.navigateTo(ConstantsClass.INFRASTRUCTURE_PAGE);
    Assert.assertTrue(devicesPage.checkPage(), "Infrastructure page is not displayed");

    if (DevicesCommon.selectDeviceInList(devicesPage, deviceName, ConstantsClass.DEVICE_FILTER))
      Assert.assertTrue(
          autoinstall.deleteDevice(endPoint, targetNameSpace, host, deviceName),
          String.format("Device can't be deleted"));

    // ***Test
    setTestCaseSection(TEST_CASE_SECTION_TEST);
    Assert.assertTrue(
        devicesPage.clickOnAddDeviceButton(),
        "The list with options to add device is not displayed");
    devicesPage.clickOnAddDeviceOption(ConstantsClass.ADD_MULTIPLE_DEVICES_OPTION_NAME);

    // These parameters are quite cumbersome, but are needed for the following method. Said method
    // will need to be optimized in the future
    String parameters =
        ConstantsClass.ADD_INFRASTRUCTURE_CATEGORY_SERVER
            + ","
            + ConstantsClass.ADD_INFRASTRUCTURE_TYPE_WIN_SERVER_RM
            + ","
            + deviceName
            + ","
            + windowsUser
            + ","
            + windowsPassword;
    DevicesCommon.addMultipleDevices(new AddMultipleDevicesPage(), parameters);
    devicesPage = (DevicesPage) commonPage.navigateTo(ConstantsClass.INFRASTRUCTURE_PAGE);
    Assert.assertTrue(devicesPage.checkPage(), "Infrastructure page is not displayed");
    Utilities.waitTime(TIMEOUT_5_SECONDS);
    OverviewPage overviewPage = devicesPage.clickDeviceLink(deviceName);
    String[] components = expectedComponents.split(",");
    Assert.assertTrue(
        overviewPage.areExpectedComponentsDisplayed(components),
        "After manually changing the creds, the components were not modeled correctly");

    // Post Test
    setTestCaseSection(TEST_CASE_SECTION_POSTTEST);
    // Delete the device
    Assert.assertTrue(
        autoinstall.deleteDevice(endPoint, targetNameSpace, host, deviceName),
        String.format("Device [%s] can't be deleted", deviceName));
  }