def test_POST_nodes_populate(self):
        """
		Test that populate options creates the valid number of readings data
		"""
        populate_number = 3
        site = SiteSeeder.seed_empty_site()
        args = {
            'site_id': site.id,
            'latitude': 13.2,
            'longitude': 23.2,
            'populate': populate_number
        }
        node = NodeSeeder.seed_node('ricefield', **args)

        url = UrlHelper.get_url(flapp, 'nodes')
        r = requests.get(url)
        api_response = ApiResponseHelper.assert_api_response(r)
        assert api_response.ok
        nodes = map(lambda n: n.json(), Node.query.all())
        # get readings?sensor_id=xxxx and check whether the number of the value of readings is equal to 3
        for n in nodes:
            for s in n['sensors']:
                url = UrlHelper.get_url(flapp, 'readings', sensor_id=s['id'])
                response = requests.get(url)
                assert response.ok
                api_response = ApiResponseHelper.assert_api_response(response)
                assert api_response.ok
                assert len(api_response.objects) == populate_number
	def test_GET_existing_site_by_id(self):
	 	site = SiteSeeder.seed_empty_site()
	 	url = UrlHelper.get_url(flapp, 'site', site.id)
	 	response = requests.get(url)
	 	assert response.ok
	 	api_response = ApiResponseHelper.assert_api_response(response)
	 	assert api_response.first() == site.json()
 def test_GET_existing_site_by_id(self):
     site = SiteSeeder.seed_empty_site()
     url = UrlHelper.get_url(flapp, 'site', site.id)
     response = requests.get(url)
     assert response.ok
     api_response = ApiResponseHelper.assert_api_response(response)
     assert api_response.first() == site.json()
	def test_DELETE_site(self):
		site = SiteSeeder.seed_empty_site()
		url = UrlHelper.get_url(flapp, 'site', site.id)
		response = requests.delete(url)
		assert response.ok
	 	response = requests.get(url)
	 	assert response.ok
	 	api_response = ApiResponseHelper.assert_api_response(response, expect_success = False)
 def test_POST_empty_site(self):
     url = UrlHelper.get_url(flapp, 'site')
     data = {'alias': 'Kamogawa_east'}
     response = requests.post(url, data=data)
     assert response.ok
     api_response = ApiResponseHelper.assert_api_response(response)
     print api_response.objects
     assert api_response.first()['alias'] == 'Kamogawa_east'
	def test_POST_empty_site(self):
	 	url = UrlHelper.get_url(flapp, 'site')
		data = {'alias':'Kamogawa_east'}
		response = requests.post(url, data = data)
		assert response.ok
		api_response = ApiResponseHelper.assert_api_response(response)
		print api_response.objects
		assert api_response.first()['alias'] == 'Kamogawa_east'
