Repository: DevOps-MBSE/AaC (language: python)

Issue:
📋 [TASK] - Improve Tests in print Defs Unit Tests
### Parent Feature

#844

### Task Description

As an AaC Test Developer, I want to expand the test coverage in my unit tests, so that I can have more confidence in the robustness of my code.

### Acceptance Criteria

- [ ] Update test logic as necessary to expand test coverage. 
  - [ ] Happy path and sad path at a minimum
- [ ] (Stretch) Incorporate a behave feature file for testing if applicable.
- [ ] Run `flake8` on the targeted test directory and address findings.
- [ ] Document any identified gaps.

### Unresolved questions

_No response_


Discussion / hints:

Fix patch:
diff --git a/python/features/plugins/check.feature b/python/features/plugins/check.feature
index b3c311641..beb1152a0 100644
--- a/python/features/plugins/check.feature
+++ b/python/features/plugins/check.feature
@@ -3,90 +3,90 @@ Feature: Check example models
 # Alarm Clock
 
     Scenario:  Check the alarm clock model
-        Given I have the "./alarm_clock/alarm_clock.yaml" model
-        When I check the "./alarm_clock/alarm_clock.yaml" model
-        Then I should receive a message that the check was successful
+        Given I have the "./features/alarm_clock/alarm_clock.yaml" file
+        When I run the "check" command with arguments "./features/alarm_clock/alarm_clock.yaml" and with no flags
+        Then I should receive a message that the command was successful
 
     Scenario:  Check the alarm clock usecase
-        Given I have the "./alarm_clock/usecase.yaml" model
-        When I check the "./alarm_clock/usecase.yaml" model with verbose
-        Then I should receive a message that the check was successful
+        Given I have the "./features/alarm_clock/usecase.yaml" file
+        When I run the "check" command with arguments "./features/alarm_clock/usecase.yaml" and with flags "--verbose"
+        Then I should receive a message that the command was successful
         And I should receive a list of successfully evaluated models
 
 # Calculator
 
     Scenario:  Check the calculator spec
-        Given I have the "./calc/spec/Calculator_SystemSpec.yaml" model
-        When I check the "./calc/spec/Calculator_SystemSpec.yaml" model
-        Then I should receive a message that the check was successful
+        Given I have the "./features/calc/spec/Calculator_SystemSpec.yaml" file
+        When I run the "check" command with arguments "./features/calc/spec/Calculator_SystemSpec.yaml" and with no flags
+        Then I should receive a message that the command was successful
 
     Scenario:  Check the calculator model
-        Given I have the "./calc/model/calculator.yaml" model
-        When I check the "./calc/model/calculator.yaml" model with verbose
-        Then I should receive a message that the check was successful
+        Given I have the "./features/calc/model/calculator.yaml" file
+        When I run the "check" command with arguments "./features/calc/model/calculator.yaml" and with flags "--verbose"
+        Then I should receive a message that the command was successful
         And I should receive a list of successfully evaluated models
 
 # Counter
 
     Scenario:  Check the counter model
-        Given I have the "./counter/Counter.yaml" model
-        When I check the "./counter/Counter.yaml" model with verbose
-        Then I should receive a message that the check was successful
+        Given I have the "./features/counter/Counter.yaml" file
+        When I run the "check" command with arguments "./features/counter/Counter.yaml" and with flags "--verbose"
+        Then I should receive a message that the command was successful
         And I should receive a list of successfully evaluated models
 
 # Docs examples
 
     Scenario:  Check the Definitions Example
-        Given I have the "./docs_examples/dev_guide_language_api_definitions/acceptance_test.aac" model
-        When I check the "./docs_examples/dev_guide_language_api_definitions/acceptance_test.aac" model
-        Then I should receive a message that the check was successful
+        Given I have the "./features/docs_examples/dev_guide_language_api_definitions/acceptance_test.aac" file
+        When I run the "check" command with arguments "./features/docs_examples/dev_guide_language_api_definitions/acceptance_test.aac" and with no flags
+        Then I should receive a message that the command was successful
 
     Scenario:  Check the First Inheritance Example
