def get(self): results_array = analyze_fake_event_data() if results_array is None: print('here', 30, 'error') error = Error( "The analysis did not complete correctly." "The analysis went HAM and broke everything.", 500, "https://en.wikipedia.org/wiki/HTTP_500") return {"errors": error.to_json()}, 500 else: return {"results": results_array}, 200
def post(self): errors = [] if 'usage_id' in request.form.keys(): usage_id = request.form['usage_id'] data_type = request.form['data_type'] data = request.form['data'] else: request_data = json.loads(request.data) usage_id = request_data['usage_id'] data_type = request_data['data_type'] data = request_data['data'] usage = UsageModel.find_by_id(usage_id) if usage is None: errors.append( Error( "Cannot find usage with id: {}".format(usage_id), "UsageModel.find_by_id({}) returns None".format(usage_id), 404, "https://en.wikipedia.org/wiki/HTTP_404")) if UnitEnum.has_value(data_type): data_type = UnitEnum(data_type) else: errors.append( Error( '"{}" is not a valid unit type.'.format(data_type), "UnitEnum.has_value({}) returned False".format(data_type), 400, "https://en.wikipedia.org/wiki/HTTP_400")) if len(errors) > 0: all_errors_in_json = [error.to_json() for error in errors] return {"errors": all_errors_in_json}, 422 if usage.unit != data_type: error = Error( 'The unit type of the usage with id "{}" does not match the given "{}".' .format(usage_id, data_type), "usage.unit does not equal data_type.", 422, "https://en.wikipedia.org/wiki/HTTP_422") return {"errors": error.to_json()}, 422 event = EventModel(usage_id, data, round(datetime.now().timestamp())) event.save_to_db() return event.to_json(), 201
def test_group_resource(): print( "#################### TESTING GROUP RESOURCE ####################") # GETTING ALL GROUPS print("TEST_1 --- GETTING ALL GROUPS") uri = "groups" expected_result = {"groups": []} expected_status = 200 test_get(uri, expected_result, expected_status) # POSTING ONE GROUP print("TEST_2 --- POSTING ONE GROUP") group_1_name = 'Huiskamer' group_1_is_module = True group_1 = GroupModel(group_1_name, group_1_is_module) body = { "name": group_1_name, "is_module": group_1_is_module, } group_1_json = group_1.to_json() group_1_json['id'] = 1 group_1_json['url'] = "127.0.0.1:5000/api/v1/groups/1" expected_result = group_1_json expected_status = 201 uri = "groups" test_post(uri, body, expected_result, expected_status) # GETTING ALL GROUPS print("TEST_3 --- GETTING ALL GROUPS") uri = "groups" expected_result = {"groups": [group_1_json]} expected_status = 200 test_get(uri, expected_result, expected_status) # GETTING ONE GROUP print("TEST_4 --- GETTING ONE GROUP") uri = "groups/1" expected_result = group_1_json expected_status = 200 test_get(uri, expected_result, expected_status) # ADDING ONE ITEM TO GROUP print("TEST_5 --- ADDING ONE ITEM TO GROUP") uri = "groups/1/items" item_1_json = send_get('items/1') body = {"item_id": item_1_json['id']} expected_result = group_1_json expected_result['items'] = [{ "id": item_1_json['id'], "name": item_1_json['name'], "comment": item_1_json['comment'], "url": item_1_json['url'] }] expected_status = 200 test_post(uri, body, expected_result, expected_status) group_1_json['items'] = [{ "id": item_1_json['id'], "name": item_1_json['name'], "comment": item_1_json['comment'], "url": item_1_json['url'] }] # GETTING ONE GROUP print("TEST_6 --- GETTING ONE GROUP") uri = "groups/1" expected_result = group_1_json expected_status = 200 test_get(uri, expected_result, expected_status) # POSTING ONE GROUP print("TEST_7 --- POSTING ONE GROUP") group_2_name = 'Verlichting' group_2_is_module = False group_2 = GroupModel(group_2_name, group_2_is_module) body = { "name": group_2_name, "is_module": group_2_is_module, } group_2_json = group_2.to_json() group_2_json['id'] = 2 group_2_json['url'] = "127.0.0.1:5000/api/v1/groups/2" expected_result = group_2_json expected_status = 201 uri = "groups" test_post(uri, body, expected_result, expected_status) # POSTING ONE GROUP print("TEST_8 --- POSTING ONE GROUP") group_3_name = 'Badkamer' group_3_is_module = True group_3 = GroupModel(group_3_name, group_3_is_module) body = { "name": group_3_name, "is_module": group_3_is_module, } group_3_json = group_3.to_json() group_3_json['id'] = 3 group_3_json['url'] = "127.0.0.1:5000/api/v1/groups/3" expected_result = group_3_json expected_status = 201 uri = "groups" test_post(uri, body, expected_result, expected_status) # ADDING ONE ITEM TO GROUP print("TEST_9 --- ADDING ONE ITEM TO GROUP") uri = "groups/2/items" item_1_json = send_get('items/1') body = {"item_id": item_1_json['id']} expected_result = group_2_json expected_result['items'] = [{ "id": item_1_json['id'], "name": item_1_json['name'], "comment": item_1_json['comment'], "url": item_1_json['url'] }] expected_status = 200 test_post(uri, body, expected_result, expected_status) group_2_json['items'] = [{ "id": item_1_json['id'], "name": item_1_json['name'], "comment": item_1_json['comment'], "url": item_1_json['url'] }] # ADDING ONE ITEM TO GROUP print("TEST_10 --- ADDING ONE ITEM TO SECOND MODULE") uri = "groups/3/items" item_1_json = send_get('items/1') body = {"item_id": item_1_json['id']} error = Error("Item cannot be in two different modules", "item.is_in_module() returned True", 422, "https://en.wikipedia.org/wiki/HTTP_422") expected_result = {"errors": [error.to_json()]} expected_status = 422 test_post(uri, body, expected_result, expected_status) # GETTING ONE ITEM print("TEST_11 --- GETTING ONE ITEM") uri = "items/1" expected_result = { "id": 1, "name": 'Z04 Gang lamp (SW)', "comment": 'new_comment', "last_use": None, "usages": [], "url": "127.0.0.1:5000/api/v1/items/1", "groups": [{ "id": 1, "name": 'Huiskamer' }, { "id": 2, "name": 'Verlichting' }] } expected_status = 200 test_get(uri, expected_result, expected_status) # ADDING ONE ITEM TO GROUP print("TEST_12 --- REMOVING ONE ITEM FROM GROUP") uri = "groups/1/items/1" item_1_json = send_get('items/1') body = {"item_id": item_1_json['id']} expected_result = group_1_json expected_result['items'] = [] expected_status = 200 test_delete(uri, body, expected_result, expected_status) group_1_json['items'] = [] # GETTING ONE GROUP print("TEST_13 --- GETTING ONE GROUP") uri = "groups/1" expected_result = group_1_json expected_status = 200 test_get(uri, expected_result, expected_status) # ADDING ONE ITEM TO NON EXISTING GROUP print("TEST_14 --- ADDING ITEM TO NON EXISTING GROUP") uri = "groups/5/items" item_1_json = send_get('items/1') body = {"item_id": item_1_json['id']} error = Error("Could not find group with id: {}".format(5), "GroupModel.find_by_id({}) returned None".format(5), 404, "https://en.wikipedia.org/wiki/HTTP_404") expected_result = {"errors": [error.to_json()]} expected_status = 422 test_post(uri, body, expected_result, expected_status) group_1_json['items'] = [] # POSTING ONE GROUP print("TEST_15 --- POSTING ONE GROUP - BAD REQUEST") group_3_name = 'Badkamer _____________________________________________________________________' \ '______________________________________________________________________________' \ '______________________________________________________________________________' \ '______________________________________________________________________________' group_3_is_module = True body = { "name": group_3_name, "is_module": group_3_is_module, } error = Error("Name cannot be longer than 255 characters.", "Name parameter cannot be longer than 255 characters.", 400, "https://en.wikipedia.org/wiki/HTTP_400") expected_result = {"errors": [error.to_json()]} expected_status = 400 uri = "groups" test_post(uri, body, expected_result, expected_status) # DELETING ONE GROUP print("TEST_16 --- DELETING ONE GROUP") uri = "groups/3" body = {} expected_result = "Group with id: {} was successfully deleted.".format(3) expected_status = 200 test_delete(uri, body, expected_result, expected_status) # CHECKING IF GROUP WAS DELETED print("TEST_17 --- GETTING ALL GROUPS") uri = "groups" expected_result = {"groups": [group_1_json, group_2_json]} expected_status = 200 test_get(uri, expected_result, expected_status) # ADDING ONE ITEM TO GROUP print("TEST_18 --- ADDING ONE ITEM TO GROUP") uri = "groups/1/items" item_2_json = send_get('items/2') body = {"item_id": 2} expected_result = group_1_json expected_result['items'] = [{ "id": item_2_json['id'], "name": item_2_json['name'], "comment": item_2_json['comment'], "url": item_2_json['url'] }] expected_status = 200 test_post(uri, body, expected_result, expected_status) group_1_json['items'] = [{ "id": item_2_json['id'], "name": item_2_json['name'], "comment": item_2_json['comment'], "url": item_2_json['url'] }]
def test_event_resource(): print("#################### TESTING EVENT RESOURCE ####################") # GETTING ALL USAGES print("TEST_1 --- GETTING ALL EVENTS") uri = "events" expected_result = { "events": [] } expected_status = 200 test_get(uri, expected_result, expected_status) # POST ONE EVENT print("TEST_2 --- POSTING ONE EVENT") uri = "events" usage_1 = send_get('usages/1') event_1 = EventModel(usage_1['id'], 'True', round(datetime.now().timestamp())) event_1_json = event_1.to_json() event_1_json['id'] = 1 body = { "usage_id": usage_1['id'], "data_type": UnitEnum.TOGGLE.value, "data": 'True' } expected_result = event_1_json expected_status = 201 test_post(uri, body, expected_result, expected_status) # GETTING ONE EVENT print("TEST_3 --- GETTING ONE EVENT") uri = "events/1" expected_status = 200 test_get(uri, expected_result, expected_status) # GETTING ALL EVENTS print("TEST_4 --- GETTING ALL EVENTS") uri = "events" expected_result = { "events": [event_1_json] } expected_status = 200 test_get(uri, expected_result, expected_status) # POST ONE EVENT print("TEST_5 --- POSTING ONE EVENT - BAD REQUEST") uri = "events" body = { "usage_id": 17, "data_type": UnitEnum.TOGGLE.value, "data": 'True' } error = Error( "Cannot find usage with id: {}".format(17), "UsageModel.find_by_id({}) returns None".format(17), 404, "https://en.wikipedia.org/wiki/HTTP_404") expected_result = {"errors": [error.to_json()]} expected_status = 422 test_post(uri, body, expected_result, expected_status) # POST ONE EVENT print("TEST_6 --- POSTING ONE EVENT - BAD REQUEST") uri = "events" body = { "usage_id": 1, "data_type": "KILO WHAT?", "data": 'True' } error = Error( '"{}" is not a valid unit type.'.format("KILO WHAT?"), "UnitEnum.has_value({}) returned False".format("KILO WHAT?"), 400, "https://en.wikipedia.org/wiki/HTTP_400" ) expected_result = {"errors": [error.to_json()]} expected_status = 422 test_post(uri, body, expected_result, expected_status)