/* * 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.apache.commons.lang3.StringUtils; import org.openlmis.UiUtils.HttpClient; import org.openlmis.UiUtils.ResponseEntity; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.IOException; import java.sql.SQLException; import static com.thoughtworks.selenium.SeleneseTestBase.*; import static java.lang.String.format; public class FacilityAPI extends JsonUtility { public static final String URL = "http://localhost:9091/rest-api/facilities/%s"; public static final String commTrackUser = "commTrack"; public static final String GET = "GET"; @BeforeMethod(groups = {"webservice", "webserviceSmoke"}) public void setUp() throws InterruptedException, SQLException, IOException { super.setup(); super.setupTestData(true); dbWrapper.updateRestrictLogin("commTrack", true); } @AfterMethod(groups = {"webservice", "webserviceSmoke"}) public void tearDown() throws SQLException { dbWrapper.deleteData(); dbWrapper.closeConnection(); } @Test(groups = {"webserviceSmoke"}) public void testFacilityAPI() throws SQLException { HttpClient client = new HttpClient(); client.createContext(); ResponseEntity responseEntity = client.SendJSON("", format(URL, "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("\"description\":\"IT department\"")); assertTrue("Response entity : " + response, response.contains("\"gln\":\"G7645\"")); assertTrue("Response entity : " + response, response.contains("\"mainPhone\":\"9876234981\"")); assertTrue("Response entity : " + response, response.contains("\"fax\":\"fax\"")); assertTrue("Response entity : " + response, response.contains("\"address1\":\"A\"")); assertTrue("Response entity : " + response, response.contains("\"address2\":\"B\"")); assertTrue("Response entity : " + response, response.contains("\"geographicZone\":\"Ngorongoro\"")); assertTrue("Response entity : " + response, response.contains("\"catchmentPopulation\":333")); assertTrue("Response entity : " + response, response.contains("\"latitude\":22.1")); assertTrue("Response entity : " + response, response.contains("\"longitude\":1.2")); assertTrue("Response entity : " + response, response.contains("\"altitude\":3.3")); assertTrue("Response entity : " + response, response.contains("\"operatedBy\":\"NGO\"")); assertTrue("Response entity : " + response, response.contains("\"coldStorageGrossCapacity\":9.9")); assertTrue("Response entity : " + response, response.contains("\"coldStorageNetCapacity\":6.6")); assertTrue("Response entity : " + response, response.contains("\"suppliesOthers\":true")); assertTrue("Response entity : " + response, response.contains("\"sdp\":true")); assertTrue("Response entity : " + response, response.contains("\"hasElectricity\":true")); assertTrue("Response entity : " + response, response.contains("\"online\":true")); assertTrue("Response entity : " + response, response.contains("\"hasElectronicSCC\":true")); assertTrue("Response entity : " + response, response.contains("\"hasElectronicDAR\":true")); assertTrue("Response entity : " + response, response.contains("\"active\":true")); assertTrue("Response entity : " + response, response.contains("\"goLiveDate\":1352572200000")); assertTrue("Response entity : " + response, response.contains("\"goDownDate\":-2592106200000")); assertTrue("Response entity : " + response, response.contains("\"stringGoLiveDate\":\"11-11-2012\"")); assertTrue("Response entity : " + response, response.contains("\"stringGoDownDate\":\"11-11-1887\"")); assertTrue("Response entity : " + response, response.contains("\"satellite\":true")); assertTrue("Response entity : " + response, response.contains("\"virtualFacility\":false")); assertFalse("Response entity : " + response, response.contains("\"parentFacility\"")); assertTrue("Response entity : " + response, response.contains("\"comment\":\"fc\"")); assertTrue("Response entity : " + response, response.contains("\"modifiedDate\":")); assertTrue("Response entity : " + response, response.contains("\"programsSupported\":[")); assertTrue("Response entity : " + response, response.contains("\"HIV\"")); assertTrue("Response entity : " + response, response.contains("\"ESS_MEDS\"")); assertTrue("Response entity : " + response, response.contains("\"VACCINES\"")); assertTrue("Response entity : " + response, response.contains("\"enabled\":true")); assertEquals(StringUtils.countMatches(response, ":"), 37); dbWrapper.updateFieldValue("facilities", "enabled", "false", "name", "Village Dispensary"); responseEntity = client.SendJSON("", format(URL, "F10"), GET, commTrackUser, "Admin123"); response = responseEntity.getResponse(); assertTrue("Response entity : " + response, response.contains("\"enabled\":false")); dbWrapper.deleteProgramToFacilityMapping("ESS_MEDS"); responseEntity = client.SendJSON("", format(URL, "F10"), GET, commTrackUser, "Admin123"); response = responseEntity.getResponse(); assertTrue("Response entity : " + response, response.contains("\"programsSupported\":[")); assertTrue("Response entity : " + response, response.contains("\"HIV\"")); assertTrue("Response entity : " + response, response.contains("\"VACCINES\"")); responseEntity = client.SendJSON("", format(URL, "INVALID_FACILITY_CODE"), GET, commTrackUser, "Admin123"); response = responseEntity.getResponse(); assertEquals(response, "{\"error\":\"Invalid Facility code\"}"); assertEquals(responseEntity.getStatus(), 400); } @Test(groups = {"webservice"}) public void testInvalidFacilityCode() { HttpClient client = new HttpClient(); client.createContext(); ResponseEntity responseEntity = client.SendJSON("", format(URL, "F100"), GET, commTrackUser, "Admin123"); assertEquals(responseEntity.getResponse(), "{\"error\":\"Invalid Facility code\"}"); assertEquals(responseEntity.getStatus(), 400); } @Test(groups = {"webservice"}) public void testBlankFacilityCode() { HttpClient client = new HttpClient(); client.createContext(); ResponseEntity responseEntity = client.SendJSON("", format(URL, ""), GET, commTrackUser, "Admin123"); assertEquals(responseEntity.getStatus(), 404); } @Test(groups = {"webservice"}) public void testInvalidUser() { HttpClient client = new HttpClient(); client.createContext(); ResponseEntity responseEntity = client.SendJSON("", format(URL, "F100"), GET, "ABCD", "Admin123"); assertTrue("Response:" + responseEntity.getResponse(), responseEntity.getResponse().contains("Error 401 Authentication Failed")); assertEquals(responseEntity.getStatus(), 401); } @Test(groups = {"webservice"}) public void testInvalidPassword() { HttpClient client = new HttpClient(); client.createContext(); ResponseEntity responseEntity = client.SendJSON("", format(URL, "F100"), GET, commTrackUser, "ABCD"); assertTrue("Response:" + responseEntity.getResponse(), responseEntity.getResponse().contains("Error 401 Authentication Failed")); assertEquals(responseEntity.getStatus(), 401); } @DataProvider(name = "Data-Provider-Function-Positive") public Object[][] parameterIntTestProviderPositive() { return new Object[][]{ {"User123", "HIV", new String[]{"Admin123", "Admin123"}} }; } }