-        Given I have the "./docs_examples/dev_guide_language_api_modeling_inheritance/docs_inheritance_one.aac" model
-        When I check the "./docs_examples/dev_guide_language_api_modeling_inheritance/docs_inheritance_one.aac" model with verbose
-        Then I should receive a message that the check was successful
+        Given I have the "./features/docs_examples/dev_guide_language_api_modeling_inheritance/docs_inheritance_one.aac" file
+        When I run the "check" command with arguments "./features/docs_examples/dev_guide_language_api_modeling_inheritance/docs_inheritance_one.aac" and with flags "--verbose"
+        Then I should receive a message that the command was successful
         And I should receive a list of successfully evaluated models
 
     Scenario:  Check the Second Inheritance Example
-        Given I have the "./docs_examples/dev_guide_language_api_modeling_inheritance/docs_inheritance_two.aac" model
-        When I check the "./docs_examples/dev_guide_language_api_modeling_inheritance/docs_inheritance_two.aac" model
-        Then I should receive a message that the check was successful
+        Given I have the "./features/docs_examples/dev_guide_language_api_modeling_inheritance/docs_inheritance_two.aac" file
+        When I run the "check" command with arguments "./features/docs_examples/dev_guide_language_api_modeling_inheritance/docs_inheritance_two.aac" and with no flags
+        Then I should receive a message that the command was successful
 
     Scenario:  Check the All Possible Plugin Example
-        Given I have the "./docs_examples/dev_guide_plugin_dev_guide/docs_all_possible.aac" model
-        When I check the "./docs_examples/dev_guide_plugin_dev_guide/docs_all_possible.aac" model
-        Then I should receive a message that the check was successful
+        Given I have the "./features/docs_examples/dev_guide_plugin_dev_guide/docs_all_possible.aac" file
+        When I run the "check" command with arguments "./features/docs_examples/dev_guide_plugin_dev_guide/docs_all_possible.aac" and with no flags
+        Then I should receive a message that the command was successful
 
     Scenario:  Check the Do Stuff Plugin Example
-        Given I have the "./docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac" model
-        When I check the "./docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac" model
-        Then I should receive a message that the check was successful
+        Given I have the "./features/docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac" file
+        When I run the "check" command with arguments "./features/docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac" and with no flags
+        Then I should receive a message that the command was successful
 
 # Echo
 
     Scenario:  Check the echo model
-        Given I have the "./echo/EchoService.yaml" model
-        When I check the "./echo/EchoService.yaml" model with verbose
-        Then I should receive a message that the check was successful
+        Given I have the "./features/echo/EchoService.yaml" file
+        When I run the "check" command with arguments "./features/echo/EchoService.yaml" and with flags "--verbose"
+        Then I should receive a message that the command was successful
         And I should receive a list of successfully evaluated models
 
 # Flow
 
     Scenario:  Check the flow system model
-        Given I have the "./flow/System.yaml" model
-        When I check the "./flow/System.yaml" model
-        Then I should receive a message that the check was successful
+        Given I have the "./features/flow/System.yaml" file
+        When I run the "check" command with arguments "./features/flow/System.yaml" and with no flags
+        Then I should receive a message that the command was successful
 
     Scenario:  Check the flow usecase
-        Given I have the "./flow/flow.yaml" model
-        When I check the "./flow/flow.yaml" model with verbose
-        Then I should receive a message that the check was successful
+        Given I have the "./features/flow/flow.yaml" file
+        When I run the "check" command with arguments "./features/flow/flow.yaml" and with flags "--verbose"
+        Then I should receive a message that the command was successful
         And I should receive a list of successfully evaluated models
 
 # Shapes
 
     Scenario:  Check the flow system model
-        Given I have the "./shapes/shapes.aac" model
-        When I check the "./shapes/shapes.aac" model with verbose
-        Then I should receive a message that the check was successful
+        Given I have the "./features/shapes/shapes.aac" file
+        When I run the "check" command with arguments "./features/shapes/shapes.aac" and with flags "--verbose"
+        Then I should receive a message that the command was successful
         And I should receive a list of successfully evaluated models
