From d74f54736b8aabb3885648c44d7e253209b8e9e1 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Mon, 10 Sep 2012 01:51:02 -0700 Subject: [PATCH] rewrite dashboard feature steps using spinach --- features/dashboard/dashboard.feature | 7 +- features/dashboard/issues.feature | 6 +- features/dashboard/merge_requests.feature | 8 +- features/dashboard/search.feature | 10 +-- features/steps/dashboard.rb | 97 ++++++++++++++++++++++ features/steps/dashboard_issues.rb | 32 +++++++ features/steps/dashboard_merge_requests.rb | 33 ++++++++ features/steps/dashboard_search.rb | 23 +++++ features/support/env.rb | 6 ++ 9 files changed, 205 insertions(+), 17 deletions(-) create mode 100644 features/steps/dashboard.rb create mode 100644 features/steps/dashboard_issues.rb create mode 100644 features/steps/dashboard_merge_requests.rb create mode 100644 features/steps/dashboard_search.rb diff --git a/features/dashboard/dashboard.feature b/features/dashboard/dashboard.feature index 98bb49803f3..9756bc7f64d 100644 --- a/features/dashboard/dashboard.feature +++ b/features/dashboard/dashboard.feature @@ -1,9 +1,9 @@ Feature: Dashboard - Background: - Given I signin as a user + Background: + Given I sign in as a user And I own project "Shop" And project "Shop" has push event - And I visit dashboard page + And I visit dashboard page Scenario: I should see projects list Then I should see "New Project" link @@ -25,4 +25,3 @@ Feature: Dashboard And user with name "John Doe" left project "Shop" When I visit dashboard page Then I should see "John Doe left project Shop" event - diff --git a/features/dashboard/issues.feature b/features/dashboard/issues.feature index c3361bb313f..895b89aa38a 100644 --- a/features/dashboard/issues.feature +++ b/features/dashboard/issues.feature @@ -1,8 +1,8 @@ Feature: Dashboard Issues - Background: - Given I signin as a user + Background: + Given I sign in as a user And I have assigned issues - And I visit dashboard issues page + And I visit dashboard issues page Scenario: I should see issues list Then I should see issues assigned to me diff --git a/features/dashboard/merge_requests.feature b/features/dashboard/merge_requests.feature index 90b8749c5a7..cad65b0d79a 100644 --- a/features/dashboard/merge_requests.feature +++ b/features/dashboard/merge_requests.feature @@ -1,8 +1,8 @@ -Feature: Dashboard MR - Background: - Given I signin as a user +Feature: Dashboard Merge Requests + Background: + Given I sign in as a user And I have authored merge requests - And I visit dashboard merge requests page + And I visit dashboard merge requests page Scenario: I should see projects list Then I should see my merge requests diff --git a/features/dashboard/search.feature b/features/dashboard/search.feature index f053fe86fc8..91d870f46f3 100644 --- a/features/dashboard/search.feature +++ b/features/dashboard/search.feature @@ -1,11 +1,9 @@ Feature: Dashboard Search - Background: - Given I signin as a user + Background: + Given I sign in as a user And I own project "Shop" - And I visit dashboard search page + And I visit dashboard search page - Scenario: I should see project i'm looking for + Scenario: I should see project I am looking for Given I search for "Sho" Then I should see "Shop" project link - - diff --git a/features/steps/dashboard.rb b/features/steps/dashboard.rb new file mode 100644 index 00000000000..e69686b32b4 --- /dev/null +++ b/features/steps/dashboard.rb @@ -0,0 +1,97 @@ +class Dashboard < Spinach::FeatureSteps + Then 'I should see "New Project" link' do + page.should have_link "New Project" + end + + Then 'I should see "Shop" project link' do + page.should have_link "Shop" + end + + Then 'I should see project "Shop" activity feed' do + project = Project.find_by_name("Shop") + page.should have_content "#{@user.name} pushed new branch new_design at #{project.name}" + end + + Then 'I should see last push widget' do + page.should have_content "Your pushed to branch new_design" + page.should have_link "Create Merge Request" + end + + And 'I click "Create Merge Request" link' do + click_link "Create Merge Request" + end + + Then 'I see prefilled new Merge Request page' do + current_path.should == new_project_merge_request_path(@project) + find("#merge_request_source_branch").value.should == "new_design" + find("#merge_request_target_branch").value.should == "master" + find("#merge_request_title").value.should == "New Design" + end + + Given 'user with name "John Doe" joined project "Shop"' do + user = Factory.create(:user, {name: "John Doe"}) + project = Project.find_by_name "Shop" + Event.create( + project: project, + author_id: user.id, + action: Event::Joined + ) + end + + When 'I visit dashboard page' do + visit dashboard_path + end + + Then 'I should see "John Doe joined project Shop" event' do + page.should have_content "John Doe joined project Shop" + end + + And 'user with name "John Doe" left project "Shop"' do + user = User.find_by_name "John Doe" + project = Project.find_by_name "Shop" + Event.create( + project: project, + author_id: user.id, + action: Event::Left + ) + end + + Then 'I should see "John Doe left project Shop" event' do + page.should have_content "John Doe left project Shop" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => 'Shop' + @project.add_access(@user, :admin) + end + + And 'project "Shop" has push event' do + @project = Project.find_by_name("Shop") + + data = { + :before => "0000000000000000000000000000000000000000", + :after => "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e", + :ref => "refs/heads/new_design", + :user_id => @user.id, + :user_name => @user.name, + :repository => { + :name => @project.name, + :url => "localhost/rubinius", + :description => "", + :homepage => "localhost/rubinius", + :private => true + } + } + + @event = Event.create( + :project => @project, + :action => Event::Pushed, + :data => data, + :author_id => @user.id + ) + end +end diff --git a/features/steps/dashboard_issues.rb b/features/steps/dashboard_issues.rb new file mode 100644 index 00000000000..8704d2efdf6 --- /dev/null +++ b/features/steps/dashboard_issues.rb @@ -0,0 +1,32 @@ +class DashboardIssues < Spinach::FeatureSteps + Then 'I should see issues assigned to me' do + issues = @user.issues + issues.each do |issue| + page.should have_content(issue.title[0..10]) + page.should have_content(issue.project.name) + end + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I have assigned issues' do + project = Factory :project + project.add_access(@user, :read, :write) + + issue1 = Factory :issue, + :author => @user, + :assignee => @user, + :project => project + + issue2 = Factory :issue, + :author => @user, + :assignee => @user, + :project => project + end + + And 'I visit dashboard issues page' do + visit dashboard_issues_path + end +end diff --git a/features/steps/dashboard_merge_requests.rb b/features/steps/dashboard_merge_requests.rb new file mode 100644 index 00000000000..3e057ef9109 --- /dev/null +++ b/features/steps/dashboard_merge_requests.rb @@ -0,0 +1,33 @@ +class DashboardMergeRequests < Spinach::FeatureSteps + Then 'I should see my merge requests' do + merge_requests = @user.merge_requests + merge_requests.each do |mr| + page.should have_content(mr.title[0..10]) + page.should have_content(mr.project.name) + end + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I have authored merge requests' do + project1 = Factory :project + project2 = Factory :project + + project1.add_access(@user, :read, :write) + project2.add_access(@user, :read, :write) + + merge_request1 = Factory :merge_request, + :author => @user, + :project => project1 + + merge_request2 = Factory :merge_request, + :author => @user, + :project => project2 + end + + And 'I visit dashboard merge requests page' do + visit dashboard_merge_requests_path + end +end diff --git a/features/steps/dashboard_search.rb b/features/steps/dashboard_search.rb new file mode 100644 index 00000000000..122774fc23c --- /dev/null +++ b/features/steps/dashboard_search.rb @@ -0,0 +1,23 @@ +class DashboardSearch < Spinach::FeatureSteps + Given 'I search for "Sho"' do + fill_in "dashboard_search", :with => "Sho" + click_button "Search" + end + + Then 'I should see "Shop" project link' do + page.should have_link "Shop" + end + + Given 'I sign in as a user' do + login_as :user + end + + And 'I own project "Shop"' do + @project = Factory :project, :name => "Shop" + @project.add_access(@user, :admin) + end + + And 'I visit dashboard search page' do + visit search_path + end +end diff --git a/features/support/env.rb b/features/support/env.rb index aa2f2958ba3..2900e1cb288 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -4,6 +4,12 @@ require './config/environment' require 'rspec' require 'database_cleaner' +%w(login_helpers stubbed_repository).each do |f| + require Rails.root.join('spec', 'support', f) +end + +include LoginHelpers + DatabaseCleaner.strategy = :transaction Spinach.hooks.before_scenario { DatabaseCleaner.start } Spinach.hooks.after_scenario { DatabaseCleaner.clean }