Skip to content

Commit

Permalink
Write test for rendering paper
Browse files Browse the repository at this point in the history
  • Loading branch information
bfirsh committed Jan 23, 2020
1 parent df07e94 commit 81d57ef
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 11 deletions.
31 changes: 21 additions & 10 deletions arxiv_vanity/papers/tests/test_views.py
Expand Up @@ -5,13 +5,15 @@
from unittest import mock
from django.conf import settings
from django.test import TestCase, override_settings
from ..models import Render
from ..models import Render, Paper
from ..views import convert_query_to_arxiv_id
from .utils import (
create_paper,
create_render,
create_render_with_html,
create_source_file,
patch_update_or_create_from_arxiv_id,
patch_render_run,
)


Expand Down Expand Up @@ -50,15 +52,11 @@ def tearDown(self):
def test_it_outputs_rendered_papers(self):
source_file = create_source_file(arxiv_id="1234.5678", file="foo.tar.gz")
paper = create_paper(
arxiv_id="1234.5678",
title="Some paper",
source_file=source_file,
updated=datetime.datetime(
2017, 8, 5, 17, 46, 28, tzinfo=datetime.timezone.utc
),
arxiv_id="1234.5678", title="Some paper", source_file=source_file,
)
render = create_render_with_html(paper=paper)
res = self.client.get("/papers/1234.5678/")
self.assertEqual(res.status_code, 200)
content = res.content.decode("utf-8")
self.assertEqual(res["Cache-Control"], "public, max-age=60")
# using .count() because multiple copies of script were inserted at one point
Expand Down Expand Up @@ -86,9 +84,22 @@ def test_it_shows_an_error_if_a_paper_is_not_renderable(self):
self.assertIn("have LaTeX source code", str(res.content))
self.assertIn("https://arxiv.org/pdf/1234.5678", str(res.content))

def test_it_creates_new_papers_if_they_dont_exist(self):
# TODO(bfirsh): needs mocking of the arxiv API and creating new renders
pass
@patch_update_or_create_from_arxiv_id()
@patch_render_run()
def test_it_creates_new_papers_if_they_dont_exist(self, mock_create, mock_run):
res = self.client.get("/papers/1234.5678/")
self.assertEqual(res.status_code, 503)
self.assertIn("This paper is rendering!", str(res.content))
self.assertEqual(
res["Cache-Control"], "max-age=0, no-cache, no-store, must-revalidate"
)

mock_create.assert_called_once()
mock_run.assert_called_once()

render = Render.objects.latest()
self.assertEqual(render.paper.arxiv_id, "1234.5678")
self.assertEqual(render.state, Render.STATE_RUNNING)

def test_it_shows_a_message_if_the_paper_is_being_rendered(self):
source_file = create_source_file(arxiv_id="1234.5678", file="foo.tar.gz")
Expand Down
22 changes: 21 additions & 1 deletion arxiv_vanity/papers/tests/utils.py
@@ -1,9 +1,10 @@
import datetime
import os
import shutil
from unittest import mock
import uuid
from django.conf import settings
from ..models import Paper, Render, SourceFileBulkTarball, SourceFile
from ..models import Paper, Render, SourceFileBulkTarball, SourceFile, PaperQuerySet


def create_paper(
Expand Down Expand Up @@ -87,3 +88,22 @@ def create_source_file_bulk_tarball(num_items=None):

def create_source_file(arxiv_id=None, file=None):
return SourceFile.objects.create(arxiv_id=arxiv_id or uuid.uuid4(), file=file)


def patch_render_run():
def f(self):
self.container_id = "abc123"
self.state = Render.STATE_RUNNING
self.save()

return mock.patch.object(Render, "run", side_effect=f, autospec=True)


def patch_update_or_create_from_arxiv_id():
def f(self, arxiv_id):
source_file = create_source_file(arxiv_id=arxiv_id, file="foo.tar.gz")
return create_paper(arxiv_id=arxiv_id, source_file=source_file), None

return mock.patch.object(
PaperQuerySet, "update_or_create_from_arxiv_id", side_effect=f, autospec=True
)

0 comments on commit 81d57ef

Please sign in to comment.