diff --git a/python/features/plugins/constraint_assignment_arguments.feature b/python/features/plugins/constraint_assignment_arguments.feature
index 3c1de30ec..46529d48e 100644
--- a/python/features/plugins/constraint_assignment_arguments.feature
+++ b/python/features/plugins/constraint_assignment_arguments.feature
@@ -1,11 +1,11 @@
 Feature:  Constraint Assignment Arguments Constraint Evaluation
 
     Scenario:  Check the Shapes constraint spec
-        Given I have the "./shapes/shapes.aac" model
-        When I check the "./shapes/shapes.aac" model
-        Then I should receive a message that the check was successful
+        Given I have the "./features/shapes/shapes.aac" file
+        When I run the "check" command with arguments "./features/shapes/shapes.aac" and with no flags
+        Then I should receive a message that the command was successful
 
     Scenario:  Check the Bad Shapes constraint spec
-        Given I have the "./shapes/bad_shapes.aac" model
-        When I check the "./shapes/bad_shapes.aac" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/shapes/bad_shapes.aac" file
+        When I run the "check" command with arguments "./features/shapes/bad_shapes.aac" and with no flags
+        Then I should receive a message that the command was not successful
diff --git a/python/features/plugins/exclusive_fields.feature b/python/features/plugins/exclusive_fields.feature
index e9e19ef4e..2340556af 100644
--- a/python/features/plugins/exclusive_fields.feature
+++ b/python/features/plugins/exclusive_fields.feature
@@ -1,12 +1,12 @@
-Feature:  Exclusive Fields Evaluation
-
-
-    Scenario:  Check the Shapes constraint spec
-        Given I have the "./shapes/shapes.aac" model
-        When I check the "./shapes/shapes.aac" model
-        Then I should receive a message that the check was successful
-
-    Scenario:  Check the Bad Shapes constraint spec
-        Given I have the "./shapes/bad_shapes.aac" model
-        When I check the "./shapes/bad_shapes.aac" bad model
-        Then I should receive a message that the check was not successful
+Feature:  Exclusive Fields Evaluation
+
+
+    Scenario:  Check the Shapes constraint spec
+        Given I have the "./features/shapes/shapes.aac" file
+        When I run the "check" command with arguments "./features/shapes/shapes.aac" and with no flags
+        Then I should receive a message that the command was successful
+
+    Scenario:  Check the Bad Shapes constraint spec
+        Given I have the "./features/shapes/bad_shapes.aac" file
+        When I run the "check" command with arguments "./features/shapes/bad_shapes.aac" and with no flags
+        Then I should receive a message that the command was not successful
diff --git a/python/features/plugins/gen_plugin.feature b/python/features/plugins/gen_plugin.feature
index da829cb56..3471a0ac8 100644
--- a/python/features/plugins/gen_plugin.feature
+++ b/python/features/plugins/gen_plugin.feature
@@ -1,30 +1,30 @@
 Feature:  Gen-Plugin Evaluation
 
     Scenario: Generate From a Plugin File
-        Given I have a valid "./docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac"
+        Given I have a valid "./features/docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac"
         When gen-plugin is ran with the valid file
         Then I should receive generated plugin files in a temporary directory
 
     Scenario: Generate From a Plugin File Using overwrite
-        Given I have a valid "./docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac"
+        Given I have a valid "./features/docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac"
         When gen-plugin is ran with the valid file
-        And ran again with "./docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff_overwrite.aac" using overwrite flag
+        And ran again with "./features/docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff_overwrite.aac" using overwrite flag
         Then I should receive generated plugin files in a temporary directory
 
     Scenario: Generate From a Plugin File Using evaluate
-        Given I have a valid "./docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac"
+        Given I have a valid "./features/docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff.aac"
         When gen-plugin is ran with the valid file
