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

Change subject: Selenium tests for coordinate UI
......................................................................


Selenium tests for coordinate UI

Bug: 49234
Change-Id: I895770f349afe8608d9eec044666e6c52905a2c8
---
A repo/tests/selenium/statements/statements_coordinate_spec.rb
M repo/tests/selenium/statements/statements_time_spec.rb
M selenium/Rakefile
A selenium/lib/modules/coordinate_module.rb
A selenium/lib/modules/input_extender_module.rb
M selenium/lib/modules/time_module.rb
M selenium/lib/pages/entity_page.rb
7 files changed, 242 insertions(+), 19 deletions(-)

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



diff --git a/repo/tests/selenium/statements/statements_coordinate_spec.rb 
b/repo/tests/selenium/statements/statements_coordinate_spec.rb
new file mode 100644
index 0000000..0af58fa
--- /dev/null
+++ b/repo/tests/selenium/statements/statements_coordinate_spec.rb
@@ -0,0 +1,154 @@
+# -*- encoding : utf-8 -*-
+# Wikidata UI tests
+#
+# Author:: Tobias Gritschacher ([email protected])
+# License:: GNU GPL v2+
+#
+# tests for coordinate type statements
+
+require 'spec_helper'
+
+item_label = generate_random_string(10)
+item_description = generate_random_string(20)
+prop_label = generate_random_string(10)
+prop_description = generate_random_string(20)
+prop_datatype = "Geographic coordinate"
+not_recognized = "no valid value recognized"
+# utf8 code for ° sign: \u00B0
+coordinate_values = Array.new
+coordinate_values.push({
+  "input" => "41°50'13\"N, 87°41'44\"W",
+  "precision" => "auto",
+  "expected_precision" => "to an arcsecond",
+  "expected_preview" => "41°50'13\"N, 87°41'44\"W"
+})
+coordinate_values.push({
+  "input" => "41°50'N, 87°41'W",
+  "precision" => "auto",
+  "expected_precision" => "to an arcminute",
+  "expected_preview" => "41°50'N, 87°41'W"
+})
+coordinate_values.push({
+  "input" => "41°50'13\"N, 87°41'44\"W",
+  "precision" => "to an arcminute",
+  "expected_precision" => "to an arcminute",
+  "expected_preview" => "41°50'N, 87°41'W"
+})
+coordinate_values.push({
+  "input" => "42.1538 8.5731",
+  "precision" => "auto",
+  "expected_precision" => "±0.0001°",
+  "expected_preview" => "42°9'13.7\"N, 8°34'23.2\"E"
+})
+#this is not supported by the frontend parser!
+#coordinate_values.push({
+#  "input" => "42° 09.231 N 008° 34.386 E",
+#  "precision" => "auto",
+#  "expected_precision" => "to 1/100 of an arcsecond",
+#  "expected_preview" => "42°9'13.86\"N, 8°34'23.16\"E"
+#})
+coordinate_values.push({
+  "input" => "stuff",
+  "precision" => "auto",
+  "expected_precision" => "to a degree",
+  "expected_preview" => not_recognized
+})
+
+describe "Check coordinate statements UI", :exclude_chrome => true do
+  before :all do
+    # set up: create item & properties
+    visit_page(CreateItemPage) do |page|
+      page.create_new_item(item_label, item_description)
+    end
+    visit_page(NewPropertyPage) do |page|
+      page.create_new_property(prop_label, prop_description, prop_datatype)
+    end
+  end
+
+  context "Check coordinate UI" do
+    it "should check coordinate input extender behaviour" do
+      on_page(ItemPage) do |page|
+        page.navigate_to_item
+        page.wait_for_entity_to_load
+        page.addStatement
+        page.entitySelectorInput = prop_label
+        ajax_wait
+        page.wait_for_entity_selector_list
+        page.wait_for_property_value_box
+        page.statementValueInputField = coordinate_values[0]["input"]
+        page.inputExtender_element.when_visible
+        page.inputExtender_element.visible?.should be_true
+        page.inputExtenderClose_element.click
+        page.inputExtender_element.when_not_visible
+        page.inputExtender_element.visible?.should be_false
+        page.statementValueInputField_element.click
+        page.inputExtender_element.when_visible
+        page.inputExtender_element.visible?.should be_true
+        page.inputPreviewValue_element.visible?.should be_true
+        page.coordinateInputExtenderAdvanced_element.visible?.should be_true
+        page.coordinateInputExtenderAdvanced
+        page.coordinatePrecision_element.when_visible
+        page.coordinatePrecision_element.visible?.should be_true
+        page.coordinatePrecisionRotatorSelect?.should be_true
+        page.coordinateInputExtenderAdvanced
+        page.coordinatePrecision_element.when_not_visible
+        page.coordinatePrecision_element.visible?.should be_false
+        page.coordinateInputExtenderAdvanced
+        page.coordinatePrecision_element.when_visible
+        page.coordinatePrecisionRotatorSelect
+        page.coordinatePrecisionMenu_element.when_visible
+        page.coordinatePrecisionMenu_element.visible?.should be_true
+        page.coordinatePrecisionRotatorSelect
+        page.coordinatePrecisionMenu_element.when_not_visible
+        page.coordinatePrecisionMenu_element.visible?.should be_false
+      end
+    end
+
+    coordinate_values.each do |coordinate|
+      it "should check preview for '" + coordinate["input"] + "'/" + 
coordinate["precision"] do
+        on_page(ItemPage) do |page|
+          page.navigate_to_item
+          page.wait_for_entity_to_load
+          page.addStatement
+          page.entitySelectorInput = prop_label
+          ajax_wait
+          page.wait_for_entity_selector_list
+          page.wait_for_property_value_box
+          page.statementValueInputField_element.clear
+          page.statementValueInputField = coordinate["input"]
+          page.inputExtender_element.when_visible
+          page.select_coordinate_precision coordinate["precision"]
+          page.inputPreviewValue.should == coordinate["expected_preview"]
+          page.coordinatePrecisionRotatorSelect_element.text.should == 
coordinate["expected_precision"]
+          page.cancelStatement
+        end
+      end
+    end
+
+    it "should check saving of coordinate" do
+      on_page(ItemPage) do |page|
+        page.navigate_to_item
+        page.wait_for_entity_to_load
+        page.addStatement
+        page.entitySelectorInput = prop_label
+        ajax_wait
+        page.wait_for_entity_selector_list
+        page.wait_for_property_value_box
+        page.statementValueInputField = coordinate_values[0]["input"]
+        page.saveStatement?.should be_true
+        page.saveStatement
+        ajax_wait
+        page.wait_for_statement_request_finished
+        page.statement1ClaimValue1Nolink.should == 
coordinate_values[0]["expected_preview"]
+        @browser.refresh
+        page.wait_for_entity_to_load
+        page.statement1ClaimValue1Nolink.should == 
coordinate_values[0]["expected_preview"]
+      end
+    end
+  end
+
+  after :all do
+    # tear down
+  end
+
+end
\ No newline at end of file
diff --git a/repo/tests/selenium/statements/statements_time_spec.rb 
b/repo/tests/selenium/statements/statements_time_spec.rb
index 2a12750..90d2990 100644
--- a/repo/tests/selenium/statements/statements_time_spec.rb
+++ b/repo/tests/selenium/statements/statements_time_spec.rb
@@ -142,15 +142,15 @@
         page.wait_for_entity_selector_list
         page.wait_for_property_value_box
         page.statementValueInputField = time_values[0]["input"]
