com.ecofactor.qa.automation.newapp.ThermostatTest.java Source code

Java tutorial

Introduction

Here is the source code for com.ecofactor.qa.automation.newapp.ThermostatTest.java

Source

/*
 * ThermostatTest.java
 * Copyright (c) 2014, EcoFactor, All Rights Reserved.
 *
 * This software is the confidential and proprietary information of EcoFactor
 * ("Confidential Information"). You shall not disclose such Confidential Information and shall use
 * it only in accordance with the terms of the license agreement you entered into with
 * EcoFactor.
 */
package com.ecofactor.qa.automation.newapp;

import static com.ecofactor.qa.automation.newapp.MobileConfig.*;
import static com.ecofactor.qa.automation.util.WaitUtil.*;

import org.joda.time.LocalTime;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.testng.Assert;
import org.testng.SkipException;
import org.testng.annotations.Guice;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

import com.ecofactor.qa.automation.dao.DaoModule;
import com.ecofactor.qa.automation.newapp.data.CommonsDataProvider;
import com.ecofactor.qa.automation.newapp.enums.ControlActions;
import com.ecofactor.qa.automation.newapp.page.MenuPage;
import com.ecofactor.qa.automation.newapp.page.SavingsPage;
import com.ecofactor.qa.automation.newapp.page.TstatControlOpsPage;
import com.ecofactor.qa.automation.newapp.page.TstatControlUIPage;
import com.ecofactor.qa.automation.newapp.page.validate.admin.TstatAdminValidation;
import com.ecofactor.qa.automation.newapp.page.validate.db.TstatDBValidation;
import com.ecofactor.qa.automation.platform.action.impl.DesktopUIAction;
import com.ecofactor.qa.automation.platform.annotation.TestPrerequisite;
import com.ecofactor.qa.automation.platform.constants.Groups;
import com.ecofactor.qa.automation.platform.enums.CustomLogLevel;
import com.ecofactor.qa.automation.platform.enums.LogSection;
import com.ecofactor.qa.automation.platform.exception.DeviceException;
import com.ecofactor.qa.automation.platform.listener.AutomationTransformer;
import com.ecofactor.qa.automation.platform.listener.RetryEnabledListener;
import com.ecofactor.qa.automation.platform.util.LogUtil;
import com.ecofactor.qa.automation.platform.util.SeleniumDriverUtil;
import com.google.inject.Inject;

/**
 * The Class ThermostatTest.
 * @author $Author:$
 * @version $Rev:$ $Date:$
 */
@Guice(modules = { MobileModule.class, DaoModule.class })
@Listeners({ RetryEnabledListener.class, AutomationTransformer.class })
public class ThermostatTest extends AbstractTest {

    /** The Constant COOL. */
    private static final String COOL = "cool";

    /** The Constant HEAT. */
    private static final String HEAT = "heat";

    /** The Constant OFF. */
    private static final String OFF = "off";

    /** The Constant MAX_COOL. */
    private final static Integer MAX_COOL = 89;

    /** The Constant MAX_HEAT. */
    private final static Integer MAX_HEAT = 89;

    /** The Constant MIN_COOL. */
    private final static Integer MIN_COOL = 65;

    /** The Constant MIN_HEAT. */
    private final static Integer MIN_HEAT = 45;

    /** The Constant LEFT. */
    private static final String LEFT = "left";

    /** The Constant IDLE. */
    @SuppressWarnings("unused")
    private static final String IDLE = "idle";

    /** The Constant DECREASE. */
    private static final String DECREASE = "DECREASE";

    /** The Constant INCREASE. */
    private static final String INCREASE = "INCREASE";

    /** The Constant NEUTRAL. */
    private static final String NEUTRAL = "NEUTRAL";

    /** The th ctrl ui page. */
    @Inject
    private TstatControlUIPage thCtrlUIPage;

    /** The th ctrl ops page. */
    @Inject
    private TstatControlOpsPage thCtrlOpsPage;

    /** The menu page. */
    @Inject
    private MenuPage menuPage;

    /** The savings page. */
    @Inject
    private SavingsPage savingsPage;

    /** The th db validation. */
    @Inject
    private TstatDBValidation thDbValidation;

    /** The thermostat admin. */
    @Inject
    private TstatAdminValidation thermostatAdmin;

    /** The counter start time. */
    @SuppressWarnings("unused")
    private LocalTime counterStartTime;

    /** The counter end time. */
    @SuppressWarnings("unused")
    private LocalTime counterEndTime;

    /** The duration. */
    @SuppressWarnings("unused")
    private long duration;

    /**
     * APP-88 Verify thermostat offline.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "tstatOfflineUser", dataProviderClass = CommonsDataProvider.class, priority = 1)
    public void thermostatOffline(final String userName, final String password) {

        loadPage(userName, password, true);

        thPageUI.getCurrentThermostatName();
        Assert.assertTrue(thPageUI.isThermostatOffline(), "Unable to verify offline background.");
    }

    /**
     * Row#230 Menu clickable if thermostat offline.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "tstatOfflineUser", dataProviderClass = CommonsDataProvider.class, priority = 2)
    public void menuClickableIfthermostatOffline(final String userName, final String password) {

        loadPage(userName, password, true);

        Assert.assertTrue(thPageUI.isThermostatOffline(), "Unable to verify offline background.");
        thPageOps.clickMenu();
        Assert.assertTrue(menuPage.isPageLoaded(), "Unable to click menu when thermostat is offline.");
        LogUtil.setLogString("Menu is clickable when thermostat is disconnected.", true, CustomLogLevel.MEDIUM);
        menuPage.clickThermostatMenuItem();
    }

    /**
     * Row#232 Close launch app when thermostat offline.
     * @param userName the user name
     * @param password the password
     * @throws DeviceException the device exception
     */
    @Test(groups = { Groups.SANITY1, Groups.ANDROID,
            Groups.IOS }, dataProvider = "tstatOfflineUser", dataProviderClass = CommonsDataProvider.class, priority = 3)
    public void closeLaunchAppWhenThermostatOffline(final String userName, final String password)
            throws DeviceException {

        loadPage(userName, password, true);

        Assert.assertTrue(thPageUI.isThermostatOffline(), "Unable to verify offline background.");
        LogUtil.setLogString("Close and launch app and check if it is still offline.", true, CustomLogLevel.MEDIUM);

        testOps.cleanup();
        testOps.switchToWebView();
        loginPage.setLoggedIn(false);
        loginPage.setLoggedInUser(null);
        loadPage(userName, password, true);
        Assert.assertTrue(thPageUI.isThermostatOffline(),
                "Unable to verify thermostat offline after close and launch app.");
        LogUtil.setLogString("Thermostat is still offline after close and launch app.", true,
                CustomLogLevel.MEDIUM);
    }