-        And ran again with "./docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff_overwrite.aac" using evaluate flag
+        And ran again with "./features/docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff_overwrite.aac" using evaluate flag
         Then I should receive generated plugin files in a temporary directory
 
 
     Scenario: Generate From a Project File
-        Given I have a valid "./docs_examples/dev_guide_plugin_dev_guide/docs_project.aac"
+        Given I have a valid "./features/docs_examples/dev_guide_plugin_dev_guide/docs_project.aac"
         When gen-project is ran with the valid file
         Then I should receive generated project files in a temporary directory
 
     Scenario: Run Gen-Plugin on an incomplete plugin File
-        Given I have a valid "./docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff_bad.aac"
+        Given I have a valid "./features/docs_examples/dev_guide_plugin_dev_guide/docs_do_stuff_bad.aac"
         When gen-plugin is ran with the valid file
-        Then I should receive a message that the command was not successful
+        Then I should receive a message that the gen-plugin command was not successful
 
diff --git a/python/features/plugins/primitive.feature b/python/features/plugins/primitive.feature
index 98421815a..10845e5c4 100644
--- a/python/features/plugins/primitive.feature
+++ b/python/features/plugins/primitive.feature
@@ -1,51 +1,51 @@
 Feature: Primitive Constraints
 
     Scenario: Check Primitives
-        Given I have the "./primitives/primitives.yaml" model
-        When I check the "./primitives/primitives.yaml" model
-        Then I should receive a message that the check was successful
+        Given I have the "./features/primitives/primitives.yaml" file
+        When I run the "check" command with arguments "./features/primitives/primitives.yaml" and with no flags
+        Then I should receive a message that the command was successful
 
     Scenario: Check Bad Bool
-        Given I have the "./primitives/bad_bool.yaml" model
-        When I check the "./primitives/bad_bool.yaml" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/primitives/bad_bool.yaml" file
+        When I run the "check" command with arguments "./features/primitives/bad_bool.yaml" and with no flags
+        Then I should receive a message that the command was not successful
 
     Scenario: Check Bad Date
-        Given I have the "./primitives/bad_date.yaml" model
-        When I check the "./primitives/bad_date.yaml" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/primitives/bad_date.yaml" file
+        When I run the "check" command with arguments "./features/primitives/bad_date.yaml" and with no flags
+        Then I should receive a message that the command was not successful
 
     Scenario: Check Bad Directory
-        Given I have the "./primitives/bad_dir.yaml" model
-        When I check the "./primitives/bad_dir.yaml" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/primitives/bad_dir.yaml" file
+        When I run the "check" command with arguments "./features/primitives/bad_dir.yaml" and with no flags
+        Then I should receive a message that the command was not successful
 
     Scenario: Check Bad File
-        Given I have the "./primitives/bad_file.yaml" model
-        When I check the "./primitives/bad_file.yaml" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/primitives/bad_file.yaml" file
+        When I run the "check" command with arguments "./features/primitives/bad_file.yaml" and with no flags
+        Then I should receive a message that the command was not successful
 
     Scenario: Check Bad String
-        Given I have the "./primitives/bad_string.yaml" model
-        When I check the "./primitives/bad_string.yaml" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/primitives/bad_string.yaml" file
+        When I run the "check" command with arguments "./features/primitives/bad_string.yaml" and with no flags
+        Then I should receive a message that the command was not successful
 
     Scenario: Check Bad Integer
-        Given I have the "./primitives/bad_int.yaml" model
-        When I check the "./primitives/bad_int.yaml" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/primitives/bad_int.yaml" file
+        When I run the "check" command with arguments "./features/primitives/bad_int.yaml" and with no flags
+        Then I should receive a message that the command was not successful
 
     Scenario: Check Bad Number
-        Given I have the "./primitives/bad_number.yaml" model
-        When I check the "./primitives/bad_number.yaml" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/primitives/bad_number.yaml" file
+        When I run the "check" command with arguments "./features/primitives/bad_number.yaml" and with no flags
+        Then I should receive a message that the command was not successful
 
     Scenario: Check Bad Dataref