-        page.timeInputExtender_element.when_visible
-        page.timeInputExtender_element.visible?.should be_true
-        page.timeInputExtenderClose_element.click
-        page.timeInputExtender_element.when_not_visible
-        page.timeInputExtender_element.visible?.should be_false
+        page.inputExtender_element.when_visible
+        page.inputExtender_element.visible?.should be_true
+        page.inputExtenderClose_element.click
+        page.inputExtender_element.when_not_visible
+        page.inputExtender_element.visible?.should be_false
         page.statementValueInputField_element.click
-        page.timeInputExtender_element.when_visible
-        page.timeInputExtender_element.visible?.should be_true
-        page.timePreviewValue_element.visible?.should be_true
+        page.inputExtender_element.when_visible
+        page.inputExtender_element.visible?.should be_true
+        page.inputPreviewValue_element.visible?.should be_true
         page.timeInputExtenderAdvanced_element.visible?.should be_true
         page.timeInputExtenderAdvanced
         page.timePrecision_element.when_visible
@@ -191,10 +191,10 @@
           page.wait_for_property_value_box
           page.statementValueInputField_element.clear
           page.statementValueInputField = time["input"]
-          page.timeInputExtender_element.when_visible
-          page.select_precision time["precision"]
+          page.inputExtender_element.when_visible
+          page.select_time_precision time["precision"]
           page.select_calendar time["calendar"]
