org.openlmis.functional.CreateUpdateCHW.java Source code

Java tutorial

Introduction

Here is the source code for org.openlmis.functional.CreateUpdateCHW.java

Source

/*
 * This program is part of the OpenLMIS logistics management information system platform software.
 * Copyright  2013 VillageReach
 *
 * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
 * You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses. For additional information contact info@OpenLMIS.org.
 */

package org.openlmis.functional;

import org.openlmis.UiUtils.HttpClient;
import org.openlmis.UiUtils.ResponseEntity;
import org.openlmis.pageobjects.*;
import org.openlmis.restapi.domain.Agent;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static com.thoughtworks.selenium.SeleneseTestBase.*;
import static java.lang.String.format;
import static org.apache.http.HttpStatus.SC_BAD_REQUEST;
import static org.apache.http.HttpStatus.SC_UNAUTHORIZED;
import static org.testng.Assert.assertNull;

public class CreateUpdateCHW extends JsonUtility {
    public static final String POST = "POST";
    public static final String PUT = "PUT";
    public static final String FULL_JSON_TXT_FILE_NAME = "AgentValid.txt";
    public static final String userEmail = "Fatim_Doe@openlmis.com";
    public static final String CREATE_URL = "http://localhost:9091/rest-api/agents.json";
    public static final String UPDATE_URL = "http://localhost:9091/rest-api/agents/";
    public static final String commTrackUser = "commTrack";
    public static final String PHONE_NUMBER = "0099887766";
    public static final String DEFAULT_AGENT_NAME = "Agent A1";
    public static final String DEFAULT_PARENT_FACILITY_CODE = "F10";
    public static final String ACTIVE_STATUS = "true";
    public static final String DEFAULT_AGENT_CODE = "A2";
    public static final String FALSE_FLAG = "f";
    public static final String TRUE_FLAG = "t";
    public static final String JSON_EXTENSION = ".json";

    LoginPage loginPage;

    @BeforeMethod(groups = { "webservice", "webserviceSmoke" })
    public void setUp() throws InterruptedException, SQLException, IOException {
        super.setup();
        super.setupTestData(true);
        dbWrapper.updateRestrictLogin("commTrack", true);
        loginPage = PageObjectFactory.getLoginPage(testWebDriver, baseUrlGlobal);
    }

    @AfterMethod(groups = { "webservice", "webserviceSmoke" })
    public void tearDown() throws SQLException {
        dbWrapper.deleteData();
        dbWrapper.closeConnection();

    }

    @Test(groups = { "webservice" }, dataProvider = "Data-Provider-Function-Positive")
    public void shouldNotShowVirtualFacilityOnManageUserScreen(String[] credentials) throws SQLException {
        dbWrapper.updateFieldValue("facilities", "virtualFacility", ACTIVE_STATUS, "code",
                DEFAULT_PARENT_FACILITY_CODE);
        String parentFacilityId = dbWrapper.getAttributeFromTable("facilities", "id", "code",
                DEFAULT_PARENT_FACILITY_CODE);
        dbWrapper.updateFieldValue("facilities", "parentFacilityId", parentFacilityId, "code",
                DEFAULT_PARENT_FACILITY_CODE);

        HomePage homePage = loginPage.loginAs(credentials[0], credentials[1]);
        UserPage userPage = homePage.navigateToUser();
        userPage.enterUserDetails("storeInCharge", userEmail, "Fatim", "Doe");
        userPage.clickViewHere();
        userPage.enterUserHomeFacility(DEFAULT_PARENT_FACILITY_CODE);
        assertTrue("No match found link should show up", userPage.isNoFacilityResultMessageDisplayed());
        homePage.logout(baseUrlGlobal);

        HttpClient client = new HttpClient();
        client.createContext();
        ResponseEntity responseEntity = client.SendJSON("",
                format("http://localhost:9091/rest-api/facilities/%s", "F10"), "GET", commTrackUser, "Admin123");
        String response = responseEntity.getResponse();
        assertTrue("Response entity : " + response, response.contains("\"code\":\"F10\""));
        assertTrue("Response entity : " + response, response.contains("\"name\":\"Village Dispensary\""));
        assertTrue("Response entity : " + response, response.contains("\"facilityType\":\"Lvl3 Hospital\""));
        assertTrue("Response entity : " + response, response.contains("\"virtualFacility\":true"));
        assertFalse("Response entity : " + response, response.contains("\"parentFacility\":" + parentFacilityId));
    }

