From c6379931f5c8441fa0beb230153251f6e7e2d893 Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Mon, 11 Mar 2024 16:58:54 +0100 Subject: [PATCH] add test case where mixin generates several tests dynamically --- .../activesupport/instrumentation_spec.rb | 86 +++++++++++++------ .../activesupport/test/generator_helper.rb | 13 +++ .../test/test_calculator_generated.rb | 15 ++++ 3 files changed, 88 insertions(+), 26 deletions(-) create mode 100644 spec/datadog/ci/contrib/activesupport/test/generator_helper.rb create mode 100644 spec/datadog/ci/contrib/activesupport/test/test_calculator_generated.rb diff --git a/spec/datadog/ci/contrib/activesupport/instrumentation_spec.rb b/spec/datadog/ci/contrib/activesupport/instrumentation_spec.rb index e2d0aaee9..8a2dae8e0 100644 --- a/spec/datadog/ci/contrib/activesupport/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/activesupport/instrumentation_spec.rb @@ -6,33 +6,67 @@ let(:integration_options) { {service_name: "ltest"} } end - before do - Minitest::Runnable.reset - require_relative "test/test_calculator" - Minitest.run([]) + context "when mixin used" do + before do + Minitest::Runnable.reset + require_relative "test/test_calculator" + Minitest.run([]) + end + + it "instruments this minitest session" do + # test session and module traced + expect(test_session_span).not_to be_nil + expect(test_module_span).not_to be_nil + + expect([test_session_span, test_module_span]).to all have_pass_status + + expect(test_suite_spans).to have(1).items + expect(test_suite_spans).to have_tag_values_no_order(:status, ["pass"]) + expect(test_suite_spans).to have_tag_values_no_order( + :suite, + [ + "CalculatorTest at spec/datadog/ci/contrib/activesupport/test/test_calculator.rb" + ] + ) + + # there is test span for every test case + expect(test_spans).to have(3).items + # each test span has test suite, module, and session + expect(test_spans).to all have_test_tag(:test_suite_id) + expect(test_spans).to all have_test_tag(:test_module_id) + expect(test_spans).to all have_test_tag(:test_session_id) + end end - it "instruments this minitest session" do - # test session and module traced - expect(test_session_span).not_to be_nil - expect(test_module_span).not_to be_nil - - expect([test_session_span, test_module_span]).to all have_pass_status - - expect(test_suite_spans).to have(1).items - expect(test_suite_spans).to have_tag_values_no_order(:status, ["pass"]) - expect(test_suite_spans).to have_tag_values_no_order( - :suite, - [ - "CalculatorTest at spec/datadog/ci/contrib/activesupport/test/test_calculator.rb" - ] - ) - - # there is test span for every test case - expect(test_spans).to have(3).items - # each test span has test suite, module, and session - expect(test_spans).to all have_test_tag(:test_suite_id) - expect(test_spans).to all have_test_tag(:test_module_id) - expect(test_spans).to all have_test_tag(:test_session_id) + context "when mixin creates methods dynamically" do + before do + Minitest::Runnable.reset + require_relative "test/test_calculator_generated" + Minitest.run([]) + end + + it "instruments this minitest session" do + # test session and module traced + expect(test_session_span).not_to be_nil + expect(test_module_span).not_to be_nil + + expect([test_session_span, test_module_span]).to all have_pass_status + + expect(test_suite_spans).to have(1).items + expect(test_suite_spans).to have_tag_values_no_order(:status, ["pass"]) + expect(test_suite_spans).to have_tag_values_no_order( + :suite, + [ + "CalculatorGeneratedTest at spec/datadog/ci/contrib/activesupport/test/test_calculator_generated.rb" + ] + ) + + # there is test span for every test case + expect(test_spans).to have(5).items + # each test span has test suite, module, and session + expect(test_spans).to all have_test_tag(:test_suite_id) + expect(test_spans).to all have_test_tag(:test_module_id) + expect(test_spans).to all have_test_tag(:test_session_id) + end end end diff --git a/spec/datadog/ci/contrib/activesupport/test/generator_helper.rb b/spec/datadog/ci/contrib/activesupport/test/generator_helper.rb new file mode 100644 index 000000000..d95bd93b6 --- /dev/null +++ b/spec/datadog/ci/contrib/activesupport/test/generator_helper.rb @@ -0,0 +1,13 @@ +module GeneratorHelper + extend ActiveSupport::Concern + + class_methods do + def test_operations(*operations) + operations.each do |operation| + test "performs #{operation}" do + assert Calculator.new.public_send(operation, 1, 2) + end + end + end + end +end diff --git a/spec/datadog/ci/contrib/activesupport/test/test_calculator_generated.rb b/spec/datadog/ci/contrib/activesupport/test/test_calculator_generated.rb new file mode 100644 index 000000000..d29ea5afc --- /dev/null +++ b/spec/datadog/ci/contrib/activesupport/test/test_calculator_generated.rb @@ -0,0 +1,15 @@ +require "active_support" +require "minitest/spec" + +require_relative "calculator" +require_relative "generator_helper" + +class CalculatorGeneratedTest < ActiveSupport::TestCase + include GeneratorHelper + + test_operations(:add, :subtract, :multiply, :divide) + + test "adds two numbers" do + assert Calculator.new.add(1, 2) == 3 + end +end