org.openlmis.functional.RequisitionStatusFeed.java Source code

Java tutorial

Introduction

Here is the source code for org.openlmis.functional.RequisitionStatusFeed.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.apache.commons.lang3.StringUtils;
import org.openlmis.UiUtils.HttpClient;
import org.openlmis.UiUtils.ResponseEntity;
import org.openlmis.pod.domain.OrderPOD;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import static com.thoughtworks.selenium.SeleneseTestBase.*;
import static java.lang.String.format;

public class RequisitionStatusFeed extends JsonUtility {

    public static final String FULL_JSON_POD_TXT_FILE_NAME = "ReportJsonPOD.txt";
    public static final String URL = "http://localhost:9091/feeds/requisition-status/";

    @BeforeMethod(groups = { "webservice", "webserviceSmoke" })
    public void setUp() throws InterruptedException, SQLException, IOException {
        super.setup();
        super.setupTestData(false);
        super.setupDataRequisitionApprove();
        createVirtualFacilityThroughApi("V10", "F10");
        dbWrapper.insertProcessingPeriod("current", "current period", "2013-01-30", "2016-01-30", 1, "M");
        dbWrapper.insertRoleAssignmentForSupervisoryNodeForProgramId("commTrack", "store in-charge", "N1");
        dbWrapper.insertFulfilmentRoleAssignment("commTrack", "store in-charge", "F10");
        dbWrapper.updateRestrictLogin("commTrack", true);
    }

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

    @Test(groups = { "webserviceSmoke" })
    public void testRequisitionStatusUsingCommTrackUserForExportOrderFlagFalse()
            throws IOException, SQLException, ParserConfigurationException, SAXException {
        HttpClient client = new HttpClient();
        client.createContext();
        submitRnRThroughApi("V10", "HIV", "P10", 1, 10, 1, 0, 0, 2);
        Long id = (long) dbWrapper.getMaxRnrID();

        ResponseEntity responseEntity = client.SendJSON("", URL + "recent", "GET", "", "");
        assertEquals(200, responseEntity.getStatus());
        assertEquals(StringUtils.countMatches(responseEntity.getResponse(), ":"), 41);
        List<String> feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkRequisitionStatusOnFeed("INITIATED", feedJSONList.get(0), id);
        checkRequisitionStatusOnFeed("SUBMITTED", feedJSONList.get(1), id);
        checkRequisitionStatusOnFeed("AUTHORIZED", feedJSONList.get(2), id);

        dbWrapper.setExportOrdersFlagInSupplyLinesTable(false, "F10");

        approveRequisition(id, 65);
        dbWrapper.updateRestrictLogin("commTrack", false);
        convertToOrder("commTrack", "Admin123");
        dbWrapper.updateRestrictLogin("commTrack", true);
        responseEntity = client.SendJSON("", URL + "1", "GET", "", "");
        assertEquals(200, responseEntity.getStatus());

        feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkRequisitionStatusOnFeed("APPROVED", feedJSONList.get(3), id);
        checkRequisitionStatusOnFeed("RELEASED", feedJSONList.get(4), id);

        responseEntity = client.SendJSON("", URL + "recent", "GET", "", "");
        assertEquals(200, responseEntity.getStatus());
        feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkOrderStatusOnFeed("READY_TO_PACK", feedJSONList.get(0),
                generateOrderNumberForIdAndDefaultConfiguration(id, "HIV"), id);

        dbWrapper.assignRight("store in-charge", "MANAGE_POD");

        OrderPOD OrderPODFromJson = JsonUtility.readObjectFromFile(FULL_JSON_POD_TXT_FILE_NAME, OrderPOD.class);
        OrderPODFromJson.getPodLineItems().get(0).setQuantityReceived(65);
        OrderPODFromJson.getPodLineItems().get(0).setProductCode("P10");

        client.SendJSON(getJsonStringFor(OrderPODFromJson),
                format(POD_URL, generateOrderNumberForIdAndDefaultConfiguration(id, "HIV")), "POST", "commTrack",
                "Admin123");

        responseEntity = client.SendJSON("", URL + "recent", "GET", "", "");
        assertEquals(200, responseEntity.getStatus());
        feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkOrderStatusOnFeed("RECEIVED", feedJSONList.get(1),
                generateOrderNumberForIdAndDefaultConfiguration(id, "HIV"), id);
    }

