diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d947ce2d..b1bb88a5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,6 +22,8 @@ jobs: run: | python -m pip install --upgrade pip pip install .[dev] + sudo apt-get update + sudo apt-get install -y graphviz - name: Test with pytest run: pytest @@ -59,6 +61,8 @@ jobs: run: | python -m pip install --upgrade pip pip install -e .[dev] + sudo apt-get update + sudo apt-get install -y graphviz - name: Run coverage run: | pytest --cov=pgraph --cov-report=xml:coverage.xml diff --git a/tests/test_graph.py b/tests/test_graph.py index a183380a..94502b15 100644 --- a/tests/test_graph.py +++ b/tests/test_graph.py @@ -781,6 +781,7 @@ def test_plot(self): def test_dotfile(self): import pathlib + import unittest.mock g = UGraph() v1 = g.add_vertex(coord=[0,0], name='v1') @@ -795,7 +796,17 @@ def test_dotfile(self): g.dotfile(str(path)) self.assertTrue(path.is_file()) - g.showgraph() + # showgraph() pops a PDF up in a browser via webbrowser.open() -- + # mock that so the test runs headless, but still exercise the real + # dot->PDF rendering and check the result is an actual PDF file. + with unittest.mock.patch('pgraph.PGraph.webbrowser.open') as mock_open: + g.showgraph() + + mock_open.assert_called_once() + pdf_url = mock_open.call_args[0][0] + pdf_path = pathlib.Path(pdf_url.removeprefix('file://')) + self.assertTrue(pdf_path.is_file()) + self.assertEqual(pdf_path.read_bytes()[:5], b'%PDF-') class TestDGraph(unittest.TestCase):