    /**
     * APP-97 Thermostats functional if one is offline.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "multipleOneOnOneOff", dataProviderClass = CommonsDataProvider.class, priority = 4)
    public void thermostatsFunctionalIfOneIsOffline(final String userName, final String password) {

        validateMultipleOneOnOneOff(userName, password, true);
    }

    /**
     * Row#234 Offline thermostat features.
     * @param userName the user name
     * @param password the password
     * @throws DeviceException the device exception
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "tstatOfflineUser", dataProviderClass = CommonsDataProvider.class, priority = 5)
    public void OfflineThermostatFeatures(final String userName, final String password) throws DeviceException {

        loadPage(userName, password, true);

        Assert.assertTrue(thPageUI.isThermostatOffline(), "Unable to verify offline background.");

        LogUtil.setLogString("Check if thermostat background is black.", true, CustomLogLevel.MEDIUM);
        Assert.assertTrue(thPageUI.isModeColorReflectedInScreen(OFF),
                "Off mode color is not reflected in screen background.");
        LogUtil.setLogString("Thermostat background is black.", true, CustomLogLevel.MEDIUM);

        Assert.assertFalse(thPageUI.isTargetTempDisplayed(),
                "Failed to verify target temperature is not displayed.");
        LogUtil.setLogString("Target temperature is not displayed.", true, CustomLogLevel.MEDIUM);

        LogUtil.setLogString("Check if current temperature is displayed.", true, CustomLogLevel.MEDIUM);
        Assert.assertFalse(thPageUI.isCurrentTempDisplayed(),
                "Failed to verify current temperature is not displayed.");
        LogUtil.setLogString("Current temperature is not displayed.", true, CustomLogLevel.MEDIUM);

        LogUtil.setLogString("Check if target dashed line is displayed.", true, CustomLogLevel.MEDIUM);
        Assert.assertFalse(thPageUI.isTargetDashedLineDisplayed(),
                "Failed to verify target dashed line/axis is not displayed.");
        LogUtil.setLogString("Target dashed line/axis is not displayed.", true, CustomLogLevel.MEDIUM);
    }

    /**
     * Row#238 Inside temperature displayed.
     * @param userName the user name
     * @param password the password
     * @throws DeviceException the device exception
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 6)
    public void insideTemperatureDisplayed(final String userName, final String password) throws DeviceException {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        Assert.assertTrue(thPageUI.isInsideTempDisplayed(), "Inside temperature is not displayed.");
        LogUtil.setLogString("Inside temperature is displayed.", true, CustomLogLevel.MEDIUM);
    }

    /**
     * APP-89 Verify no action at thermostat offline.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "tstatOfflineUser", dataProviderClass = CommonsDataProvider.class, priority = 7)
    public void noActionAtThermostatOffline(final String userName, final String password) {

        loadPage(userName, password, true);
        Assert.assertTrue(thPageUI.isPageLoaded(), "Thermostat Page is not loaded");
        thPageUI.getCurrentThermostatName();
        Assert.assertTrue(thPageUI.isThermostatOffline(), "Unable to verify offline background.");
        Assert.assertFalse(thPageUI.isTargetClickable(),
                "Clicked Target Temperature when thermostat is in offline.");
    }

    /**
     * APP-90 Offline error message.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER }, dataProvider = "tstatOfflineUser", dataProviderClass = CommonsDataProvider.class, priority = 8)
    public void offlineErrorMessage(final String userName, final String password) {

        loadPage(userName, password, true);
        thPageUI.getCurrentThermostatName();
        Assert.assertTrue(thPageUI.isThermostatOffline(), "Unable to verify offline background.");
        thPageUI.isClickLearnMoreLinkRedirectsNewWindow();
    }

    /**
     * APP-91 Switch thermostats in one is offline.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "multipleOneOnOneOff", dataProviderClass = CommonsDataProvider.class, priority = 9)
    public void switchOtherThermostatsIfOneIsOffline(final String userName, final String password) {

        validateMultipleOneOnOneOff(userName, password, false);
    }

    /**
     * APP-101 Provisional thermostat ui accesible.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "provisionalStatus", dataProviderClass = CommonsDataProvider.class, priority = 10)
    public void provisionalThermostatUIAccesible(final String userName, final String password) {

        loadPage(userName, password, true);
        Assert.assertTrue(thPageUI.isThermostatNotInstalled(),
                "Thermostat not installed message was missing in the thermostat page.");
        thDbValidation.verifyProvisionState(userName);
    }

    /**
     * APP-103 Heat back ground.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "validLogin", dataProviderClass = CommonsDataProvider.class, priority = 11)
    public void heatBackGround(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToHeat();

        final Integer currentTemp = Integer.parseInt(thCtrlUIPage.getCurrentTemperature());
        final Integer targetTemp = Integer.parseInt(thCtrlUIPage.getTargetTemperature());
        checkStateForHeatingOrCooling(ControlActions.HEAT, currentTemp, targetTemp);

        thCtrlOpsPage.closeThermostatControl();
        final String mode = thPageUI.getCurrentMode();
        if (mode.equalsIgnoreCase(HEAT)) {
            Assert.assertTrue(thPageUI.isBackgroundImageDisplayed(HEAT),
                    "Background is not gradient in heat mode.");
        } else if (mode.equalsIgnoreCase(COOL)) {
            Assert.assertTrue(thPageUI.isBackgroundImageDisplayed(COOL),
                    "Background is not gradient in cool mode.");
        }
    }

    /**
     * APP-102 Cool back ground.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "validLogin", dataProviderClass = CommonsDataProvider.class, priority = 12)
    public void coolBackGround(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToCool();

        final Integer currentTemp = Integer.parseInt(thCtrlUIPage.getCurrentTemperature());
        final Integer targetTemp = Integer.parseInt(thCtrlUIPage.getTargetTemperature());
        checkStateForHeatingOrCooling(ControlActions.COOL, currentTemp, targetTemp);

        thCtrlOpsPage.closeThermostatControl();
        final String mode = thPageUI.getCurrentMode();
        if (mode.equalsIgnoreCase(HEAT)) {
            Assert.assertTrue(thPageUI.isBackgroundImageDisplayed(HEAT),
                    "Background is not gradient in heat mode.");
        } else if (mode.equalsIgnoreCase(COOL)) {
            Assert.assertTrue(thPageUI.isBackgroundImageDisplayed(COOL),
                    "Background is not gradient in cool mode.");
        }
    }

    /**
     * APP-105 Off back ground.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 13)
    public void offBackGround(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToOff();
        Assert.assertFalse(thPageUI.isBackgroundImageDisplayed(OFF),
                "Off mode color is not reflected in screen background.");
    }

    /**
     * APP-99 Drag beyond boundaries for cool.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, enabled = false, priority = 14)
    public void dragBeyondBoundariesForCool(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        preRequisite(COOL);

        Integer targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());

        int iteration = 0;
        while (!targetTemp.equals(MAX_COOL) && iteration <= 3) {
            iteration += 1;
            thPageOps.targetTempChangeValueByDrag(-150);
            targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());
        }

        Assert.assertTrue(targetTemp.equals(MAX_COOL));

        thPageOps.targetTempChangeValueByDrag(-10);
        Integer targetTempAtExtremes = Integer.valueOf(thPageUI.getTargetTemperature());

        Assert.assertFalse(targetTempAtExtremes.equals(MAX_COOL + 1), "Able to drag beyond MAX cool temperature.");

        iteration = 0;
        targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());
        while (!targetTemp.equals(MIN_COOL) && iteration <= 3) {
            iteration += 1;
            thPageOps.targetTempChangeValueByDrag(200);
            targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());
        }

        Assert.assertTrue(targetTemp.equals(MIN_COOL));
        thPageOps.targetTempChangeValueByDrag(10);
        targetTempAtExtremes = Integer.valueOf(thPageUI.getTargetTemperature());

        Assert.assertFalse(targetTempAtExtremes.equals(MIN_COOL - 1), "Able to drag beyond MIN cool temperature.");
    }

    /**
     * APP-100 Drag beyond boundaries for heat.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, enabled = false, priority = 15)
    public void dragBeyondBoundariesForHeat(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        preRequisite(HEAT);

        int iteration = 0;
        Integer targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());
        while (!targetTemp.equals(MAX_HEAT) && iteration <= 3) {
            iteration += 1;
            thPageOps.targetTempChangeValueByDrag(-150);
            targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());
        }

        Assert.assertTrue(targetTemp.equals(MAX_HEAT));
        Integer targetTempAtExtremes = Integer.valueOf(thPageUI.getTargetTemperature());

        thPageOps.targetTempChangeValueByDrag(-10);
        Assert.assertFalse(targetTempAtExtremes.equals(MAX_HEAT + 1), "Able to drag beyond MAX cool temperature.");

        iteration = 0;
        targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());
        while (!targetTemp.equals(MIN_HEAT) && iteration <= 3) {
            iteration += 1;
            thPageOps.targetTempChangeValueByDrag(200);
            targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());
        }

        Assert.assertTrue(targetTemp.equals(MIN_HEAT));
        targetTempAtExtremes = Integer.valueOf(thPageUI.getTargetTemperature());

        thPageOps.targetTempChangeValueByDrag(10);
        Assert.assertFalse(targetTempAtExtremes.equals(MIN_HEAT - 1), "Able to drag beyond MIN cool temperature.");
    }

    /**
     * APP-121 Current temp in ui and db.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "validLogin", dataProviderClass = CommonsDataProvider.class, priority = 16)
    public void currentTempInUIAndDB(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final String thermostatName = thPageUI.getCurrentThermostatName();
        preRequisite(COOL);
        String currentTemp = thPageUI.getCurrentTemperature();
        thDbValidation.verifyCurrentTemp(userName, thermostatName, thPageUI.getCurrentMode(), currentTemp);
        thermostatAdmin.verifyCurrentTemperature(userName, thermostatName, currentTemp);

        preRequisite(HEAT);
        currentTemp = thPageUI.getCurrentTemperature();
        thDbValidation.verifyCurrentTemp(userName, thermostatName, thPageUI.getCurrentMode(), currentTemp);
        thermostatAdmin.verifyCurrentTemperature(userName, thermostatName, currentTemp);
    }

    /**
     * APP-1 Verify current temperature displayed left.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 17)
    public void verifyCurrentTemperatureDisplayedLeft(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        Assert.assertTrue("INSIDE".equalsIgnoreCase(thPageUI.getTemperatureContentByPosition("left")));
        thPageUI.getCurrentTemperature();
    }

    /**
     * APP-2 Verify target temperature displayed right.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 18)
    public void verifyTargetTemperatureDisplayedRight(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        Assert.assertTrue("TARGET".equalsIgnoreCase(thPageUI.getTemperatureContentByPosition("right")));
        thPageUI.getTargetTemperature();
    }

    /**
     * APP-27 Verify heat mo.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "validLogin", dataProviderClass = CommonsDataProvider.class, priority = 19)
    public void verifyHeatMo(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final String thermostatName = thPageUI.getCurrentThermostatName();
        LogUtil.setLogString("Current Thermostat Name :" + thermostatName, true);
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");

        thCtrlOpsPage.changeToHeat();
        final String currentTemp = thCtrlUIPage.getCurrentTemperature();
        thDbValidation.verifyCurrentTemp(userName, thermostatName, HEAT, currentTemp);
        //  thermostatAdmin.verifyCurrentTemperature(userName, thermostatName, currentTemp);

        //  thCtrlOpsPage.checkAndUpdateBoundary(3);
        thCtrlOpsPage.setPointChange(1, Integer.valueOf(thCtrlUIPage.getTargetTemperature()) + 1);
        thCtrlOpsPage.closeThermostatControl();

        Assert.assertTrue(thPageUI.isPageLoaded(), "Thermostat page is not loaded");
        final String targetTemp = thPageUI.getTargetTemperature();
        thDbValidation.verifyTargetTemp(userName, thermostatName, HEAT, targetTemp);
        // thermostatAdmin.verifyTargetTemp(userName, thermostatName, HEAT, targetTemp);
    }

    /**
     * APP-32 Verify cool mo.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 20)
    public void verifyCoolMo(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        LogUtil.setLogString("Logged in user: " + System.getProperty("userName"), true);
        final String thermostatName = thPageUI.getCurrentThermostatName();
        LogUtil.setLogString("Current Thermostat Name :" + thermostatName, true);
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");

        thCtrlOpsPage.changeToCool();
        final String currentTemp = thCtrlUIPage.getCurrentTemperature();
        thDbValidation.verifyCurrentTemp(userName, thermostatName, COOL, currentTemp);
        thermostatAdmin.verifyCurrentTemperature(userName, thermostatName, currentTemp);

        // thCtrlOpsPage.checkAndUpdateBoundary(3);
        thCtrlOpsPage.setPointChange(1, Integer.valueOf(thCtrlUIPage.getTargetTemperature()) + 1);
        thCtrlOpsPage.closeThermostatControl();

        Assert.assertTrue(thPageUI.isPageLoaded(), "Thermostat page is not loaded");
        final String targetTemp = thPageUI.getTargetTemperature();
        thDbValidation.verifyTargetTemp(userName, thermostatName, COOL, targetTemp);
        thermostatAdmin.verifyTargetTemp(userName, thermostatName, COOL, targetTemp);
    }

    /**
     * APP-124 Tap on target temperature.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 21)
    public void tapOnTargetTemperature(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
    }

    /**
     * APP-115 Dashed line on central axis.
     * @param userName the user name
     * @param password the password APP-115
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 22)
    public void dashedLineOnCentralAxis(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        Assert.assertEquals(thPageUI.isTargetDashedLineDisplayed(), true);
        Assert.assertEquals(thPageUI.isCurrentDashedLineDisplayed(), true);
    }

    /**
     * APP-130 Boundary values for cool.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 23, enabled = false)
    public void boundaryValuesForCool(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final String thermostatName = thPageUI.getCurrentThermostatName();
        preRequisite(COOL);

        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");

        LogUtil.setLogString("Change to Max target in cool.", true);
        int setPointChange = MAX_COOL - Integer.parseInt(thCtrlUIPage.getTargetTemperature());
        thCtrlOpsPage.setPointChange(setPointChange, MAX_COOL);
        Assert.assertTrue(MAX_COOL.equals(Integer.parseInt(thCtrlUIPage.getTargetTemperature())));

        thCtrlOpsPage.setPointChange(1);
        thCtrlOpsPage.closeThermostatControl();

        Assert.assertTrue(MAX_COOL.equals(Integer.parseInt(thPageUI.getTargetTemperature())));
        thDbValidation.verifyTargetTemp(userName, thermostatName, COOL, thPageUI.getTargetTemperature());
        thermostatAdmin.verifyTargetTemp(userName, thermostatName, COOL, thPageUI.getTargetTemperature());

        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");

        LogUtil.setLogString("Change to Min target in cool.", true);
        setPointChange = MIN_COOL - Integer.parseInt(thCtrlUIPage.getTargetTemperature());
        thCtrlOpsPage.setPointChange(setPointChange, MIN_COOL);
        Assert.assertTrue(MIN_COOL.equals(Integer.parseInt(thCtrlUIPage.getTargetTemperature())));

        thCtrlOpsPage.setPointChange(-1);
        thCtrlOpsPage.closeThermostatControl();

        Assert.assertTrue(MIN_COOL.equals(Integer.parseInt(thPageUI.getTargetTemperature())));
        thDbValidation.verifyTargetTemp(userName, thermostatName, COOL, thPageUI.getTargetTemperature());
        thermostatAdmin.verifyTargetTemp(userName, thermostatName, COOL, thPageUI.getTargetTemperature());
    }

    /**
     * APP-131 Boundary values for heat.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 24, enabled = false)
    public void boundaryValuesForHeat(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final String thermostatName = thPageUI.getCurrentThermostatName();
        preRequisite(HEAT);

        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");

        LogUtil.setLogString("Change to Max target in heat.", true);
        int setPointChange = MAX_HEAT - Integer.parseInt(thCtrlUIPage.getTargetTemperature());
        thCtrlOpsPage.setPointChange(setPointChange, MAX_HEAT);
        Assert.assertTrue(MAX_HEAT.equals(Integer.parseInt(thCtrlUIPage.getTargetTemperature())));

        thCtrlOpsPage.setPointChange(1);
        thCtrlOpsPage.closeThermostatControl();

        Assert.assertTrue(MAX_HEAT.equals(Integer.parseInt(thPageUI.getTargetTemperature())));
        thDbValidation.verifyTargetTemp(userName, thermostatName, HEAT, thPageUI.getTargetTemperature());
        thermostatAdmin.verifyTargetTemp(userName, thermostatName, HEAT, thPageUI.getTargetTemperature());

        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");

        LogUtil.setLogString("Change to Min target in heat.", true);
        setPointChange = MIN_HEAT - Integer.parseInt(thCtrlUIPage.getTargetTemperature());
        thCtrlOpsPage.setPointChange(setPointChange, MIN_HEAT);
        Assert.assertTrue(MIN_HEAT.equals(Integer.parseInt(thCtrlUIPage.getTargetTemperature())));

        thCtrlOpsPage.setPointChange(-1);
        thCtrlOpsPage.closeThermostatControl();

        Assert.assertTrue(MIN_HEAT.equals(Integer.parseInt(thPageUI.getTargetTemperature())));
        thDbValidation.verifyTargetTemp(userName, thermostatName, HEAT, thPageUI.getTargetTemperature());
        thermostatAdmin.verifyTargetTemp(userName, thermostatName, HEAT, thPageUI.getTargetTemperature());
    }

    /**
     * APP-104 Idle back ground.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 25)
    public void idleBackGround(final String userName, final String password) {

        loadPage(userName, password, true);

        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.setPointChange(1, Integer.parseInt(thCtrlUIPage.getCurrentTemperature()));
        String mode = thPageUI.getCurrentMode();
        Assert.assertTrue(thPageUI.isModeColorReflectedInScreen(mode), "Background color got changed");
    }

    /**
     * APP-120 Compare position current equals target.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "validLogin", dataProviderClass = CommonsDataProvider.class, priority = 26)
    public void comparePositionCurrentEqualsTarget(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        String mode = thPageUI.getCurrentMode();

        int currentTemp = Integer.valueOf(thPageUI.getCurrentTemperature());
        int targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());

        if (currentTemp != targetTemp) {
            LogUtil.setLogString("Current temperature != target temperature, equalise both.", true);
            changeTarget(currentTemp, targetTemp, NEUTRAL);
        }

        currentTemp = Integer.valueOf(thPageUI.getCurrentTemperature());
        targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());

        LogUtil.setLogString("Check if target and current temperatures are in neutral position.", true);
        Assert.assertTrue(thPageUI.isTempPositionRelative(currentTemp, targetTemp));

        mode = (thPageUI.getCurrentMode().equalsIgnoreCase(COOL)) ? HEAT : COOL;
        preRequisite(mode);

        currentTemp = Integer.parseInt(thPageUI.getCurrentTemperature());
        targetTemp = Integer.parseInt(thPageUI.getTargetTemperature());

        if (currentTemp != targetTemp) {
            LogUtil.setLogString("Current temperature != target temperature, equalise both.", true);
            changeTarget(currentTemp, targetTemp, NEUTRAL);
        }

        currentTemp = Integer.parseInt(thPageUI.getCurrentTemperature());
        targetTemp = Integer.parseInt(thPageUI.getTargetTemperature());

        LogUtil.setLogString("Compare if target and current temperatures are in neutral position.", true);
        Assert.assertTrue(thPageUI.isTempPositionRelative(currentTemp, targetTemp));
    }

    /**
     * APP-25 Verify target change.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "validLogin", dataProviderClass = CommonsDataProvider.class, priority = 27)
    public void verifyUIChange(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        verifyTargetChange();
        thCtrlOpsPage.changeToCool();
        thCtrlOpsPage.changeToHeat();
        thCtrlOpsPage.changeToOff();
        thPageOps.turnSystemOn();
        Assert.assertTrue(thPageUI.isTargetTempDisplayed(),
                "Target temperature is not displayed in thermostat page");
    }

    /**
     * APP-118 Compare position current high target low.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 28)
    public void comparePositionCurrentHighTargetLow(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        String mode = thPageUI.getCurrentMode();

        int currentTemp = Integer.valueOf(thPageUI.getCurrentTemperature());
        int targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());

        if (currentTemp < targetTemp) {
            LogUtil.setLogString(
                    "Current temperature < target temperature, so decrease target temperature and verify the position.",
                    true);
            changeTarget(currentTemp, targetTemp, DECREASE);
        }

        currentTemp = Integer.parseInt(thPageUI.getCurrentTemperature());
        targetTemp = Integer.parseInt(thPageUI.getTargetTemperature());

        LogUtil.setLogString(
                "Check if position of current temperature is in top and target temperature is in bottom.", true);
        Assert.assertTrue(
                thPageUI.isTempPositionRelative(currentTemp, Integer.parseInt(thPageUI.getTargetTemperature())));

        mode = (thPageUI.getCurrentMode().equalsIgnoreCase(COOL)) ? HEAT : COOL;
        preRequisite(mode);

        currentTemp = Integer.parseInt(thPageUI.getCurrentTemperature());
        targetTemp = Integer.parseInt(thPageUI.getTargetTemperature());

        if (currentTemp < targetTemp) {
            LogUtil.setLogString(
                    "Current temperature < target temperature, so decrease target temperature and verify the position.",
                    true);
            changeTarget(currentTemp, targetTemp, DECREASE);
        }

        currentTemp = Integer.parseInt(thPageUI.getCurrentTemperature());
        targetTemp = Integer.parseInt(thPageUI.getTargetTemperature());

        LogUtil.setLogString(
                "Check if position of current temperature is in top and target temperature is in bottom.", true);
        Assert.assertTrue(thPageUI.isTempPositionRelative(currentTemp, targetTemp));
    }

    /**
     * APP-119 Compare position current low target high.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 29)
    public void comparePositionCurrentLowTargetHigh(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        String mode = thPageUI.getCurrentMode();

        int currentTemp = Integer.valueOf(thPageUI.getCurrentTemperature());
        int targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());

        if (currentTemp > targetTemp) {
            LogUtil.setLogString(
                    "Current temperature > target temperature, so increase target temperature and verify the position.",
                    true);
            changeTarget(currentTemp, targetTemp, INCREASE);
        }

        currentTemp = Integer.valueOf(thPageUI.getCurrentTemperature());
        targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());

        LogUtil.setLogString(
                "Check if position of current temperature is in bottom and target temperature is in top.", true);
        Assert.assertTrue(thPageUI.isTempPositionRelative(currentTemp, targetTemp));

        mode = (thPageUI.getCurrentMode().equalsIgnoreCase(COOL)) ? HEAT : COOL;
        preRequisite(mode);

        currentTemp = Integer.valueOf(thPageUI.getCurrentTemperature());
        targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());

        if (currentTemp > targetTemp) {
            LogUtil.setLogString(
                    "Current temperature > target temperature, so increase target temperature and verify the position.",
                    true);
            changeTarget(currentTemp, targetTemp, INCREASE);
        }

        currentTemp = Integer.valueOf(thPageUI.getCurrentTemperature());
        targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());

        LogUtil.setLogString(
                "Check if position of current temperature is in bottom and target temperature is in top.", true);
        Assert.assertTrue(thPageUI.isTempPositionRelative(currentTemp, targetTemp));
    }

    /**
     * APP-274 Click Heat icon.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 30)
    public void heatIcon(final String userName, final String password) {

        loadPage(userName, password, true);
        thPageOps.clickControlsIcon();
        String mode = thCtrlUIPage.getCurrentMode();
        thCtrlOpsPage.closeThermostatControl();
        if (mode.equalsIgnoreCase(HEAT)) {

            thPageOps.clickHeatIcon();
        } else {

            thPageOps.clickControlsIcon();
            thCtrlOpsPage.changeToHeat();
            thCtrlOpsPage.closeThermostatControl();
            thPageOps.clickHeatIcon();
        }
    }

    /**
     * APP-273 Click Cool icon.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 31)
    public void coolIcon(final String userName, final String password) {

        loadPage(userName, password, true);
        String mode = thCtrlUIPage.getCurrentMode();
        thCtrlOpsPage.closeThermostatControl();
        if (mode.equalsIgnoreCase(COOL)) {

            thPageOps.clickCoolIcon();
        } else {

            thPageOps.clickControlsIcon();
            thCtrlOpsPage.changeToCool();
            thCtrlOpsPage.closeThermostatControl();
            thPageOps.clickCoolIcon();
        }
    }

    /**
     * APP-275 Check thermostat Header.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 32)
    public void thermostatHeader(final String userName, final String password) {

        loadPage(userName, password, true);
        Assert.assertTrue(thPageUI.isThermostatHeaderDisplayed(), "Thermostat Header not displayed");
    }

    /**
     * APP-270 Check for outside temperature.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 33)
    public void outSideTemperature(final String userName, final String password) {

        loadPage(userName, password, true);
        thPageUI.fetchOutsideTemperature();
    }

    /**
     * APP-276 Check for outside temperature.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 34)
    public void menuPage(final String userName, final String password) {

        loadPage(userName, password, true);
        LogUtil.setLogString("Check for Menu page displayed.", true);
        thPageOps.clickMenu();
    }

    /**
     * APP-277 Check for outside temperature.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 35)
    public void thermostatPage(final String userName, final String password) {

        loadPage(userName, password, true);
        goToThermostatPage();
    }

    /**
     * APP-271 Click setAway icon.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 36)
    public void setAwayIcon(final String userName, final String password) {

        loadPage(userName, password, true);
        thPageOps.clickSetAway();
    }

    /**
     * APP-272 Click savings icon.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 37)
    public void savingsIcon(final String userName, final String password) {

        loadPage(userName, password, true);
        thPageOps.isSavingsClickable();
    }

    /**
     * APP-116 Drang and drop dashes.
     * @param userName the user name
     * @param password the password APP-116
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 38)
    public void dragAndDropDashes(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        thPageUI.getToastErrorMessage();
        final Integer target = Integer.valueOf(thPageUI.getTargetTemperature());
        thPageOps.dragTargetTo(target, 85);
        LogUtil.setLogString("Check Current temperature is not displayed", true);
        Assert.assertEquals(thPageUI.isCurrentDashedLineDisplayed(), true);
        thPageOps.dropTarget();
        Assert.assertEquals(thPageUI.isLongDashesNotDisplayed(), false);
        final Integer newtarget = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertNotEquals(target, newtarget, "Target temperature remains in same state");
    }

    /**
     * APP-123 Drag target temp horizontally.
     * @param userName the user name
     * @param password the password APP-123
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER, }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 39)
    public void dragTargetTempHorizontally(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final Integer targetTemp = Integer.valueOf(thPageUI.getTargetTemperature());
        thPageOps.dragTargetHorizontal();
        final Integer newtarget = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertEquals(targetTemp, newtarget, "Target temperature not remains in same state");
    }

    /**
     * APP-125 Drag up heat mode.
     * @param userName the user name
     * @param password the password APP-125
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 40)
    public void dragUpHeatMode(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final String thermostatName = thPageUI.getCurrentThermostatName();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToHeat();
        thCtrlOpsPage.checkAndUpdateBoundary(5);
        thCtrlOpsPage.closeThermostatControl();
        final Integer target = Integer.valueOf(thPageUI.getTargetTemperature());
        thPageOps.dragAndDropTargetTo(target, target + 3);
        final Integer newtarget = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertTrue(newtarget > target, "Target temperature remains in same state");
        thDbValidation.verifyTargetTemp(userName, thermostatName, HEAT, String.valueOf(target + 3));
        thermostatAdmin.verifyTargetTemp(userName, thermostatName, HEAT, String.valueOf(target + 3));
    }

    /**
     * APP-126 Drag up cool mode.
     * @param userName the user name
     * @param password the password APP-126
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 41)
    public void dragUpCoolMode(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final String thermostatName = thPageUI.getCurrentThermostatName();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToCool();
        thCtrlOpsPage.checkAndUpdateBoundary(5);
        thCtrlOpsPage.closeThermostatControl();
        final Integer target = Integer.valueOf(thPageUI.getTargetTemperature());
        thPageOps.dragAndDropTargetTo(target, target + 3);
        final Integer newtarget = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertTrue(newtarget > target, "Target temperature remains in same state");
        thDbValidation.verifyTargetTemp(userName, thermostatName, COOL, String.valueOf(target + 3));
        thermostatAdmin.verifyTargetTemp(userName, thermostatName, COOL, String.valueOf(target + 3));
    }

    /**
     * APP-127 Drag down heat mode.
     * @param userName the user name
     * @param password the password APP-127
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 42)
    public void dragDownHeatMode(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final String thermostatName = thPageUI.getCurrentThermostatName();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToHeat();
        thCtrlOpsPage.checkAndUpdateBoundary(5);
        thCtrlOpsPage.closeThermostatControl();
        final Integer target = Integer.valueOf(thPageUI.getTargetTemperature());
        thPageOps.dragAndDropTargetTo(target, target - 3);
        final Integer newtarget = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertTrue(newtarget < target, "Target temperature remains in same state");
        thDbValidation.verifyTargetTemp(userName, thermostatName, HEAT, String.valueOf(target - 3));
        thermostatAdmin.verifyTargetTemp(userName, thermostatName, HEAT, String.valueOf(target - 3));
    }

    /**
     * APP-128 Drag down cool mode.
     * @param userName the user name
     * @param password the password APP-128
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 43)
    public void dragDownCoolMode(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final String thermostatName = thPageUI.getCurrentThermostatName();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToCool();
        thCtrlOpsPage.checkAndUpdateBoundary(5);
        thCtrlOpsPage.closeThermostatControl();
        final Integer target = Integer.valueOf(thPageUI.getTargetTemperature());
        thPageOps.dragAndDropTargetTo(target, target - 3);
        final Integer newtarget = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertTrue(newtarget < target, "Target temperature remains in same state");
        thDbValidation.verifyTargetTemp(userName, thermostatName, COOL, String.valueOf(target - 3));
        thermostatAdmin.verifyTargetTemp(userName, thermostatName, COOL, String.valueOf(target - 3));
    }

    /**
     * APP-129 Large font on drag.
     * @param userName the user name
     * @param password the password APP-129
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 44)
    public void largeFontOnDrag(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.checkAndUpdateBoundary(5);
        thCtrlOpsPage.closeThermostatControl();
        final Integer target = Integer.valueOf(thPageUI.getTargetTemperature());
        thPageOps.dragTargetTo(target, target + 3);
        final String slidingTargetTemp = thPageUI.getSlidingTemperature();
        Assert.assertEquals("112px", slidingTargetTemp, "Sliding Target temperature Font changed from 112px");
        thPageOps.dropTarget();
    }

    /**
     * APP-85 Test Method for Current Temperature Slider Value change.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 45)
    public void currentTemperatureValueChangeByDrag(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        final String beforeTemperature = thPageUI.getCurrentTemperature();
        thPageUI.currentTemperatureDrag(50);
        final String afterTemperature = thPageUI.getCurrentTemperature();
        Assert.assertTrue(beforeTemperature.equals(afterTemperature), "Current Temperature updated!");
    }

    /**
     * APP-86 Test Method for Target Temperature Slider Value change.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER,
            Groups.IOS }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 46)
    public void targetTemperaturePositionChangeByDrag(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        String beforeTemperature = thPageUI.getTargetTemperature();
        changeTargetTempByDrag(beforeTemperature);
        beforeTemperature = thPageUI.getTargetTemperature();
        thPageOps.targetTempChangeValueByDrag(100);
        final String afterTemperature = thPageUI.getTargetTemperature();
        Assert.assertTrue(beforeTemperature.equals(afterTemperature), "Target Temperature not getting updated!");
    }

    /**
     * Max and min target cool.
     * @param userName the user name
     * @param password the password APP-99
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 47)
    public void maxAndMinTargetCool(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToCool();
        thCtrlOpsPage.closeThermostatControl();
        Integer target = Integer.valueOf(thPageUI.getTargetTemperature());
        thPageOps.dragAndDropTargetTo(target, 90);
        target = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertTrue(target == 89 || target < 89, "Target Value greater than 89");
        thPageOps.dragAndDropTargetTo(target, 65);
        target = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertTrue(target == 65 || target > 65, "Target Value lesser than 65");
    }

    /**
     * Max and min target heat.
     * @param userName the user name
     * @param password the password APP-100
     */
    @Test(groups = { Groups.SANITY1,
            Groups.BROWSER }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 48)
    public void maxAndMinTargetHeat(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToHeat();
        thCtrlOpsPage.closeThermostatControl();
        Integer target = Integer.valueOf(thPageUI.getTargetTemperature());
        thPageOps.dragAndDropTargetTo(target, 90);
        target = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertTrue(target == 89 || target < 89, "Target Value greater than 89");
        thPageOps.dragAndDropTargetTo(target, 45);
        target = Integer.valueOf(thPageUI.getTargetTemperature());
        Assert.assertTrue(target == 45 || target > 45, "Target Value lesser than 45");
    }

