Dduvall has submitted this change and it was merged. Change subject: Skeletal browser tests ......................................................................
Skeletal browser tests These tests depend on the random selector being overridable using the "random=" query parameter. See the new README.md for installation and configuration. Change-Id: I9b767b7838c12c3d728571f4334eeecbdb9c06f1 --- A Gemfile A Gemfile.lock A tests/browser/README.md A tests/browser/features/banners.feature A tests/browser/features/step_definitions/banner_steps.rb A tests/browser/features/support/env.rb A tests/browser/features/support/hooks.rb A tests/browser/features/support/pages/article_page.rb A tests/browser/features/throttling.feature-disabled 9 files changed, 189 insertions(+), 0 deletions(-) Approvals: Dduvall: Looks good to me, approved Awight: Looks good to me, but someone else must approve diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..5f91d5e --- /dev/null +++ b/Gemfile @@ -0,0 +1,7 @@ +# ruby=ruby-1.9.3 +# ruby-gemset=CentralNotice + +source 'https://rubygems.org' + +gem 'mediawiki_selenium', '~> 0.4.1' +gem 'rubocop', require: false diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..bde8183 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,98 @@ +GEM + remote: https://rubygems.org/ + specs: + ast (2.0.0) + astrolabe (1.3.0) + parser (>= 2.2.0.pre.3, < 3.0) + builder (3.2.2) + childprocess (0.5.5) + ffi (~> 1.0, >= 1.0.11) + cucumber (1.3.17) + builder (>= 2.1.2) + diff-lcs (>= 1.1.3) + gherkin (~> 2.12) + multi_json (>= 1.7.5, < 2.0) + multi_test (>= 0.1.1) + data_magic (0.20) + faker (>= 1.1.2) + yml_reader (>= 0.4) + diff-lcs (1.2.5) + domain_name (0.5.22) + unf (>= 0.0.5, < 1.0.0) + faker (1.4.3) + i18n (~> 0.5) + faraday (0.9.0) + multipart-post (>= 1.2, < 3) + faraday-cookie_jar (0.0.6) + faraday (>= 0.7.4) + http-cookie (~> 1.0.0) + ffi (1.9.6) + gherkin (2.12.2) + multi_json (~> 1.3) + headless (1.0.2) + http-cookie (1.0.2) + domain_name (~> 0.5) + i18n (0.6.11) + json (1.8.1) + mediawiki_api (0.3.0) + faraday (~> 0.9, >= 0.9.0) + faraday-cookie_jar (~> 0.0, >= 0.0.6) + mediawiki_selenium (0.4.1) + cucumber (~> 1.3, >= 1.3.10) + headless (~> 1.0, >= 1.0.1) + json (~> 1.8, >= 1.8.1) + mediawiki_api (~> 0.2, >= 0.2.1) + page-object (~> 1.0) + rest-client (~> 1.6, >= 1.6.7) + rspec-expectations (~> 2.14, >= 2.14.4) + syntax (~> 1.2, >= 1.2.0) + mime-types (2.4.3) + multi_json (1.10.1) + multi_test (0.1.1) + multipart-post (2.0.0) + netrc (0.8.0) + page-object (1.0.2) + page_navigation (>= 0.9) + selenium-webdriver (>= 2.42.0) + watir-webdriver (>= 0.6.9) + page_navigation (0.9) + data_magic (>= 0.14) + parser (2.2.0.pre.7) + ast (>= 1.1, < 3.0) + slop (~> 3.4, >= 3.4.5) + powerpack (0.0.9) + rainbow (2.0.0) + rest-client (1.7.2) + mime-types (>= 1.16, < 3.0) + netrc (~> 0.7) + rspec-expectations (2.99.2) + diff-lcs (>= 1.1.3, < 2.0) + rubocop (0.27.1) + astrolabe (~> 1.3) + parser (>= 2.2.0.pre.7, < 3.0) + powerpack (~> 0.0.6) + rainbow (>= 1.99.1, < 3.0) + ruby-progressbar (~> 1.4) + ruby-progressbar (1.7.0) + rubyzip (1.1.6) + selenium-webdriver (2.44.0) + childprocess (~> 0.5) + multi_json (~> 1.0) + rubyzip (~> 1.0) + websocket (~> 1.0) + slop (3.6.0) + syntax (1.2.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.6) + watir-webdriver (0.6.11) + selenium-webdriver (>= 2.18.0) + websocket (1.2.1) + yml_reader (0.4) + +PLATFORMS + ruby + +DEPENDENCIES + mediawiki_selenium (~> 0.4.1) + rubocop diff --git a/tests/browser/README.md b/tests/browser/README.md new file mode 100644 index 0000000..41c76e7 --- /dev/null +++ b/tests/browser/README.md @@ -0,0 +1,20 @@ +Install +======= + cd tests/browser + bundler install + +Fixtures +======== +You must create the banners manually, for now. Set up CentralNotice so +that there are three banners, which will display respectively when the +random variable is at .25, .5, and .75 . The contents of each banner +should include: + <div id="centralnotice_testbanner_name">{{{title}}}</div> +In each banner, the "title" variable should be set to the strings, +"one", "two", and "three". This text is used to confirm the presence +of each banner. + +Running tests +============= + export MEDIAWIKI_URL=http://crm.dev/ + bundler exec cucumber diff --git a/tests/browser/features/banners.feature b/tests/browser/features/banners.feature new file mode 100644 index 0000000..47affe3 --- /dev/null +++ b/tests/browser/features/banners.feature @@ -0,0 +1,17 @@ +@chrome @firefox +Feature: Crude banner display + + Scenario: Banner one is displayed for low roll + Given I roll 0.25 for banner choice + When I view an article + Then I see banner one + + Scenario: Banner two is displayed for mid roll + Given I roll 0.50 for banner choice + When I view an article + Then I see banner two + + Scenario: No banner is displayed for high roll + Given I roll 0.75 for banner choice + When I view an article + Then I see no banner diff --git a/tests/browser/features/step_definitions/banner_steps.rb b/tests/browser/features/step_definitions/banner_steps.rb new file mode 100644 index 0000000..86a736f --- /dev/null +++ b/tests/browser/features/step_definitions/banner_steps.rb @@ -0,0 +1,18 @@ +Given(/^I roll ([0-9.]+) for banner choice$/) do |pseudorandom| + @override_random = pseudorandom +end + +When(/^I view an article$/) do + params = { article_name: "Special:Random" } + params[:query] = "random=#{@override_random}" if @override_random + + visit(ArticlePage, using_params: params) +end + +Then(/^I see banner (\w+)$/) do |banner_name| + expect(on(ArticlePage).banner_name).to match banner_name +end + +Then(/^I see no banner$/) do + expect(on(ArticlePage).banner_name_element).not_to be_visible +end diff --git a/tests/browser/features/support/env.rb b/tests/browser/features/support/env.rb new file mode 100644 index 0000000..612412b --- /dev/null +++ b/tests/browser/features/support/env.rb @@ -0,0 +1,4 @@ +require 'rubygems' +require 'bundler/setup' + +Bundler.require diff --git a/tests/browser/features/support/hooks.rb b/tests/browser/features/support/hooks.rb new file mode 100644 index 0000000..6bc910b --- /dev/null +++ b/tests/browser/features/support/hooks.rb @@ -0,0 +1,2 @@ +# Needed for cucumber --dry-run -f stepdefs +require_relative "env" diff --git a/tests/browser/features/support/pages/article_page.rb b/tests/browser/features/support/pages/article_page.rb new file mode 100644 index 0000000..78931c2 --- /dev/null +++ b/tests/browser/features/support/pages/article_page.rb @@ -0,0 +1,7 @@ +class ArticlePage + include PageObject + + page_url URL.url('<%= params[:article_name] %><%= "?#{params[:query]}" if params[:query] %>') + + div(:banner_name, id: "centralnotice_testbanner_name") +end diff --git a/tests/browser/features/throttling.feature-disabled b/tests/browser/features/throttling.feature-disabled new file mode 100644 index 0000000..619ff85 --- /dev/null +++ b/tests/browser/features/throttling.feature-disabled @@ -0,0 +1,16 @@ +@chrome @firefox +Feature: Campaign throttling + + Background: + Given the following campaigns exist: + | preferred | throttle | banners | + | normal | 60 | one | + | low | 100 | two | + + Scenario: Throttled banner has higher priority + Given I roll 0.59 for banner choice + Then I see banner one + + Scenario: Throttled banner yields some allocations + Given I roll 0.61 for banner choice + Then I see banner two -- To view, visit https://gerrit.wikimedia.org/r/172472 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I9b767b7838c12c3d728571f4334eeecbdb9c06f1 Gerrit-PatchSet: 6 Gerrit-Project: mediawiki/extensions/CentralNotice Gerrit-Branch: master Gerrit-Owner: Awight <[email protected]> Gerrit-Reviewer: AndyRussG <[email protected]> Gerrit-Reviewer: Awight <[email protected]> Gerrit-Reviewer: Cmcmahon <[email protected]> Gerrit-Reviewer: Dduvall <[email protected]> Gerrit-Reviewer: Ejegg <[email protected]> Gerrit-Reviewer: Mwalker <[email protected]> Gerrit-Reviewer: Ssmith <[email protected]> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