    @Test(groups = { "webservice" })
    public void testRequisitionStatusUsingCommTrackUserForExportOrderFlagTrue()
            throws IOException, SQLException, ParserConfigurationException, SAXException, InterruptedException {
        HttpClient client = new HttpClient();
        client.createContext();

        submitRnRThroughApi("V10", "HIV", "P10", 1, 10, 1, 0, 0, 2);
        Long id = (long) dbWrapper.getMaxRnrID();
        ResponseEntity responseEntity = client.SendJSON("", URL + "recent", "GET", "", "");
        assertEquals(200, responseEntity.getStatus());
        List<String> feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkRequisitionStatusOnFeed("INITIATED", feedJSONList.get(0), id);
        checkRequisitionStatusOnFeed("SUBMITTED", feedJSONList.get(1), id);
        checkRequisitionStatusOnFeed("AUTHORIZED", feedJSONList.get(2), id);

        dbWrapper.setExportOrdersFlagInSupplyLinesTable(true, "F10");
        approveRequisition(id, 65);
        dbWrapper.updateRestrictLogin("commTrack", false);
        convertToOrder("commTrack", "Admin123");
        dbWrapper.updateRestrictLogin("commTrack", true);
        responseEntity = client.SendJSON("", URL + "1", "GET", "", "");
        assertEquals(200, responseEntity.getStatus());
        feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkRequisitionStatusOnFeed("APPROVED", feedJSONList.get(3), id);
        checkRequisitionStatusOnFeed("RELEASED", feedJSONList.get(4), id);

        responseEntity = waitForOrderStatusUpdatedOrTimeOut(0);
        assertEquals(200, responseEntity.getStatus());
        feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkOrderStatusOnFeed("IN_ROUTE", feedJSONList.get(0),
                generateOrderNumberForIdAndDefaultConfiguration(id, "HIV"), id);

        responseEntity = waitForOrderStatusUpdatedOrTimeOut(1);
        assertEquals(200, responseEntity.getStatus());
        feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkOrderStatusOnFeed("TRANSFER_FAILED", feedJSONList.get(1),
                generateOrderNumberForIdAndDefaultConfiguration(id, "HIV"), id);
    }

    private String generateOrderNumberForIdAndDefaultConfiguration(Long id, String programCode) {
        return "O" + programCode + String.format("%08d", id) + "R";
    }

    @Test(groups = { "webservice" })
    public void testRequisitionStatusUsingCommTrackUserForExportOrderFlagTrueAndFtpDetailsValid()
            throws IOException, SQLException, ParserConfigurationException, SAXException, InterruptedException {
        HttpClient client = new HttpClient();
        client.createContext();

        submitRnRThroughApi("V10", "HIV", "P10", 1, 10, 1, 0, 0, 2);
        Long id = (long) dbWrapper.getMaxRnrID();
        ResponseEntity responseEntity = client.SendJSON("", URL + "recent", "GET", "", "");
        assertEquals(200, responseEntity.getStatus());
        List<String> feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkRequisitionStatusOnFeed("INITIATED", feedJSONList.get(0), id);
        checkRequisitionStatusOnFeed("SUBMITTED", feedJSONList.get(1), id);
        checkRequisitionStatusOnFeed("AUTHORIZED", feedJSONList.get(2), id);

        dbWrapper.setExportOrdersFlagInSupplyLinesTable(true, "F10");
        dbWrapper.enterValidDetailsInFacilityFtpDetailsTable("F10");
        approveRequisition(id, 65);
        dbWrapper.updateRestrictLogin("commTrack", false);
        convertToOrder("commTrack", "Admin123");
        dbWrapper.updateRestrictLogin("commTrack", true);
        responseEntity = client.SendJSON("", URL + "1", "GET", "", "");
        assertEquals(200, responseEntity.getStatus());
        feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkRequisitionStatusOnFeed("APPROVED", feedJSONList.get(3), id);
        checkRequisitionStatusOnFeed("RELEASED", feedJSONList.get(4), id);

        responseEntity = client.SendJSON("", URL + "recent", "GET", "", "");
        assertEquals(200, responseEntity.getStatus());
        feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkOrderStatusOnFeed("IN_ROUTE", feedJSONList.get(0),
                generateOrderNumberForIdAndDefaultConfiguration(id, "HIV"), id);

        responseEntity = waitForOrderStatusUpdatedOrTimeOut(1);
        assertEquals(200, responseEntity.getStatus());
        feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        checkOrderStatusOnFeed("RELEASED", feedJSONList.get(1),
                generateOrderNumberForIdAndDefaultConfiguration(id, "HIV"), id);
    }