Example #7
0
	def test_GET_nonexisting_reading_by_id_failure(self):
		"""
		GET /reading/<int>
		"""
		url = UrlHelper.get_url(flapp, 'reading', 191230)
		response = requests.get(url)
		assert response.ok
		ApiResponseHelper.assert_api_response(response, expect_success = False)
	def test_DELETE_node_by_id(self):
		node = NodeSeeder.seed_node('empty')
	 	url = UrlHelper.get_url(flapp, 'node', node.id)
	 	response = requests.delete(url)
	 	assert response.ok
		response = requests.get(url)
	 	assert response.ok
	 	ApiResponseHelper.assert_api_response(response, expect_success = False)
    def test_GET_nodes_HTTP_response_status(self):
        """
		Tests that GET /node/all gives a valid HTTP 200 response
		"""
        NodeSeeder.seed_node('ricefield')
        url = UrlHelper.get_url(flapp, 'nodes')
        response = requests.get(url)
        assert response.ok
 def test_DELETE_node_by_id(self):
     node = NodeSeeder.seed_node('empty')
     url = UrlHelper.get_url(flapp, 'node', node.id)
     response = requests.delete(url)
     assert response.ok
     response = requests.get(url)
     assert response.ok
     ApiResponseHelper.assert_api_response(response, expect_success=False)
	def test_GET_nodes_HTTP_response_status(self):
		"""
		Tests that GET /node/all gives a valid HTTP 200 response
		"""
		NodeSeeder.seed_node('ricefield')
		url = UrlHelper.get_url(flapp, 'nodes')
		response = requests.get(url)
		assert response.ok
 def test_DELETE_site(self):
     site = SiteSeeder.seed_empty_site()
     url = UrlHelper.get_url(flapp, 'site', site.id)
     response = requests.delete(url)
     assert response.ok
     response = requests.get(url)
     assert response.ok
     api_response = ApiResponseHelper.assert_api_response(
         response, expect_success=False)
	def test_POST_create_node_with_existing_site(self):
		site = SiteSeeder.seed_empty_site()
		url = UrlHelper.get_url(flapp, 'node')
		data = {'alias':'mynode', 'site_id': site.id, 'latitude' : 13.2, 'longitude': 23.2}
		response = requests.post(url, data = data)
		assert response.ok
		api_response = ApiResponseHelper.assert_api_response(response)
		node = Node.query.first().json()
		assert node == api_response.first()
Example #14
0
	def test_GET_reading_by_nodeid_but_no_sensoralias_failure(self):
		"""
		GET /reading?node_id=<int>
		This call should return an API error as specifying node_id but no sensor_alias is insuficcient to complete the query
		"""
		node = NodeSeeder.seed_ricefield_node(n_readings = 0)
		url = UrlHelper.get_url(flapp, 'readings', **{'node_id' : node.id})
		response = requests.get(url)
		assert response.ok
		ApiResponseHelper.assert_api_response(response, expect_success = False)
Example #15
0
	def test_correct_post_reading(self):
		assert len(Reading.query.all()) == 0
		node = NodeSeeder.seed_ricefield_node(n_readings = 0)
		sensor = node.sensors[0]
		timestamp_str = datetime.now().strftime(DATETIME_FORMATS[0])
		url = UrlHelper.get_url(flapp, 'reading')
		print url
		response = requests.post(url, data = {'sensor_id': sensor.id, 'value': 42, 'timestamp': timestamp_str})
		assert response.ok
		api_response = ApiResponseHelper.assert_api_response(response)
		assert len(Reading.query.all()) == 1
 def test_POST_create_node_with_nonexisting_site(self):
     url = UrlHelper.get_url(flapp, 'node')
     data = {
         'alias': 'mynode',
         'site_id': 1111111111,
         'latitude': 13.2,
         'longitude': 23.2
     }
     response = requests.post(url, data=data)
     assert response.ok
     ApiResponseHelper.assert_api_response(response, expect_success=False)
	def test_GET_nodes_ApiResponse_status(self):
		"""
		Test that GET /node/all gives a JSON response that has no errors in it, and that an ApiResponse object can be instantiated from the response body.
		"""
		for i in range(5): NodeSeeder.seed_ricefield_node(n_readings = 3)
		url = UrlHelper.get_url(flapp, 'node', 'all')
		r = requests.get(url)
		api_response = ApiResponseHelper.assert_api_response(r)
		assert api_response.ok
		nodes = map(lambda n: n.json(), Node.query.all())
		assert sorted(nodes) == sorted(api_response.objects)
    def test_GET_existing_node_by_id(self):
        """
		GET /node/1
		This call should return the node with id=1
		"""
        node = NodeSeeder.seed_node('empty')
        url = UrlHelper.get_url(flapp, 'node', node.id)
        response = requests.get(url)
        assert response.ok
        api_response = ApiResponseHelper.assert_api_response(response)
        assert api_response.first() == node.json()
