diff --git a/features/backup_plan_cli_add.feature b/features/backup_plan_cli_add.feature new file mode 100644 index 0000000..b8272f9 --- /dev/null +++ b/features/backup_plan_cli_add.feature @@ -0,0 +1,15 @@ +Feature: Creating a backup plan with the CLI + + @fixture.injector + @fixture.in_memory_database + @fixture.cli + Scenario Outline: Create an new unique backup plan with the CLI + Given the CLI arguments are "" + When I run the CLI + Then the CLI executed successfully + + Examples: + | arguments | + | plans add --label my_label --source /mnt -d /mnt2 -d /mnt3 | + | plans add --label label2 --source /mnt -d /mnt2 -d /mnt3 | + diff --git a/features/backup_plan_model.feature b/features/backup_plan_model.feature index e28fc06..8b2b774 100644 --- a/features/backup_plan_model.feature +++ b/features/backup_plan_model.feature @@ -1,4 +1,4 @@ -Feature: Creating the source +Feature: Creating a backup plan @fixture.injector @fixture.in_memory_database diff --git a/features/environment.py b/features/environment.py index e3321c2..e78db0f 100644 --- a/features/environment.py +++ b/features/environment.py @@ -1,10 +1,24 @@ from behave import fixture, use_fixture from injector import Injector +from typer.testing import CliRunner from tui_rsync.core.components.backup_plan.application.repository.backup_plan_repository import BackupPlanRepository from tui_rsync.core.components.backup_plan.application.services.backup_plan_service import BackupPlanService from tui_rsync.infrastructure.configuration import TestingConfiguration, CurrentConfiguration from tui_rsync.infrastructure.orm import InMemoryDatabaseManager +from tui_rsync.user_interface.cli.cli import cli_app + + +@fixture +def setup_cli_runner(context): + context.cli_runner = CliRunner() + yield context.cli_runner + + +@fixture +def setup_cli_app(context): + context.cli_app = cli_app + yield context.cli_app @fixture @@ -33,3 +47,6 @@ def before_tag(context, tag): use_fixture(setup_in_memory_database_manager, context) if tag == "fixture.backup_plan_service": use_fixture(setup_backup_plan_service, context) + if tag == "fixture.cli": + use_fixture(setup_cli_app, context) + use_fixture(setup_cli_runner, context) diff --git a/features/steps/cli_runner_steps.py b/features/steps/cli_runner_steps.py new file mode 100644 index 0000000..ef227ac --- /dev/null +++ b/features/steps/cli_runner_steps.py @@ -0,0 +1,34 @@ +from behave import given, when, then + + +@given('the CLI arguments are "{arguments}"') +def given_cli_arguments(context, arguments): + print(f"{arguments}") + context.arguments = arguments.split() + print(f"{context.arguments}") + + +@when('I run the CLI') +def when_run_cli(context): + context.cli_result = context.cli_runner.invoke(context.cli_app, context.arguments) + + +@then('the CLI executed successfully') +def then_cli_executed_successfully(context): + assert context.cli_result.exit_code == 0 + + +@then('the CLI executed with an error') +def then_cli_executed_with_error(context): + assert context.cli_result.exit_code == 0 + + +@then('the CLI output contains "{string}"') +def then_cli_output_contains(context, string): + assert string in context.cli_result.stdout + + +@then('the CLI contains the error: "{string}"') +def then_cli_output_contains_error(context, string): + assert string in context.cli_result.stdout +