    /**
     * Click savings link multiple times.
     * @param userName the user name
     * @param password the password
     */
    // @Test(groups = { Groups.SANITY1, Groups.ANDROID, Groups.IOS }, enabled = false, dataProvider
    // = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 49)
    public void clickSavingsLinkMultipleTimes(final String userName, final String password) {

        loadPage(userName, password, true);
        checkIdleConditionsForThermostat();
        LogUtil.setLogString("Click Savings icon 5 times and check no popups is opned while click on the same link",
                true);
        for (int i = 0; i < 5; i++) {
            thPageOps.clickSavings();
            Assert.assertTrue(savingsPage.isPageLoaded(), "Popup is not opened after click on the Savings link");
            thPageOps.clickSavings();
            Assert.assertFalse(savingsPage.isPageLoaded(),
                    "Popup is not closed after click on the Savings link twice");
        }

        Assert.assertFalse(savingsPage.isPageLoaded(), "Popup is not closed after click on the Savings link twice");
    }

    /**
     * APP-134 Cool set point changes in device and desktop.
     * @param userName the user name
     * @param password the password
     */
    // @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS }, dataProvider =
    // "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 50)
    public void coolSetPointChangesInDeviceAndDesktop(final String userName, final String password) {

        setPointChangesinDB(userName, password, COOL);
    }

