def test_level_system(): with Session() as session: session = setup_scenarios.create_levels_junior_and_senior_detectives( session) junior_detective1 = user_handler.get_user_by_id("1", session) assert junior_detective1.level_id == 1 assert junior_detective1.experience_points == 0 user_handler.give_experience_point(junior_detective1.id, session) junior_detective1 = user_handler.get_user_by_id( junior_detective1.id, session) assert junior_detective1.level_id == 1 assert junior_detective1.experience_points == 1 for _ in range(5): user_handler.give_experience_point(junior_detective1.id, session) junior_detective1 = user_handler.get_user_by_id( junior_detective1.id, session) assert junior_detective1.level_id == 2 assert junior_detective1.experience_points == 6
def test_level_system(monkeypatch): monkeypatch.setenv("DBNAME", "Test") session = get_db_session(True, None) session = setup_scenarios.create_levels_junior_and_senior_detectives( session) junior_detective1 = user_handler.get_user_by_id("1", True, session) assert junior_detective1.level_id == 1 assert junior_detective1.experience_points == 0 user_handler.give_experience_point(junior_detective1.id, True, session) junior_detective1 = user_handler.get_user_by_id(junior_detective1.id, True, session) assert junior_detective1.level_id == 1 assert junior_detective1.experience_points == 1 for _ in range(5): user_handler.give_experience_point(junior_detective1.id, True, session) junior_detective1 = user_handler.get_user_by_id(junior_detective1.id, True, session) assert junior_detective1.level_id == 2 assert junior_detective1.experience_points == 6
def test_get_user(monkeypatch): monkeypatch.setenv("DBNAME", "Test") session = get_db_session(True, None) session = setup_scenarios.create_levels_junior_and_senior_detectives( session) junior_detective1 = user_handler.get_user_by_id("1", True, session) event = event_creator.get_create_review_event(junior_detective1.id, "abc") resp = get_user(event, None, True, session) body = json.loads(resp["body"]) assert body["id"] == junior_detective1.id assert body["level"] == 1 assert body["level_description"] == "Junior" assert body["progress"] == 0 assert body["total_rank"] == session.query(User).count() assert body["level_rank"] == session.query(User).filter( User.level_id == junior_detective1.level_id).count() assert body["solved_cases_total"] == 0 assert body["solved_cases_today"] == 0 assert body["exp_needed"] == 5 sign_up_date = datetime.strptime(body["sign_up_timestamp"], '%Y-%m-%d %H:%M:%S').date() assert sign_up_date != datetime.today()
def get_open_items(event, context, is_test=False, session=None): logger = logging.getLogger() logger.setLevel(logging.INFO) helper.log_method_initiated("Get open items for user", event, logger) if session == None: session = connection_handler.get_db_session(False, None) try: # get cognito user id id = helper.cognito_id_from_event(event) # get number of items from url path if ('queryStringParameters' in event and 'num_items' in event['queryStringParameters']): num_items = int(event['queryStringParameters']['num_items']) else: num_items = 5 user = user_handler.get_user_by_id(id, is_test, session) response = item_handler.get_open_items_for_user( user, num_items, is_test, session) items = response['items'] if len(items) < 1: response = { "statusCode": 404, "body": "There are currently no open items for this user." } else: # Transform each item into dict items_dict = [] for item in items: items_dict.append(item.to_dict()) body = { "items": items_dict, "is_open_review": response['is_open_review'] } response = { "statusCode": 200, 'headers': { "content-type": "application/json; charset=utf-8" }, "body": json.dumps(body) } except Exception: response = { "statusCode": 400, "body": "Could not get user and/or num_items. Check URL path parameters. Stacktrace: {}" .format(traceback.format_exc()) } response_cors = helper.set_cors(response, event, is_test) return response_cors
def get_review(event, context): """Gets a review. Parameters ---------- - user_id is retrieved from the event - review_id is retrieved from query parameters Returns ------ - Status code 200 OK - The requested review """ logger = logging.getLogger() logger.setLevel(logging.INFO) helper.log_method_initiated("Get Review", event, logger) try: # get cognito id user_id = helper.cognito_id_from_event(event) except: return helper.get_text_response( 400, "Malformed request. Please provide a valid request.", event) with Session() as session: try: # get user from database user = user_handler.get_user_by_id(user_id, session) except: return helper.get_text_response(404, "No user found.", event) try: # Try to receive review review = review_handler.get_open_review(user_id, session) except: return helper.get_text_response(404, "No review found", event) if review is None: return responses.NoContent( event, 'No review in progress found for current user.' ).to_json_string() try: if review.user_id == user.id: return responses.Success( event, json.dumps( review.to_dict(with_questions_and_answers=True, with_tags=True))).to_json_string() else: return responses.Forbidden( event, 'User is not allowed to access review').to_json_string() except Exception as e: return responses.InternalError(event, "Internal error", e).to_json_string()
def get_user(event, context, is_test=False, session=None): logger = logging.getLogger() logger.setLevel(logging.INFO) helper.log_method_initiated("Get user", event, logger) if session == None: session = get_db_session(False, None) try: # get cognito id id = helper.cognito_id_from_event(event) try: user = user_handler.get_user_by_id(id, is_test, session) user_dict = user.to_dict() progress = user_handler.get_user_progress( user, is_test, session) total_rank = user_handler.get_user_rank( user, False, is_test, session) level_rank = user_handler.get_user_rank( user, True, is_test, session) solved_cases_total = user_handler.get_solved_cases( user, False, is_test, session) solved_cases_today = user_handler.get_solved_cases( user, True, is_test, session) exp_needed = user_handler.get_needed_exp(user, is_test, session) user_dict['progress'] = progress user_dict['total_rank'] = total_rank user_dict['level_rank'] = level_rank user_dict['solved_cases_total'] = solved_cases_total user_dict['solved_cases_today'] = solved_cases_today user_dict['exp_needed'] = exp_needed response = { "statusCode": 200, 'headers': {"content-type": "application/json; charset=utf-8"}, "body": json.dumps(user_dict) } except Exception: response = { "statusCode": 404, "body": "No user found with the specified id.{}".format(traceback.format_exc()) } except Exception: response = { "statusCode": 400, "body": "Could not get user. Check Cognito authentication. Stacktrace: {}".format(traceback.format_exc()) } response_cors = helper.set_cors(response, event, is_test) return response_cors
def test_tags_and_urls(self): with Session() as session: session = setup_scenarios.create_levels_junior_and_senior_detectives( session) session = setup_scenarios.create_questions(session) junior_detective1 = user_handler.get_user_by_id("1", session) item1 = Item() item1.content = "Item 1" item1.status = "open" item1.item_type_id = "Type1" item1 = item_handler.create_item(item1, session) url = URL() url.id = str(uuid4()) url.url = 'www.test.com' item_url = ItemURL() item_url.id = str(uuid4()) item_url.item_id = item1.id item_url.url_id = url.id tag = Tag() tag.id = str(uuid4()) tag.tag = "Test Tag" item_tag = ItemTag() item_tag.id = str(uuid4()) item_tag.item_id = item1.id item_tag.tag_id = tag.id session.add_all([url, item_url, tag, item_tag]) event = event_creator.get_create_review_event( junior_detective1.id, item1.id) response = get_open_items(event, None) assert response['statusCode'] == 200 body = json.loads(response['body']) items = body['items'] assert len(items) == 1 urls = items[0]['urls'] assert len(urls) == 1 assert urls[0]['url'] == 'www.test.com' tags = items[0]['tags'] assert len(tags) == 1 assert tags[0] == "Test Tag"
def test_get_user_ranking(): with Session() as session: session = setup_scenarios.create_users_for_ranking(session) my_detective = user_handler.get_user_by_id("999", session) event = event_creator.get_create_review_event(my_detective.id, None) resp = get_user_ranking(event, None) user_rankings = json.loads(resp["body"]) assert len(user_rankings) == 3 assert ("top_users" in user_rankings) == True assert ("top_users_by_level" in user_rankings) == True assert ("top_users_by_period" in user_rankings) == True top_users = user_rankings['top_users'] # ten top users in list assert len(top_users) == 10 assert top_users[0]['experience_points'] == 60 # each EXP should be higher than the next (for the sorted column "experience_points") assert int(top_users[0]['experience_points']) > int( top_users[1]['experience_points']) top_users_by_level = user_rankings['top_users_by_level'] assert len(top_users_by_level) == 10 assert int(top_users_by_level[0]['experience_points']) > int( top_users_by_level[1]['experience_points']) # the first/ top user's experience points assert top_users_by_level[0]['experience_points'] == 40 # My User's experience points: assert top_users_by_level[5]['experience_points'] == 35 # the last user's experience points assert top_users_by_level[9]['experience_points'] == 32 # the first/ top users's level (= my level) assert top_users_by_level[0]['level'] == 2 # the last users's level (= my level) assert top_users_by_level[9]['level'] == 2 top_users_by_period = user_rankings['top_users_by_period'] # For period = 1 week only 7 users found assert len(top_users_by_period) == 7 assert int(top_users_by_period[0]['experience_points']) > int( top_users_by_period[1]['experience_points']) assert top_users_by_period[1]['experience_points'] == 6 assert top_users_by_period[6]['experience_points'] == 1
def test_get_user(): with Session() as session: session = setup_scenarios.create_levels_junior_and_senior_detectives( session) junior_detective1 = user_handler.get_user_by_id("1", session) event = event_creator.get_create_review_event(junior_detective1.id, "abc") resp = get_user(event, None) body = json.loads(resp["body"]) assert body["id"] == junior_detective1.id assert body["level"] == 1 assert body["level_description"] == "Junior" assert body["progress"] == 0 assert body["total_rank"] == session.query(User).count() assert body["level_rank"] == session.query(User).filter( User.level_id == junior_detective1.level_id).count() assert body["solved_cases_total"] == 0 assert body["solved_cases_today"] == 0 assert body["exp_needed"] == 5 sign_up_date = datetime.strptime(body["sign_up_timestamp"], '%Y-%m-%d %H:%M:%S').date() assert sign_up_date != datetime.today() item1 = Item(id='item1', status='closed') review1 = Review(id='review1', user_id=junior_detective1.id, item_id=item1.id) item2 = Item(id='item2', status='open') review2 = Review(id='review2', user_id=junior_detective1.id, item_id=item2.id) session.add_all([item1, item2, review1, review2]) session.commit() resp = get_user(event, None) body = json.loads(resp["body"]) assert len(body['closed_items']) == 1 assert body['closed_items'][0]['id'] == 'item1'
def update_review(event, context): """Updates an existing review Args: event: AWS API Gateway event context ([type]): [description]. Returns ------ - Status code 200, 400, 404 or 500 (Created) - The updated review """ logger = logging.getLogger() logger.setLevel(logging.INFO) helper.log_method_initiated("Update Review", event, logger) try: user_id = helper.cognito_id_from_event(event) body = json.loads(event['body']) if isinstance(event['body'], str) else event['body'] except: return responses.BadRequest( event, "Malformed request. Please provide a valid request." ).to_json_string() if 'id' not in body: return responses.BadRequest( event, "Malformed request. Please provide a review id.").to_json_string() with Session() as session: try: review = review_handler.get_review_by_id(body['id'], session) except: return responses.NotFound(event, "No review found.").to_json_string() try: user = user_handler.get_user_by_id(user_id, session) except: return responses.NotFound(event, "No user found.").to_json_string() if review.user_id != user.id: return responses.Forbidden(event).to_json_string() # If review is set closed if 'status' in body and body['status'] == 'closed': try: review = review_handler.close_review(review, session) if review.item.status == 'closed': EventPublisher().publish_event('codetekt.review_service', 'item_closed', {'item_id': review.item.id}) return responses.Success( event, json.dumps( review.to_dict(with_questions_and_answers=True, with_tags=True))).to_json_string() except: return helper.get_text_response( 500, "Internal server error. Stacktrace: {}".format( traceback.format_exc()), event) # If answers are appended if 'questions' in body: if not isinstance(body['questions'], list): return responses.BadRequest( event, "Malformed request. Please provide a valid request." ).to_json_string() for question in body['questions']: if 'answer_value' in question: answer_value = question['answer_value'] else: return responses.BadRequest( event, "Malformed request. Please provide a valid request." ).to_json_string() if answer_value is not None: # Check if conditionality is met if question['parent_question_id'] is not None: for q in body['questions']: if q['question_id'] == question[ 'parent_question_id']: parent_question = q if parent_question['answer_value'] > question[ 'upper_bound'] or parent_question[ 'answer_value'] < question['lower_bound']: return responses.BadRequest( event, "Bad request. Please adhere to conditionality of questions." ).to_json_string() # Update answer in db try: review_answer_handler.set_answer_value( question['answer_id'], question['answer_value'], session) except Exception as e: return responses.InternalError( event, exception=e).to_json_string() # Save qualitative_comment if 'comment' in body: if body['comment']: if review.comment is None: try: comment_handler.create_comment(session, comment=body['comment'], user_id=user_id, parent_type='review', parent_id=review.id, is_review_comment=True) except Exception as e: return responses.InternalError( event, "Could not create comment for item", e).to_json_string() elif review.comment.comment != body['comment']: review.comment.comment = body['comment'] session.merge(review) if 'tags' in body: if body['tags'] is None: body['tags'] = [] if isinstance(body['tags'], list): try: db_tags = [ item_tag.tag.tag for item_tag in tag_handler.get_item_tags_by_review_id( review.id, session) ] body_tags_upper = [tag.upper() for tag in body['tags']] db_tags_upper = [tag.upper() for tag in db_tags] tags_to_add = [ tag for tag in body['tags'] if tag.upper() not in db_tags_upper ] tags_to_delete = [ tag for tag in db_tags if tag.upper() not in body_tags_upper ] for tag in tags_to_add: tag_handler.store_tag_for_item(review.item_id, tag, session, review.id) for tag in tags_to_delete: tag_handler.delete_itemtag_by_tag_and_review_id( tag, review.id, session) except Exception as e: return responses.InternalError( event, "Could not create tags for item", e).to_json_string() return responses.Success( event, json.dumps( review.to_dict(with_questions_and_answers=True, with_tags=True))).to_json_string()
def test_create_review(): with Session() as session: session = setup_scenarios.create_levels_junior_and_senior_detectives( session) junior_detective1 = user_handler.get_user_by_id("1", session) junior_detective2 = user_handler.get_user_by_id("2", session) senior_detective1 = user_handler.get_user_by_id("11", session) users = user_handler.get_all_users(session) assert len(users) == 10 # Creating an item item = Item() item.content = "This item needs to be checked" item = item_handler.create_item(item, session) items = item_handler.get_all_items(session) assert len(items) == 1 reviews = session.query(Review).all() review_pairs = session.query(ReviewPair).all() assert len(reviews) == 0 assert len(review_pairs) == 0 # Junior detectives accepting item event = event_creator.get_create_review_event( junior_detective1.id, item.id) response = create_review(event, None) assert response['statusCode'] == 201 item = item_handler.get_item_by_id(item.id, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 1 reviews = session.query(Review).all() review_pairs = session.query(ReviewPair).all() assert len(reviews) == 1 assert len(review_pairs) == 1 event = event_creator.get_create_review_event( junior_detective2.id, item.id) create_review(event, None) item = item_handler.get_item_by_id(item.id, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 2 reviews = session.query(Review).all() review_pairs = session.query(ReviewPair).all() assert len(reviews) == 2 assert len(review_pairs) == 2 # Senior detective accepting item event = event_creator.get_create_review_event( senior_detective1.id, item.id) create_review(event, None) item = item_handler.get_item_by_id(item.id, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_2 == 1 reviews = session.query(Review).all() review_pairs = session.query(ReviewPair).all() assert len(reviews) == 3 assert len(review_pairs) == 2
def test_verification_process_best_case(monkeypatch): monkeypatch.setenv("STAGE", "dev") monkeypatch.setenv("MOTO", "1") monkeypatch.setenv("CORS_ALLOW_ORIGIN", "http://*****:*****@test.de' submission.status = 'confirmed' session.add(submission) session.commit() items = item_handler.get_all_items(session) assert len(items) == 1 # Junior detectives accepting item jr1 = review_handler.create_review(junior_detective1, item, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 1 jr2 = review_handler.create_review(junior_detective2, item, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 2 jr3 = review_handler.create_review(junior_detective3, item, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 3 jr4 = review_handler.create_review(junior_detective4, item, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 4 with pytest.raises(Exception): review_handler.create_review(junior_detective5, item, session) # Senior detectives accepting item sr1 = review_handler.create_review(senior_detective1, item, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 1 sr2 = review_handler.create_review(senior_detective2, item, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 2 sr3 = review_handler.create_review(senior_detective3, item, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 3 sr4 = review_handler.create_review(senior_detective4, item, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 4 with pytest.raises(Exception): review_handler.create_review(senior_detective5, item, session) pairs = review_pair_handler.get_review_pairs_by_item(item.id, session) assert len(pairs) == 4 # Detectives reviewing item reviews = [jr1, jr2, jr3, jr4, sr1, sr2, sr3, sr4] for review in reviews: event = event_creator.get_review_event( review, item.id, "in progress", review.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 event = event_creator.get_review_event( review, item.id, "closed", review.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 # reload object instead of refreshing the session item = item_handler.get_item_by_id(item.id, session) item = item_handler.update_item_warning_tags(item, session) assert item.status == 'closed' assert item.in_progress_reviews_level_1 == 0 assert item.in_progress_reviews_level_2 == 0 assert item.open_reviews_level_1 == 0 assert item.open_reviews_level_2 == 0 assert item.open_reviews == 0 assert item.close_timestamp is not None assert item.warning_tags_calculated == True assert item.result_score == 1 item_dict = item.to_dict(with_warnings=True) assert 'warning_tags' in item_dict assert len(item_dict['warning_tags']) > 0 assert 'text' in item_dict['warning_tags'][0] assert 'icon' in item_dict['warning_tags'][0] assert item_dict['result_score'] == 0 session.expire_all()
def test_verification_process_worst_case(monkeypatch): monkeypatch.setenv("CORS_ALLOW_ORIGIN", "http://localhost:4200") with Session() as session: session = setup_scenarios.create_levels_junior_and_senior_detectives( session) session = setup_scenarios.create_questions(session) junior_detective1 = user_handler.get_user_by_id("1", session) junior_detective2 = user_handler.get_user_by_id("2", session) junior_detective3 = user_handler.get_user_by_id("3", session) junior_detective4 = user_handler.get_user_by_id("4", session) junior_detective5 = user_handler.get_user_by_id("5", session) senior_detective1 = user_handler.get_user_by_id("11", session) senior_detective2 = user_handler.get_user_by_id("12", session) senior_detective3 = user_handler.get_user_by_id("13", session) senior_detective4 = user_handler.get_user_by_id("14", session) senior_detective5 = user_handler.get_user_by_id("15", session) users = user_handler.get_all_users(session) assert len(users) == 10 # Creating an item item = Item() item.content = "This item needs to be checked" item.status = 'open' item.item_type_id = "Type1" item = item_handler.create_item(item, session) items = item_handler.get_all_items(session) assert len(items) == 1 # Junior detectives accepting item jr1 = review_handler.create_review(junior_detective1, item, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 1 jr2 = review_handler.create_review(junior_detective2, item, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 2 jr3 = review_handler.create_review(junior_detective3, item, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 3 jr4 = review_handler.create_review(junior_detective4, item, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 4 with pytest.raises(Exception): review_handler.create_review(junior_detective5, item, session) # Senior detectives accepting item sr1 = review_handler.create_review(senior_detective1, item, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 1 sr2 = review_handler.create_review(senior_detective2, item, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 2 sr3 = review_handler.create_review(senior_detective3, item, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 3 sr4 = review_handler.create_review(senior_detective4, item, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 4 with pytest.raises(Exception): review_handler.create_review(senior_detective5, item, session) pairs = review_pair_handler.get_review_pairs_by_item(item.id, session) assert len(pairs) == 4 # Detective without review in progress trying to get question junior_reviews = [jr1, jr2, jr3, jr4] senior_reviews = [sr1, sr2, sr3, sr4] for review in junior_reviews: event = event_creator.get_review_event( review, item.id, "in progress", review.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 event = event_creator.get_review_event( review, item.id, "closed", review.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 for review in senior_reviews: event = event_creator.get_review_event( review, item.id, "in progress", review.user_id, 4) response = update_review(event, None) assert response['statusCode'] == 200 event = event_creator.get_review_event( review, item.id, "closed", review.user_id, 4) response = update_review(event, None) assert response['statusCode'] == 200 # reload object instead of refreshing the session item = item_handler.get_item_by_id(item.id, session) assert item.status == 'open' assert item.in_progress_reviews_level_1 == 0 assert item.in_progress_reviews_level_2 == 0 assert item.open_reviews_level_1 == 4 assert item.open_reviews_level_2 == 4 assert item.open_reviews == 4 session.expire_all()
def test_open_items_sorting(self): with Session() as session: session = setup_scenarios.create_levels_junior_and_senior_detectives( session) session = setup_scenarios.create_questions(session) junior_detective1 = user_handler.get_user_by_id("1", session) senior_detective1 = user_handler.get_user_by_id("11", session) # Creating 5 items item1 = Item() item1.content = "Item 1" item1.status = "open" item1.item_type_id = "Type1" item1.open_timestamp = datetime.now() + timedelta(seconds=1) item1 = item_handler.create_item(item1, session) item2 = Item() item2.content = "Item 2" item2.status = "open" item2.item_type_id = "Type1" item2.open_timestamp = datetime.now() + timedelta(seconds=2) item2 = item_handler.create_item(item2, session) item3 = Item() item3.content = "Item 3" item3.status = "open" item3.item_type_id = "Type1" item3.open_timestamp = datetime.now() + timedelta(seconds=3) item3 = item_handler.create_item(item3, session) item4 = Item() item4.content = "Item 4" item4.status = "open" item4.item_type_id = "Type1" item4.open_timestamp = datetime.now() + timedelta(seconds=4) item4 = item_handler.create_item(item4, session) item5 = Item() item5.content = "Item 5" item5.status = "open" item5.item_type_id = "Type1" item5.open_timestamp = datetime.now() + timedelta(seconds=5) item5 = item_handler.create_item(item5, session) item6 = Item() item6.content = "Item 6" item6.status = "open" item6.item_type_id = "Type1" item6.open_timestamp = datetime.now() + timedelta(seconds=6) item6 = item_handler.create_item(item6, session) items = item_handler.get_all_items(session) assert len(items) == 6 open_items_for_senior = item_handler.get_open_items_for_user( senior_detective1, 5, session)['items'] assert len(open_items_for_senior) == 5 assert all(x in open_items_for_senior for x in [item1, item2, item4, item5, item6]) open_items_for_junior = item_handler.get_open_items_for_user( junior_detective1, 5, session)['items'] assert all(x in open_items_for_junior for x in [item1, item2, item4, item5, item6]) # When item3 needs less reviewed it should be prioritized over item4 item3.open_reviews_level_1 = 3 item3.open_reviews_level_2 = 3 session.merge(item3) session.commit open_items_for_senior = item_handler.get_open_items_for_user( senior_detective1, 5, session)['items'] assert len(open_items_for_senior) == 5 assert all(x in open_items_for_senior for x in [item1, item2, item3, item5, item6]) open_items_for_junior = item_handler.get_open_items_for_user( junior_detective1, 5, session)['items'] assert all(x in open_items_for_junior for x in [item1, item2, item3, item5, item6])
def get_review(event, context, is_test=False, session=None): """Gets a review. Parameters ---------- - user_id is retrieved from the event - review_id is retrieved from query parameters Returns ------ - Status code 200 OK - The requested review """ logger = logging.getLogger() logger.setLevel(logging.INFO) helper.log_method_initiated("Get Review", event, logger) if session == None: session = connection_handler.get_db_session(False, None) try: # get review id from url query params review_id = event['pathParameters']['review_id'] # get cognito id user_id = helper.cognito_id_from_event(event) except: return helper.get_text_response( 400, "Malformed request. Please provide a valid request.", event, is_test) try: # get user from database user = user_handler.get_user_by_id(user_id, is_test, session) except: return helper.get_text_response(404, "No user found.", event, is_test) # Try to receive item try: review = review_handler.get_review_by_id(review_id, is_test, session) except: return helper.get_text_response(404, "No review found", event, is_test) try: if review.user_id == user.id: response = { "statusCode": 200, 'headers': { "content-type": "application/json; charset=utf-8" }, "body": json.dumps(review.to_dict_with_questions_and_answers()) } else: return helper.get_text_response(403, "Forbidden", event, is_test) except: return helper.get_text_response( 500, "Internal server error. Stacktrace: {}".format( traceback.format_exc()), event, is_test) response_cors = helper.set_cors(response, event, is_test) return response_cors
def test_verification_process_best_case(monkeypatch): monkeypatch.setenv("STAGE", "dev") monkeypatch.setenv("DBNAME", "Test") conn = boto3.client("ses", region_name="eu-central-1") conn.verify_email_identity(EmailAddress="*****@*****.**") session = get_db_session(True, None) session = setup_scenarios.create_levels_junior_and_senior_detectives( session) session = setup_scenarios.create_questions(session) junior_detective1 = user_handler.get_user_by_id("1", True, session) junior_detective2 = user_handler.get_user_by_id("2", True, session) junior_detective3 = user_handler.get_user_by_id("3", True, session) junior_detective4 = user_handler.get_user_by_id("4", True, session) junior_detective5 = user_handler.get_user_by_id("5", True, session) senior_detective1 = user_handler.get_user_by_id("11", True, session) senior_detective2 = user_handler.get_user_by_id("12", True, session) senior_detective3 = user_handler.get_user_by_id("13", True, session) senior_detective4 = user_handler.get_user_by_id("14", True, session) senior_detective5 = user_handler.get_user_by_id("15", True, session) users = user_handler.get_all_users(True, session) assert len(users) == 10 # Creating an item item = Item() item.content = "This item needs to be checked" item.item_type_id = "Type1" item = item_handler.create_item(item, True, session) assert item.in_progress_reviews_level_1 == 0 assert item.open_reviews_level_1 == 4 assert item.status == 'unconfirmed' item.status = 'open' session.merge(item) submission = Submission() submission.id = 'Submission 1' submission.item_id = item.id submission.mail = '*****@*****.**' submission.status = 'confirmed' session.add(submission) session.commit() items = item_handler.get_all_items(True, session) assert len(items) == 1 # Junior detectives accepting item jr1 = review_handler.create_review(junior_detective1, item, True, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 1 jr2 = review_handler.create_review(junior_detective2, item, True, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 2 jr3 = review_handler.create_review(junior_detective3, item, True, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 3 jr4 = review_handler.create_review(junior_detective4, item, True, session) assert item.open_reviews_level_1 == 4 assert item.in_progress_reviews_level_1 == 4 with pytest.raises(Exception): review_handler.create_review(junior_detective5, item, True, session) # Senior detectives accepting item sr1 = review_handler.create_review(senior_detective1, item, True, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 1 sr2 = review_handler.create_review(senior_detective2, item, True, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 2 sr3 = review_handler.create_review(senior_detective3, item, True, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 3 sr4 = review_handler.create_review(senior_detective4, item, True, session) assert item.open_reviews_level_2 == 4 assert item.in_progress_reviews_level_2 == 4 with pytest.raises(Exception): review_handler.create_review(senior_detective5, item, True, session) pairs = review_pair_handler.get_review_pairs_by_item( item.id, True, session) assert len(pairs) == 4 # Detectives reviewing item reviews = [jr1, jr2, jr3, jr4, sr1, sr2, sr3, sr4] for review in reviews: event = event_creator.get_review_event(review, item.id, "in progress", review.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 session.refresh(review) event = event_creator.get_review_event(review, item.id, "closed", review.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 assert item.status == 'closed' assert item.in_progress_reviews_level_1 == 0 assert item.in_progress_reviews_level_2 == 0 assert item.open_reviews_level_1 == 0 assert item.open_reviews_level_2 == 0 assert item.open_reviews == 0 assert item.close_timestamp is not None send_quota = conn.get_send_quota() sent_count = int(send_quota["SentLast24Hours"]) assert sent_count == 1 session.refresh(submission) assert not submission.mail
def create_review(event, context, is_test=False, session=None): """Creates a new review. Parameters ---------- - user_id is retrieved from the event - item_id is retrieved from query parameters Returns ------ - Status code 201 (Created) - The newly created review """ logger = logging.getLogger() logger.setLevel(logging.INFO) helper.log_method_initiated("Create Review", event, logger) if session == None: session = connection_handler.get_db_session(False, None) try: # get item id from body item_id = json.loads(event['body'])['item_id'] if isinstance( event['body'], str) else event['body']['item_id'] # get cognito id user_id = helper.cognito_id_from_event(event) except Exception: return helper.get_text_response( 400, "Malformed request. Please provide a valid request.", event, is_test) try: # get user and item from the db user = user_handler.get_user_by_id(user_id, is_test, session) except Exception: return helper.get_text_response(404, "No user found.", event, is_test) item = item_handler.get_item_by_id(item_id, is_test, session) if item is None: return helper.get_text_response(404, "No item found.", event, is_test) # Try to accept item try: review = review_handler.create_review(user, item, is_test, session) response = { "statusCode": 201, 'headers': { "content-type": "application/json; charset=utf-8" }, "body": json.dumps(review.to_dict_with_questions_and_answers()) } response_cors = helper.set_cors(response, event, is_test) return response_cors except: return helper.get_text_response( 500, "Internal server error. Stacktrace: {}".format( traceback.format_exc()), event, is_test)
def update_review(event, context, is_test=False, session=None): """Updates an existing review Args: event: AWS API Gateway event context ([type]): [description] is_test (bool, optional): Whether the function is executed in test mode. Defaults to False. session (optional): An sql alchemy session. Defaults to None. Returns ------ - Status code 200, 400, 404 or 500 (Created) - The updated review """ logger = logging.getLogger() logger.setLevel(logging.INFO) helper.log_method_initiated("Create Review", event, logger) if session == None: session = connection_handler.get_db_session(False, None) try: user_id = helper.cognito_id_from_event(event) body = json.loads(event['body']) if isinstance(event['body'], str) else event['body'] except: return helper.get_text_response( 400, "Malformed request. Please provide a valid request.", event, is_test) if 'id' not in body: return helper.get_text_response( 400, "Malformed request. Please provide a review id.", event, is_test) try: review = review_handler.get_review_by_id(body['id'], is_test, session) except: return helper.get_text_response(404, "No review found", event, is_test) try: user = user_handler.get_user_by_id(user_id, is_test, session) except: return helper.get_text_response(404, "No user found.", event, is_test) if review.user_id != user.id: return helper.get_text_response(403, "Forbidden.", event, is_test) # If review is set closed if 'status' in body and body['status'] == 'closed': try: review = review_handler.close_review(review, is_test, session) if review.item.status == 'closed': notifications.notify_users(is_test, session, review.item) response = { "statusCode": 200, "body": json.dumps(review.to_dict_with_questions_and_answers()) } response_cors = helper.set_cors(response, event, is_test) return response_cors except: return helper.get_text_response( 500, "Internal server error. Stacktrace: {}".format( traceback.format_exc()), event, is_test) # If answers are appended elif 'questions' in body: if not isinstance(body['questions'], list): return helper.get_text_response( 400, "Malformed request. Please provide a valid request.", event, is_test) for question in body['questions']: if 'answer_value' in question: answer_value = question['answer_value'] else: return helper.get_text_response( 400, "Malformed request. Please provide a valid request.", event, is_test) if answer_value is not None: # Check if conditionality is met if question['parent_question_id'] is not None: for q in body['questions']: if q['question_id'] == question['parent_question_id']: parent_question = q parent_answer = review_answer_handler.get_parent_answer( question['answer_id'], is_test, session) if parent_question['answer_value'] > question[ 'upper_bound'] or parent_question[ 'answer_value'] < question['lower_bound']: return helper.get_text_response( 400, "Bad request. Please adhere to conditionality of questions.", event, is_test) # Update answer in db try: review_answer_handler.set_answer_value( question['answer_id'], question['answer_value'], is_test, session) except: return helper.get_text_response( 500, "Internal server error. Stacktrace: {}".format( traceback.format_exc()), event, is_test) response = { "statusCode": 200, "body": json.dumps(review.to_dict_with_questions_and_answers()) } response_cors = helper.set_cors(response, event, is_test) return response_cors else: return helper.get_text_response( 400, "Bad request. Please adhere to conditionality of questions.", event, is_test)
def test_get_open_items_for_user(self, monkeypatch): monkeypatch.setenv("DBNAME", "Test") session = get_db_session(True, None) session = setup_scenarios.create_levels_junior_and_senior_detectives( session) session = setup_scenarios.create_questions(session) junior_detective1 = user_handler.get_user_by_id("1", True, session) junior_detective2 = user_handler.get_user_by_id("2", True, session) junior_detective3 = user_handler.get_user_by_id("3", True, session) junior_detective4 = user_handler.get_user_by_id("4", True, session) junior_detective5 = user_handler.get_user_by_id("5", True, session) senior_detective1 = user_handler.get_user_by_id("11", True, session) # Creating 5 items item1 = Item() item1.content = "Item 1" item1.status = "open" item1.item_type_id = "Type1" item1 = item_handler.create_item(item1, True, session) item2 = Item() item2.content = "Item 2" item2.status = "open" item2.item_type_id = "Type1" item2 = item_handler.create_item(item2, True, session) item3 = Item() item3.content = "Item 3" item3.status = "open" item3.item_type_id = "Type1" item3 = item_handler.create_item(item3, True, session) item4 = Item() item4.content = "Item 4" item4.status = "open" item4.item_type_id = "Type1" item4 = item_handler.create_item(item4, True, session) item5 = Item() item5.content = "Item 5" item5.status = "open" item5.item_type_id = "Type1" item5 = item_handler.create_item(item5, True, session) items = item_handler.get_all_items(True, session) assert len(items) == 5 open_items_for_senior = item_handler.get_open_items_for_user( senior_detective1, 5, True, session)['items'] assert len(open_items_for_senior) == 5 open_items_for_junior = item_handler.get_open_items_for_user( junior_detective1, 5, True, session)['items'] assert len(open_items_for_junior) == 5 # JuniorDetective 1 accepting item 1 jr1 = review_handler.create_review(junior_detective1, item1, True, session) open_item_after_accept = item_handler.get_open_items_for_user( junior_detective1, 5, True, session)['items'] assert len(open_item_after_accept) == 1 item1 = item_handler.get_item_by_id(item1.id, True, session) assert item1.in_progress_reviews_level_1 == 1 # Accepting event again should not create a new review review_handler.create_review(junior_detective1, item1, True, session) # app.create_review(accept_event, None, True, session) item1 = item_handler.get_item_by_id(item1.id, True, session) assert item1.in_progress_reviews_level_1 == 1 # JuniorDetective 1 finishing review event = event_creator.get_review_event(jr1, item1.id, "in progress", jr1.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 event = event_creator.get_review_event(jr1, item1.id, "closed", jr1.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 # For JuniorDetective1 only 4 cases should be available open_items_after_submission = item_handler.get_open_items_for_user( junior_detective1, 5, True, session)['items'] assert len(open_items_after_submission) == 4 open_items_limit_3 = item_handler.get_open_items_for_user( junior_detective1, 3, True, session)['items'] assert len(open_items_limit_3) == 3 open_items_after_other_review = item_handler.get_open_items_for_user( junior_detective4, 5, True, session)['items'] assert len(open_items_after_other_review) == 5 # 4 Junior Detectives reviewing Item 2 jr1 = review_handler.create_review(junior_detective1, item2, True, session) jr2 = review_handler.create_review(junior_detective2, item2, True, session) jr3 = review_handler.create_review(junior_detective3, item2, True, session) jr4 = review_handler.create_review(junior_detective4, item2, True, session) reviews = [jr1, jr2, jr3, jr4] for review in reviews: event = event_creator.get_review_event(review, item2.id, "in progress", review.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 event = event_creator.get_review_event(review, item2.id, "closed", review.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 # 4 Cases should be available for Detective 5 open_items_after_other_review = item_handler.get_open_items_for_user( junior_detective5, 5, True, session)['items'] assert len(open_items_after_other_review) == 4 # 5 cases should be available for senior open_items_for_senior = item_handler.get_open_items_for_user( senior_detective1, 5, True, session)['items'] assert len(open_items_for_senior) == 5 # Senior detective accepting item 1 sr1 = review_handler.create_review(senior_detective1, item1, True, session) open_item_after_accept = item_handler.get_open_items_for_user( senior_detective1, 5, True, session)['items'] assert len(open_item_after_accept) == 1 # Senior detective finishing review event = event_creator.get_review_event(sr1, item1.id, "in progress", sr1.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 event = event_creator.get_review_event(sr1, item1.id, "closed", sr1.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 # For SeniorDetective1 only 4 cases should be available open_items_after_submission = item_handler.get_open_items_for_user( senior_detective1, 5, True, session)['items'] assert len(open_items_after_submission) == 4 # SeniorDetective 1 accepting item 3 sr1 = review_handler.create_review(senior_detective1, item3, True, session) open_item_after_accept = item_handler.get_open_items_for_user( senior_detective1, 5, True, session)['items'] assert len(open_item_after_accept) == 1 item3 = item_handler.get_item_by_id(item3.id, True, session) assert item3.in_progress_reviews_level_2 == 1 # Accepting event again should not create a new review review_handler.create_review(senior_detective1, item3, True, session) item3 = item_handler.get_item_by_id(item3.id, True, session) assert item3.in_progress_reviews_level_2 == 1 # SeniorDetective 1 finishing review event = event_creator.get_review_event(sr1, item3.id, "in progress", sr1.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 event = event_creator.get_review_event(sr1, item3.id, "closed", sr1.user_id, 1, session) response = update_review(event, None, True, session) assert response['statusCode'] == 200 open_items_for_senior = item_handler.get_open_items_for_user( senior_detective1, 5, True, session)['items'] assert len(open_items_for_senior) == 3 event = { "requestContext": { "identity": { "cognitoAuthenticationProvider": "...CognitoSignIn:{}".format(senior_detective1.id) } } } response = get_open_items(event, None, True, session) assert 'is_open_review' in response['headers'] assert response['headers']['is_open_review'] == "False" body = json.loads(response['body']) assert len(body) == 3
def get_user_ranking(event, context, is_test=False, session=None): """ returns a dictionary with list top_users: 10 top users list top_users_by_level: 10 top users on the user's level list top_users_by_period: 10 top users in a period p (1 week) """ n = 10 p = 1 descending = True attr = 'experience_points' logger = logging.getLogger() logger.setLevel(logging.INFO) helper.log_method_initiated("Get User Ranking", event, logger) if session == None: session = get_db_session(False, None) user_ranking_dict = {} top_users_list = [] top_users_by_level_list = [] top_users_by_period_list = [] try: my_user_id = helper.cognito_id_from_event(event) except Exception: response = { "statusCode": 400, "body": "Could not get User. Check Cognito Authentication. Stacktrace: {}".format(traceback.format_exc()) } try: helper.log_method_initiated("Get Top n Users", event, logger) top_users = user_handler.get_top_users(n, attr, descending, is_test, session) for user in top_users: top_users_list.append(user.to_dict()) user_ranking_dict['top_users'] = top_users_list helper.log_method_initiated("Get Top n Users on the User's Level", event, logger) my_user = user_handler.get_user_by_id(my_user_id, is_test, session) user_level = my_user.level_id top_users_by_level = user_handler.get_top_users_by_level(user_level, n, attr, descending, is_test, session) for user in top_users_by_level: top_users_by_level_list.append(user.to_dict()) user_ranking_dict['top_users_by_level'] = top_users_by_level_list helper.log_method_initiated("Get Top n Users in a Period", event, logger) top_users_by_period = user_handler.get_top_users_by_period(n, p, attr, descending, is_test, session) for user in top_users_by_period: top_users_by_period_list.append(user.to_dict()) user_ranking_dict['top_users_by_period'] = top_users_by_period_list except Exception: response = { "statusCode": 500, "body": "Server Error. Stacktrace: {}".format(traceback.format_exc()) } response = { "statusCode": 200, 'headers': {"content-type": "application/json; charset=utf-8"}, "body": json.dumps(user_ranking_dict) } response_cors = helper.set_cors(response, event, is_test) return response_cors
def test_get_open_items_for_user(self, monkeypatch): monkeypatch.setenv("CORS_ALLOW_ORIGIN", "http://localhost:4200") with Session() as session: session = setup_scenarios.create_levels_junior_and_senior_detectives( session) session = setup_scenarios.create_questions(session) junior_detective1 = user_handler.get_user_by_id("1", session) junior_detective2 = user_handler.get_user_by_id("2", session) junior_detective3 = user_handler.get_user_by_id("3", session) junior_detective4 = user_handler.get_user_by_id("4", session) junior_detective5 = user_handler.get_user_by_id("5", session) senior_detective1 = user_handler.get_user_by_id("11", session) # Creating 5 items item1 = Item() item1.content = "Item 1" item1.status = "open" item1.item_type_id = "Type1" item1.open_timestamp = datetime.now() + timedelta(seconds=1) item1 = item_handler.create_item(item1, session) url = URL() url.id = str(uuid4()) url.url = 'www.test.com' item_url = ItemURL() item_url.id = str(uuid4()) item_url.item_id = item1.id item_url.url_id = url.id session.add_all([url, item_url]) item2 = Item() item2.content = "Item 2" item2.status = "open" item2.item_type_id = "Type1" item2.open_timestamp = datetime.now() + timedelta(seconds=2) item2 = item_handler.create_item(item2, session) item3 = Item() item3.content = "Item 3" item3.status = "open" item3.item_type_id = "Type1" item3.open_timestamp = datetime.now() + timedelta(seconds=3) item3 = item_handler.create_item(item3, session) item4 = Item() item4.content = "Item 4" item4.status = "open" item4.item_type_id = "Type1" item4.open_timestamp = datetime.now() + timedelta(seconds=4) item4 = item_handler.create_item(item4, session) item5 = Item() item5.content = "Item 5" item5.status = "open" item5.item_type_id = "Type1" item5.open_timestamp = datetime.now() + timedelta(seconds=5) item5 = item_handler.create_item(item5, session) items = item_handler.get_all_items(session) assert len(items) == 5 open_items_for_senior = item_handler.get_open_items_for_user( senior_detective1, 5, session)['items'] assert len(open_items_for_senior) == 5 open_items_for_junior = item_handler.get_open_items_for_user( junior_detective1, 5, session)['items'] assert len(open_items_for_junior) == 5 # JuniorDetective 1 accepting item 1 jr1 = review_handler.create_review(junior_detective1, item1, session) open_item_after_accept = item_handler.get_open_items_for_user( junior_detective1, 5, session)['items'] assert len(open_item_after_accept) == 1 item1 = item_handler.get_item_by_id(item1.id, session) assert item1.in_progress_reviews_level_1 == 1 # Accepting event again should not create a new review review_handler.create_review(junior_detective1, item1, session) # app.create_review(accept_event, None, True, session) item1 = item_handler.get_item_by_id(item1.id, session) assert item1.in_progress_reviews_level_1 == 1 # JuniorDetective 1 finishing review event = event_creator.get_review_event(jr1, item1.id, "in progress", jr1.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 event = event_creator.get_review_event(jr1, item1.id, "closed", jr1.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 # For JuniorDetective1 only 4 cases should be available open_items_after_submission = item_handler.get_open_items_for_user( junior_detective1, 5, session)['items'] assert len(open_items_after_submission) == 4 open_items_limit_3 = item_handler.get_open_items_for_user( junior_detective1, 3, session)['items'] assert len(open_items_limit_3) == 3 open_items_after_other_review = item_handler.get_open_items_for_user( junior_detective4, 5, session)['items'] assert len(open_items_after_other_review) == 5 # 4 Junior Detectives reviewing Item 2 item2 = item_handler.get_item_by_id(item2.id, session) jr1 = review_handler.create_review(junior_detective1, item2, session) jr2 = review_handler.create_review(junior_detective2, item2, session) jr3 = review_handler.create_review(junior_detective3, item2, session) jr4 = review_handler.create_review(junior_detective4, item2, session) reviews = [jr1, jr2, jr3, jr4] for review in reviews: event = event_creator.get_review_event(review, item2.id, "in progress", review.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 event = event_creator.get_review_event(review, item2.id, "closed", review.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 # 4 Cases should be available for Detective 5 open_items_after_other_review = item_handler.get_open_items_for_user( junior_detective5, 5, session)['items'] assert len(open_items_after_other_review) == 4 # 5 cases should be available for senior open_items_for_senior = item_handler.get_open_items_for_user( senior_detective1, 5, session)['items'] assert len(open_items_for_senior) == 5 # Senior detective accepting item 1 sr1 = review_handler.create_review(senior_detective1, item1, session) open_item_after_accept = item_handler.get_open_items_for_user( senior_detective1, 5, session)['items'] assert len(open_item_after_accept) == 1 # Senior detective finishing review event = event_creator.get_review_event(sr1, item1.id, "in progress", sr1.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 event = event_creator.get_review_event(sr1, item1.id, "closed", sr1.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 # For SeniorDetective1 only 4 cases should be available open_items_after_submission = item_handler.get_open_items_for_user( senior_detective1, 5, session)['items'] assert len(open_items_after_submission) == 4 # SeniorDetective 1 accepting item 3 item3 = item_handler.get_item_by_id(item3.id, session) sr1 = review_handler.create_review(senior_detective1, item3, session) open_item_after_accept = item_handler.get_open_items_for_user( senior_detective1, 5, session)['items'] assert len(open_item_after_accept) == 1 item3 = item_handler.get_item_by_id(item3.id, session) assert item3.in_progress_reviews_level_2 == 1 # Accepting event again should not create a new review review_handler.create_review(senior_detective1, item3, session) item3 = item_handler.get_item_by_id(item3.id, session) assert item3.in_progress_reviews_level_2 == 1 # SeniorDetective 1 finishing review event = event_creator.get_review_event(sr1, item3.id, "in progress", sr1.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 event = event_creator.get_review_event(sr1, item3.id, "closed", sr1.user_id, 1) response = update_review(event, None) assert response['statusCode'] == 200 # Accepting closed item again should not create a new review event = event_creator.get_create_review_event( senior_detective1.id, item3.id) response = create_review.create_review(event, None) assert response['statusCode'] == 500 open_items_for_senior = item_handler.get_open_items_for_user( senior_detective1, 5, session)['items'] assert len(open_items_for_senior) == 3 event = { "requestContext": { "identity": { "cognitoAuthenticationProvider": "...CognitoSignIn:{}".format(senior_detective1.id) } } } response = get_open_items(event, None) # assert 'is_open_review' in response['headers'] # assert response['headers']['is_open_review'] == "False" body = json.loads(response['body']) assert 'is_open_review' in body assert body['is_open_review'] is False assert len(body['items']) == 3