-          page.timePreviewValue.should == time["expected_preview"]
+          page.inputPreviewValue.should == time["expected_preview"]
           page.timePrecisionRotatorSelect_element.text.should == 
time["expected_precision"]
           if time["expected_calendarhint"] == ""
             page.timeCalendarHint_element.visible?.should be_false
diff --git a/selenium/Rakefile b/selenium/Rakefile
index 1198a24..552f667 100644
--- a/selenium/Rakefile
+++ b/selenium/Rakefile
@@ -220,12 +220,12 @@
 
 RSpec::Core::RakeTask.new(:statements) do |spec|
   spec.ruby_opts = "-I lib:spec"
-  spec.pattern = 
'../repo/tests/selenium/statements/{statements_spec.rb,statements_cm_spec.rb,statements_item_spec.rb,statements_string_spec.rb,statements_time_spec.rb,references_spec.rb,qualifiers_spec.rb,statements_deleted_prop_spec.rb,statements_deleted_item_spec.rb}'
+  spec.pattern = 
'../repo/tests/selenium/statements/{statements_spec.rb,statements_cm_spec.rb,statements_item_spec.rb,statements_string_spec.rb,statements_time_spec.rb,statements_coordinate_spec.rb,references_spec.rb,qualifiers_spec.rb,statements_deleted_prop_spec.rb,statements_deleted_item_spec.rb}'
 end
 
 RSpec::Core::RakeTask.new(:statements_basic) do |spec|
   spec.ruby_opts = "-I lib:spec"
-  spec.pattern = 
'../repo/tests/selenium/statements/{statements_spec.rb,statements_cm_spec.rb,statements_item_spec.rb}'
+  spec.pattern = 
'../repo/tests/selenium/statements/{statements_spec.rb,statements_cm_spec.rb,statements_item_spec.rb,statements_time_spec.rb,statements_coordinate_spec.rb}'
 end
 
 RSpec::Core::RakeTask.new(:statements_cm) do |spec|
@@ -248,6 +248,11 @@
   spec.pattern = '../repo/tests/selenium/statements/statements_time_spec.rb'
 end
 
+RSpec::Core::RakeTask.new(:statements_coordinate) do |spec|
+  spec.ruby_opts = "-I lib:spec"
+  spec.pattern = 
'../repo/tests/selenium/statements/statements_coordinate_spec.rb'
+end
+
 RSpec::Core::RakeTask.new(:statements_bugs) do |spec|
   spec.ruby_opts = "-I lib:spec"
   spec.pattern = '../repo/tests/selenium/statements/statements_bugs_spec.rb'
diff --git a/selenium/lib/modules/coordinate_module.rb 
b/selenium/lib/modules/coordinate_module.rb
new file mode 100644
index 0000000..fae2fe3
--- /dev/null
+++ b/selenium/lib/modules/coordinate_module.rb
@@ -0,0 +1,42 @@
+# -*- encoding : utf-8 -*-
+# Wikidata UI tests
+#
+# Author:: Tobias Gritschacher ([email protected])
+# License:: GNU GPL v2+
+#
+# module for coordinate page object
+
+module CoordinatePage
+  include PageObject
+  # coordinate UI elements
+  link(:coordinateInputExtenderAdvanced, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/a[contains(@class, 
'valueview-expert-globecoordinateinput-advancedtoggler')]")
+  div(:coordinatePrecision, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]")
+  link(:coordinatePrecisionRotatorAuto, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class,
 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 
'ui-listrotator-auto')]")
+  link(:coordinatePrecisionRotatorPrev, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class,
 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 
'ui-listrotator-prev')]")
+  link(:coordinatePrecisionRotatorNext, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class,
 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 
'ui-listrotator-next')]")
+  link(:coordinatePrecisionRotatorSelect, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class,
 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 
'ui-listrotator-curr')]")
+  unordered_list(:coordinatePrecisionMenu, :class => "ui-listrotator-menu", 
:index => 0)
+  # methods
+  def select_coordinate_precision prec
+    self.show_advanced_coordinate_settings
+    if prec == "auto"
+      self.coordinatePrecisionRotatorAuto
+      return
+    end
+    self.coordinatePrecisionRotatorSelect
+    self.coordinatePrecisionMenu_element.when_visible
+    self.coordinatePrecisionMenu_element.each do |item|
+      if item.text == prec
+        item.click
+        return
+      end
+    end
+  end
+
+  def show_advanced_coordinate_settings
+    if !self.coordinatePrecision_element.visible?
+      self.coordinateInputExtenderAdvanced
+      self.coordinatePrecision_element.when_visible
+    end
+  end
+end
diff --git a/selenium/lib/modules/input_extender_module.rb 
b/selenium/lib/modules/input_extender_module.rb
new file mode 100644
index 0000000..96e4f55
--- /dev/null
+++ b/selenium/lib/modules/input_extender_module.rb
@@ -0,0 +1,24 @@
+# -*- encoding : utf-8 -*-
+# Wikidata UI tests
+#
+# Author:: Tobias Gritschacher ([email protected])
+# License:: GNU GPL v2+
+#
+# module for input extender page object
+
+module InputExtenderPage
+  include PageObject
+  # input extender UI elements
+  div(:inputExtender, :class => "ui-inputextender-extension")
+  div(:inputExtenderClose, :class => "ui-inputextender-extension-close")
+  div(:inputPreview, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 'valueview-preview')]")
+  div(:inputPreviewLabel, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-preview')]/div[contains(@class, 'valueview-preview-label')]")
+  div(:inputPreviewValue, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-preview')]/div[contains(@class, 'valueview-preview-value')]")
+  #link(:coordinateInputExtenderAdvanced, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/a[contains(@class, 
'valueview-expert-globecoordinateinput-advancedtoggler')]")
+  #div(:coordinatePrecision, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]")
+  #link(:coordinatePrecisionRotatorAuto, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class,
 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 
