001    package org.hackystat.sensorbase.resource.sensordatatypes;
002    
003    import static org.junit.Assert.assertEquals;
004    import static org.junit.Assert.assertTrue;
005    
006    import org.hackystat.sensorbase.client.SensorBaseClient;
007    import org.hackystat.sensorbase.resource.sensordatatypes.jaxb.Property;
008    import org.hackystat.sensorbase.resource.sensordatatypes.jaxb.RequiredField;
009    import org.hackystat.sensorbase.resource.sensordatatypes.jaxb.RequiredFields;
010    import org.hackystat.sensorbase.resource.sensordatatypes.jaxb.SensorDataType;
011    import org.hackystat.sensorbase.resource.sensordatatypes.jaxb.SensorDataTypeRef;
012    import org.hackystat.sensorbase.resource.sensordatatypes.jaxb.SensorDataTypeIndex;
013    import org.hackystat.sensorbase.test.SensorBaseRestApiHelper;
014    import org.junit.Test;
015    
016    /**
017     * Tests the SensorBase REST API for both the SensorDataTypes and SensorDataType resources.
018     * @author Philip M. Johnson
019     */
020    public class TestSdtRestApi extends SensorBaseRestApiHelper {
021    
022      /** The test user. */
023      private String user = "TestUser@hackystat.org";
024    
025      /**
026       * Test that GET host/sensorbase/sensordatatypes returns an index containing TestSDT, and that 
027       * all SDTs in the index can be retrieved. 
028       * @throws Exception If problems occur.
029       */
030      @Test public void getSdtIndex() throws Exception {
031        SensorBaseClient client = new SensorBaseClient(getHostName(), user, user);
032        client.authenticate();
033        SensorDataTypeIndex sdtIndex = client.getSensorDataTypeIndex();
034        // Make sure that we can iterate through all of the SDTs OK. 
035        boolean foundTestSdt = false;
036        for (SensorDataTypeRef ref : sdtIndex.getSensorDataTypeRef()) {
037          if ("TestSdt".equals(ref.getName())) {
038            foundTestSdt = true;
039          }
040          // Make sure the href is OK. 
041          //client.getUri(ref.getHref());
042          client.getSensorDataType(ref);
043        }
044        assertTrue("Checking that we found the TestSdt", foundTestSdt);
045        }
046      
047      /**
048       * Test that GET host/sensorbase/sensordatatypes/TestSdt returns the TestSdt SDT.
049       * @throws Exception If problems occur.
050       */
051      @Test public void getSdt() throws Exception {
052        SensorBaseClient client = new SensorBaseClient(getHostName(), user, user);
053        client.authenticate();
054        SensorDataType sdt = client.getSensorDataType("TestSdt");
055        assertEquals("Checking name", "TestSdt", sdt.getName());
056        assertTrue("Checking description", sdt.getDescription().startsWith("SDT"));
057        RequiredField reqField = sdt.getRequiredFields().getRequiredField().get(0);
058        assertEquals("Checking required field name", "SampleField", reqField.getName());
059        assertEquals("Checking required field value", "Sample Field Value", reqField.getDescription());
060        Property property = sdt.getProperties().getProperty().get(0);
061        assertEquals("Checking property key", "SampleProperty", property.getKey());
062        assertEquals("Checking property value", "Sample Property Value", property.getValue());
063        }
064      
065      /**
066       * Test that PUT and DELETE host/sensorbase/sensordatatypes/TestSdt are OK.
067       * Note that these operations require admin authentication.
068       * @throws Exception If problems occur.
069       */
070      @Test public void putSdt() throws Exception {
071        // First, create a sample SDT. 
072        SensorDataType sdt = new SensorDataType();
073        String sdtName = "TestSdt2";
074        sdt.setName(sdtName);
075        sdt.setDescription("Sample SDT");
076        RequiredField field = new RequiredField();
077        field.setName("Required");
078        RequiredFields fields = new RequiredFields();
079        fields.getRequiredField().add(field);
080        // Now put it to the server. 
081        SensorBaseClient client = new SensorBaseClient(getHostName(), adminEmail, adminPassword);
082        client.authenticate();
083        client.putSensorDataType(sdt);
084        assertEquals("Testing sdt retrieval", sdtName, client.getSensorDataType(sdtName).getName());
085        client.deleteSensorDataType(sdtName);
086      }
087    }