Example #19
0
	def test_GET_readings_by_sensorid_with_nonexisting_sensor_response_empty(self):
		"""
		GET /reading?sensor_id=<int>
		This call should return no readings as sensor 100 does not exist
		"""
		NodeSeeder.seed_ricefield_node(n_readings = 3)
		url = UrlHelper.get_url(flapp, 'readings', **{'sensor_id' : 100})
		response = requests.get(url)
		assert response.ok
		api_response = ApiResponseHelper.assert_api_response(response)
		assert api_response.first() == None
Example #20
0
	def test_GET_reading_by_sensoralias_but_no_nodeid_failure(self):
		"""
		GET /reading?sensor_alias=<str>
		This call should return an API error as specifying sensor_alias but no node_id is insufficient to complete the query
		"""
		node = NodeSeeder.seed_ricefield_node(n_readings = 0)
		sensor = node.sensors[0]
		url = UrlHelper.get_url(flapp, 'readings', **{'sensor_alias' : sensor.alias})
		response = requests.get(url)
		assert response.ok
		ApiResponseHelper.assert_api_response(response, expect_success = False)
	def test_GET_existing_node_by_id(self):
		"""
		GET /node/1
		This call should return the node with id=1
		"""
	 	node = NodeSeeder.seed_node('empty')
	 	url = UrlHelper.get_url(flapp, 'node', node.id)
	 	response = requests.get(url)
	 	assert response.ok
	 	api_response = ApiResponseHelper.assert_api_response(response)
	 	assert api_response.first() == node.json()
Example #22
0
	def test_GET_existing_reading_by_id_success(self):
		"""
		GET /reading/<int>
		"""
		node = NodeSeeder.seed_ricefield_node(n_readings = 0)
		sensor = node.sensors[0]
		reading = Reading.create(sensor = sensor, value = 17)
		url = UrlHelper.get_url(flapp, 'reading', 1)
		response = requests.get(url)
		assert response.ok
		api_response = ApiResponseHelper.assert_api_response(response)
		assert api_response.first() == reading.json()
Example #23
0
	def test_post_reading_timestamp_integrity(self):
		"""
		Tests that timestamps are stored with the accuracy with which they were provided
		"""
		node = NodeSeeder.seed_ricefield_node(n_readings = 0)
		sensor = node.sensors[0]
		for timestamp_format in DATETIME_FORMATS:
			timestamp = datetime.now()
			timestamp_str = timestamp.strftime(timestamp_format)
			post_url = UrlHelper.get_url(flapp, 'reading')
			### POST reading with timestamp to API
			post_response = requests.post(post_url, data = {'sensor_id': sensor.id, 'value': 42, 'timestamp': timestamp_str})
			post_response = ApiResponseHelper.assert_api_response(post_response)
			reading_id = post_response.objects[0]['id']
			### GET that same reading and check that the timestamp is correct
			get_url = UrlHelper.get_url(flapp, 'reading', reading_id)
			get_response = requests.get(get_url)
			get_response = ApiResponseHelper.assert_api_response(get_response)
			received_timestamp_str = get_response.objects[0]['timestamp']
			received_timestamp = DatetimeHelper.convert_timestamp_to_datetime(received_timestamp_str)
			assert datetime.strptime(timestamp_str, timestamp_format) == received_timestamp
Example #24
0
	def test_GET_reading_by_sensorid_with_existing_sensor_success(self):
		"""
		GET /reading?sensor_id=<int>
		This call should return all the readings belonging to the sensor (in this case three readings)
		"""
		node = NodeSeeder.seed_ricefield_node(n_readings = 3)
		sensor = node.sensors[0]
		url = UrlHelper.get_url(flapp, 'readings', **{'sensor_id' : sensor.id})
		response = requests.get(url)
		assert response.ok
		api_response = ApiResponseHelper.assert_api_response(response)
		assert sorted(map(lambda x: x.json(), sensor.readings)) == sorted(api_response.objects)
    def test_GET_nodes_ApiResponse_status(self):
        """
		Test that GET /node/all gives a JSON response that has no errors in it, and that an ApiResponse object can be instantiated from the response body.
		"""
        for i in range(5):
            NodeSeeder.seed_ricefield_node(n_readings=3)
        url = UrlHelper.get_url(flapp, 'node', 'all')
        r = requests.get(url)
        api_response = ApiResponseHelper.assert_api_response(r)
        assert api_response.ok
        nodes = map(lambda n: n.json(), Node.query.all())
        assert sorted(nodes) == sorted(api_response.objects)
