001    package org.hackystat.dailyprojectdata.resource.issue;
002    
003    import static org.junit.Assert.assertEquals;
004    import javax.xml.datatype.XMLGregorianCalendar;
005    import org.hackystat.dailyprojectdata.client.DailyProjectDataClient;
006    import org.hackystat.dailyprojectdata.resource.issue.jaxb.IssueDailyProjectData;
007    import org.hackystat.dailyprojectdata.resource.issue.jaxb.IssueData;
008    import org.hackystat.dailyprojectdata.test.DailyProjectDataTestHelper;
009    import org.hackystat.sensorbase.client.SensorBaseClient;
010    import org.hackystat.sensorbase.resource.sensordata.jaxb.SensorDatas;
011    import org.hackystat.utilities.tstamp.Tstamp;
012    import org.junit.Test;
013    
014    /**
015     * Test Issue REST API.
016     * @author Shaoxuan
017     *
018     */
019    public class TestIssueRestApi extends DailyProjectDataTestHelper {
020    
021      private static final String NEW = "New";
022      private static final String STARTED = "Started";
023      private static final String ACCEPTED = "Accepted";
024      private static final String FIXED = "Fixed";
025      private static final String DEFECT = "Defect";
026      private static final String TASK = "Task";
027      private static final String ENHANCEMENT = "Enhancement";
028      private static final String MEDIUM = "Medium";
029      private static final String HIGH = "High";
030      private static final String CRITICAL = "Critical";
031    
032      private static final String dataOwner = "testDataOwner@hackystat.org";
033      private static final String testUser1 = "tester1@hackystat.org";
034      private static final String testUser2 = "tester2@hackystat.org";
035      
036      private static final String defaultProject = "Default";
037      
038      private static final String[] testData1T1 = {"21", DEFECT, ACCEPTED, MEDIUM, "", testUser1, 
039          "2008-09-07T11:00:00"};
040      private static final String[] testData1T2 = {"21", ENHANCEMENT, FIXED, MEDIUM, "8.4", testUser1, 
041          "2008-09-07T11:00:00"};
042      
043      private static final String[] testData2T1 = {"23", ENHANCEMENT, ACCEPTED, MEDIUM, "", testUser1, 
044          "2009-07-20T00:24:06"};
045      private static final String[] testData2T2 = {"23", ENHANCEMENT, ACCEPTED, HIGH, "", testUser2, 
046          "2009-07-20T00:24:06"};
047      
048      private static final String[] testData3T1 = {"14", ENHANCEMENT, NEW, HIGH, "", testUser2, 
049          "2009-06-20T14:35:32"};
050      
051      private static final String[] testData4T1 = {"25", DEFECT, STARTED, CRITICAL, "8.4", testUser1, 
052          "2009-07-21T20:00:00"};
053      
054      private static final String[] testData5T1 = {"18", TASK, FIXED, HIGH, "", testUser2, 
055          "2009-07-21T18:00:00"};
056      
057      /**
058       * Constructor, prepare the test data.
059       * @throws Exception if error when making XMLGregorianCalendar timestamps.
060       */
061      @Test public void testIssueRestApi() throws Exception {
062        XMLGregorianCalendar testTime1 = Tstamp.makeTimestamp("2009-07-20T00:00:00");
063        XMLGregorianCalendar testTime2 = Tstamp.makeTimestamp("2009-07-22T00:00:00");
064        // First, create a batch of Issue sensor data.
065        final SensorDatas batchData = new SensorDatas();
066        batchData.getSensorData().add(TestIssueDataParser.makeIssueSensorData(dataOwner,
067            new String[][]{testData1T1, testData1T2}, 
068            new XMLGregorianCalendar[]{testTime1, testTime2}));
069        batchData.getSensorData().add(TestIssueDataParser.makeIssueSensorData(dataOwner,
070            new String[][]{testData2T1, testData2T2}, 
071            new XMLGregorianCalendar[]{testTime1, testTime2}));
072        batchData.getSensorData().add(TestIssueDataParser.makeIssueSensorData(dataOwner,
073            new String[][]{testData3T1}, new XMLGregorianCalendar[]{testTime1}));
074        batchData.getSensorData().add(TestIssueDataParser.makeIssueSensorData(dataOwner,
075            new String[][]{testData4T1}, new XMLGregorianCalendar[]{testTime2}));
076        batchData.getSensorData().add(TestIssueDataParser.makeIssueSensorData(dataOwner,
077            new String[][]{testData5T1}, new XMLGregorianCalendar[]{testTime2}));
078    
079        // Connect to the sensorbase and register the DailyProjectDataDevEvent user. 
080        SensorBaseClient.registerUser(getSensorBaseHostName(), dataOwner);
081        final SensorBaseClient client = 
082          new SensorBaseClient(getSensorBaseHostName(), dataOwner, dataOwner);
083        client.authenticate();
084        client.deleteSensorData(dataOwner);
085        // Send the sensor data to the SensorBase. 
086        client.putSensorDataBatch(batchData);
087        
088        // Now connect to the DPD server. 
089        final DailyProjectDataClient dpdClient = 
090          new DailyProjectDataClient(getDailyProjectDataHostName(), dataOwner, dataOwner);
091        dpdClient.authenticate(); 
092        final IssueDailyProjectData issueT1 = dpdClient.getIssue(dataOwner, defaultProject, testTime1);
093        
094        System.out.println("issue dpd for time 1");
095        for (IssueData data : issueT1.getIssueData()) {
096          System.out.println("#" + data.getId() + "," + data.getType() + "," + data.getStatus());
097        }
098          
099        assertEquals("Checking total issues for time 1.", 3, issueT1.getIssueData().size());
100        assertEquals("Checking open issues for time 1.", 3, issueT1.getOpenIssues());
101        
102        final IssueDailyProjectData issueT2 = dpdClient.getIssue(dataOwner, defaultProject, testTime2);
103        assertEquals("Checking total issues for time 2.", 5, issueT2.getIssueData().size());
104        assertEquals("Checking open issues for time 2.", 3, issueT2.getOpenIssues());
105        //assertEquals("Checking MemberData size", 1, devTime.getMemberData().size());
106        
107        final IssueDailyProjectData issueT3 = 
108          dpdClient.getIssue(dataOwner, defaultProject, testTime2, "open");
109        assertEquals("Checking open issues for time 2 with open status query.", 
110            3, issueT3.getIssueData().size());
111        assertEquals("Checking open issues count for time 2 with open status query.", 
112            3, issueT3.getOpenIssues());
113        
114        final IssueDailyProjectData issueT4 = 
115          dpdClient.getIssue(dataOwner, defaultProject, testTime2, "closed");
116        assertEquals("Checking closed issues for time 2 with closed status query.", 
117            2, issueT4.getIssueData().size());
118        assertEquals("Checking open issues for time 2 with closed status query.", 
119            0, issueT4.getOpenIssues());
120      }
121      
122    }