diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ccb8b28f..e5de61652 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- **Generate runnable agent tests** (`activeagent`). TestUnit agent tests + inherit from `ActiveSupport::TestCase` instead of the nonexistent + `ActiveAgent::TestCase`. Plain and namespaced agents, including agents + without actions, can load in a Rails host without calling a provider. + ### Changed - **One badge for every status and message role in the dashboard** diff --git a/lib/generators/test_unit/templates/functional_test.rb.tt b/lib/generators/test_unit/templates/functional_test.rb.tt index 80900bf8d..7bbf51b67 100644 --- a/lib/generators/test_unit/templates/functional_test.rb.tt +++ b/lib/generators/test_unit/templates/functional_test.rb.tt @@ -1,7 +1,7 @@ require "test_helper" <% module_namespacing do -%> -class <%= class_name %>AgentTest < ActiveAgent::TestCase +class <%= class_name %>AgentTest < ActiveSupport::TestCase <% actions.each_with_index do |action, index| -%> <% if index != 0 -%> diff --git a/test/generators/active_agent/generated_agent_test.rb b/test/generators/active_agent/generated_agent_test.rb new file mode 100644 index 000000000..a0508be2e --- /dev/null +++ b/test/generators/active_agent/generated_agent_test.rb @@ -0,0 +1,52 @@ +require "test_helper" +require "generators/active_agent/agent/agent_generator" +require "open3" + +class ActiveAgent::Generators::GeneratedAgentTest < Rails::Generators::TestCase + tests ActiveAgent::Generators::AgentGenerator + destination Rails.root.join("tmp/generated_agent_tests") + setup :prepare_destination + + test "generated agent tests run in a Rails host" do + assert_generated_tests_run "generated_example", 2 + end + + test "generated namespaced agent tests run in a Rails host" do + assert_generated_tests_run "admin/generated_example", 2 + end + + test "generated agent tests without actions load in a Rails host" do + assert_generated_tests_run "generated_example", 0, actions: [] + end + + private + + def assert_generated_tests_run(name, count, actions: %w[create update]) + run_generator [ name, *actions, "--test-framework=test_unit" ] + FileUtils.mkdir_p(File.join(destination_root, "config")) + File.write(File.join(destination_root, "config/routes.rb"), "Rails.application.routes.draw {}\n") + File.write(File.join(destination_root, "test/test_helper.rb"), <<~RUBY) + ENV["RAILS_ENV"] = "test" + require "rails" + require "active_model/railtie" + require "active_job/railtie" + require "action_controller/railtie" + require "active_agent" + class GeneratedHost < Rails::Application + config.root = File.expand_path("..", __dir__) + config.eager_load = false + config.secret_key_base = "synthetic-test-secret" + config.logger = Logger.new(File::NULL) + end + GeneratedHost.initialize! + require "rails/test_help" + RUBY + + output, status = Open3.capture2e( + RbConfig.ruby, "-Itest", "test/agents/#{name}_agent_test.rb", + chdir: destination_root + ) + assert status.success?, output + assert_match(/#{count} runs, #{count} assertions, 0 failures, 0 errors/, output) + end +end diff --git a/test/generators/test_unit/agent_generator_test.rb b/test/generators/test_unit/agent_generator_test.rb index cd8ba55df..01c6d5dc1 100644 --- a/test/generators/test_unit/agent_generator_test.rb +++ b/test/generators/test_unit/agent_generator_test.rb @@ -10,7 +10,7 @@ class TestUnit::Generators::AgentGeneratorTest < Rails::Generators::TestCase run_generator [ "user", "create", "update" ] assert_file "test/agents/user_agent_test.rb" do |content| - assert_match(/class UserAgentTest < ActiveAgent::TestCase/, content) + assert_match(/class UserAgentTest < ActiveSupport::TestCase/, content) assert_match(/test "create"/, content) assert_match(/test "update"/, content) end @@ -30,7 +30,7 @@ class TestUnit::Generators::AgentGeneratorTest < Rails::Generators::TestCase run_generator [ "admin/user", "create" ] assert_file "test/agents/admin/user_agent_test.rb" do |content| - assert_match(/class Admin::UserAgentTest < ActiveAgent::TestCase/, content) + assert_match(/class Admin::UserAgentTest < ActiveSupport::TestCase/, content) end assert_file "test/docs/previews/admin/user_agent_preview.rb" do |content| @@ -47,7 +47,7 @@ class TestUnit::Generators::AgentGeneratorTest < Rails::Generators::TestCase run_generator [ "user_agent", "create" ] assert_file "test/agents/user_agent_test.rb" do |content| - assert_match(/class UserAgentTest < ActiveAgent::TestCase/, content) + assert_match(/class UserAgentTest < ActiveSupport::TestCase/, content) end end @@ -55,7 +55,7 @@ class TestUnit::Generators::AgentGeneratorTest < Rails::Generators::TestCase run_generator [ "user" ] assert_file "test/agents/user_agent_test.rb" do |content| - assert_match(/class UserAgentTest < ActiveAgent::TestCase/, content) + assert_match(/class UserAgentTest < ActiveSupport::TestCase/, content) assert_no_match(/^ test "/, content) # No actual test methods (only commented ones) end