Example #26
0
	def test_GET_readings_by_nodeid_and_sensoralias_success(self):
		"""
		GET /reading?node_id=<int>&sensor_alias=<str>
		This call should return all readings belonging to the sensor in the specified node, in this case two readings
		"""
		node = NodeSeeder.seed_ricefield_node(n_readings = 3)
		sensor = node.sensors[0]
		url = UrlHelper.get_url(flapp, 'readings', **{'node_id' : node.id, 'sensor_alias' : sensor.alias})
		response = requests.get(url)
		assert response.ok
		api_response = ApiResponseHelper.assert_api_response(response)
		assert sorted(map(lambda x: x.json(), sensor.readings)) == sorted(api_response.objects)
Example #27
0
	def test_GET_reading_by_sensor_id_with_until_date_filtering_success(self):
		"""
		GET /reading?sensor_id=<int>&from=2014-1-1&until=2014-2-1
		"""
		node = NodeSeeder.seed_ricefield_node(n_readings = 0)
		sensor = node.sensors[0]
		for day in range(20): Reading.create(sensor = sensor, value = 17, timestamp = datetime(2014, 12, 1) + timedelta(days=day))
		url = UrlHelper.get_url(flapp, 'readings', **{'sensor_id' : sensor.id, 'until': '2014-12-1'})
		response = requests.get(url)
		assert response.ok
		api_response = ApiResponseHelper.assert_api_response(response)
		readings_in_interval = map(lambda r: r.json(), filter(lambda r: r.timestamp <= datetime(2014,12,1), sensor.readings))
		api_response = ApiResponseHelper.assert_api_response(response)
		assert sorted(readings_in_interval) == sorted(api_response.objects)
Example #28
0
	def test_GET_readings_by_sensor_id_with_nonsensical_time_parameters_returns_no_objects(self):
		"""
		GET /reading?node_id=<int>&sensor_alias=<str>&from=2014-12-10&until=2013-1-1
		This call should return no objects as the specified until date is before the from_date
		"""
		node = NodeSeeder.seed_ricefield_node(n_readings = 0)
		sensor = node.sensors[0]
		start_date = datetime(2014, 12, 1)
		for day in range(20): Reading.create(sensor = sensor, value = 17, timestamp = start_date + timedelta(days=day))
		url = UrlHelper.get_url(flapp, 'readings', **{'node_id' : node.id, 'sensor_alias': sensor.alias, 'from': '2014-12-2', 'until': '2013-1-1'})
		response = requests.get(url)
		assert response.ok
		api_response = ApiResponseHelper.assert_api_response(response)
		assert api_response.first() == None
	def test_POST_nodes_populate(self):
		"""
		Test that populate options creates the valid number of readings data
		"""
		populate_number = 3
		site = SiteSeeder.seed_empty_site()
		args = {'site_id': site.id, 'latitude': 13.2, 'longitude': 23.2, 'populate': populate_number}
		node = NodeSeeder.seed_node('ricefield', **args)

		url = UrlHelper.get_url(flapp, 'nodes')
		r = requests.get(url)
		api_response = ApiResponseHelper.assert_api_response(r)
		assert api_response.ok
		nodes = map(lambda n: n.json(), Node.query.all())
		# get readings?sensor_id=xxxx and check whether the number of the value of readings is equal to 3
		for n in nodes:
			for s in n['sensors']:
				url = UrlHelper.get_url(flapp, 'readings', sensor_id = s['id'])
				response = requests.get(url)
			 	assert response.ok
				api_response = ApiResponseHelper.assert_api_response(response)
				assert api_response.ok
			 	assert len(api_response.objects) ==  populate_number		
 def test_POST_create_node_with_existing_site(self):
     site = SiteSeeder.seed_empty_site()
     url = UrlHelper.get_url(flapp, 'node')
     data = {
         'alias': 'mynode',
         'site_id': site.id,
         'latitude': 13.2,
         'longitude': 23.2
     }
     response = requests.post(url, data=data)
     assert response.ok
     api_response = ApiResponseHelper.assert_api_response(response)
     node = Node.query.first().json()
     assert node == api_response.first()
