Refactoring tests to make them more robust

Fixed typo in feature description.
Merged two background steps since the last one did not have any actions
that could be done manually.
Removed assertions from a "given" (login) step. We already extensively
test logging in. If this extension needs login tests, they should go to
a separate feature file.
Moved methods from steps file to page file, following page object
pattern.

Change-Id: Ic5250970362718f5ed887c9ac8fd56948724b210
This commit is contained in:
Zeljko Filipin
2013-10-22 12:09:52 +02:00
committed by Niklas Laxström
parent afc5774ee2
commit f45d5bfcd5
5 changed files with 38 additions and 48 deletions

View File

@@ -6,13 +6,12 @@ Feature: Font selection
I want to change or disable the fonts for interface and content.
In addition the user is provided live preview feature: changes are applied
immediately when selection is made. Changes can either be applied or discared
immediately when selection is made. Changes can either be applied or discarded
for easy testing.
Background:
Given I am logged in
And I set "German" as the interface language
And I inspect current fonts
Scenario: Font selector appears
When I open "Fonts" panel of language settings

View File

@@ -7,55 +7,25 @@ end
Given(/^I am logged in$/) do
visit(LoginPage).login_with(ENV['MEDIAWIKI_USER'], ENV['MEDIAWIKI_PASSWORD'])
# Assert that login worked
loggedin = !@browser.execute_script( "return mw.user.isAnon();" )
loggedin.should be_true
end
Given(/^I set "(.*?)" as the interface language$/) do |language|
code = language_to_code(language)
code = on(PanelPage).language_to_code(language)
visit(PanelPage, :using_params => {:extra => "setlang=#{code}"})
@original_content_font = on(PanelPage).get_content_font
@original_interface_font = on(PanelPage).get_interface_font
end
Given(/^I temporarily use "(.*?)" as the interface language$/) do |language|
code = language_to_code(language)
code = on(PanelPage).language_to_code(language)
visit(PanelPage, :using_params => {:extra => "uselang=#{code}"})
end
Then(/^my interface language is "(.*?)"$/) do |language|
code = language_to_code(language)
code = on(PanelPage).language_to_code(language)
on(PanelPage).interface_element.attribute('lang').should == code
end
def language_to_code(language)
case language
when 'German'
'de'
when 'English'
'en'
when 'Finnish'
'fi'
when 'Hebrew'
'he'
when 'Hindi'
'hi'
else
pending
end
end
def get_font(selector)
@browser.execute_script( "return $( '#{selector}' ).css( 'font-family' );" )
end
def get_content_font()
get_font('#mw-content-text')
end
def get_interface_font()
get_font('body')
end
def uls_position()
if !defined?($uls_position)
visit(PanelPage)

View File

@@ -2,11 +2,6 @@ Then(/^I see "(.*?)" as the name of the content language$/) do |text|
@browser.span(:text => "#{text}").should be_visible
end
Given(/^I inspect current fonts$/) do
@original_content_font = get_content_font()
@original_interface_font = get_interface_font()
end
When(/^I open "(.*?)" panel of language settings$/) do |panel|
on(PanelPage) do |page|
# Open the ULS panel if it's not open already
@@ -58,9 +53,9 @@ end
Then(/^the active (.*?) font must be the same as font prior to the preview$/) do |type|
case type
when "content"
get_content_font().should === @original_content_font
on(PanelPage).get_content_font.should === @original_content_font
when "interface"
get_interface_font().should === @original_interface_font
on(PanelPage).get_interface_font.should === @original_interface_font
else
pending
end
@@ -86,9 +81,9 @@ end
Then(/^the (.*) font must be changed to the "(.*?)" font$/) do |type, font|
case type
when "content"
get_content_font().should match("^#{font}")
on(PanelPage).get_content_font.should match("^#{font}")
when "interface"
get_interface_font().should match("^#{font}")
on(PanelPage).get_interface_font.should match("^#{font}")
else
pending
end
@@ -111,7 +106,7 @@ Then(/^a font selector for content language appears$/) do
end
When(/^I use the panel to change my interface language to "(.*?)"$/) do |language|
code = language_to_code(language)
code = on(PanelPage).language_to_code(language)
on(RandomPage).language_filter = code
# Because one browser wants :enter and other :return -- sigh
on(RandomPage).language_filter_element.send_keys [:enter, "\n"]

View File

@@ -34,6 +34,6 @@ And(/^I click on the link to select Hindi$/) do
end
Then(/^I should see the text in the language panel in (.+?)$/) do |language|
code = language_to_code(language)
code = on(PanelPage).language_to_code(language)
on(PanelPage).uls_display_settings_element.attribute('lang').should == code
end

View File

@@ -38,4 +38,30 @@ class PanelPage
# Is there way to access the html element?
div(:interface, id: 'footer')
def get_content_font
get_font('#mw-content-text')
end
def get_font(selector)
@browser.execute_script( "return $( '#{selector}' ).css( 'font-family' );" )
end
def get_interface_font
get_font('body')
end
def language_to_code(language)
case language
when 'German'
'de'
when 'English'
'en'
when 'Finnish'
'fi'
when 'Hebrew'
'he'
when 'Hindi'
'hi'
else
pending
end
end
end