X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/5bb4da02c2c8c92d017e8b6be57eb442cc8f04ff..d2c938eb02c414057aa2186c7ae695d5d0d14377:/tests/test_primer.py

diff --git a/tests/test_primer.py b/tests/test_primer.py
index e7f99fd..0a9d2ae 100644
--- a/tests/test_primer.py
+++ b/tests/test_primer.py
@@ -9,9 +9,10 @@ from io import StringIO
 from os import getpid
 from pathlib import Path
 from platform import system
+from pytest import LogCaptureFixture
 from subprocess import CalledProcessError
 from tempfile import TemporaryDirectory, gettempdir
-from typing import Any, Callable, Generator, Iterator, Tuple
+from typing import Any, Callable, Iterator, List, Tuple, TypeVar
 from unittest.mock import Mock, patch
 
 from click.testing import CliRunner
@@ -20,6 +21,14 @@ from black_primer import cli, lib
 
 
 EXPECTED_ANALYSIS_OUTPUT = """\
+
+Failed projects:
+
+## black:
+ - Returned 69
+ - stdout:
+Black didn't work
+
 -- primer results 📊 --
 
 68 / 69 succeeded (98.55%) ✅
@@ -28,12 +37,7 @@ EXPECTED_ANALYSIS_OUTPUT = """\
  - 0 projects skipped due to Python version
  - 0 skipped due to long checkout
 
-Failed projects:
-
-## black:
- - Returned 69
- - stdout:
-Black didn't work
+Failed projects: black
 
 """
 FAKE_PROJECT_CONFIG = {
@@ -44,7 +48,9 @@ FAKE_PROJECT_CONFIG = {
 
 
 @contextmanager
-def capture_stdout(command: Callable, *args: Any, **kwargs: Any) -> Generator:
+def capture_stdout(
+    command: Callable[..., Any], *args: Any, **kwargs: Any
+) -> Iterator[str]:
     old_stdout, sys.stdout = sys.stdout, StringIO()
     try:
         command(*args, **kwargs)
@@ -87,6 +93,24 @@ async def return_zero(*args: Any, **kwargs: Any) -> int:
     return 0
 
 
+if sys.version_info >= (3, 9):
+    T = TypeVar("T")
+    Q = asyncio.Queue[T]
+else:
+    T = Any
+    Q = asyncio.Queue
+
+
+def collect(queue: Q) -> List[T]:
+    ret = []
+    while True:
+        try:
+            item = queue.get_nowait()
+            ret.append(item)
+        except asyncio.QueueEmpty:
+            return ret
+
+
 class PrimerLibTests(unittest.TestCase):
     def test_analyze_results(self) -> None:
         fake_results = lib.Results(
@@ -157,7 +181,7 @@ class PrimerLibTests(unittest.TestCase):
         stdout, stderr = loop.run_until_complete(
             lib._gen_check_output([lib.BLACK_BINARY, "--help"])
         )
-        self.assertTrue("The uncompromising code formatter" in stdout.decode("utf8"))
+        self.assertIn("The uncompromising code formatter", stdout.decode("utf8"))
         self.assertEqual(None, stderr)
 
         # TODO: Add a test to see failure works on Windows
@@ -196,10 +220,25 @@ class PrimerLibTests(unittest.TestCase):
         with patch("black_primer.lib.git_checkout_or_rebase", return_false):
             with TemporaryDirectory() as td:
                 return_val = loop.run_until_complete(
-                    lib.process_queue(str(config_path), Path(td), 2)
+                    lib.process_queue(
+                        str(config_path), Path(td), 2, ["django", "pyramid"]
+                    )
                 )
                 self.assertEqual(0, return_val)
 
+    @event_loop()
+    def test_load_projects_queue(self) -> None:
+        """Test the process queue on primer itself
+        - If you have non black conforming formatting in primer itself this can fail"""
+        loop = asyncio.get_event_loop()
+        config_path = Path(lib.__file__).parent / "primer.json"
+
+        config, projects_queue = loop.run_until_complete(
+            lib.load_projects_queue(config_path, ["django", "pyramid"])
+        )
+        projects = collect(projects_queue)
+        self.assertEqual(projects, ["django", "pyramid"])
+
 
 class PrimerCLITests(unittest.TestCase):
     @event_loop()
@@ -215,6 +254,7 @@ class PrimerCLITests(unittest.TestCase):
             "workdir": str(work_dir),
             "workers": 69,
             "no_diff": False,
+            "projects": "",
         }
         with patch("black_primer.cli.lib.process_queue", return_zero):
             return_val = loop.run_until_complete(cli.async_main(**args))  # type: ignore
@@ -229,5 +269,23 @@ class PrimerCLITests(unittest.TestCase):
         self.assertEqual(result.exit_code, 0)
 
 
+def test_projects(caplog: LogCaptureFixture) -> None:
+    with event_loop():
+        runner = CliRunner()
+        result = runner.invoke(cli.main, ["--projects=STDIN,asdf"])
+        assert result.exit_code == 0
+        assert "1 / 1 succeeded" in result.output
+        assert "Projects not found: {'asdf'}" in caplog.text
+
+    caplog.clear()
+
+    with event_loop():
+        runner = CliRunner()
+        result = runner.invoke(cli.main, ["--projects=fdsa,STDIN"])
+        assert result.exit_code == 0
+        assert "1 / 1 succeeded" in result.output
+        assert "Projects not found: {'fdsa'}" in caplog.text
+
+
 if __name__ == "__main__":
     unittest.main()