def test_complete_studies(self): ec = Client() id = 28795402 ncts = [ 'NCT00031265', 'NCT02199847', 'NCT00902980', 'NCT01266824', 'NCT03418909' ] article = ec.efetch(db='pubmed', id=id) for i, a in enumerate(article): crud.pubmedarticle_to_db(a, 'systematic_reviews') for n in ncts[:3]: crud.review_trial(id, n, False, 'included', 'testuser_1', 1) for n in ncts[3:]: crud.review_trial(id, n, False, 'relevant', 'testuser_1', 1) crud.complete_studies(id, True) metadata = crud.review_medtadata_db(id) self.assertEqual(metadata['included_complete'], True) trials = crud.get_review_trials_fast(id)['reg_trials'] for i, t in enumerate(trials): if t['nct_id'] in ncts[:3]: self.assertEqual(trials[i]['verified'], True) self.assertEqual(trials[i]['relationship'], 'included') if t['nct_id'] in ncts[3:]: self.assertEqual(trials[i]['verified'], False) self.assertEqual(trials[i]['relationship'], 'relevant') crud.complete_studies(id, False) trials = crud.get_review_trials_fast(id)['reg_trials'] for i, t in enumerate(trials): if t['nct_id'] in ncts[:3]: self.assertEqual(trials[i]['verified'], False) self.assertEqual(trials[i]['relationship'], 'included')
def test_review_lock_status(self): ec = Client() ids = [28616955, 28800192, 28797191] for id in ids: self.assertIsNone(crud.review_medtadata_db(id)) article = ec.efetch(db='pubmed', id=ids) for i, a in enumerate(article): crud.pubmedarticle_to_db(a, 'systematic_reviews') self.assertEqual(crud.review_lock_status(ids[i]), False) crud.complete_studies(ids[i], True) self.assertEqual(crud.review_lock_status(ids[i]), True) crud.complete_studies(ids[i], False) self.assertEqual(crud.review_lock_status(ids[i]), False)
def included_complete(): """ mark the current review as having a complete list of included trials @return: success/failure message """ if not current_user.is_authenticated: return "Sorry! This action is only available to logged-in users", 400, { 'ContentType': 'application/json' } data = request.json review = data['review_id'] complete = data['value'] crud.complete_studies(review, complete) return json.dumps({ 'success': True, 'message': 'Thanks for verifying!' }), 200, { 'ContentType': 'application/json' }
def test_add_trial_to_locked(self): ec = Client() ids = [28616955, 28800192, 28797191] nct_ids = ['NCT00195624', 'NCT00200889', 'NCT00207688'] test_nct = 'NCT00695409' for id in ids: self.assertIsNone(crud.review_medtadata_db(id)) article = ec.efetch(db='pubmed', id=ids) for i, a in enumerate(article): crud.pubmedarticle_to_db(a, 'systematic_reviews') crud.review_trial(ids[i], nct_ids[i], False, 'included', 'testuser_1', 1, 'up') crud.complete_studies(ids[i], True) crud.review_trial(ids[i], test_nct, False, 'included', 'testuser_1', 1, 'up') self.assertIsNone( crud.check_existing_review_trial(ids[i], test_nct)) crud.complete_studies(ids[i], False) crud.review_trial(ids[i], test_nct, False, 'included', 'testuser_1', 1, 'up') self.assertIsNotNone( crud.check_existing_review_trial(ids[i], test_nct))
def test_get_locked(self): ec = Client() ids = [28569363, 29202845, 28933578] for id in ids: self.assertIsNone(crud.review_medtadata_db(id)) article = ec.efetch(db='pubmed', id=ids) for i, a in enumerate(article): crud.pubmedarticle_to_db(a, 'systematic_reviews') self.assertIsNone(crud.get_locked()) crud.complete_studies(ids[0], True) self.assertEqual(crud.get_locked(), [ids[0]]) crud.complete_studies(ids[1], True) self.assertEqual(crud.get_locked(), [ids[0], ids[1]]) crud.complete_studies(ids[2], True) self.assertEqual(crud.get_locked(), [ids[0], ids[1], ids[2]]) crud.complete_studies(ids[1], False) self.assertEqual(crud.get_locked(), [ids[0], ids[2]])
def test_review_trial(self): ec = Client() id = 28616955 nct_ids = ['NCT00195624', 'NCT00200889', 'NCT00207688'] article = ec.efetch(db='pubmed', id=id) for i, a in enumerate(article): crud.pubmedarticle_to_db(a, 'systematic_reviews') self.assertEqual(len(crud.get_review_trials_fast(id)['reg_trials']), 0) # trial is inserted with correct values crud.review_trial(id, nct_ids[0], False, 'relevant', 'testuser_1', 1) trials = crud.get_review_trials_fast(id)['reg_trials'] for i, t in enumerate(trials): if t['nct_id'] == nct_ids[0]: self.assertEqual(trials[i]['nct_id'], nct_ids[0]) self.assertEqual(trials[i]['upvotes'], 1) self.assertEqual(trials[i]['downvotes'], 0) self.assertEqual(trials[i]['voters'], 'testuser_1') self.assertEqual(trials[i]['verified'], False) self.assertEqual(trials[i]['relationship'], 'relevant') # when the trial is added again by another user, it should recieve an upvote crud.review_trial(id, nct_ids[0], False, 'relevant', 'testuser_2', 2) trials = crud.get_review_trials_fast(id)['reg_trials'] for i, t in enumerate(trials): if t['nct_id'] == nct_ids[0]: self.assertEqual(trials[i]['nct_id'], nct_ids[0]) self.assertEqual(trials[i]['upvotes'], 2) self.assertEqual(set(trials[i]['voters'].split(', ')), {'testuser_1', 'testuser_2'}) self.assertEqual(trials[i]['downvotes'], 0) self.assertEqual(trials[i]['verified'], False) self.assertEqual(trials[i]['relationship'], 'relevant') # adding an existing trial from the relevant column as included will move it crud.review_trial(id, nct_ids[0], False, 'included', 'testuser_2', 2) trials = crud.get_review_trials_fast(id)['reg_trials'] for i, t in enumerate(trials): if t['nct_id'] == nct_ids[0]: self.assertEqual(trials[i]['nct_id'], nct_ids[0]) self.assertEqual(trials[i]['upvotes'], 2) self.assertEqual(set(trials[i]['voters'].split(', ')), {'testuser_1', 'testuser_2'}) self.assertEqual(trials[i]['downvotes'], 0) self.assertEqual(trials[i]['verified'], False) self.assertEqual(trials[i]['relationship'], 'included') # test included trial crud.review_trial(id, nct_ids[1], False, 'included', 'testuser_2', 2) trials = crud.get_review_trials_fast(id)['reg_trials'] for i, t in enumerate(trials): if t['nct_id'] == nct_ids[1]: self.assertEqual(trials[i]['nct_id'], nct_ids[1]) self.assertEqual(trials[i]['upvotes'], 1) self.assertEqual(trials[i]['voters'], 'testuser_2') self.assertEqual(trials[i]['downvotes'], 0) self.assertEqual(trials[i]['verified'], False) self.assertEqual(trials[i]['relationship'], 'included') # trying to insert a relevant trial when it's already included will give a vote but not move the trial crud.review_trial(id, nct_ids[1], False, 'relevant', 'testuser_1', 1) trials = crud.get_review_trials_fast(id)['reg_trials'] for i, t in enumerate(trials): if t['nct_id'] == nct_ids[1]: self.assertEqual(trials[i]['nct_id'], nct_ids[1]) self.assertEqual(trials[i]['upvotes'], 2) self.assertEqual(set(trials[i]['voters'].split(', ')), {'testuser_1', 'testuser_2'}) self.assertEqual(trials[i]['downvotes'], 0) self.assertEqual(trials[i]['verified'], False) self.assertEqual(trials[i]['relationship'], 'included') # except for user_id 17 which can move included to relevant crud.review_trial(id, nct_ids[1], False, 'relevant', 'cochranebot', 17, vote_type='down') trials = crud.get_review_trials_fast(id)['reg_trials'] for i, t in enumerate(trials): if t['nct_id'] == nct_ids[1]: self.assertEqual(trials[i]['nct_id'], nct_ids[1]) self.assertEqual(trials[i]['upvotes'], 2) self.assertEqual(set(trials[i]['voters'].split(', ')), {'cochranebot', 'testuser_1', 'testuser_2'}) self.assertEqual(trials[i]['downvotes'], 1) self.assertEqual(trials[i]['verified'], False) self.assertEqual(trials[i]['relationship'], 'relevant') # if the review is locked and the trial is included, allow a vote crud.review_trial(id, nct_ids[2], False, 'included', 'testuser_1', 1) crud.complete_studies(id, True) crud.review_trial(id, nct_ids[2], False, 'included', 'testuser_2', 2) trials = crud.get_review_trials_fast(id)['reg_trials'] for i, t in enumerate(trials): if t['nct_id'] == nct_ids[2]: self.assertEqual(trials[i]['nct_id'], nct_ids[2]) self.assertEqual(trials[i]['upvotes'], 2) self.assertEqual(set(trials[i]['voters'].split(', ')), {'testuser_1', 'testuser_2'}) self.assertEqual(trials[i]['downvotes'], 0) self.assertEqual(trials[i]['verified'], True) self.assertEqual(trials[i]['relationship'], 'included')