    @Test(groups = { "webservice" }, dataProvider = "Data-Provider-Function-Positive")
    public void shouldVerifyFacilityUpload(String[] credentials) throws FileNotFoundException, SQLException {
        HomePage homePage = loginPage.loginAs(credentials[0], credentials[1]);
        UploadPage uploadPage = homePage.navigateUploads();
        uploadPage.uploadGeographicZone("QA_Geographic_Data_WebService.csv");
        uploadPage.verifySuccessMessageOnUploadScreen();
        uploadPage.uploadFacilities("QA_facilities_WebService.csv");
        uploadPage.verifySuccessMessageOnUploadScreen();
        assertEquals(FALSE_FLAG,
                dbWrapper.getAttributeFromTable("facilities", "virtualFacility", "code", "facilityf10"));
        homePage.logout(baseUrlGlobal);
    }

    @Test(groups = { "webservice" }, dataProvider = "Data-Provider-Function-Positive")
    public void shouldManageFacility(String[] credentials) throws IOException, SQLException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        String agentCode = "ABC";

        agentJson.setAgentCode(agentCode);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);
        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        HomePage homePage = loginPage.loginAs(credentials[0], credentials[1]);
        FacilityPage facilityPage = homePage.navigateManageFacility();
        facilityPage.searchFacility(agentCode);
        facilityPage.clickFirstFacilityList();
        facilityPage.disableFacility(agentCode, DEFAULT_AGENT_NAME);

        facilityPage.verifyDisabledFacility(agentCode, DEFAULT_AGENT_NAME);
        HomePage homePageRestore = facilityPage.enableFacility();
        assertEquals(facilityPage.getEnabledFacilityText(), "Yes");
        FacilityPage facilityPageRestore = homePageRestore.navigateManageFacility();
        facilityPageRestore.searchFacility(agentCode);
        facilityPageRestore.clickFirstFacilityList();
        facilityPage.saveFacility();
        facilityPage.verifyMessageOnFacilityScreen(DEFAULT_AGENT_NAME, "updated");
        assertEquals(TRUE_FLAG,
                dbWrapper.getAttributeFromTable("facilities", "virtualFacility", "code", agentCode));
        homePage.logout(baseUrlGlobal);
    }

    @Test(groups = { "webserviceSmoke" })
    public void testChwFeedWithValidParentFacilityCode() throws IOException, SQLException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"success\":\"CHW created successfully\"}"));

        assertEquals(dbWrapper.getRequisitionGroupId(DEFAULT_PARENT_FACILITY_CODE),
                dbWrapper.getRequisitionGroupId(DEFAULT_AGENT_CODE));
        List<Integer> listOfProgramsSupportedByParentFacility = dbWrapper
                .getAllProgramsOfFacility(DEFAULT_PARENT_FACILITY_CODE);
        List<Integer> listOfProgramsSupportedByVirtualFacility = dbWrapper
                .getAllProgramsOfFacility(DEFAULT_AGENT_CODE);
        Set<Integer> setOfProgramsSupportedByParentFacility = new HashSet<>();
        setOfProgramsSupportedByParentFacility.addAll(listOfProgramsSupportedByParentFacility);
        Set<Integer> setOfProgramsSupportedByVirtualFacility = new HashSet<>();
        setOfProgramsSupportedByVirtualFacility.addAll(listOfProgramsSupportedByVirtualFacility);
        assertTrue(setOfProgramsSupportedByParentFacility.equals(setOfProgramsSupportedByVirtualFacility));
        assertEquals(listOfProgramsSupportedByParentFacility.size(),
                listOfProgramsSupportedByVirtualFacility.size());
        for (Integer programId : listOfProgramsSupportedByParentFacility) {
            assertEquals(
                    dbWrapper.getProgramFieldForProgramIdAndFacilityCode(programId, DEFAULT_PARENT_FACILITY_CODE,
                            "active"),
                    dbWrapper.getProgramFieldForProgramIdAndFacilityCode(programId, DEFAULT_AGENT_CODE, "active"));
            assertEquals(
                    dbWrapper.getProgramStartDateForProgramIdAndFacilityCode(programId,
                            DEFAULT_PARENT_FACILITY_CODE),
                    dbWrapper.getProgramStartDateForProgramIdAndFacilityCode(programId, DEFAULT_AGENT_CODE));
        }
    }

    @Test(groups = { "webservice" })
    public void testUpdateChwFeedForEnableScenarios() throws IOException, SQLException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");

        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"success\":\"CHW created successfully\"}"));

        agentJson.setActive("false");
        ResponseEntity responseEntityUpdated = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");

        assertTrue("Showing response as : " + responseEntityUpdated.getResponse(),
                responseEntityUpdated.getResponse().contains("{\"success\":\"CHW updated successfully\"}"));
        dbWrapper.updateFieldValue("facilities", "enabled", "false", "code", DEFAULT_AGENT_CODE);

        ResponseEntity responseEntityEnabledFalse = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");

        assertTrue("Showing response as : " + responseEntityEnabledFalse.getResponse(), responseEntityEnabledFalse
                .getResponse().contains("{\"error\":\"CHW cannot be updated as it has been deleted\"}"));

    }

    @Test(groups = { "webservice" })
    public void testChwFeedCreateWithInvalidDataLength() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber("0099887766759785759859757757887");
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"error\":\"Incorrect data length\"}"));
    }

    @Test(groups = { "webservice" })
    public void testChwFeedUpdateWithInvalidDataLength() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber("0099887");
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        agentJson.setPhoneNumber("0099887766759785759859757757887");

        ResponseEntity responseEntityUpdated = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");

        assertTrue("Showing response as : " + responseEntityUpdated.getResponse(),
                responseEntityUpdated.getResponse().contains("{\"error\":\"Incorrect data length\"}"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateStatusOfAgentCode() throws IOException, SQLException {
        String AGENT_CODE = "ABCD";
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"success\":\"CHW created successfully\"}"));

        agentJson.setActive("false");

        ResponseEntity responseEntityUpdated = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntityUpdated.getResponse(),
                responseEntityUpdated.getResponse().contains("{\"success\":\"CHW updated successfully\"}"));

        assertEquals(FALSE_FLAG, dbWrapper.getAttributeFromTable("facilities", "active", "code", AGENT_CODE));
    }

    @Test(groups = { "webservice" })
    public void testVerifyFieldsAfterChangeInParentFacilityCode() throws IOException, SQLException {
        String typeId = "typeId";
        String geographicZoneId = "geographicZoneId";
        String parentFacilityId = "parentFacilityId";
        String agentCode = "ABCDE";
        String firstParentFacility = DEFAULT_PARENT_FACILITY_CODE;
        String updateParentFacility = "F11";
        String id = "id";

        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(agentCode);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(firstParentFacility);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"success\":\"CHW created successfully\"}"));

        assertEquals(dbWrapper.getAttributeFromTable("facilities", typeId, "code", firstParentFacility),
                dbWrapper.getAttributeFromTable("facilities", typeId, "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", geographicZoneId, "code", firstParentFacility),
                dbWrapper.getAttributeFromTable("facilities", geographicZoneId, "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", id, "code", firstParentFacility),
                dbWrapper.getAttributeFromTable("facilities", parentFacilityId, "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", "name", "code", agentCode), DEFAULT_AGENT_NAME);
        assertNotEquals(dbWrapper.getAttributeFromTable("facilities", "id", "code", agentCode),
                dbWrapper.getAttributeFromTable("facilities", "id", "code", firstParentFacility));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", "code", "code", agentCode), agentCode);
        assertNull(dbWrapper.getAttributeFromTable("facilities", "description", "code", agentCode));
        assertNull(dbWrapper.getAttributeFromTable("facilities", "gln", "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", "mainPhone", "code", agentCode), PHONE_NUMBER);
        assertNull(dbWrapper.getAttributeFromTable("facilities", "fax", "code", agentCode));
        assertNull(dbWrapper.getAttributeFromTable("facilities", "address1", "code", agentCode));
        assertNull(dbWrapper.getAttributeFromTable("facilities", "address2", "code", agentCode));
        assertNull(dbWrapper.getAttributeFromTable("facilities", "catchmentPopulation", "code", agentCode));
        assertNull(dbWrapper.getAttributeFromTable("facilities", "operatedById", "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", "active", "code", agentCode), "t");
        assertEquals(dbWrapper.getAttributeFromTable("facilities", "enabled", "code", agentCode), TRUE_FLAG);
        assertEquals(dbWrapper.getAttributeFromTable("facilities", "virtualFacility", "code", agentCode),
                TRUE_FLAG);
        assertEquals(dbWrapper.getRequisitionGroupId(firstParentFacility),
                dbWrapper.getRequisitionGroupId(agentCode));

        agentJson.setParentFacilityCode(updateParentFacility);

        ResponseEntity responseEntityUpdated = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + agentCode + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntityUpdated.getResponse(),
                responseEntityUpdated.getResponse().contains("{\"success\":\"CHW updated successfully\"}"));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", typeId, "code", updateParentFacility),
                dbWrapper.getAttributeFromTable("facilities", typeId, "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", geographicZoneId, "code", updateParentFacility),
                dbWrapper.getAttributeFromTable("facilities", geographicZoneId, "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", id, "code", updateParentFacility),
                dbWrapper.getAttributeFromTable("facilities", parentFacilityId, "code", agentCode));
        assertEquals(dbWrapper.getRequisitionGroupId(updateParentFacility),
                dbWrapper.getRequisitionGroupId(agentCode));

        List<Integer> listOfProgramsSupportedByParentFacility = dbWrapper
                .getAllProgramsOfFacility(updateParentFacility);
        List<Integer> listOfProgramsSupportedByVirtualFacility = dbWrapper.getAllProgramsOfFacility(agentCode);
        Set<Integer> setOfProgramsSupportedByParentFacility = new HashSet<>();
        setOfProgramsSupportedByParentFacility.addAll(listOfProgramsSupportedByParentFacility);
        Set<Integer> setOfProgramsSupportedByVirtualFacility = new HashSet<>();
        setOfProgramsSupportedByVirtualFacility.addAll(listOfProgramsSupportedByVirtualFacility);
        assertTrue(setOfProgramsSupportedByParentFacility.equals(setOfProgramsSupportedByVirtualFacility));
        assertEquals(listOfProgramsSupportedByParentFacility.size(),
                listOfProgramsSupportedByVirtualFacility.size());
        for (Integer programId : listOfProgramsSupportedByParentFacility) {
            assertEquals(
                    dbWrapper.getProgramFieldForProgramIdAndFacilityCode(programId, updateParentFacility, "active"),
                    dbWrapper.getProgramFieldForProgramIdAndFacilityCode(programId, agentCode, "active"));
            assertEquals(dbWrapper.getProgramStartDateForProgramIdAndFacilityCode(programId, updateParentFacility),
                    dbWrapper.getProgramStartDateForProgramIdAndFacilityCode(programId, agentCode));
        }
    }

    @Test(groups = { "webservice" })
    public void testVerifyFieldsAfterCHWCreation() throws IOException, SQLException {
        String typeId = "typeId";
        String geographicZoneId = "geographicZoneId";
        String parentFacilityId = "parentFacilityId";
        String agentCode = "commtrk";
        String agentName = DEFAULT_AGENT_NAME;
        String agentNameUpdated = "AgentJyot";
        String firstParentFacility = DEFAULT_PARENT_FACILITY_CODE;
        String firstParentFacilityUpdated = "F11";
        String code = "code";
        String name = "name";
        String id = "id";
        String mainPhone = "mainPhone";
        String phoneNumber = PHONE_NUMBER;
        String phoneNumberUpdated = "12345678";
        String active = "active";
        String virtualFacility = "virtualFacility";
        String sdp = "sdp";
        String enabled = "enabled";

        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(agentCode);
        agentJson.setAgentName(agentName);
        agentJson.setParentFacilityCode(firstParentFacility);
        agentJson.setPhoneNumber(phoneNumber);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"success\":\"CHW created successfully\"}"));

        assertEquals(dbWrapper.getAttributeFromTable("facilities", typeId, "code", firstParentFacility),
                dbWrapper.getAttributeFromTable("facilities", typeId, "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", geographicZoneId, "code", firstParentFacility),
                dbWrapper.getAttributeFromTable("facilities", geographicZoneId, "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", id, "code", firstParentFacility),
                dbWrapper.getAttributeFromTable("facilities", parentFacilityId, "code", agentCode));
        assertEquals(agentCode, dbWrapper.getAttributeFromTable("facilities", code, "code", agentCode));
        assertEquals(agentName, dbWrapper.getAttributeFromTable("facilities", name, "code", agentCode));
        assertEquals(phoneNumber, dbWrapper.getAttributeFromTable("facilities", mainPhone, "code", agentCode));

        assertEquals(TRUE_FLAG, dbWrapper.getAttributeFromTable("facilities", active, "code", agentCode));
        assertEquals(TRUE_FLAG, dbWrapper.getAttributeFromTable("facilities", virtualFacility, "code", agentCode));
        assertEquals(TRUE_FLAG, dbWrapper.getAttributeFromTable("facilities", sdp, "code", agentCode));
        assertEquals(TRUE_FLAG, dbWrapper.getAttributeFromTable("facilities", enabled, "code", agentCode));

        agentJson.setAgentName(agentNameUpdated);
        agentJson.setParentFacilityCode(firstParentFacilityUpdated);
        agentJson.setPhoneNumber(phoneNumberUpdated);
        agentJson.setActive("false");

        ResponseEntity responseEntityUpdated = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + agentCode + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntityUpdated.getResponse(),
                responseEntityUpdated.getResponse().contains("{\"success\":\"CHW updated successfully\"}"));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", typeId, "code", firstParentFacilityUpdated),
                dbWrapper.getAttributeFromTable("facilities", typeId, "code", agentCode));
        assertEquals(
                dbWrapper.getAttributeFromTable("facilities", geographicZoneId, "code", firstParentFacilityUpdated),
                dbWrapper.getAttributeFromTable("facilities", geographicZoneId, "code", agentCode));
        assertEquals(dbWrapper.getAttributeFromTable("facilities", id, "code", firstParentFacilityUpdated),
                dbWrapper.getAttributeFromTable("facilities", parentFacilityId, "code", agentCode));
        assertEquals(agentCode, dbWrapper.getAttributeFromTable("facilities", code, "code", agentCode));
        assertEquals(agentNameUpdated, dbWrapper.getAttributeFromTable("facilities", name, "code", agentCode));
        assertEquals(phoneNumberUpdated,
                dbWrapper.getAttributeFromTable("facilities", mainPhone, "code", agentCode));
        assertEquals(FALSE_FLAG, dbWrapper.getAttributeFromTable("facilities", active, "code", agentCode));
        assertEquals(TRUE_FLAG, dbWrapper.getAttributeFromTable("facilities", virtualFacility, "code", agentCode));
        assertEquals(TRUE_FLAG, dbWrapper.getAttributeFromTable("facilities", sdp, "code", agentCode));
        assertEquals(TRUE_FLAG, dbWrapper.getAttributeFromTable("facilities", enabled, "code", agentCode));
    }

    @Test(groups = { "webservice" })
    public void testCreateChwFeedWithParentFacilityCodeAsVirtualFacility() throws SQLException, IOException {
        dbWrapper.updateFieldValue("facilities", "virtualFacility", ACTIVE_STATUS, "code",
                DEFAULT_PARENT_FACILITY_CODE);
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(), responseEntity.getResponse()
                .contains("{\"error\":\"Parent facility can not be virtual facility\"}"));
    }

    @Test(groups = { "webservice" })
    public void testUpdateChwFeedWithParentFacilityCodeAsVirtualFacility() throws IOException, SQLException {
        String facilityCode = DEFAULT_PARENT_FACILITY_CODE;

        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(facilityCode);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        dbWrapper.updateFieldValue("facilities", "virtualFacility", ACTIVE_STATUS, "code",
                DEFAULT_PARENT_FACILITY_CODE);

        ResponseEntity responseEntityUpdated = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntityUpdated.getResponse(), responseEntityUpdated
                .getResponse().contains("{\"error\":\"Parent facility can not be virtual facility\"}"));
    }

    @Test(groups = { "webservice" })
    public void testChwFeedWithAgentCodeAlreadyRegistered() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"error\":\"Agent already registered\"}"));
    }

    @Test(groups = { "webservice" })
    public void testUpdateShouldVerifyAgentIsNotAVirtualFacility() throws IOException {
        String Agent_code = "F11";
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + Agent_code + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"error\":\"Agent is not a virtual facility\"}"));
    }

    @Test(groups = { "webservice" })
    public void testCreateChwFeedWithInvalidParentFacilityCode() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode("A10");
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"error\":\"Invalid Facility code\"}"));
    }

    @Test(groups = { "webservice" })
    public void testUpdateChwFeedWithInvalidParentFacilityCode() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        agentJson.setParentFacilityCode("A10");
        ResponseEntity responseEntityUpdated = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntityUpdated.getResponse(),
                responseEntityUpdated.getResponse().contains("{\"error\":\"Invalid Facility code\"}"));
    }

    @Test(groups = { "webservice" })
    public void testMalformedJson() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);
        String modifiedJson = getJsonStringFor(agentJson).replace(':', ';');

        ResponseEntity responseEntityUpdated = client.SendJSON(modifiedJson,
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");

        assertEquals(responseEntityUpdated.getStatus(), SC_BAD_REQUEST);

    }

    @Test(groups = { "webservice" })
    public void testBlankJson() {
        HttpClient client = new HttpClient();
        client.createContext();
        ResponseEntity responseEntity = client.SendJSON("{}", CREATE_URL, POST, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testCreateMissingMandatoryFieldsWhenFieldIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);
        String modifiedString = getJsonStringFor(agentJson).replaceFirst("\"agentName\":\"Agent A1\",", " ");

        ResponseEntity responseEntity = client.SendJSON(modifiedString, CREATE_URL, POST, commTrackUser,
                "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse() + " modifiedString : " + modifiedString,
                responseEntity.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateMissingMandatoryFieldsWhenFieldIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");
        String modifiedString = getJsonStringFor(agentJson).replaceFirst("\"agentName\":\"Agent A1\",", " ");

        ResponseEntity responseEntityUpdated = client.SendJSON(modifiedString,
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");

        assertTrue(
                "Showing response as : " + responseEntityUpdated.getResponse() + " modifiedString : "
                        + modifiedString,
                responseEntityUpdated.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testCreateMissingMandatoryFieldValueWhenFieldIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);
        String modifiedString = getJsonStringFor(agentJson).replaceFirst("\"agentName\":\"Agent A1\",", " ");

        ResponseEntity responseEntity = client.SendJSON(modifiedString, CREATE_URL, POST, commTrackUser,
                "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse() + " modifiedString : " + modifiedString,
                responseEntity.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateMissingMandatoryFieldValueWhenFieldIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        String modifiedString = getJsonStringFor(agentJson).replaceFirst("\"agentName\":\"Agent A1\",", " ");

        ResponseEntity responseEntityUpdated = client.SendJSON(modifiedString,
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");

        assertTrue(
                "Showing response as : " + responseEntityUpdated.getResponse() + " modifiedString : "
                        + modifiedString,
                responseEntityUpdated.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testCreateMissingMandatoryFieldsWhenActiveFieldIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);
        String modifiedString = getJsonStringFor(agentJson).replaceFirst(", \"active\":\"true\"", " ");

        ResponseEntity responseEntity = client.SendJSON(modifiedString, CREATE_URL, POST, commTrackUser,
                "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse() + " modifiedString : " + modifiedString,
                responseEntity.getResponse().contains("{\"success\":\"CHW created successfully\"}"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateAgentCodeNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue(
                "Showing response as : " + responseEntity.getResponse() + " modifiedString : "
                        + getJsonStringFor(agentJson),
                responseEntity.getResponse().contains("{\"error\":\"Invalid agent code\"}"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateMissingMandatoryFieldsWhenActiveFieldIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        String modifiedString = getJsonStringFor(agentJson).replaceFirst(",\"active\":\"true\"", " ");

        ResponseEntity responseEntity = client.SendJSON(modifiedString,
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse() + " modifiedString : " + modifiedString,
                responseEntity.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testCreateMissingMandatoryFieldsWhenFieldValueIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);
        String modifiedString = getJsonStringFor(agentJson).replaceFirst(DEFAULT_AGENT_NAME, "");

        ResponseEntity responseEntity = client.SendJSON(modifiedString, CREATE_URL, POST, commTrackUser,
                "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse() + " modifiedString : " + modifiedString,
                responseEntity.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateMissingMandatoryFieldsWhenFieldValueIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        String modifiedString = getJsonStringFor(agentJson).replaceFirst(DEFAULT_AGENT_NAME, "");

        ResponseEntity responseEntityUpdated = client.SendJSON(modifiedString,
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");

        assertTrue(
                "Showing response as : " + responseEntityUpdated.getResponse() + " modifiedString : "
                        + modifiedString,
                responseEntityUpdated.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testCreateMissingMandatoryFieldsWhenActiveFieldValueIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);
        String modifiedString = getJsonStringFor(agentJson).replaceFirst(ACTIVE_STATUS, "");

        ResponseEntity responseEntity = client.SendJSON(modifiedString, CREATE_URL, POST, commTrackUser,
                "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse() + " modifiedString : " + modifiedString,
                responseEntity.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateMissingMandatoryFieldsWhenActiveFieldValueIsNotPresent() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        String modifiedString = getJsonStringFor(agentJson).replaceFirst(ACTIVE_STATUS, "");

        ResponseEntity responseEntity = client.SendJSON(modifiedString,
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse() + " modifiedString : " + modifiedString,
                responseEntity.getResponse().contains("{\"error\":\"Missing mandatory fields\"}"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateMissingMandatoryFieldsWhenActiveFieldValueIsNotCorrect() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        String modifiedString = getJsonStringFor(agentJson).replaceFirst(ACTIVE_STATUS, " ");

        ResponseEntity responseEntity = client.SendJSON(modifiedString,
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse() + " modifiedString : " + modifiedString,
                responseEntity.getResponse().contains("Active should be True/False"));

    }

    @Test(groups = { "webservice" })
    public void testUpdatedSuccessfully() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, commTrackUser, "Admin123");

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"success\":\"CHW updated successfully\"}"));

    }

    @Test(groups = { "webservice" })
    public void testUnrecognizedField() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);
        String modifiedString = getJsonStringFor(agentJson).replaceFirst("phoneNumber", "phonenumber");

        ResponseEntity responseEntity = client.SendJSON(modifiedString, CREATE_URL, POST, commTrackUser,
                "Admin123");

        assertEquals(responseEntity.getStatus(), SC_BAD_REQUEST);
    }

    @Test(groups = { "webservice" })
    public void testCaseSensitiveCheckForCreateCHW() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode("casesensitive");
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"success\":\"CHW created successfully\"}"));

        agentJson.setAgentCode("CASESENSITIVE");

        ResponseEntity responseEntityUpdated = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue(
                "Showing response as : " + responseEntityUpdated.getResponse() + " updated json : "
                        + getJsonStringFor(agentJson),
                responseEntityUpdated.getResponse().contains("{\"error\":\"Agent already registered\"}"));

    }

    @Test(groups = { "webservice" })
    public void testCaseSensitiveCheckForUpdateCHW() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        String agent_code = "casesensitive";
        agentJson.setAgentCode(agent_code);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("{\"success\":\"CHW created successfully\"}"));

        String agent_code_updated = "CASESENSITIVE";
        agentJson.setAgentCode(agent_code_updated);

        ResponseEntity responseEntityUpdated = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + agent_code_updated + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue(
                "Showing response as : " + responseEntityUpdated.getResponse() + " updated json : "
                        + getJsonStringFor(agentJson),
                responseEntityUpdated.getResponse().contains("{\"success\":\"CHW updated successfully\"}"));

    }

    @Test(groups = { "webservice" })
    public void testInvalidActiveFieldOption() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);
        String modifiedString = getJsonStringFor(agentJson).replaceFirst(ACTIVE_STATUS, "truefalse");

        ResponseEntity responseEntity = client.SendJSON(modifiedString,
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse() + " modifiedString : " + modifiedString,
                responseEntity.getResponse().contains("Active should be True/False"));

    }

    @Test(groups = { "webservice" })
    public void testCreateInvalidAuthenticationToken() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST,
                commTrackUser, "Testing");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("Authentication Failed"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateInvalidAuthenticationToken() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, commTrackUser, "Testing");
        assertEquals(responseEntity.getStatus(), SC_UNAUTHORIZED);
    }

    @Test(groups = { "webservice" })
    public void testCreateInvalidUserName() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentCode(DEFAULT_AGENT_CODE);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson), CREATE_URL, POST, "Testing",
                "Admin123");
        assertTrue("Showing response as : " + responseEntity.getResponse(),
                responseEntity.getResponse().contains("Authentication Failed"));

    }

    @Test(groups = { "webservice" })
    public void testUpdateInvalidUserName() throws IOException {
        HttpClient client = new HttpClient();
        client.createContext();
        Agent agentJson = readObjectFromFile(FULL_JSON_TXT_FILE_NAME, Agent.class);
        agentJson.setAgentName(DEFAULT_AGENT_NAME);
        agentJson.setParentFacilityCode(DEFAULT_PARENT_FACILITY_CODE);
        agentJson.setPhoneNumber(PHONE_NUMBER);
        agentJson.setActive(ACTIVE_STATUS);

        ResponseEntity responseEntity = client.SendJSON(getJsonStringFor(agentJson),
                UPDATE_URL + DEFAULT_AGENT_CODE + JSON_EXTENSION, PUT, "Testing", "Admin123");
        assertEquals(responseEntity.getStatus(), SC_UNAUTHORIZED);
    }

    @DataProvider(name = "Data-Provider-Function-Positive")
    public Object[][] parameterIntTestProviderPositive() {
        return new Object[][] { { new String[] { "Admin123", "Admin123" } } };
    }
}