-        Given I have the "./primitives/bad_dataref.yaml" model
-        When I check the "./primitives/bad_dataref.yaml" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/primitives/bad_dataref.yaml" file
+        When I run the "check" command with arguments "./features/primitives/bad_dataref.yaml" and with no flags
+        Then I should receive a message that the command was not successful
 
     Scenario: Check Bad Typeref
-        Given I have the "./primitives/bad_typeref.yaml" model
-        When I check the "./primitives/bad_typeref.yaml" bad model
-        Then I should receive a message that the check was not successful
+        Given I have the "./features/primitives/bad_typeref.yaml" file
+        When I run the "check" command with arguments "./features/primitives/bad_typeref.yaml" and with no flags
+        Then I should receive a message that the command was not successful
diff --git a/python/features/plugins/print_defs.feature b/python/features/plugins/print_defs.feature
new file mode 100644
index 000000000..9f19c097f
--- /dev/null
+++ b/python/features/plugins/print_defs.feature
@@ -0,0 +1,9 @@
+Feature:  Print-Defs Evaluation
+
+    Scenario: Print Definitions from Context
+        When I run the "print-defs" command with no arguments and with no flags
+        Then I should receive a list of definitions to the terminal
+
+    Scenario: Print Definitions from Context with Core-Only
+        When I run the "print-defs" command with no arguments and with flags "--core-only"
+        Then I should receive a list of core definitions to the terminal
diff --git a/python/features/steps/gen_plugin_steps.py b/python/features/steps/gen_plugin_steps.py
index 21c99b856..57294eac1 100644
--- a/python/features/steps/gen_plugin_steps.py
+++ b/python/features/steps/gen_plugin_steps.py
@@ -29,20 +29,6 @@ def run_cli_command_with_args(command_name: str, args: list[str]) -> Tuple[int,
     return exit_code, output_message
 
 
-def get_plugin_file(context, path: str) -> str:
-    """
-    Utility function to get the full path to the given model file.
-
-    Args:
-        context: Active context to check against.
-        path (str): Path to the model file being evaluated.
-
-    Return:
-        Valid path for the requested model file as tracked within the context.
-    """
-    return os.path.sep.join([context.config.paths[0], path])
-
-
 @given('I have a valid "{plugin_file}"')
 def gen_plugin_valid_check(context, plugin_file):
     """
@@ -52,11 +38,10 @@ def gen_plugin_valid_check(context, plugin_file):
         context: Active context to check against.
         plugin_file (str): Path to plugin file being used for generation.
     """
-    plugin_file_path = get_plugin_file(context, plugin_file)
-    exit_code, output_message = run_cli_command_with_args("check", [plugin_file_path])
+    exit_code, output_message = run_cli_command_with_args("check", [plugin_file])
     if exit_code != 0:
         raise AssertionError(f"Check cli command failed with message: {output_message}")
-    context.plugin_file_path = plugin_file_path
+    context.plugin_file_path = plugin_file
     context.output_message = output_message
 
 
@@ -103,8 +88,7 @@ def run_gen_plugin_overwrite(context, plugin_file_overwrite):
     assert "doing_stuff(aac_file: str)" not in file_read
     file.close()
 
-    plugin_file_path = get_plugin_file(context, plugin_file_overwrite)
-    plugin_args = [plugin_file_path, "--code-output", context.src_dir, "--test-output", context.test_dir, "--no-prompt", "--force-overwrite"]
+    plugin_args = [plugin_file_overwrite, "--code-output", context.src_dir, "--test-output", context.test_dir, "--no-prompt", "--force-overwrite"]
     exit_code, output_message = run_cli_command_with_args(
         "gen-plugin", plugin_args)
     file = open(os.path.join(src, "my_plugin_impl.py"), "r")
@@ -130,8 +114,7 @@ def run_gen_plugin_evaluate(context, plugin_file_evaluate):
     assert "doing_stuff(aac_file: str)" not in file_read
     file.close()
 
-    plugin_file_path = get_plugin_file(context, plugin_file_evaluate)
-    plugin_args = [plugin_file_path, "--code-output", context.src_dir, "--test-output", context.test_dir, "--no-prompt", "--evaluate"]
+    plugin_args = [plugin_file_evaluate, "--code-output", context.src_dir, "--test-output", context.test_dir, "--no-prompt", "--evaluate"]
     exit_code, output_message = run_cli_command_with_args(
         "gen-plugin", plugin_args)
     file = open(os.path.join(src, "my_plugin_impl.py"), "r")
@@ -209,7 +192,7 @@ def gen_project_results(context):
         rmtree(context.temp_dir)
 
 
-@then("I should receive a message that the command was not successful")
+@then("I should receive a message that the gen-plugin command was not successful")
 def command_not_successful(context):
     """
     Checks the output from the gen-project command.
diff --git a/python/features/steps/general_purpose_steps.py b/python/features/steps/general_purpose_steps.py
index ccbd3a3dd..005d09ae7 100644
--- a/python/features/steps/general_purpose_steps.py
+++ b/python/features/steps/general_purpose_steps.py
@@ -8,20 +8,6 @@
 use_step_matcher("cfparse")
 
 
-def get_model_file(context, path: str) -> str:
-    """
-    Utility function to get the full path to the given model file.
-
-    Args:
-        context: Active context to check against.
-        path (str): Path to the model file being evaluated.
-
-    Return:
-        Valid path for the requested model file as tracked within the context.
-    """
-    return os.path.sep.join([context.config.paths[0], path])
-
-
 def run_cli_command_with_args(command_name: str, args: list[str]) -> Tuple[int, str]:
     """
     Utility function to invoke the CLI command with the given arguments.
@@ -42,101 +28,113 @@ def run_cli_command_with_args(command_name: str, args: list[str]) -> Tuple[int,
     return exit_code, output_message
 
 
-@given('I have the "{model_file}" model')
-def given_model(context, model_file: str):
+@given('I have the "{file}" file')
+def given_model(context, file: str):
     """
     Ensure the given model file exists.
 
     Args:
         context: Active context to check against.
-        model_file (str): Path to the model file being evaluated.
+        file (str): Path to the file being evaluated.
     """
-    model_path = get_model_file(context, model_file)
-    if not os.path.exists(model_path):
-        raise AssertionError(f"Model file {model_path} does not exist")
+    if not os.path.exists(file):
+        raise AssertionError(f"File path {file} does not exist")
 
 
-@when('I check the "{model_file}" model')
-def check_model(context, model_file):
+@when('I run the "{command}" command with no arguments and with no flags')
+def command_no_args_no_flags(context, command):
     """
-    Run the check command on the given model.
+    Runs a command with specified flags and no arguments.
 
     Args:
         context: Active context to check against.
-        model_file (str): Path to the model file being evaluated.
+        command: Command being run.
     """
-    exit_code, output_message = run_cli_command_with_args(
-        "check", [get_model_file(context, model_file)]
-    )
-    if exit_code != 0:
-        raise AssertionError(f"Check cli command failed with message: {output_message}")
+    exit_code, output_message = run_cli_command_with_args(command, [])
+    context.exit_code = exit_code
     context.output_message = output_message
 
 
-@when('I check the "{model_file}" model with verbose')
-def check_model_verbose(context, model_file):
+@when('I run the "{command}" command with arguments "{args}" and with no flags')
+def command_args_no_flags(context, command, args):
     """
-    Run the check command on the given model with verbose.
+    Runs a command with specified flags and no arguments.
 
     Args:
         context: Active context to check against.
-        model_file (str): Path to the model file being evaluated.
+        command: Command being run.
+        args: Specified Arguments
     """
-    exit_code, output_message = run_cli_command_with_args(
-        "check", [get_model_file(context, model_file), "--verbose"]
-    )
-    if exit_code != 0:
-        raise AssertionError(f"Check cli command failed with message: {output_message}")
+    args_list = args.split()
+    exit_code, output_message = run_cli_command_with_args(command, args_list)
+    context.exit_code = exit_code
     context.output_message = output_message
 
 
-@when('I check the "{model_file}" bad model')
-def check_model_fail(context, model_file):
+@when('I run the "{command}" command with no arguments and with flags "{flags}"')
+def command_flags_no_args(context, command, flags):
     """
-    Run the check command on the given model.
+    Runs a command with specified flags and no arguments.
 
     Args:
         context: Active context to check against.
-        model_file (str): Path to the model file being evaluated.
+        command: Command being run.
+        flags: Specified Flags.
     """
-    exit_code, output_message = run_cli_command_with_args(
-        "check", [get_model_file(context, model_file)]
-    )
-    if exit_code == 0:
-        raise AssertionError(f"Check cli command succeeded with message: {output_message}")
+    flags_list = flags.split()
+
+    exit_code, output_message = run_cli_command_with_args(command, flags_list)
+    context.exit_code = exit_code
+    context.output_message = output_message
+
+
+@when('I run the "{command}" command with arguments "{args}" and with flags "{flags}"')
+def command_args_flags(context, command, args, flags):
+    """
+    Runs a command with specified flags and no arguments.
+
+    Args:
+        context: Active context to check against.
+        command: Command being run.
+        args: Specified Arguments
+        flags: Specified Flags.
+    """
+    args_list = args.split()
+    flags_list = flags.split()
+
+    exit_code, output_message = run_cli_command_with_args(command, args_list + flags_list)
+    print(exit_code)
+    print(output_message)
+    context.exit_code = exit_code
     context.output_message = output_message
 
 
-@then("I should receive a message that the check was successful")
-def check_success(context):
+@then("I should receive a message that the command was successful")
+def command_success(context):
     """
-    Ensure the check command was successful.
+    Ensure the command was successful.
 
     Args:
         context: Active context to check against.
     """
-    if "All AaC constraint checks were successful." not in context.output_message:
-        raise AssertionError(
-            f"Model check failed with message: {context.output_message}"
-        )
+    assert context.exit_code == 0
+    assert "success" or "Success" or "successfully" in context.output_message
 
 
-@then("I should receive a message that the check was not successful")
-def check_failure(context):
+@then("I should receive a message that the command was not successful")
+def command_failure(context):
     """
-    Ensure the check command was successful.
+    Ensure the command was not successful.
 
     Args:
         context: Active context to check against.
     """
-    if "All AaC constraint checks were successful." in context.output_message:
-        raise AssertionError(
-            f"Model check succeeded with message: {context.output_message}"
-        )
+    assert context.exit_code != 0
+    assert "All AaC constraint checks were successful" not in context.output_message
 
 
 @then("I should receive a list of successfully evaluated models")
-def and_check(context):
+def verbose_check(context):
     """
     Ensure the check command with verbose ran returned the list of models.
 
diff --git a/python/features/steps/print_defs.py b/python/features/steps/print_defs.py
new file mode 100644
index 000000000..3a09afb23
--- /dev/null
+++ b/python/features/steps/print_defs.py
@@ -0,0 +1,36 @@
+"""General purpose steps for the behave print_defs tests."""""
+from behave import then
+
+
+@then('I should receive a list of definitions to the terminal')
+def print_defs_result(context):
+    """
+    Ensure the definitions were returned correctly.
+
+    Args:
+        context: Active context to check against.
+    """
+    assert context.exit_code == 0
+    assert len(context.output_message) > 1
+
+    assert "name: Exclusive Fields" in context.output_message
+    assert "name: No Extends for Final" in context.output_message
+    assert "name: AacType" in context.output_message
+    assert "name: Modifier" in context.output_message
+
+
+@then('I should receive a list of core definitions to the terminal')
+def print_defs_result_core_only(context):
+    """
+    Ensure the definitions were returned correctly.
+
+    Args:
+        context: Active context to check against.
+    """
+    assert context.exit_code == 0
+    assert len(context.output_message) > 1
+
+    assert "name: Exclusive Fields" not in context.output_message
+    assert "name: No Extends for Final" not in context.output_message
+    assert "name: AacType" in context.output_message
+    assert "name: Modifier" in context.output_message
diff --git a/python/src/aac/__init__.py b/python/src/aac/__init__.py
index 32a605e43..761ebcb1a 100644
--- a/python/src/aac/__init__.py
+++ b/python/src/aac/__init__.py
@@ -12,7 +12,7 @@
 import logging
 import os
 
-__version__ = "0.4.37"
+__version__ = "0.4.38"
 
 __log_file_name__ = os.path.join(os.path.dirname(__file__), "aac.log")
 


Test patch:
diff --git a/python/tests/test_aac/plugins/print_defs/test_print_aac_definitions.py b/python/tests/test_aac/plugins/print_defs/test_print_aac_definitions.py
index ebcf4d01a..1e0ff7970 100644
--- a/python/tests/test_aac/plugins/print_defs/test_print_aac_definitions.py
+++ b/python/tests/test_aac/plugins/print_defs/test_print_aac_definitions.py
@@ -2,23 +2,21 @@
 from typing import Tuple
 from click.testing import CliRunner
 from aac.execute.command_line import cli, initialize_cli
-from aac.execute.aac_execution_result import ExecutionStatus
 
 
-from aac.plugins.print_defs.print_aac_definitions_impl import plugin_name, print_defs
+from aac.plugins.print_defs.print_aac_definitions_impl import print_defs
 
 
 class TestPrintAaCDefinitions(TestCase):
     def test_print_defs(self):
-        
+
         result1 = print_defs(False)
-        self.assertTrue(result1.is_success(), f"Expected success but failed with message: {result1.is_success()}")
-        self.assertTrue(len(result1.get_messages_as_string()) > 0, f"Expected at least one message but received none.")
+        self.assertTrue(result1.is_success(), msg=f"Expected success but failed with message: {result1.is_success()}")
+        self.assertGreater(len(result1.get_messages_as_string()), 0, msg="Expected at least one message but received none.")
 
         result2 = print_defs(True)
-        self.assertTrue(result2.is_success(), f"Expected success but failed with message: {result2.is_success()}")
-        self.assertTrue(len(result1.get_messages_as_string()) > 0, f"Expected at least one message but received none.")
-        
+        self.assertTrue(result2.is_success(), msg=f"Expected success but failed with message: {result2.is_success()}")
+        self.assertGreater(len(result1.get_messages_as_string()), 0, msg="Expected at least one message but received none.")
 
     def run_print_defs_cli_command_with_args(self, args: list[str]) -> Tuple[int, str]:
         """Utility function to invoke the CLI command with the given arguments."""
@@ -30,14 +28,26 @@ def run_print_defs_cli_command_with_args(self, args: list[str]) -> Tuple[int, st
         output_message = std_out.strip().replace("\x1b[0m", "")
         return exit_code, output_message
 
-    def test_cli_print_defs(self):
+    def test_cli_print_defs_core_only(self):
         args = ["--core-only"]
 
-        # TODO: populate args list, or pass empty list for no args
-
         exit_code, output_message = self.run_print_defs_cli_command_with_args(args)
+        self.assertEqual(0, exit_code)  # asserts the command ran successfully
+        self.assertGreater(len(output_message), 0)  # asserts the command produced output
+
+        self.assertNotIn("name: Exclusive Fields", output_message)
+        self.assertNotIn("name: No Extends for Final", output_message)
+        self.assertIn("name: AacType", output_message)
+        self.assertIn("name: Modifier", output_message)
 
-        # TODO:  perform assertions against the output message
+    def test_cli_print_defs(self):
+        args = []
+
+        exit_code, output_message = self.run_print_defs_cli_command_with_args(args)
         self.assertEqual(0, exit_code)  # asserts the command ran successfully
-        self.assertTrue(len(output_message) > 0)  # asserts the command produced output
-        # TODO:  assert the output message is correct
+        self.assertGreater(len(output_message), 0)  # asserts the command produced output
+
+        self.assertIn("name: Exclusive Fields", output_message)
+        self.assertIn("name: No Extends for Final", output_message)
+        self.assertIn("name: AacType", output_message)
+        self.assertIn("name: Modifier", output_message)