    /**
     * APP-138 Heat set point changes in device and desktop.
     * @param userName the user name
     * @param password the password
     */
    // @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS }, dataProvider =
    // "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 51)
    public void heatSetPointChangesInDeviceAndDesktop(final String userName, final String password) {

        setPointChangesinDB(userName, password, HEAT);
        // verifySetPointChangesInDeviceAndDesktop(userName, password, HEAT);
    }

    /**
     * APP-26 Verify celcius temp.
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS, Groups.STUB }, priority = 52)
    public void verifyCelcius() {

        LogUtil.setLogString("Skipping - Dependancy on APPS-6416!", true);
        throw new SkipException("Skipping - Dependancy on APPS-6416!");
    }

    /**
     * APP-23 Verify thermostat page load time.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 52)
    public void verifyThermostatpageLoadTime(final String userName, final String password) {

        LogUtil.setLogString("Skipping - Dependency on APPS-6925", true);
        throw new SkipException("Skipping - Dependency on APPS-6925");
    }

    /**
     * APP-24 Verify temperature content load time.
     * @param userName the user name
     * @param password the password
     */
    @Test(groups = { Groups.SANITY1, Groups.BROWSER, Groups.ANDROID, Groups.IOS,
            Groups.STUB }, dataProvider = "defaultUser", dataProviderClass = CommonsDataProvider.class, priority = 53)
    public void verifyTemperatureContentLoadTime(final String userName, final String password) {

        LogUtil.setLogString("Skipping - Dependency on APPS-6925", true);
        throw new SkipException("Skipping - Dependency on APPS-6925");
    }

