From 72d84c7d033d71bd36885eb474f7c17b484eab42 Mon Sep 17 00:00:00 2001 From: Ondrej Platek Date: Wed, 6 Nov 2024 14:37:07 +0100 Subject: [PATCH] add functional tests for factgenie list command Testing listing of dataset (inputs) campaigns and skipping testing for outputs On fresh factgenie copy it tests just there the commands produce empty list --- tests/test_cli_commands.py | 68 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 tests/test_cli_commands.py diff --git a/tests/test_cli_commands.py b/tests/test_cli_commands.py new file mode 100644 index 00000000..df4a3b77 --- /dev/null +++ b/tests/test_cli_commands.py @@ -0,0 +1,68 @@ +""" +Run cli commands which wrap high level functionalites as a kind of functional tests. +""" + +from pathlib import Path +import subprocess +import logging + +from factgenie import INPUT_DIR, OUTPUT_DIR, CAMPAIGN_DIR + + +def test_factgenie_help(): + cmd = "factgenie --help" + result = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + logging.debug(f"RUNNING ${cmd}\n{result.stdout.decode()}") + assert result.returncode == 0 + assert b"Usage: factgenie [OPTIONS] COMMAND [ARGS]..." in result.stdout + + +def test_factgenie_routes(): + """Routes list endpoints to be called with GET, POST, PUT, DELETE methods""" + cmd = "factgenie routes" + result = subprocess.run(cmd, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + assert result.returncode == 0 + + +# TODO by default there are no datasets in empty fatgenie data/input directory +# download some and create and test download command by that +def test_factgenie_list_datasets(): + """List datasets defined as inputs in factgenie.INPUT_DIR + factgenie.INPUTDIR is factgenie/data/input""" + assert Path(INPUT_DIR).exists() + assert "factgenie/data/input" in str(INPUT_DIR), f"INPUT_DIR: {INPUT_DIR}" + cmd = "factgenie list datasets" + result = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + logging.debug(f"RUNNING ${cmd}\n{result.stdout.decode()}") + assert result.returncode == 0 + cli_datasets = sorted([d.strip() for d in result.stdout.decode().split("\n") if len(d.strip()) > 0]) + dir_datasets = sorted([d.name for d in Path(INPUT_DIR).iterdir() if d.is_dir()]) + logging.debug(f"CLI: {cli_datasets}") + logging.debug(f"DIR: {dir_datasets}") + assert cli_datasets == dir_datasets + + +def test_factgenie_list_outputs(): + assert Path(OUTPUT_DIR).exists() + # Skipping the rest of the logic for now. Parsing factgenie list outputs is fragile. + + +def test_factgenie_list_campaigns(): + """List campaigns defined as inputs in factgenie.CAMPAIGN_DIR + factgenie.CAMPAIGN_DIR is factgenie/data/campaigns""" + assert Path(CAMPAIGN_DIR).exists() + assert "factgenie/campaigns" in str(CAMPAIGN_DIR), f"CAMPAIGN_DIR: {CAMPAIGN_DIR}" + cmd = "factgenie list campaigns" + result = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + logging.debug(f"RUNNING ${cmd}\n{result.stdout.decode()}") + assert result.returncode == 0 + cli_campaigns = sorted([d.strip() for d in result.stdout.decode().split("\n") if len(d.strip()) > 0]) + dir_campaigns = sorted([d.name for d in Path(CAMPAIGN_DIR).iterdir() if d.is_dir()]) + logging.debug(f"CLI: {cli_campaigns}") + logging.debug(f"DIR: {dir_campaigns}") + assert cli_campaigns == dir_campaigns + + +if __name__ == "__main__": + # test_factgenie_list_datasets() + pass