From d9b599bad2b2125284012d54ace35ccbdf372743 Mon Sep 17 00:00:00 2001 From: Nikhil Badyal Date: Sat, 23 Sep 2023 21:32:32 +0530 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20Added=20Click=20test=20cases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 1 + test/click/cli_test.py | 60 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 test/click/cli_test.py diff --git a/requirements.txt b/requirements.txt index 186d8ea..b4754c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,7 @@ elasticsearch==8.9.0 Faker==19.6.2 loguru==0.7.2 pytest==7.4.2 +pytest-click==1.1.0 pytest-cov==4.1.0 pytest-emoji==0.2.0 pytest-loguru==0.2.0 diff --git a/test/click/cli_test.py b/test/click/cli_test.py new file mode 100644 index 0000000..baddc72 --- /dev/null +++ b/test/click/cli_test.py @@ -0,0 +1,60 @@ +"""Click CLI test cases.""" +import inspect +from pathlib import Path +from test.esxport._export_test import TestExport +from unittest.mock import patch + +from click.testing import CliRunner +from typing_extensions import Self + +from src.esxport import EsXport +from src.esxport_cli import cli + +args = { + "q": '{"query":{"match_all":{}}}', + "o": "output.csv", + "i": "index1", +} +usage_error_code = 2 + + +# noinspection PyTypeChecker +class TestCli: + """Cli Test cases.""" + + def test_query_is_mandatory(self: Self, cli_runner: CliRunner) -> None: + """Test Query param is mandatory.""" + query_missing = "Error: Missing option '-q' / '--query'." + result = cli_runner.invoke(cli, [], catch_exceptions=False) + assert query_missing in result.output + assert result.exit_code == usage_error_code + + def test_output_file_is_mandatory(self: Self, cli_runner: CliRunner) -> None: + """Test Query param is mandatory.""" + query_missing = "Error: Missing option '-o' / '--output-file'." + result = cli_runner.invoke(cli, ["-q", args["q"]], catch_exceptions=False) + assert query_missing in result.output + assert result.exit_code == usage_error_code + + def test_index_is_mandatory(self: Self, cli_runner: CliRunner) -> None: + """Test Index param is mandatory.""" + query_missing = "Error: Missing option '-i' / '--index-prefixes'." + result = cli_runner.invoke(cli, ["-q", args["q"], "-o", args["o"]], input="secret\n", catch_exceptions=False) + assert query_missing in result.output + assert result.exit_code == usage_error_code + + def test_mandatory(self: Self, cli_runner: CliRunner, esxport_obj_with_data: EsXport) -> None: + """Test Index param is mandatory.""" + esxport_obj_with_data.opts.output_file = f"{inspect.stack()[0].function}.csv" + with patch("src.esxport.EsXport", return_value=esxport_obj_with_data): + result = cli_runner.invoke( + cli, + ["-q", args["q"], "-o", args["o"], "-i", args["i"]], + input="password\n", + catch_exceptions=False, + ) + assert result.exit_code == 0 + with Path(esxport_obj_with_data.opts.output_file).open("r") as fp: + lines = len(fp.readlines()) + assert lines == esxport_obj_with_data.es_client.search()["hits"]["total"]["value"] + 1 # 1 for header + TestExport.rm_csv_export_file(esxport_obj_with_data.opts.output_file)