    /**
     * Creates the driver.
     * @return the web driver
     */
    private WebDriver createDriver() {

        LogUtil.setLogString("Create New webdriver", true);
        LogUtil.setLogString("Browser : " + System.getProperty("browser"), true);
        final WebDriver driver = SeleniumDriverUtil.createBrowserDriver(System.getProperty("browser"));
        driver.manage().window().maximize();
        final String url = mobileConfig.get(ECOFACTOR_URL);
        LogUtil.setLogString("Load Url: " + url, true);
        driver.navigate().to(url);
        smallWait();
        return driver;
    }

    /**
     * Refresh page.
     * @param driver the driver
     */
    @SuppressWarnings("unused")
    private void refreshPage(final WebDriver driver) {

        LogUtil.setLogString("Refresh page", true);
        final JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
        jsExecutor.executeScript("return window.location.reload();");
        mediumWait();
    }

    /**
     * Check state for heating or cooling. If you need to set cooling, set mode to cool and pass
     * cool as param. If you need to set heating, set mode to heat and pass heat as param.
     * @param cntrlActions the cntrl actions
     * @param currentTemp the current temp
     * @param targetTemp the target temp
     */
    private void checkStateForHeatingOrCooling(final ControlActions cntrlActions, final int currentTemp,
            final int targetTemp) {

        int changeValue = 0;
        if (cntrlActions.equals(ControlActions.COOL)) {
            if (currentTemp < targetTemp) {
                changeValue = targetTemp - currentTemp;
                changeValue -= 1;
                thCtrlOpsPage.setPointChange(-changeValue, currentTemp - 1);
            }
        } else {
            if (targetTemp < currentTemp) {
                changeValue = currentTemp - targetTemp;
                changeValue += 1;
                thCtrlOpsPage.setPointChange(changeValue, currentTemp + 1);
            }
        }
    }

