From 1ddc66a7bfbca8488ff72566b54c38c50a468912 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 28 May 2024 10:26:35 +0200 Subject: [PATCH] test selenium integration with mocked Selenium::WebDriver::Remote::Bridge --- lib/datadog/ci/contrib/selenium/navigation.rb | 1 + .../features/step_definitions/steps.rb | 3 ++ .../contrib/selenium/instrumentation_spec.rb | 51 ++++++++++++++++++- 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/lib/datadog/ci/contrib/selenium/navigation.rb b/lib/datadog/ci/contrib/selenium/navigation.rb index eeb4f1e9..8e152eb5 100644 --- a/lib/datadog/ci/contrib/selenium/navigation.rb +++ b/lib/datadog/ci/contrib/selenium/navigation.rb @@ -3,6 +3,7 @@ require "datadog/tracing/contrib/patcher" require_relative "ext" +require_relative "../../ext/test" module Datadog module CI diff --git a/spec/datadog/ci/contrib/selenium/features/step_definitions/steps.rb b/spec/datadog/ci/contrib/selenium/features/step_definitions/steps.rb index 37987528..3b111fc8 100644 --- a/spec/datadog/ci/contrib/selenium/features/step_definitions/steps.rb +++ b/spec/datadog/ci/contrib/selenium/features/step_definitions/steps.rb @@ -5,4 +5,7 @@ Then "visit page" do visit "http://www.example.com" + Capybara.current_session.quit +rescue => e + p e.backtrace end diff --git a/spec/datadog/ci/contrib/selenium/instrumentation_spec.rb b/spec/datadog/ci/contrib/selenium/instrumentation_spec.rb index e80c4c72..66f06355 100644 --- a/spec/datadog/ci/contrib/selenium/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/selenium/instrumentation_spec.rb @@ -12,9 +12,31 @@ let(:integration_name) { :cucumber } end + let(:manager) { spy("manager", add_cookie: nil) } + let(:bridge) do + instance_double( + Selenium::WebDriver::Remote::Bridge, + create_session: nil, + browser: "mockbrowser", + capabilities: double("capabilities", browser_version: "mockversion", "[]": "mockcapabilities"), + window_handles: ["window"], + switch_to_window: true, + manage: manager, + find_elements_by: [], + extend: true, + send: true, + quit: true + ) + end + let(:stdin) { StringIO.new } let(:stdout) { StringIO.new } let(:stderr) { StringIO.new } + + # let(:stdin) { $stdin } + # let(:stdout) { $stdout } + # let(:stderr) { $stderr } + let(:kernel) { double(:kernel) } # Cucumber runtime setup @@ -35,19 +57,46 @@ end let(:expected_test_run_code) { 0 } + # spies + let(:executed_scripts) { [] } + let(:visited_urls) { [] } + before do - expect(kernel).to receive(:exit).with(expected_test_run_code) + # expect(kernel).to receive(:exit).with(expected_test_run_code) + expect(Selenium::WebDriver::Remote::Bridge).to receive(:new).and_return(bridge) + expect(bridge).to receive(:execute_script) do |script| + executed_scripts << script + "true" + end + expect(bridge).to receive(:get) do |url| + visited_urls << url + end + + # allow_any_instance_of(Selenium::WebDriver::Remote::Bridge).to receive(:get).and_return(nil) + + allow(kernel).to receive(:exit) cli.execute!(existing_runtime) end it "recognize the test as browser test and adds additional tags" do + expect(visited_urls).to eq(["http://www.example.com"]) + expect(executed_scripts).to eq([Datadog::CI::Contrib::Selenium::Ext::SCRIPT_IS_RUM_ACTIVE]) + expect(test_spans).to have(1).item + expect(manager).to have_received(:add_cookie).with( + {name: "datadog-ci-visibility-test-execution-id", value: first_test_span.trace_id.to_s} + ) + expect(first_test_span).to have_test_tag(:type, "browser") expect(first_test_span).to have_test_tag(:browser_driver, "selenium") expect(first_test_span).to have_test_tag( :browser_driver_version, Gem.loaded_specs["selenium-webdriver"].version.to_s ) + expect(first_test_span).to have_test_tag(:browser_name, "mockbrowser") + expect(first_test_span).to have_test_tag(:browser_version, "mockversion") + + expect(first_test_span).to have_test_tag(:is_rum_active, "true") end end