jenkins-bot has submitted this change and it was merged.

Change subject: Implemented env/browser teardown and sauce update
......................................................................


Implemented env/browser teardown and sauce update

Change-Id: Icc77c454fecbfb72c2d6e9bb269132b2c7bfd393
---
M lib/mediawiki_selenium/browser_factory/base.rb
M lib/mediawiki_selenium/environment.rb
M lib/mediawiki_selenium/remote_browser_factory.rb
M lib/mediawiki_selenium/support/env.rb
M lib/mediawiki_selenium/support/hooks.rb
M spec/remote_browser_factory_spec.rb
6 files changed, 73 insertions(+), 15 deletions(-)

Approvals:
  Dduvall: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/mediawiki_selenium/browser_factory/base.rb 
b/lib/mediawiki_selenium/browser_factory/base.rb
index cb6785b..1102322 100644
--- a/lib/mediawiki_selenium/browser_factory/base.rb
+++ b/lib/mediawiki_selenium/browser_factory/base.rb
@@ -170,13 +170,16 @@
       #
       # @yield [browser]
       #
-      def each
-        @browser_cache.each { |_, browser| yield browser }
+      def each(&blk)
+        @browser_cache.values.each(&blk)
       end
 
       # Executes additional teardown tasks.
       #
-      def teardown
+      # @param env [Environment] Environment.
+      # @param status [Symbol] Status of the executed scenario.
+      #
+      def teardown(env, status)
         # abstract
       end
 
diff --git a/lib/mediawiki_selenium/environment.rb 
b/lib/mediawiki_selenium/environment.rb
index a2962a9..e303009 100644
--- a/lib/mediawiki_selenium/environment.rb
+++ b/lib/mediawiki_selenium/environment.rb
@@ -200,13 +200,31 @@
     #
     # @example Teardown environment resources after each scenario completes
     #   After do
-    #     teardown
+    #     teardown(scenario.passed?)
     #   end
     #
-    def teardown
+    # @param status [Symbol] Status of the executed scenario.
+    #
+    def teardown(status = :passed)
       @factories.each do |factory|
         factory.each { |browser| browser.close } unless keep_browser_open?
-        factory.teardown
+        factory.teardown(self, status)
+      end
+    end
+
+    # Returns a name from the given scenario.
+    #
+    # @param scenario [Cucumber::Ast::Scenario]
+    #
+    # @return [String]
+    #
+    def test_name(scenario)
+      if scenario.respond_to? :feature
+        "#{scenario.feature.title}: #{scenario.title}"
+      elsif scenario.respond_to? :scenario_outline
+        "#{scenario.scenario_outline.feature.title}: 
#{scenario.scenario_outline.title}: #{scenario.name}"
+      else
+        scenario.name
       end
     end
 
diff --git a/lib/mediawiki_selenium/remote_browser_factory.rb 
b/lib/mediawiki_selenium/remote_browser_factory.rb
index adc493c..6e0de90 100644
--- a/lib/mediawiki_selenium/remote_browser_factory.rb
+++ b/lib/mediawiki_selenium/remote_browser_factory.rb
@@ -1,3 +1,4 @@
+require "rest_client"
 require "uri"
 
 module MediawikiSelenium
@@ -15,6 +16,10 @@
 
     class << self
       def extend_object(factory)
+        return if factory.is_a?(self)
+
+        super
+
         factory.bind(:sauce_ondemand_username, :sauce_ondemand_access_key) do 
|user, key, options|
           options[:url] = URI.parse(URL)
 
@@ -32,10 +37,40 @@
       end
     end
 
+    # Submits status and Jenkins build info to Sauce Labs.
+    #
+    def teardown_for(env, status)
+      each do |browser|
+        sid = browser.driver.session_id
+        url = URI.parse(browser.driver.http.server_url)
+        username = url.user
+        key = url.password
+
+        RestClient::Request.execute(
+          method: :put,
+          url: "https://saucelabs.com/rest/v1/#{username}/jobs/#{sid}";,
+          user: username,
+          password: key,
+          headers: { content_type: "application/json" },
+          payload: {
+            public: true,
+            passed: status == :passed,
+            build: env.lookup(:build_number),
+          }.to_json
+        )
+      end
+    end
+
     protected
 
     def new_browser(options)
-      Watir::Browser.new(:remote, options)
+      Watir::Browser.new(:remote, options).tap do |browser|
+        browser.driver.file_detector = lambda do |args|
+          # args => ["/path/to/file"]
+          str = args.first.to_s
+          str if File.exist?(str)
+        end
+      end
     end
   end
 end
diff --git a/lib/mediawiki_selenium/support/env.rb 
b/lib/mediawiki_selenium/support/env.rb
index 140a908..4893360 100644
--- a/lib/mediawiki_selenium/support/env.rb
+++ b/lib/mediawiki_selenium/support/env.rb
@@ -12,7 +12,6 @@
 # before all
 require "bundler/setup"
 require "page-object/page_factory"
-require "rest_client"
 require "watir-webdriver"
 
 require "mediawiki_selenium/support/modules/api_helper"
@@ -139,11 +138,4 @@
 end
 def set_cookie(browser)
   # implement this method in env.rb of the repository where it is needed
-end
-def test_name(scenario)
-  if scenario.respond_to? :feature
-    "#{scenario.feature.title}: #{scenario.title}"
-  elsif scenario.respond_to? :scenario_outline
-    "#{scenario.scenario_outline.feature.title}: 
#{scenario.scenario_outline.title}: #{scenario.name}"
-  end
 end
diff --git a/lib/mediawiki_selenium/support/hooks.rb 
b/lib/mediawiki_selenium/support/hooks.rb
index 4b72e7d..e13d8b1 100644
--- a/lib/mediawiki_selenium/support/hooks.rb
+++ b/lib/mediawiki_selenium/support/hooks.rb
@@ -68,8 +68,14 @@
 end
 
 Before do |scenario|
+  # Create a unique random string for this scenario
   @random_string = Random.new.rand.to_s
 
+  # Annotate sessions with Jenkins build info
+  bind(:job_name, :build_number) do |job, build, options|
+    options[:desired_capabilities][:name] = "#{test_name(scenario)} 
#{job}##{build}"
+  end
+
   # CirrusSearch and VisualEditor need this
   if ENV["REUSE_BROWSER"] == "true" && $browser
     @browser = $browser
diff --git a/spec/remote_browser_factory_spec.rb 
b/spec/remote_browser_factory_spec.rb
index 963a545..4bd35fe 100644
--- a/spec/remote_browser_factory_spec.rb
+++ b/spec/remote_browser_factory_spec.rb
@@ -3,9 +3,13 @@
 
 module MediawikiSelenium
   describe RemoteBrowserFactory do
+    subject { factory }
+
     let(:factory_class) { Class.new(BrowserFactory::Base) }
     let(:factory) { factory_class.new(:foo).extend(RemoteBrowserFactory) }
 
+    it { is_expected.to be_a(RemoteBrowserFactory) }
+
     describe "#browser_options" do
       subject { factory.browser_options(config) }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/169856
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Icc77c454fecbfb72c2d6e9bb269132b2c7bfd393
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/selenium
Gerrit-Branch: env-abstraction-layer
Gerrit-Owner: Dduvall <[email protected]>
Gerrit-Reviewer: Dduvall <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to