    /**
     * Change target temp by drag.
     * @param beforeTemperature the before temperature
     */
    private void changeTargetTempByDrag(final String beforeTemperature) {

        if (Integer.parseInt(beforeTemperature) == MAX_COOL || Integer.parseInt(beforeTemperature) == MAX_HEAT) {
            thPageOps.targetTempChangeValueByDrag(50);
        } else if (Integer.parseInt(beforeTemperature) == MIN_COOL
                || Integer.parseInt(beforeTemperature) == MIN_HEAT) {
            thPageOps.targetTempChangeValueByDrag(-50);
        }
    }

    /**
     * Verify target change.
     */
    private void verifyTargetChange() {

        String currrentTarget = thPageUI.getTargetTemperature();
        LogUtil.setLogString("Current target temperature : " + currrentTarget, true);
        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        // thCtrlOpsPage.checkAndUpdateBoundary(4);
        currrentTarget = thCtrlUIPage.getTargetTemperature();
        thCtrlOpsPage.setPointChange(1, Integer.valueOf(currrentTarget) + 1);
        Assert.assertFalse(currrentTarget.equalsIgnoreCase(thCtrlUIPage.getTargetTemperature()));
        thCtrlOpsPage.setPointChange(-1, Integer.valueOf(currrentTarget));
        Assert.assertTrue(currrentTarget.equalsIgnoreCase(thCtrlUIPage.getTargetTemperature()));
    }