Example #31
0
	def test_GET_reading_by_node_id_and_sensor_alias_with_interval_time_filtering_success(self):
		"""
		GET /reading?node_id=<int>&sensor_alias=<str>&from=2014-12-2&until=2014-12-11
		This call should return all the readings created in the interval from 2014-12-2 until 2014-12-11 for a sensor in the specified node
		"""
		node = NodeSeeder.seed_ricefield_node(n_readings = 0)
		sensor = node.sensors[0]
		start_date = datetime(2014, 12, 1)
		for day in range(20): Reading.create(sensor = sensor, value = 17, timestamp = start_date + timedelta(days=day))
		url = UrlHelper.get_url(flapp, 'readings', **{'node_id' : node.id, 'sensor_alias': sensor.alias, 'from': '2014-12-2', 'until': '2014-12-11'})
		response = requests.get(url)
		assert response.ok
		readings_in_interval = map(lambda r: r.json(), filter(lambda r: r.timestamp >= datetime(2014,12,2) and r.timestamp <= datetime(2014,12,11), sensor.readings))
		api_response = ApiResponseHelper.assert_api_response(response)
		assert sorted(readings_in_interval) == sorted(api_response.objects)
 def test_GET_nonexisting_node_by_id(self):
     url = UrlHelper.get_url(flapp, 'node', '123123123')
     response = requests.get(url)
     assert response.ok
     ApiResponseHelper.assert_api_response(response, expect_success=False)
	def test_GET_nonexisting_site_by_id(self):
	 	url = UrlHelper.get_url(flapp, 'site', 123017)
	 	response = requests.get(url)
	 	assert response.ok
	 	api_response = ApiResponseHelper.assert_api_response(response, expect_success = False)
 def test_GET_node_by_id_fails_when_node_id_is_not_int(self):
     node_id = 'NOT AN INTEGER'
     url = UrlHelper.get_url(flapp, 'node', node_id)
     response = requests.get(url)
     print response
     assert not response.ok
 def test_GET_nonexisting_site_by_id(self):
     url = UrlHelper.get_url(flapp, 'site', 123017)
     response = requests.get(url)
     assert response.ok
     api_response = ApiResponseHelper.assert_api_response(
         response, expect_success=False)
	def test_GET_node_by_id_fails_when_node_id_is_not_int(self):
		node_id = 'NOT AN INTEGER'
	 	url = UrlHelper.get_url(flapp, 'node', node_id)
	 	response = requests.get(url)
	 	print response
	 	assert not response.ok
	def test_GET_nonexisting_node_by_id(self):
		url = UrlHelper.get_url(flapp, 'node', '123123123')
		response = requests.get(url)
		assert response.ok
		ApiResponseHelper.assert_api_response(response, expect_success = False)	
	def test_POST_create_node_with_nonexisting_site(self):
		url = UrlHelper.get_url(flapp, 'node')
		data = {'alias':'mynode', 'site_id': 1111111111, 'latitude' : 13.2, 'longitude': 23.2}
		response = requests.post(url, data = data)
		assert response.ok
		ApiResponseHelper.assert_api_response(response, expect_success = False)