    private void checkRequisitionStatusOnFeed(String requisitionStatus, String feedString, Long id) {
        assertTrue("feed json list : " + feedString, feedString.contains("\"requisitionId\":" + id));
        assertTrue("feed json list : " + feedString,
                feedString.contains("\"requisitionStatus\":\"" + requisitionStatus + "\""));
        assertTrue("Response entity : " + feedString, feedString.contains("\"emergency\":false"));
        assertTrue("Response entity : " + feedString, feedString.contains("\"startDate\":1359484200000"));
        assertTrue("Response entity : " + feedString, feedString.contains("\"endDate\":1454178599000"));
        assertTrue("Response entity : " + feedString, feedString.contains("\"stringStartDate\":\"30-01-2013\""));
        assertTrue("Response entity : " + feedString, feedString.contains("\"stringEndDate\":\"30-01-2016\""));
        assertFalse("Response entity : " + feedString, feedString.contains("\"orderStatus\":"));
        assertFalse("Response entity : " + feedString, feedString.contains("\"orderID\""));
    }

    private void checkOrderStatusOnFeed(String orderStatus, String feedString, String orderNumber, Long id) {
        assertTrue("feed json list : " + feedString, feedString.contains("\"requisitionId\":" + id));
        assertTrue("feed json list : " + feedString, feedString.contains("\"requisitionStatus\":\"RELEASED\""));
        assertTrue("Response entity : " + feedString, feedString.contains("\"emergency\":false"));
        assertTrue("Response entity : " + feedString, feedString.contains("\"startDate\":1359484200000"));
        assertTrue("Response entity : " + feedString, feedString.contains("\"endDate\":1454178599000"));
        assertTrue("Response entity : " + feedString, feedString.contains("\"stringStartDate\":\"30-01-2013\""));
        assertTrue("Response entity : " + feedString, feedString.contains("\"stringEndDate\":\"30-01-2016\""));
        assertTrue("Response entity : " + feedString,
                feedString.contains("\"orderStatus\":\"" + orderStatus + "\""));
        assertTrue("Response entity : " + feedString, feedString.contains("\"orderId\":\"" + orderNumber + "\""));
    }

    private ResponseEntity waitForOrderStatusUpdatedOrTimeOut(int index)
            throws ParserConfigurationException, SAXException, InterruptedException {
        HttpClient client = new HttpClient();
        client.createContext();
        ResponseEntity responseEntity;

        responseEntity = client.SendJSON("", URL + "recent", "GET", "", "");
        List<String> feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
        int time = 0;
        while (time <= 5000) {
            if (feedJSONList.size() == index + 1) {
                break;
            }
            responseEntity = client.SendJSON("", URL + "recent", "GET", "", "");
            feedJSONList = XmlUtils.getNodeValues(responseEntity.getResponse(), "content");
            time += 500;
            Thread.sleep(500);
        }
        return responseEntity;
    }
}