    /**
     * Pre requisite.
     * @param mode the mode
     */
    private void preRequisite(final String mode) {

        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");

        if (!thPageUI.getCurrentMode().equalsIgnoreCase(mode)) {

            if (mode.contains(COOL)) {
                thCtrlOpsPage.changeToCool();
            } else if (mode.contains(HEAT)) {
                thCtrlOpsPage.changeToHeat();
            } else {
                thCtrlOpsPage.changeToOff();
            }
        }

        LogUtil.setLogString("Check boundary conditions.", true);
        thCtrlOpsPage.checkAndUpdateBoundary(4);
        thCtrlOpsPage.closeThermostatControl();
    }

    /**
     * Check idle conditions for thermostat.
     */
    @TestPrerequisite
    public void checkIdleConditionsForThermostat() {

        Assert.assertFalse(thPageUI.isThermostatOffline(),
                "Unable to do thermostat related UI changes since thermostat is offline.");
        if (thCtrlOpsPage.isPopUpOpened()) {
            thCtrlOpsPage.closeThermostatControl();
            Assert.assertTrue(thPageUI.isPageLoaded(), "Thermostat page is not loaded");
        }

        if (awayPage.isPageLoaded()) {
            LogUtil.setLogString("Wait 30 seconds and click Imback", true);
            largeWait();
            awayPage.clickAmBack();
        }

        thPageUI.isPageLoaded();

        if (thPageUI.isModeOff()) {
            thPageOps.turnSystemOn();
        }

        if (thPageUI.isIdleState()) {
            LogUtil.setLogString("Thermostat is in idle state.Increase target temperatrure to change the state.",
                    true);
            thPageOps.openTstatController();
            Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
            thCtrlOpsPage.setPointChange(1);
            thCtrlOpsPage.closeThermostatControl();
            Assert.assertTrue(thPageUI.isPageLoaded(), "Thermostat page is not loaded");
        }
    }

    /**
     * Validate multiple one on one off.
     * @param userName the user name
     * @param password the password
     * @param checkFunctionality the check functionality
     */
    private void validateMultipleOneOnOneOff(final String userName, final String password,
            final boolean checkFunctionality) {

        loadPage(userName, password, true);
        thPageUI.isPageLoaded();
        thPageOps.clickLocationSwitcher();
        Integer noOfThermostat = thPageUI.getNoOfThermostats();
        locPageOps.clickClose();

        Assert.assertTrue(noOfThermostat > 1,
                "Provide user accounts with multiple thermostats with any one disconnected.");
        boolean disconnectedThermostat = false;

        String[] thermostatName = new String[noOfThermostat];
        for (int i = 1; i <= noOfThermostat; i++) {
            smallWait();
            thermostatName[i - 1] = thPageUI.getCurrentThermostatName();
            LogUtil.setLogString("Thermostat " + i + ". Name : " + thPageUI.getCurrentThermostatName()
                    + "; isDisconnected: " + thPageUI.isThermostatOffline(), true);

            if (thPageUI.isThermostatOffline()) {
                disconnectedThermostat = true;
            } else {
                thPageUI.getCurrentThermostatName();
                if (checkFunctionality) {
                    checkThermostatsFunctionalities();
                }
            }
            thPageOps.swipe(LEFT);
        }

        Assert.assertTrue(disconnectedThermostat, "Provide any one thermostat with disconnected status.");
        Assert.assertTrue(!thermostatName[0].equalsIgnoreCase(thermostatName[1]),
                "Unable to swipe to remaining thermostats if one is offline.");
    }

