[PATCH conductor 1/2] Redmine #3211: Switch step defs for login to use DMA
Richard Su
rwsu at redhat.com
Fri May 4 23:11:10 UTC 2012
On 05/03/2012 02:11 PM, Jason Guiditta wrote:
> https://www.aeolusproject.org/redmine/issues/3211
>
> DMA means 'Direct Model Access'. The basic idea is that your test
> should only be testing the part of the app that the test is directly
> intended for. A good example (and the subject of this patch/feature)
> is login. The actual steps of logging in shoudl be tested in one place
> only. All other cases where the user is expected to be logged in should
> avoid duplicating this set of steps, and instead assume that we have a
> valid, logged in user to work with.
>
> This concept is decribed in more detail on the wiki[1], as well as providing
> a place for questions and common problems to be explained as they come up.
>
> [1] https://www.aeolusproject.org/redmine/projects/aeolus/wiki/Testing_DMA
> ---
> src/features/authentication.feature | 8 +++++---
> src/features/pool_family.feature | 3 ++-
> src/features/step_definitions/authentication.rb | 13 ++++++++++++-
> src/features/step_definitions/pool_steps.rb | 5 -----
> src/features/support/custom.rb | 2 ++
> src/features/support/paths.rb | 2 +-
> 6 files changed, 22 insertions(+), 11 deletions(-)
>
> diff --git a/src/features/authentication.feature b/src/features/authentication.feature
> index 4a2ce82..98c130c 100644
> --- a/src/features/authentication.feature
> +++ b/src/features/authentication.feature
> @@ -17,7 +17,7 @@ Feature: User authentication
> And I should be on the login error page
>
> Scenario: Edit profile
> - Given I am logged in
> + Given I have successfully logged in
> And I am on the root page
> When I want to edit my profile
> Then should see "Edit Account"
> @@ -27,7 +27,8 @@ Feature: User authentication
> And I should see "User updated!"
>
> Scenario: log out
> - Given I am logged in
> + Given I am an authorised user
Could this have been "Given I am a registered user"?
It works either way, but wondering if there is a specific reason to use
the admin user.
> + And I am logged in
> And I am on the root page
> When I follow "Log out"
> Then I should see "Username:"
> @@ -35,7 +36,8 @@ Feature: User authentication
> And I should see "Show my password"
>
> Scenario: Change user login to one with invalid length
> - Given I am logged in
> + Given I am a registered user
> + And I am logged in
> And I am on the root page
> When I want to edit my profile
> Then should see "Edit Account"
> diff --git a/src/features/pool_family.feature b/src/features/pool_family.feature
> index 2c635dd..4078867 100644
> --- a/src/features/pool_family.feature
> +++ b/src/features/pool_family.feature
> @@ -22,7 +22,8 @@ Feature: Pool Families
> | pool_family3 |
>
> Scenario: List pool families as unprivileged user
> - Given I am logged in
> + Given I am a registered user
> + And I am logged in
> And there is a pool family named "hiddenpoolfamily"
> And I can view pool family "testpoolfamily"
> When I go to the pool families page
> diff --git a/src/features/step_definitions/authentication.rb b/src/features/step_definitions/authentication.rb
> index bde0975..467720a 100644
> --- a/src/features/step_definitions/authentication.rb
> +++ b/src/features/step_definitions/authentication.rb
> @@ -18,7 +18,7 @@ def user
> end
>
> def admin_user
> - @user ||= FactoryGirl.create :admin_user
> + user ||= FactoryGirl.create :admin_user
> end
>
> def login(login, password)
> @@ -44,6 +44,12 @@ Given /^I am a registered user$/ do
> user
> end
>
> +Given /^I am an authorised user$/ do
> + @admin_permission = FactoryGirl.create :admin_permission
> + @user = @admin_permission.user
> +end
> +
> +
> When /^I login$/ do
> login(user.login, user.password)
> end
> @@ -59,6 +65,11 @@ Given /^I am a new user$/ do
> end
>
> Given /^I am logged in$/ do
> + # Warden test helper method
> + login_as user
> +end
> +
> +Given /^I have successfully logged in$/ do
> page.driver.header 'Accept-Language', 'en-US'
> login(user.login, user.password)
> page.should have_content('Login successful!')
> diff --git a/src/features/step_definitions/pool_steps.rb b/src/features/step_definitions/pool_steps.rb
> index 3f0c050..8e73121 100644
> --- a/src/features/step_definitions/pool_steps.rb
> +++ b/src/features/step_definitions/pool_steps.rb
> @@ -13,11 +13,6 @@
> # See the License for the specific language governing permissions and
> # limitations under the License.
> #
> -Given /^I am an authorised user$/ do
> - @admin_permission = FactoryGirl.create :admin_permission
> - @user = @admin_permission.user
> -end
> -
> Given /^I have Pool Creator permissions on a pool named "([^\"]*)"$/ do |name|
> @pool = FactoryGirl.create(:pool, :name => name)
> FactoryGirl.create(:pool_creator_permission, :user => @user, :permission_object => @pool)
> diff --git a/src/features/support/custom.rb b/src/features/support/custom.rb
> index e529073..02a60a4 100644
> --- a/src/features/support/custom.rb
> +++ b/src/features/support/custom.rb
> @@ -15,6 +15,8 @@
> #
> #Seed the DB with fixture data
>
> +include Warden::Test::Helpers
> +Warden.test_mode!
> # We can't stub out these methods properly in cucumber, and we don't want to
> # couple these tests to require the core server be running (connections should be tested
> # in the client code), so override the methods for tests here.
> diff --git a/src/features/support/paths.rb b/src/features/support/paths.rb
> index 3a7796e..38f926d 100644
> --- a/src/features/support/paths.rb
> +++ b/src/features/support/paths.rb
> @@ -174,7 +174,7 @@ module NavigationHelpers
> pool_path(pool, :view => 'filter')
>
> when /^the my user page$/
> - user_path(user) #(User.find_by_login($1))
> + user_path(user)
>
> when /^the (.*)'s edit user page$/
> edit_user_path(User.find_by_login($1))
Nice writeup on DMA and on a way to speed up to our tests.
More information about the aeolus-devel
mailing list