def setUp(self): self.tmp_dir = tempfile.TemporaryDirectory() with open(os.path.join(self.tmp_dir.name, "README"), "w") as f: f.write("line 1\n") f.write("line 2\n") f.write("line 3\n") f.write("line 4\n") f.write("line 5\n") self.repo = Repo(self.tmp_dir.name)
class TestSearch(unittest.TestCase): def setUp(self): self.tmp_dir = tempfile.TemporaryDirectory() with open(os.path.join(self.tmp_dir.name, "README"), "w") as f: f.write("line 1\n") f.write("line 2\n") f.write("line 3\n") f.write("line 4\n") f.write("line 5\n") self.repo = Repo(self.tmp_dir.name) def tearDown(self): self.tmp_dir.cleanup() def test_search_one_match(self): self.assertEqual(self._render_without_parts(self.repo.search("2")), { "matches": [ { "file": "README", "row_first_match": 2, "lines": [ {"row": 1}, {"row": 2}, {"row": 3}, ], }, ] }) def test_search_two_matches(self): self.assertEqual(self._render_without_parts(self.repo.search("1|5")), { "matches": [ { "file": "README", "row_first_match": 1, "lines": [ {"row": 1}, {"row": 2}, {"row": 4}, {"row": 5}, ], }, ] }) def _render_without_parts(self, search_result): rendered = search_result.render() for match in rendered["matches"]: for line in match["lines"]: del line["parts"] return rendered
def file(request, project_slug): project = Project.objects.get(slug=project_slug) name = request.GET.get("name") highlight = request.GET.get("highlight", "") return JsonResponse( Repo(project.root).get_file(name).render_file( _get_annotations(project.root, name, highlight)))
def _get_highlight_annotations(root, name, highlight): if len(highlight.strip()) > 0: return Repo(root).search(highlight, name).get_annotations(name) return []
def search(request, project_slug, term): project = Project.objects.get(slug=project_slug) return JsonResponse(Repo(project.root).search(term).render())
class TestSearch(unittest.TestCase): def setUp(self): self.tmp_dir = tempfile.TemporaryDirectory() with open(os.path.join(self.tmp_dir.name, "README"), "w") as f: f.write("line 1\n") f.write("line 2\n") f.write("line 3\n") f.write("line 4\n") f.write("line 5\n") self.repo = Repo(self.tmp_dir.name) def tearDown(self): self.tmp_dir.cleanup() def test_search_one_match(self): self.assertEqual( self._render_without_parts(self.repo.search("2")), { "matches": [ { "file": "README", "row_first_match": 2, "lines": [ { "row": 1 }, { "row": 2 }, { "row": 3 }, ], }, ] }) def test_search_two_matches(self): self.assertEqual( self._render_without_parts(self.repo.search("1|5")), { "matches": [ { "file": "README", "row_first_match": 1, "lines": [ { "row": 1 }, { "row": 2 }, { "row": 4 }, { "row": 5 }, ], }, ] }) def _render_without_parts(self, search_result): rendered = search_result.render() for match in rendered["matches"]: for line in match["lines"]: del line["parts"] return rendered