def test_check_url_is_false_for_malformed_url(self): url = self.base_url + "check_url/" data = {"url": "bitcoin.org/bitcoin.pdf/"} response = get_authenticated_post_response(self.user, url, data) self.assertContains(response, "false", status_code=200) data = {"url": "bitcoin"} response = get_authenticated_post_response(self.user, url, data) self.assertContains(response, "false", status_code=200)
def get_propose_edit_post_response(self, user): url = '/api/summary/propose_edit/' data = None return get_authenticated_post_response(user, url, data, content_type='application/json')
def get_summary_post_response(self, user, paper_id): url = '/api/summary/' data = {'paper': paper_id, 'summary': 'summary text'} return get_authenticated_post_response(user, url, data, content_type='application/json')
def get_thread_post_response(self, user): url = build_discussion_default_url(self, 'thread') form_data = build_thread_form(self.paper.id, 'Permission Thread', 'test permissions thread') response = get_authenticated_post_response( user, url, form_data, content_type='multipart/form-data') return response
def get_summary_post_response(self, user, paper_id=None): if paper_id is None: paper_id = self.paper.id url = self.base_url data = build_summary_data(self.summary_text, paper_id, None) response = get_authenticated_post_response( user, url, data, content_type='application/json') return response
def get_thread_submission_response(self, user): paper = self.create_paper_without_authors() paper_id = paper.id url = self.base_url + f'{paper_id}/discussion/' form_data = self.build_default_thread_form(paper_id) response = get_authenticated_post_response( user, url, form_data, content_type='multipart/form-data') return response
def get_upvote_response(self, user, thread): url = self.base_url + ( f'{thread.paper.id}/discussion/{thread.id}/upvote/') data = {} response = get_authenticated_post_response( user, url, data, content_type='application/json') return response
def test_search_by_url_unsupported_pdf(self): url = self.base_url + "search_by_url/" data = {"url": "https://bitcoin.org/bitcoin.pdf"} response = get_authenticated_post_response(self.user, url, data) self.assertEquals(response.status_code, 200) result = response.data self.assertTrue(result["url_is_pdf"]) self.assertTrue(result["url_is_unsupported_pdf"]) self.assertEqual(result["csl_item"]["URL"], data["url"]) self.assertEqual(result["oa_pdf_location"]["url_for_pdf"], data["url"])
def get_hub_post_response(self, user): url = self.base_url + 'hub/' data = build_hub_data('Permission Hub') response = get_authenticated_post_response( user, url, data, content_type='application/json' ) return response
def get_flag_response(self, user): url = self.base_url + f'{self.paper.id}/flag/' data = {'reason': self.flag_reason} response = get_authenticated_post_response( user, url, data, content_type='application/json' ) return response
def get_paper_submission_response(self, user): url = self.base_url form_data = self.build_paper_form() response = get_authenticated_post_response( user, url, form_data, content_type='multipart/form-data' ) return response
def get_downvote_response(self, user): url = self.base_url + f'{self.paper.id}/downvote/' data = {} response = get_authenticated_post_response( user, url, data, content_type='application/json' ) return response
def test_bounce_notification_blacklists_email(self): url = '/email_notifications/' data = self.build_bounce_request_data() response = get_authenticated_post_response(self.user, url, data, content_type='plain/text') self.assertContains(response, '{}', status_code=200) recipient = EmailRecipient.objects.get(email=self.bounced_email) self.assertTrue(recipient.do_not_email)
def get_assign_moderator_response(self, user, paper): url = self.base_url + f'{paper.id}/assign_moderator/' random_user = self.create_random_authenticated_user('random') data = {'moderators': random_user.id} response = get_authenticated_post_response( user, url, data, content_type='application/json' ) return response
def get_post_response(self, user, data=None): url = self.base_url if data is None: data = { 'paper': self.paper.id, 'text': 'Hello, world', 'plain_text': 'Hello, world' } response = get_authenticated_post_response( user, url, data, content_type='application/json') return response
def get_thread_submission_response(self, paper_id): user = self.create_random_authenticated_user('unique_value') url = self.base_url + f'{paper_id}/discussion/' form_data = self.build_default_thread_form(paper_id) response = get_authenticated_post_response( user, url, form_data, content_type='multipart/form-data' ) return response
def get_comment_post_response(self, user): thread = self.create_default_thread() thread_id = thread.id paper_id = thread.paper.id url = self.base_url + f'{paper_id}/discussion/{thread_id}/comment/' form_data = self.build_default_comment_form(thread_id) response = get_authenticated_post_response( user, url, form_data, content_type='multipart/form-data') return response
def test_api_token_can_upload_paper(self): api_token_url = "/api/user_external_token/" api_token_response = get_authenticated_post_response( self.user, api_token_url, {}) token = api_token_response.json().get("token", "") api_token_client = Client(HTTP_RH_API_KEY=token) res = api_token_client.post( self.base_url, { "title": "Paper Uploaded via API Token", "paper_type": "REGULAR" }, ) self.assertEquals(res.status_code, 201)
def test_search_by_url_publisher(self): url = self.base_url + "search_by_url/" data = {"url": "https://www.nature.com/articles/s41586-019-1099-1"} response = get_authenticated_post_response(self.user, url, data) self.assertEquals(response.status_code, 200) result = response.data self.assertEquals(result["url"], data["url"]) self.assertFalse(result["url_is_pdf"]) self.assertFalse(result["url_is_unsupported_pdf"]) self.assertEquals( result["csl_item"]["title"], "Restoration of brain circulation and cellular functions hours post-mortem", ) # noqa E501 self.assertEquals(result["csl_item"]["DOI"], "10.1038/s41586-019-1099-1")
def test_search_by_url_pmid(self): """ Search by PMID without a DOI from an inactive journal """ url = self.base_url + "search_by_url/" data = {"url": "https://www.ncbi.nlm.nih.gov/pubmed/18888140"} response = get_authenticated_post_response(self.user, url, data) self.assertEquals(response.status_code, 200) result = response.data self.assertEquals(result["url"], data["url"]) self.assertFalse(result["url_is_pdf"]) self.assertFalse(result["url_is_unsupported_pdf"]) self.assertEquals( result["csl_item"]["title"], "[Major achievements in the second plan year in the Soviet Union].", ) # noqa E501 self.assertIsNone(result["oa_pdf_location"])
def test_search_by_url_arxiv(self): url = self.base_url + "search_by_url/" data = {"url": "https://arxiv.org/abs/1407.3561v1", "search": True} response = get_authenticated_post_response(self.user, url, data) self.assertEquals(response.status_code, 200) result = response.data self.assertEquals(result["url"], data["url"]) self.assertFalse(result["url_is_pdf"]) self.assertEquals( result["csl_item"]["title"], "IPFS - Content Addressed, Versioned, P2P File System", ) self.assertEqual( result["oa_pdf_location"]["url_for_pdf"], "https://arxiv.org/pdf/1407.3561v1.pdf", ) self.assertIsInstance(result["search"], list)
def test_search_by_url_doi(self): url = self.base_url + "search_by_url/" data = {"url": "https://doi.org/10.1038/ng.3259"} response = get_authenticated_post_response(self.user, url, data) self.assertEquals(response.status_code, 200) result = response.data self.assertEquals(result["url"], data["url"]) self.assertFalse(result["url_is_pdf"]) self.assertFalse(result["url_is_unsupported_pdf"]) self.assertEquals( result["csl_item"]["title"], "Understanding multicellular function and disease with human tissue-specific networks", ) # noqa E501 self.assertEquals(result["csl_item"]["DOI"], "10.1038/ng.3259") self.assertEquals( result["oa_pdf_location"]["url_for_pdf"], "http://europepmc.org/articles/pmc4828725?pdf=render", )
def test_search_by_url_arxiv_pdf(self): url = self.base_url + "search_by_url/" data = {"url": "https://arxiv.org/pdf/1407.3561.pdf"} response = get_authenticated_post_response(self.user, url, data) self.assertEquals(response.status_code, 200) result = response.data self.assertEquals(result["url"], data["url"]) self.assertTrue(result["url_is_pdf"]) self.assertFalse(result["url_is_unsupported_pdf"]) self.assertEquals( result["csl_item"]["title"], "IPFS - Content Addressed, Versioned, P2P File System", ) pdf_location = result["oa_pdf_location"] self.assertEqual(pdf_location["url_for_pdf"], "https://arxiv.org/pdf/1407.3561.pdf") self.assertEqual(pdf_location["license"], "cc-by") self.assertEqual(pdf_location["url_for_landing_page"], "https://arxiv.org/abs/1407.3561") self.assertFalse("search" in result)
def get_invite_to_hub_response(self, user, hub, emails): url = self.base_url + f'{hub.id}/invite_to_hub/' data = {'emails': emails} return get_authenticated_post_response( user, url, data, headers={'HTTP_ORIGIN': 'researchhub.com'})
def get_hub_response(self, url, user): data = None return get_authenticated_post_response(user, url, data)
def get_withdrawals_post_response(self, user): url = '/api/withdrawal/' return get_authenticated_post_response(user, url, {})
def test_search_by_url_bad(self): url = self.base_url + "search_by_url/" data = {"url": "org/this-is-a-bad-url"} response = get_authenticated_post_response(self.user, url, data) self.assertContains(response, "Double check that URL", status_code=400)
def get_bookmark_post_response(self, user): url = self.base_url + f"{self.paper.id}/bookmark/" data = None response = get_authenticated_post_response( user, url, data, content_type="application/json") return response
def test_check_url_is_false_if_url_does_NOT_have_pdf(self): url = self.base_url + "check_url/" data = {"url": "https://bitcoin.org/en/"} response = get_authenticated_post_response(self.user, url, data) self.assertContains(response, "false", status_code=200)
def test_check_url_is_true_if_url_has_pdf(self): url = self.base_url + "check_url/" data = {"url": "https://bitcoin.org/bitcoin.pdf"} response = get_authenticated_post_response(self.user, url, data) self.assertContains(response, "true", status_code=200)