    /**
     * Check thermostats functionalities.
     */
    private void checkThermostatsFunctionalities() {

        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thCtrlOpsPage.changeToCool();
        thCtrlOpsPage.changeToHeat();
        thCtrlOpsPage.changeToOff();
        thPageOps.turnSystemOn();
    }

    /**
     * Verify set point changes in device and desktop.
     * @param userName the user name
     * @param password the password
     * @param mode the mode
     */
    @SuppressWarnings("unused")
    private void verifySetPointChangesInDeviceAndDesktop(final String userName, final String password,
            final String mode) {

        loadPage(userName, password, true);

        LogUtil.setLogString("Ensure " + mode + " mode.", true);
        preRequisite(mode);

        WebDriver driver = null;
        try {
            final String thermostatName = thPageUI.getCurrentThermostatName();
            loginPage.setLoggedIn(false);

            LogUtil.setLogString(LogSection.START, "New Browser verfication starts", true);
            driver = createDriver();
            loginPage.setDriver(driver);
            loginPage.setAction(new DesktopUIAction());
            thPageOps.setDriver(driver);
            thPageOps.setAction(new DesktopUIAction());
            thPageUI.setDriver(driver);
            thPageUI.setAction(new DesktopUIAction());
            helpPage.setDriver(driver);
            helpPage.setAction(new DesktopUIAction());
            loadPage(userName, password, true);
            loginPage.setDriver(null);

            thCtrlOpsPage.setDriver(driver);

            thPageOps.openTstatController();
            thCtrlOpsPage.isPageLoaded();

            LogUtil.setLogString("Make set point changes in new browser", true);

            thCtrlOpsPage.setAction(new DesktopUIAction());
            thCtrlOpsPage.setPointChange(1);
            thCtrlOpsPage.closeThermostatControl();

            Integer changedTarget = Integer.valueOf(thPageUI.getTargetTemperature());
            thPageOps.setDriver(null);
            thCtrlOpsPage.setDriver(null);
            thDbValidation.verifyTargetTemp(userName, thermostatName, thPageUI.getCurrentMode(),
                    thPageUI.getTargetTemperature());
            thermostatAdmin.verifyTargetTemp(userName, thermostatName, thPageUI.getCurrentMode(),
                    thPageUI.getTargetTemperature());
            LogUtil.setLogString(LogSection.END, "New Browser verification ends", true);
            thPageUI.setDriver(null);
            thCtrlOpsPage.setAction(null);
            thPageOps.setAction(null);
            thPageUI.setAction(null);
            loginPage.setAction(null);

            // refreshPage(thPageUI.getDriver());
            LogUtil.setLogString("Check set point change is reflected in mobile/browser.", true);
            Assert.assertTrue(thPageUI.isTargetTemperatureChanged(String.valueOf(changedTarget)),
                    "Target temperature differs");
            thPageOps.openTstatController();
            thCtrlOpsPage.isPageLoaded();
            LogUtil.setLogString("Change setpoint  in mobile/browser", true);
            thCtrlOpsPage.setPointChange(-1);
            thCtrlOpsPage.closeThermostatControl();
            thDbValidation.verifyTargetTemp(userName, thermostatName, thPageUI.getCurrentMode(),
                    thPageUI.getTargetTemperature());
            thermostatAdmin.verifyTargetTemp(userName, thermostatName, thPageUI.getCurrentMode(),
                    thPageUI.getTargetTemperature());

            changedTarget = Integer.valueOf(thPageUI.getTargetTemperature());

            LogUtil.setLogString(LogSection.START, "New Browser verfication starts", true);
            // refreshPage(driver);
            largeWait();
            thPageUI.setDriver(driver);
            LogUtil.setLogString("Check set point is changed in new browser", true);
            Assert.assertTrue(Integer.valueOf(thPageUI.getTargetTemperature()).equals(changedTarget),
                    "Target temperature differs");
            thPageUI.setDriver(null);
            LogUtil.setLogString(LogSection.END, "New Browser verfication ends", true);

        } finally {
            loginPage.setDriver(null);
            thPageOps.setDriver(null);
            thCtrlOpsPage.setAction(null);
            thCtrlOpsPage.setDriver(null);
            thPageUI.setDriver(null);
            thPageOps.setAction(null);
            thPageUI.setAction(null);
            loginPage.setAction(null);

            if (driver != null) {
                LogUtil.setLogString("Quit driver for new browser", true);
                driver.quit();
            }
        }
    }

    /**
     * Change target.
     * @param currentTemp the current temp
     * @param targetTemp the target temp
     * @param changeRequired the change required
     */
    private void changeTarget(final int currentTemp, final int targetTemp, final String changeRequired) {

        thPageOps.openTstatController();
        Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        clickAnyWhere();

        if (changeRequired.equalsIgnoreCase("increase")) {

            LogUtil.setLogString("Increase target temperature.", true);
            thCtrlOpsPage.setPointChange(((currentTemp - targetTemp) + 1), currentTemp + 1);

        } else if (changeRequired.equalsIgnoreCase("decrease")) {

            LogUtil.setLogString("Decrease target temperature.", true);
            thCtrlOpsPage.setPointChange(-((targetTemp - currentTemp) + 1), currentTemp - 1);
        } else {
            LogUtil.setLogString("Make target and current temperatures equal.", true);

            if (currentTemp > targetTemp) {
                thCtrlOpsPage.setPointChange((currentTemp - targetTemp), currentTemp);
            } else if (targetTemp > currentTemp) {
                thCtrlOpsPage.setPointChange(-(targetTemp - currentTemp), currentTemp);
            }
        }
        thCtrlOpsPage.closeThermostatControl();
    }

    /**
     * Click any where.
     */
    private void clickAnyWhere() {

        // Assert.assertTrue(thCtrlOpsPage.isPageLoaded(), "Thermostat control page is not loaded");
        thPageOps.clickotherplace();
    }

    /**
     * Sets the point changesin db.
     * @param userName the user name
     * @param password the password
     * @param mode the mode
     */
    private void setPointChangesinDB(final String userName, final String password, final String mode) {

        loadPage(userName, password, true);
        LogUtil.setLogString("Ensure " + mode + " mode.", true);
        thPageOps.clickControlsIcon();
        thPageUI.getCurrentMode();
        if (!thPageUI.getCurrentMode().equalsIgnoreCase(mode)) {

            if (mode.contains(COOL)) {
                thCtrlOpsPage.changeToCool();
            } else if (mode.contains(HEAT)) {
                thCtrlOpsPage.changeToHeat();
            } else {
                thCtrlOpsPage.changeToOff();
            }
        }
        thCtrlOpsPage.closeThermostatControl();
        final String thermostatName = thPageUI.getCurrentThermostatName();
        String currentTemp = thPageUI.getCurrentTemperature();
        thDbValidation.verifyCurrentTemp(userName, thermostatName, thPageUI.getCurrentMode(), currentTemp);
        thermostatAdmin.verifyCurrentTemperature(userName, thermostatName, currentTemp);
    }

}