'ui-listrotator-auto')]")
+  #link(:coordinatePrecisionRotatorPrev, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class,
 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 
'ui-listrotator-prev')]")
+  #link(:coordinatePrecisionRotatorNext, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class,
 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 
'ui-listrotator-next')]")
+  #link(:coordinatePrecisionRotatorSelect, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-globecoordinateinput-precisioncontainer')]/div[contains(@class,
 'valueview-expert-globecoordinateinput-precision')]/a[contains(@class, 
'ui-listrotator-curr')]")
+  #unordered_list(:coordinatePrecisionMenu, :class => "ui-listrotator-menu", 
:index => 0)
+end
diff --git a/selenium/lib/modules/time_module.rb 
b/selenium/lib/modules/time_module.rb
index 3ffd10e..f7c3eda 100644
--- a/selenium/lib/modules/time_module.rb
+++ b/selenium/lib/modules/time_module.rb
@@ -9,11 +9,6 @@
 module TimePage
   include PageObject
   # time UI elements
-  div(:timeInputExtender, :class => "ui-inputextender-extension")
-  div(:timeInputExtenderClose, :class => "ui-inputextender-extension-close")
-  div(:timePreview, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 'valueview-preview')]")
-  div(:timePreviewLabel, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-preview')]/div[contains(@class, 'valueview-preview-label')]")
-  div(:timePreviewValue, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-preview')]/div[contains(@class, 'valueview-preview-value')]")
   div(:timeCalendarHint, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-timeinput-calendarhint')]")
   span(:timeCalendarHintMessage, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-timeinput-calendarhint')]/span[contains(@class, 
'valueview-expert-timeinput-calendarhint-message')]")
   link(:timeCalendarHintSwitch, :xpath => "//div[contains(@class, 
'ui-inputextender-extension')]/div[contains(@class, 
'valueview-expert-timeinput-calendarhint')]/span[contains(@class, 
'valueview-expert-timeinput-calendarhint-switch')]")
@@ -31,7 +26,7 @@
   unordered_list(:timePrecisionMenu, :class => "ui-listrotator-menu", :index 
=> 0)
   unordered_list(:timeCalendarMenu, :class => "ui-listrotator-menu", :index => 
1)
   # methods
-  def select_precision prec
+  def select_time_precision prec
     self.show_advanced_time_settings
     if prec == "auto"
       self.timePrecisionRotatorAuto
diff --git a/selenium/lib/pages/entity_page.rb 
b/selenium/lib/pages/entity_page.rb
index 86c36f2..54e1f75 100644
--- a/selenium/lib/pages/entity_page.rb
+++ b/selenium/lib/pages/entity_page.rb
@@ -13,7 +13,9 @@
   include SitelinkPage
   include AliasPage
   include StatementPage
+  include InputExtenderPage
   include TimePage
+  include CoordinatePage
   include ULSPage
 
   @@property_url = ""
@@ -73,6 +75,7 @@
   end
 
   def wait_for_entity_to_load
+    sleep 1
     wait_until do
       entitySpinner? == false
     end

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I895770f349afe8608d9eec044666e6c52905a2c8
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: Henning Snater <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to