Commit 3f01ec2d5b7421f05192fc78974a7ff4ba8c8daf

Authored by Dmitriy Zaporozhets
2 parents 8674fba1 79eb5ab3

Merge pull request #1426 from NARKOZ/spinach

Cucumber => Spinach
Showing 89 changed files with 1398 additions and 1263 deletions   Show diff stats
@@ -106,6 +106,7 @@ group :development do @@ -106,6 +106,7 @@ group :development do
106 end 106 end
107 107
108 group :development, :test do 108 group :development, :test do
  109 + gem 'spinach-rails'
109 gem "rspec-rails" 110 gem "rspec-rails"
110 gem "capybara" 111 gem "capybara"
111 gem "capybara-webkit" 112 gem "capybara-webkit"
@@ -118,7 +119,7 @@ group :development, :test do @@ -118,7 +119,7 @@ group :development, :test do
118 119
119 # Guard 120 # Guard
120 gem 'guard-rspec' 121 gem 'guard-rspec'
121 - gem 'guard-cucumber' 122 + gem 'guard-spinach'
122 123
123 # Notification 124 # Notification
124 gem 'rb-fsevent', :require => darwin_only('rb-fsevent') 125 gem 'rb-fsevent', :require => darwin_only('rb-fsevent')
@@ -127,7 +128,6 @@ group :development, :test do @@ -127,7 +128,6 @@ group :development, :test do
127 end 128 end
128 129
129 group :test do 130 group :test do
130 - gem 'cucumber-rails', :require => false  
131 gem "simplecov", :require => false 131 gem "simplecov", :require => false
132 gem "shoulda-matchers" 132 gem "shoulda-matchers"
133 gem 'email_spec' 133 gem 'email_spec'
@@ -132,16 +132,8 @@ GEM @@ -132,16 +132,8 @@ GEM
132 execjs 132 execjs
133 coffee-script-source (1.3.3) 133 coffee-script-source (1.3.3)
134 colored (1.2) 134 colored (1.2)
  135 + colorize (0.5.8)
135 crack (0.3.1) 136 crack (0.3.1)
136 - cucumber (1.2.1)  
137 - builder (>= 2.1.2)  
138 - diff-lcs (>= 1.1.3)  
139 - gherkin (~> 2.11.0)  
140 - json (>= 1.4.6)  
141 - cucumber-rails (1.3.0)  
142 - capybara (>= 1.1.2)  
143 - cucumber (>= 1.1.8)  
144 - nokogiri (>= 1.5.0)  
145 daemons (1.1.8) 137 daemons (1.1.8)
146 database_cleaner (0.8.0) 138 database_cleaner (0.8.0)
147 devise (2.1.2) 139 devise (2.1.2)
@@ -170,8 +162,7 @@ GEM @@ -170,8 +162,7 @@ GEM
170 ffi (1.0.11) 162 ffi (1.0.11)
171 foreman (0.47.0) 163 foreman (0.47.0)
172 thor (>= 0.13.6) 164 thor (>= 0.13.6)
173 - gherkin (2.11.0)  
174 - json (>= 1.4.6) 165 + gherkin-ruby (0.2.1)
175 git (1.2.5) 166 git (1.2.5)
176 github-markup (0.7.4) 167 github-markup (0.7.4)
177 gitlab_meta (2.9) 168 gitlab_meta (2.9)
@@ -185,11 +176,11 @@ GEM @@ -185,11 +176,11 @@ GEM
185 guard (1.3.2) 176 guard (1.3.2)
186 listen (>= 0.4.2) 177 listen (>= 0.4.2)
187 thor (>= 0.14.6) 178 thor (>= 0.14.6)
188 - guard-cucumber (1.2.0)  
189 - cucumber (>= 1.2.0)  
190 - guard (>= 1.1.0)  
191 guard-rspec (1.2.1) 179 guard-rspec (1.2.1)
192 guard (>= 1.1) 180 guard (>= 1.1)
  181 + guard-spinach (0.0.2)
  182 + guard (>= 1.1)
  183 + spinach
193 haml (3.1.6) 184 haml (3.1.6)
194 haml-rails (0.3.4) 185 haml-rails (0.3.4)
195 actionpack (~> 3.0) 186 actionpack (~> 3.0)
@@ -344,6 +335,13 @@ GEM @@ -344,6 +335,13 @@ GEM
344 tilt (~> 1.3, >= 1.3.3) 335 tilt (~> 1.3, >= 1.3.3)
345 six (0.2.0) 336 six (0.2.0)
346 slop (2.4.4) 337 slop (2.4.4)
  338 + spinach (0.5.2)
  339 + colorize
  340 + gherkin-ruby (~> 0.2.0)
  341 + spinach-rails (0.1.8)
  342 + capybara (~> 1)
  343 + railties (>= 3)
  344 + spinach (>= 0.4)
347 sprockets (2.1.3) 345 sprockets (2.1.3)
348 hike (~> 1.2) 346 hike (~> 1.2)
349 rack (~> 1.0) 347 rack (~> 1.0)
@@ -394,7 +392,6 @@ DEPENDENCIES @@ -394,7 +392,6 @@ DEPENDENCIES
394 chosen-rails 392 chosen-rails
395 coffee-rails (= 3.2.2) 393 coffee-rails (= 3.2.2)
396 colored 394 colored
397 - cucumber-rails  
398 database_cleaner 395 database_cleaner
399 devise (~> 2.1.0) 396 devise (~> 2.1.0)
400 draper 397 draper
@@ -410,8 +407,8 @@ DEPENDENCIES @@ -410,8 +407,8 @@ DEPENDENCIES
410 grape (~> 0.2.1) 407 grape (~> 0.2.1)
411 grit! 408 grit!
412 growl 409 growl
413 - guard-cucumber  
414 guard-rspec 410 guard-rspec
  411 + guard-spinach
415 haml-rails 412 haml-rails
416 headless 413 headless
417 httparty 414 httparty
@@ -442,6 +439,7 @@ DEPENDENCIES @@ -442,6 +439,7 @@ DEPENDENCIES
442 shoulda-matchers 439 shoulda-matchers
443 simplecov 440 simplecov
444 six 441 six
  442 + spinach-rails
445 sqlite3 443 sqlite3
446 stamp 444 stamp
447 therubyracer 445 therubyracer
@@ -13,18 +13,14 @@ guard 'rspec', :version => 2 do @@ -13,18 +13,14 @@ guard 'rspec', :version => 2 do
13 watch(%r{^spec/support/(.+)\.rb$}) { "spec" } 13 watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14 watch('config/routes.rb') { "spec/routing" } 14 watch('config/routes.rb') { "spec/routing" }
15 watch('app/controllers/application_controller.rb') { "spec/controllers" } 15 watch('app/controllers/application_controller.rb') { "spec/controllers" }
16 - 16 +
17 # Capybara request specs 17 # Capybara request specs
18 watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" } 18 watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
19 -  
20 - # Turnip features and steps  
21 - watch(%r{^spec/acceptance/(.+)\.feature$})  
22 - watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }  
23 end 19 end
24 20
25 -  
26 -guard 'cucumber' do  
27 - watch(%r{^features/.+\.feature$})  
28 - watch(%r{^features/support/.+$}) { 'features' }  
29 - watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' } 21 +guard 'spinach' do
  22 + watch(%r|^features/(.*)\.feature|)
  23 + watch(%r|^features/steps/(.*)([^/]+)\.rb|) do |m|
  24 + "features/#{m[1]}#{m[2]}.feature"
  25 + end
30 end 26 end
config/cucumber.yml
@@ -1,8 +0,0 @@ @@ -1,8 +0,0 @@
1 -<%  
2 -rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""  
3 -rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"  
4 -std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip"  
5 -%>  
6 -default: <%= std_opts %> features  
7 -wip: --tags @wip:3 --wip features  
8 -rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip  
features/dashboard/dashboard.feature
1 Feature: Dashboard 1 Feature: Dashboard
2 - Background:  
3 - Given I signin as a user 2 + Background:
  3 + Given I sign in as a user
4 And I own project "Shop" 4 And I own project "Shop"
5 And project "Shop" has push event 5 And project "Shop" has push event
6 - And I visit dashboard page 6 + And I visit dashboard page
7 7
8 Scenario: I should see projects list 8 Scenario: I should see projects list
9 Then I should see "New Project" link 9 Then I should see "New Project" link
@@ -25,4 +25,3 @@ Feature: Dashboard @@ -25,4 +25,3 @@ Feature: Dashboard
25 And user with name "John Doe" left project "Shop" 25 And user with name "John Doe" left project "Shop"
26 When I visit dashboard page 26 When I visit dashboard page
27 Then I should see "John Doe left project Shop" event 27 Then I should see "John Doe left project Shop" event
28 -  
features/dashboard/issues.feature
1 Feature: Dashboard Issues 1 Feature: Dashboard Issues
2 - Background:  
3 - Given I signin as a user 2 + Background:
  3 + Given I sign in as a user
4 And I have assigned issues 4 And I have assigned issues
5 - And I visit dashboard issues page 5 + And I visit dashboard issues page
6 6
7 Scenario: I should see issues list 7 Scenario: I should see issues list
8 Then I should see issues assigned to me 8 Then I should see issues assigned to me
features/dashboard/merge_requests.feature
1 -Feature: Dashboard MR  
2 - Background:  
3 - Given I signin as a user 1 +Feature: Dashboard Merge Requests
  2 + Background:
  3 + Given I sign in as a user
4 And I have authored merge requests 4 And I have authored merge requests
5 - And I visit dashboard merge requests page 5 + And I visit dashboard merge requests page
6 6
7 Scenario: I should see projects list 7 Scenario: I should see projects list
8 Then I should see my merge requests 8 Then I should see my merge requests
features/dashboard/search.feature
1 Feature: Dashboard Search 1 Feature: Dashboard Search
2 - Background:  
3 - Given I signin as a user 2 + Background:
  3 + Given I sign in as a user
4 And I own project "Shop" 4 And I own project "Shop"
5 - And I visit dashboard search page 5 + And I visit dashboard search page
6 6
7 - Scenario: I should see project i'm looking for 7 + Scenario: I should see project I am looking for
8 Given I search for "Sho" 8 Given I search for "Sho"
9 Then I should see "Shop" project link 9 Then I should see "Shop" project link
10 -  
11 -  
features/profile/profile.feature
1 Feature: Profile 1 Feature: Profile
2 - Background:  
3 - Given I signin as a user 2 + Background:
  3 + Given I sign in as a user
4 4
5 Scenario: I look at my profile 5 Scenario: I look at my profile
6 Given I visit profile page 6 Given I visit profile page
features/profile/ssh_keys.feature
1 -Feature: SSH Keys  
2 - Background:  
3 - Given I signin as a user  
4 - And I have ssh keys:  
5 - | title |  
6 - | ssh-rsa Work |  
7 - | ssh-rsa Home | 1 +Feature: Profile SSH Keys
  2 + Background:
  3 + Given I sign in as a user
  4 + And I have ssh key "ssh-rsa Work"
8 And I visit profile keys page 5 And I visit profile keys page
9 6
10 - Scenario: I should see SSH keys 7 + Scenario: I should see ssh keys
11 Then I should see my ssh keys 8 Then I should see my ssh keys
12 9
13 Scenario: Add new ssh key 10 Scenario: Add new ssh key
features/project/commits/branches.feature 0 → 100644
@@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
  1 +Feature: Project Browse branches
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + And project "Shop" has protected branches
  6 + Given I visit project branches page
  7 +
  8 + Scenario: I can see project recent git branches
  9 + Then I should see "Shop" recent branches list
  10 +
  11 + Scenario: I can see project all git branches
  12 + Given I click link "All"
  13 + Then I should see "Shop" all branches list
  14 +
  15 + Scenario: I can see project protected git branches
  16 + Given I click link "Protected"
  17 + Then I should see "Shop" protected branches list
  18 +
  19 + # @wip
  20 + # Scenario: I can download project by branch
  21 +
  22 + # @wip
  23 + # Scenario: I can view protected branches
  24 +
  25 + # @wip
  26 + # Scenario: I can manage protected branches
features/project/commits/commit_comments.feature 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +Feature: Project Comment commit
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + Given I visit project commit page
  6 +
  7 + @javascript
  8 + Scenario: I comment commit
  9 + Given I leave a comment like "XML attached"
  10 + Then I should see comment "XML attached"
features/project/commits/commits.feature 0 → 100644
@@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
  1 +Feature: Project Browse commits
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + Given I visit project commits page
  6 +
  7 + Scenario: I browse commits list for master branch
  8 + Then I see project commits
  9 +
  10 + Scenario: I browse atom feed of commits list for master branch
  11 + Given I click atom feed link
  12 + Then I see commits atom feed
  13 +
  14 + Scenario: I browse commit from list
  15 + Given I click on commit link
  16 + Then I see commit info
  17 +
  18 + Scenario: I compare refs
  19 + Given I visit compare refs page
  20 + And I fill compare fields with refs
  21 + And I see compared refs
features/project/commits/tags.feature 0 → 100644
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
  1 +Feature: Project Browse tags
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + Given I visit project tags page
  6 +
  7 + Scenario: I can see all git tags
  8 + Then I should see "Shop" all tags list
  9 +
  10 + # @wip
  11 + # Scenario: I can download project by tag
features/project/create_project.feature 0 → 100644
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
  1 +Feature: Create Project
  2 + In order to get access to project sections
  3 + A user with ability to create a project
  4 + Should be able to create a new one
  5 +
  6 + Scenario: User create a project
  7 + Given I sign in as a user
  8 + When I visit new project page
  9 + And fill project form with valid data
  10 + Then I should see project page
  11 + And I should see empty project instuctions
features/project/issues/issues.feature 0 → 100644
@@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
  1 +Feature: Project Issues
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + And project "Shop" have "Release 0.4" open issue
  6 + And project "Shop" have "Release 0.3" closed issue
  7 + And I visit project "Shop" issues page
  8 +
  9 + Scenario: I should see open issues
  10 + Given I should see "Release 0.4" in issues
  11 + And I should not see "Release 0.3" in issues
  12 +
  13 + Scenario: I should see closed issues
  14 + Given I click link "Closed"
  15 + Then I should see "Release 0.3" in issues
  16 + And I should not see "Release 0.4" in issues
  17 +
  18 + Scenario: I should see all issues
  19 + Given I click link "All"
  20 + Then I should see "Release 0.3" in issues
  21 + And I should see "Release 0.4" in issues
  22 +
  23 + Scenario: I visit issue page
  24 + Given I click link "Release 0.4"
  25 + Then I should see issue "Release 0.4"
  26 +
  27 + @javascript
  28 + Scenario: I submit new unassigned issue
  29 + Given I click link "New Issue"
  30 + And I submit new issue "500 error on profile"
  31 + Given I click link "500 error on profile"
  32 + Then I should see issue "500 error on profile"
  33 +
  34 + @javascript
  35 + Scenario: I comment issue
  36 + Given I visit issue page "Release 0.4"
  37 + And I leave a comment like "XML attached"
  38 + Then I should see comment "XML attached"
  39 +
  40 + @javascript
  41 + Scenario: I search issue
  42 + Given I fill in issue search with "Release"
  43 + Then I should see "Release 0.4" in issues
  44 + And I should not see "Release 0.3" in issues
  45 +
  46 + @javascript
  47 + Scenario: I search issue that not exist
  48 + Given I fill in issue search with "Bug"
  49 + Then I should not see "Release 0.4" in issues
  50 + And I should not see "Release 0.3" in issues
  51 +
  52 +
  53 + @javascript
  54 + Scenario: I search all issues
  55 + Given I click link "All"
  56 + And I fill in issue search with "0.3"
  57 + Then I should see "Release 0.3" in issues
  58 + And I should not see "Release 0.4" in issues
  59 +
  60 + @javascript
  61 + Scenario: I clear search
  62 + Given I click link "All"
  63 + And I fill in issue search with "Something"
  64 + And I fill in issue search with ""
  65 + Then I should see "Release 0.4" in issues
  66 + And I should see "Release 0.3" in issues
  67 +
  68 + @javascript
  69 + Scenario: I create Issue with pre-selected milestone
  70 + Given project "Shop" has milestone "v2.2"
  71 + And project "Shop" has milestone "v3.0"
  72 + And I visit project "Shop" issues page
  73 + When I select milestone "v3.0"
  74 + And I click link "New Issue"
  75 + Then I should see selected milestone with title "v3.0"
  76 +
  77 + @javascript
  78 + Scenario: I create Issue with pre-selected assignee
  79 + When I select first assignee from "Shop" project
  80 + And I click link "New Issue"
  81 + Then I should see first assignee from "Shop" as selected assignee
features/project/issues/labels.feature 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +Feature: Project Labels
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + And project "Shop" have issues tags: "bug", "feature"
  6 + Given I visit project "Shop" labels page
  7 +
  8 + Scenario: I should see active milestones
  9 + Then I should see label "bug"
  10 + And I should see label "feature"
features/project/issues/milestones.feature 0 → 100644
@@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
  1 +Feature: Project Milestones
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + And project "Shop" has milestone "v2.2"
  6 + Given I visit project "Shop" milestones page
  7 +
  8 + Scenario: I should see active milestones
  9 + Then I should see milestone "v2.2"
  10 +
  11 + Scenario: I should see milestone
  12 + Given I click link "v2.2"
  13 + Then I should see milestone "v2.2"
  14 +
  15 + Scenario: I create new milestone
  16 + Given I click link "New Milestone"
  17 + And I submit new milestone "v2.3"
  18 + Then I should see milestone "v2.3"
features/project/merge_requests.feature 0 → 100644
@@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
  1 +Feature: Project Merge Requests
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + And project "Shop" have "Bug NS-04" open merge request
  6 + And project "Shop" have "Feature NS-03" closed merge request
  7 + And I visit project "Shop" merge requests page
  8 +
  9 + Scenario: I should see open merge requests
  10 + Then I should see "Bug NS-04" in merge requests
  11 + And I should not see "Feature NS-03" in merge requests
  12 +
  13 + Scenario: I should see closed merge requests
  14 + Given I click link "Closed"
  15 + Then I should see "Feature NS-03" in merge requests
  16 + And I should not see "Bug NS-04" in merge requests
  17 +
  18 + Scenario: I should see all merge requests
  19 + Given I click link "All"
  20 + Then I should see "Feature NS-03" in merge requests
  21 + And I should see "Bug NS-04" in merge requests
  22 +
  23 + Scenario: I visit merge request page
  24 + Given I click link "Bug NS-04"
  25 + Then I should see merge request "Bug NS-04"
  26 +
  27 + Scenario: I close merge request page
  28 + Given I click link "Bug NS-04"
  29 + And I click link "Close"
  30 + Then I should see closed merge request "Bug NS-04"
  31 +
  32 + Scenario: I submit new unassigned merge request
  33 + Given I click link "New Merge Request"
  34 + And I submit new merge request "Wiki Feature"
  35 + Then I should see merge request "Wiki Feature"
  36 +
  37 + @javascript
  38 + Scenario: I comment merge request
  39 + Given I visit merge request page "Bug NS-04"
  40 + And I leave a comment like "XML attached"
  41 + Then I should see comment "XML attached"
  42 +
features/project/network.feature 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +Feature: Project Network Graph
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + And I visit project "Shop" network page
  6 +
  7 + @javascript
  8 + Scenario: I should see project network
  9 + Then page should have network graph
features/project/project.feature 0 → 100644
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
  1 +Feature: Projects
  2 + Background:
  3 + Given I signin as a user
  4 + And I own project "Shop"
  5 + And I visit project "Shop" page
  6 +
  7 + # @wip
  8 + # Scenario: I should see project activity
  9 +
  10 + # @wip
  11 + # Scenario: I edit project
  12 +
  13 + # @wip
  14 + # Scenario: I visit attachments
features/project/source/browse_files.feature 0 → 100644
@@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
  1 +Feature: Project Browse files
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + Given I visit project source page
  6 +
  7 + Scenario: I browse files from master branch
  8 + Then I should see files from repository
  9 +
  10 + Scenario: I browse files for specific ref
  11 + Given I visit project source page for "8470d70"
  12 + Then I should see files from repository for "8470d70"
  13 +
  14 + Scenario: I browse file content
  15 + Given I click on "Gemfile" file in repo
  16 + Then I should see it content
  17 +
  18 + Scenario: I browse raw file
  19 + Given I visit blob file from repo
  20 + And I click link "raw"
  21 + Then I should see raw file content
features/project/source/git_blame.feature 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +Feature: Project Browse git repo
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + Given I visit project source page
  6 +
  7 + Scenario: I blame file
  8 + Given I click on "Gemfile" file in repo
  9 + And I click blame button
  10 + Then I should see git file blame
features/project/team_management.feature 0 → 100644
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
  1 +Feature: Project Team management
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + And gitlab user "Mike"
  6 + And gitlab user "Sam"
  7 + And "Sam" is "Shop" developer
  8 + And I visit project "Shop" team page
  9 +
  10 + Scenario: See all team members
  11 + Then I should be able to see myself in team
  12 + And I should see "Sam" in team list
  13 +
  14 + Scenario: Add user to project
  15 + Given I click link "New Team Member"
  16 + And I select "Mike" as "Reporter"
  17 + Then I should see "Mike" in team list as "Reporter"
  18 +
  19 + @javascript
  20 + Scenario: Update user access
  21 + Given I should see "Sam" in team list as "Developer"
  22 + And I change "Sam" role to "Reporter"
  23 + Then I visit project "Shop" team page
  24 + And I should see "Sam" in team list as "Reporter"
  25 +
  26 + Scenario: View team member profile
  27 + Given I click link "Sam"
  28 + Then I should see "Sam" team profile
  29 +
  30 + Scenario: Cancel team member
  31 + Given I click link "Sam"
  32 + And I click link "Remove from team"
  33 + Then I visit project "Shop" team page
  34 + And I should not see "Sam" in team list
features/project/wall.feature 0 → 100644
@@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
  1 +Feature: Project Wall
  2 + In order to use Project Wall
  3 + A user should be able to read and write messages
  4 +
  5 + Background:
  6 + Given I sign in as a user
  7 + And I own project "Shop"
  8 + And I visit project "Shop" wall page
  9 +
  10 + @javascript
  11 + Scenario: Write comment
  12 + Given I write new comment "my special test message"
  13 + Then I should see project wall note "my special test message"
  14 +
  15 + Then I visit project "Shop" wall page
  16 + And I should see project wall note "my special test message"
features/project/wiki.feature 0 → 100644
@@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
  1 +Feature: Project Wiki
  2 + Background:
  3 + Given I sign in as a user
  4 + And I own project "Shop"
  5 + Given I visit project wiki page
  6 +
  7 + Scenario: Add new page
  8 + Given I create Wiki page
  9 + Then I should see newly created wiki page
  10 +
  11 + @javascript
  12 + Scenario: I comment wiki page
  13 + Given I create Wiki page
  14 + And I leave a comment like "XML attached"
  15 + Then I should see comment "XML attached"
features/projects/commits/branches.feature
@@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
1 -Feature: Browse branches  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - And project "Shop" has protected branches  
6 - Given I visit project branches page  
7 -  
8 - Scenario: I can see project recent git branches  
9 - Then I should see "Shop" recent branches list  
10 -  
11 - Scenario: I can see project all git branches  
12 - Given I click link "All"  
13 - Then I should see "Shop" all branches list  
14 -  
15 - Scenario: I can see project protected git branches  
16 - Given I click link "Protected"  
17 - Then I should see "Shop" protected branches list  
18 -  
19 - Scenario: I can download project by branch  
20 -  
21 - Scenario: I can view protected branches  
22 -  
23 - Scenario: I can manage protected branches  
features/projects/commits/commit_comments.feature
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -Feature: Comment commit  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - Given I visit project commit page  
6 -  
7 - @javascript  
8 - Scenario: I comment commit  
9 - Given I leave a comment like "XML attached"  
10 - Then I should see comment "XML attached"  
features/projects/commits/commits.feature
@@ -1,22 +0,0 @@ @@ -1,22 +0,0 @@
1 -Feature: Browse commits  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - Given I visit project commits page  
6 -  
7 - Scenario: I browse commits list for master branch  
8 - Then I see project commits  
9 -  
10 - Scenario: I browse atom feed of commits list for master branch  
11 - Given I click atom feed link  
12 - Then I see commits atom feed  
13 -  
14 - Scenario: I browse commit from list  
15 - Given I click on commit link  
16 - Then I see commit info  
17 -  
18 - Scenario: I compare refs  
19 - Given I visit compare refs page  
20 - And I fill compare fields with refs  
21 - And I see compared refs  
22 -  
features/projects/commits/tags.feature
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -Feature: Browse tags  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - Given I visit project tags page  
6 -  
7 - Scenario: I can see all git tags  
8 - Then I should see "Shop" all tags list  
9 -  
10 - Scenario: I can download project by tag  
features/projects/create_project.feature
@@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
1 -Feature: Create Project  
2 - In order to get access to project sections  
3 - A user with ability to create a project  
4 - Should be able to create a new one  
5 -  
6 - Scenario: User create a project  
7 - Given I signin as a user  
8 - When I visit new project page  
9 - And fill project form with valid data  
10 - Then I should see project page  
11 - And I should see empty project instuctions  
features/projects/deploy_keys.feature
features/projects/issues/issues.feature
@@ -1,82 +0,0 @@ @@ -1,82 +0,0 @@
1 -Feature: Issues  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - And project "Shop" have "Release 0.4" open issue  
6 - And project "Shop" have "Release 0.3" closed issue  
7 - And I visit project "Shop" issues page  
8 -  
9 - Scenario: I should see open issues  
10 - Given I should see "Release 0.4" in issues  
11 - And I should not see "Release 0.3" in issues  
12 -  
13 - Scenario: I should see closed issues  
14 - Given I click link "Closed"  
15 - Then I should see "Release 0.3" in issues  
16 - And I should not see "Release 0.4" in issues  
17 -  
18 - Scenario: I should see all issues  
19 - Given I click link "All"  
20 - Then I should see "Release 0.3" in issues  
21 - And I should see "Release 0.4" in issues  
22 -  
23 - Scenario: I visit issue page  
24 - Given I click link "Release 0.4"  
25 - Then I should see issue "Release 0.4"  
26 -  
27 - @javascript  
28 - Scenario: I submit new unassigned issue  
29 - Given I click link "New Issue"  
30 - And I submit new issue "500 error on profile"  
31 - Given I click link "500 error on profile"  
32 - Then I should see issue "500 error on profile"  
33 -  
34 - @javascript  
35 - Scenario: I comment issue  
36 - Given I visit issue page "Release 0.4"  
37 - And I leave a comment like "XML attached"  
38 - Then I should see comment "XML attached"  
39 -  
40 - @javascript  
41 - Scenario: I search issue  
42 - Given I fill in issue search with "Release"  
43 - Then I should see "Release 0.4" in issues  
44 - And I should not see "Release 0.3" in issues  
45 -  
46 - @javascript  
47 - Scenario: I search issue that not exist  
48 - Given I fill in issue search with "Bug"  
49 - Then I should not see "Release 0.4" in issues  
50 - And I should not see "Release 0.3" in issues  
51 -  
52 -  
53 - @javascript  
54 - Scenario: I search all issues  
55 - Given I click link "All"  
56 - And I fill in issue search with "0.3"  
57 - Then I should see "Release 0.3" in issues  
58 - And I should not see "Release 0.4" in issues  
59 -  
60 - @javascript  
61 - Scenario: I clear search  
62 - Given I click link "All"  
63 - And I fill in issue search with "Something"  
64 - And I fill in issue search with ""  
65 - Then I should see "Release 0.4" in issues  
66 - And I should see "Release 0.3" in issues  
67 -  
68 - @javascript  
69 - Scenario: I create Issue with pre-selected milestone  
70 - Given project "Shop" has milestone "v2.2"  
71 - And project "Shop" has milestone "v3.0"  
72 - And I visit project "Shop" issues page  
73 - When I select milestone "v3.0"  
74 - And I click link "New Issue"  
75 - Then I should see selected milestone with title "v3.0"  
76 -  
77 - @javascript  
78 - Scenario: I create Issue with pre-selected assignee  
79 - When I select first assignee from "Shop" project  
80 - And I click link "New Issue"  
81 - Then I should see first assignee from "Shop" as selected assignee  
82 -  
features/projects/issues/labels.feature
@@ -1,13 +0,0 @@ @@ -1,13 +0,0 @@
1 -Feature: Labels  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - And project "Shop" have issues tags:  
6 - | name |  
7 - | bug |  
8 - | feature |  
9 - Given I visit project "Shop" labels page  
10 -  
11 - Scenario: I should see active milestones  
12 - Then I should see label "bug"  
13 - And I should see label "feature"  
features/projects/issues/milestones.feature
@@ -1,18 +0,0 @@ @@ -1,18 +0,0 @@
1 -Feature: Milestones  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - And project "Shop" has milestone "v2.2"  
6 - Given I visit project "Shop" milestones page  
7 -  
8 - Scenario: I should see active milestones  
9 - Then I should see milestone "v2.2"  
10 -  
11 - Scenario: I should see milestone  
12 - Given I click link "v2.2"  
13 - Then I should see milestone "v2.2"  
14 -  
15 - Scenario: I create new milestone  
16 - Given I click link "New Milestone"  
17 - And I submit new milestone "v2.3"  
18 - Then I should see milestone "v2.3"  
features/projects/merge_requests.feature
@@ -1,42 +0,0 @@ @@ -1,42 +0,0 @@
1 -Feature: Merge Requests  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - And project "Shop" have "Bug NS-04" open merge request  
6 - And project "Shop" have "Feature NS-03" closed merge request  
7 - And I visit project "Shop" merge requests page  
8 -  
9 - Scenario: I should see open merge requests  
10 - Then I should see "Bug NS-04" in merge requests  
11 - And I should not see "Feature NS-03" in merge requests  
12 -  
13 - Scenario: I should see closed merge requests  
14 - Given I click link "Closed"  
15 - Then I should see "Feature NS-03" in merge requests  
16 - And I should not see "Bug NS-04" in merge requests  
17 -  
18 - Scenario: I should see all merge requests  
19 - Given I click link "All"  
20 - Then I should see "Feature NS-03" in merge requests  
21 - And I should see "Bug NS-04" in merge requests  
22 -  
23 - Scenario: I visit merge request page  
24 - Given I click link "Bug NS-04"  
25 - Then I should see merge request "Bug NS-04"  
26 -  
27 - Scenario: I close merge request page  
28 - Given I click link "Bug NS-04"  
29 - And I click link "Close"  
30 - Then I should see closed merge request "Bug NS-04"  
31 -  
32 - Scenario: I submit new unassigned merge request  
33 - Given I click link "New Merge Request"  
34 - And I submit new merge request "Wiki Feature"  
35 - Then I should see merge request "Wiki Feature"  
36 -  
37 - @javascript  
38 - Scenario: I comment merge request  
39 - Given I visit merge request page "Bug NS-04"  
40 - And I leave a comment like "XML attached"  
41 - Then I should see comment "XML attached"  
42 -  
features/projects/network.feature
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -@javascript  
2 -Feature: Project Network Graph  
3 -  
4 - Background:  
5 - Given I signin as a user  
6 - And I own project "Shop"  
7 - And I visit project "Shop" network page  
8 -  
9 - Scenario: I should see project network  
10 - Then page should have network graph  
features/projects/project.feature
@@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
1 -Feature: Project  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - And I visit project "Shop" page  
6 -  
7 - Scenario: I should see project activity  
8 -  
9 - Scenario: I edit project  
10 -  
11 - Scenario: I visit attachments  
features/projects/snippets.feature
features/projects/source/browse_files.feature
@@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
1 -Feature: Browse git repo  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - Given I visit project source page  
6 -  
7 - Scenario: I browse files from master branch  
8 - Then I should see files from repository  
9 -  
10 - Scenario: I browse files for specific ref  
11 - Given I visit project source page for "8470d70"  
12 - Then I should see files from repository for "8470d70"  
13 -  
14 - Scenario: I browse file content  
15 - Given I click on file from repo  
16 - Then I should see it content  
17 -  
18 - Scenario: I browse raw file  
19 - Given I visit blob file from repo  
20 - And I click on raw button  
21 - Then I should see raw file content  
22 -  
23 -  
features/projects/source/git_blame.feature
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -Feature: Browse git repo  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - Given I visit project source page  
6 -  
7 - Scenario: I blame file  
8 - Given I click on file from repo  
9 - And I click blame button  
10 - Then I should see git file blame  
features/projects/team_management.feature
@@ -1,35 +0,0 @@ @@ -1,35 +0,0 @@
1 -Feature: Project Team management  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - And gitlab user "Mike"  
6 - And gitlab user "Sam"  
7 - And "Sam" is "Shop" developer  
8 - And I visit project "Shop" team page  
9 -  
10 - Scenario: See all team members  
11 - Then I should be able to see myself in team  
12 - And I should see "Sam" in team list  
13 -  
14 - Scenario: Add user to project  
15 - Given I click link "New Team Member"  
16 - And I select "Mike" as "Reporter"  
17 - Then I should see "Mike" in team list as "Reporter"  
18 -  
19 - @javascript  
20 - Scenario: Update user access  
21 - Given I should see "Sam" in team list as "Developer"  
22 - And I change "Sam" role to "Reporter"  
23 - Then I visit project "Shop" team page  
24 - And I should see "Sam" in team list as "Reporter"  
25 -  
26 - Scenario: View team member profile  
27 - Given I click link "Sam"  
28 - Then I should see "Sam" team profile  
29 -  
30 - Scenario: Cancel team member  
31 - Given I click link "Sam"  
32 - And I click link "Remove from team"  
33 - Then I visit project "Shop" team page  
34 - And I should not see "Sam" in team list  
35 -  
features/projects/wall.feature
@@ -1,17 +0,0 @@ @@ -1,17 +0,0 @@
1 -@javascript  
2 -Feature: Project Wall  
3 - In order to use Project Wall  
4 - A user  
5 - Should be able to read & write messages  
6 -  
7 - Background:  
8 - Given I signin as a user  
9 - And I own project "Shop"  
10 - And I visit project "Shop" wall page  
11 -  
12 - Scenario: Write comment  
13 - Given I write new comment "my special test message"  
14 - Then I should see project wall note "my special test message"  
15 -  
16 - Then I visit project "Shop" wall page  
17 - And I should see project wall note "my special test message"  
features/projects/web_hooks.feature
features/projects/wiki.feature
@@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
1 -Feature: Wiki  
2 - Background:  
3 - Given I signin as a user  
4 - And I own project "Shop"  
5 - Given I visit project wiki page  
6 -  
7 - Scenario: Add new page  
8 - Given I create Wiki page  
9 - Then I should see newly created wiki page  
10 -  
11 - @javascript  
12 - Scenario: I comment wiki page  
13 - Given I create Wiki page  
14 - And I leave a comment like "XML attached"  
15 - Then I should see comment "XML attached"  
features/step_definitions/common_steps.rb
@@ -1,21 +0,0 @@ @@ -1,21 +0,0 @@
1 -include LoginHelpers  
2 -  
3 -Given /^I signin as a user$/ do  
4 - login_as :user  
5 -end  
6 -  
7 -When /^I click link "(.*?)"$/ do |link|  
8 - click_link link  
9 -end  
10 -  
11 -When /^I click button "(.*?)"$/ do |button|  
12 - click_button button  
13 -end  
14 -  
15 -When /^I fill in "(.*?)" with "(.*?)"$/ do |field, value|  
16 - fill_in field, :with => value  
17 -end  
18 -  
19 -Given /^show me page$/ do  
20 - save_and_open_page  
21 -end  
features/step_definitions/dashboard_steps.rb
@@ -1,136 +0,0 @@ @@ -1,136 +0,0 @@
1 -Then /^I should see "(.*?)" link$/ do |arg1|  
2 - page.should have_link(arg1)  
3 -end  
4 -  
5 -Then /^I should see "(.*?)" project link$/ do |arg1|  
6 - page.should have_link(arg1)  
7 -end  
8 -  
9 -Then /^I should see project "(.*?)" activity feed$/ do |arg1|  
10 - project = Project.find_by_name(arg1)  
11 - page.should have_content "#{@user.name} pushed new branch new_design at #{project.name}"  
12 -end  
13 -  
14 -Given /^project "(.*?)" has push event$/ do |arg1|  
15 - @project = Project.find_by_name(arg1)  
16 -  
17 - data = {  
18 - :before => "0000000000000000000000000000000000000000",  
19 - :after => "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e",  
20 - :ref => "refs/heads/new_design",  
21 - :user_id => @user.id,  
22 - :user_name => @user.name,  
23 - :repository => {  
24 - :name => @project.name,  
25 - :url => "localhost/rubinius",  
26 - :description => "",  
27 - :homepage => "localhost/rubinius",  
28 - :private => true  
29 - }  
30 - }  
31 -  
32 - @event = Event.create(  
33 - :project => @project,  
34 - :action => Event::Pushed,  
35 - :data => data,  
36 - :author_id => @user.id  
37 - )  
38 -end  
39 -  
40 -Then /^I should see last push widget$/ do  
41 - page.should have_content "Your pushed to branch new_design"  
42 - page.should have_link "Create Merge Request"  
43 -end  
44 -  
45 -Then /^I click "(.*?)" link$/ do |arg1|  
46 - click_link arg1 #Create Merge Request"  
47 -end  
48 -  
49 -Then /^I see prefilled new Merge Request page$/ do  
50 - current_path.should == new_project_merge_request_path(@project)  
51 - find("#merge_request_source_branch").value.should == "new_design"  
52 - find("#merge_request_target_branch").value.should == "master"  
53 - find("#merge_request_title").value.should == "New Design"  
54 -end  
55 -  
56 -Given /^I visit dashboard search page$/ do  
57 - visit search_path  
58 -end  
59 -  
60 -Given /^I search for "(.*?)"$/ do |arg1|  
61 - fill_in "dashboard_search", :with => arg1  
62 - click_button "Search"  
63 -end  
64 -  
65 -Then /^I should see issues assigned to me$/ do  
66 - issues = @user.issues  
67 - issues.each do |issue|  
68 - page.should have_content(issue.title[0..10])  
69 - page.should have_content(issue.project.name)  
70 - end  
71 -end  
72 -  
73 -Then /^I should see my merge requests$/ do  
74 - merge_requests = @user.merge_requests  
75 - merge_requests.each do |mr|  
76 - page.should have_content(mr.title[0..10])  
77 - page.should have_content(mr.project.name)  
78 - end  
79 -end  
80 -  
81 -Given /^I have assigned issues$/ do  
82 - project = Factory :project  
83 - project.add_access(@user, :read, :write)  
84 -  
85 - issue1 = Factory :issue,  
86 - :author => @user,  
87 - :assignee => @user,  
88 - :project => project  
89 -  
90 - issue2 = Factory :issue,  
91 - :author => @user,  
92 - :assignee => @user,  
93 - :project => project  
94 -end  
95 -  
96 -Given /^I have authored merge requests$/ do  
97 - project1 = Factory :project  
98 -  
99 - project2 = Factory :project  
100 -  
101 - project1.add_access(@user, :read, :write)  
102 - project2.add_access(@user, :read, :write)  
103 -  
104 - merge_request1 = Factory :merge_request,  
105 - :author => @user,  
106 - :project => project1  
107 -  
108 - merge_request2 = Factory :merge_request,  
109 - :author => @user,  
110 - :project => project2  
111 -end  
112 -  
113 -Given /^user with name "(.*?)" joined project "(.*?)"$/ do |user_name, project_name|  
114 - user = Factory.create(:user, {name: user_name})  
115 - project = Project.find_by_name project_name  
116 - Event.create(  
117 - project: project,  
118 - author_id: user.id,  
119 - action: Event::Joined  
120 - )  
121 -end  
122 -  
123 -Given /^user with name "(.*?)" left project "(.*?)"$/ do |user_name, project_name|  
124 - user = User.find_by_name user_name  
125 - project = Project.find_by_name project_name  
126 - Event.create(  
127 - project: project,  
128 - author_id: user.id,  
129 - action: Event::Left  
130 - )  
131 -end  
132 -  
133 -Then /^I should see "(.*?)" event$/ do |event_text|  
134 - page.should have_content(event_text)  
135 -end  
136 -  
features/step_definitions/profile/profile_keys_steps.rb
@@ -1,34 +0,0 @@ @@ -1,34 +0,0 @@
1 -Given /^I visit profile keys page$/ do  
2 - visit keys_path  
3 -end  
4 -  
5 -Then /^I should see my ssh keys$/ do  
6 - @user.keys.each do |key|  
7 - page.should have_content(key.title)  
8 - end  
9 -end  
10 -  
11 -Given /^I have ssh keys:$/ do |table|  
12 - table.hashes.each do |row|  
13 - Factory :key, :user => @user, :title => row[:title], :key => "jfKLJDFKSFJSHFJ#{row[:title]}"  
14 - end  
15 -end  
16 -  
17 -Given /^I submit new ssh key "(.*?)"$/ do |arg1|  
18 - fill_in "key_title", :with => arg1  
19 - fill_in "key_key", :with => "ssh-rsa publickey234="  
20 - click_button "Save"  
21 -end  
22 -  
23 -Then /^I should see new ssh key "(.*?)"$/ do |arg1|  
24 - key = Key.find_by_title(arg1)  
25 - page.should have_content(key.title)  
26 - page.should have_content(key.key)  
27 - current_path.should == key_path(key)  
28 -end  
29 -  
30 -Then /^I should not see "(.*?)" ssh key$/ do |arg1|  
31 - within "#keys-table" do  
32 - page.should_not have_content(arg1)  
33 - end  
34 -end  
features/step_definitions/profile/profile_steps.rb
@@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
1 -Then /^I should see my profile info$/ do  
2 - page.should have_content "Profile"  
3 - page.should have_content @user.name  
4 - page.should have_content @user.email  
5 -end  
6 -  
7 -Then /^I change my password$/ do  
8 - fill_in "user_password", :with => "222333"  
9 - fill_in "user_password_confirmation", :with => "222333"  
10 - click_button "Save"  
11 -end  
12 -  
13 -Then /^I should be redirected to sign in page$/ do  
14 - current_path.should == new_user_session_path  
15 -end  
16 -  
17 -Then /^I reset my token$/ do  
18 - @old_token = @user.private_token  
19 - click_button "Reset"  
20 -end  
21 -  
22 -Then /^I should see new token$/ do  
23 - find("#token").value.should_not == @old_token  
24 - find("#token").value.should == @user.reload.private_token  
25 -end  
26 -  
27 -Then /^I change my contact info$/ do  
28 - fill_in "user_skype", :with => "testskype"  
29 - fill_in "user_linkedin", :with => "testlinkedin"  
30 - fill_in "user_twitter", :with => "testtwitter"  
31 - click_button "Save"  
32 - @user.reload  
33 -end  
34 -  
35 -Then /^I should see new contact info$/ do  
36 - @user.skype.should == 'testskype'  
37 - @user.linkedin.should == 'testlinkedin'  
38 - @user.twitter.should == 'testtwitter'  
39 -end  
features/step_definitions/project/browse_code_steps.rb
@@ -1,38 +0,0 @@ @@ -1,38 +0,0 @@
1 -Then /^I should see files from repository$/ do  
2 - page.should have_content("app")  
3 - page.should have_content("History")  
4 - page.should have_content("Gemfile")  
5 -end  
6 -  
7 -Then /^I should see files from repository for "(.*?)"$/ do |arg1|  
8 - current_path.should == tree_project_ref_path(@project, arg1)  
9 - page.should have_content("app")  
10 - page.should have_content("History")  
11 - page.should have_content("Gemfile")  
12 -end  
13 -  
14 -Given /^I click on file from repo$/ do  
15 - click_link "Gemfile"  
16 -end  
17 -  
18 -Then /^I should see it content$/ do  
19 - page.should have_content("rubygems.org")  
20 -end  
21 -  
22 -Given /^I click on raw button$/ do  
23 - click_link "raw"  
24 -end  
25 -  
26 -Then /^I should see raw file content$/ do  
27 - page.source.should == ValidCommit::BLOB_FILE  
28 -end  
29 -  
30 -Given /^I click blame button$/ do  
31 - click_link "blame"  
32 -end  
33 -  
34 -Then /^I should see git file blame$/ do  
35 - page.should have_content("rubygems.org")  
36 - page.should have_content("Dmitriy Zaporozhets")  
37 - page.should have_content("bc3735004cb Moving to rails 3.2")  
38 -end  
features/step_definitions/project/project_commits_steps.rb
@@ -1,64 +0,0 @@ @@ -1,64 +0,0 @@
1 -Then /^I see project commits$/ do  
2 - current_path.should == project_commits_path(@project)  
3 -  
4 - commit = @project.commit  
5 - page.should have_content(@project.name)  
6 - page.should have_content(commit.message)  
7 - page.should have_content(commit.id.to_s[0..5])  
8 -end  
9 -  
10 -Given /^I click atom feed link$/ do  
11 - click_link "Feed"  
12 -end  
13 -  
14 -Then /^I see commits atom feed$/ do  
15 - commit = CommitDecorator.decorate(@project.commit)  
16 - page.response_headers['Content-Type'].should have_content("application/atom+xml")  
17 - page.body.should have_selector("title", :text => "Recent commits to #{@project.name}")  
18 - page.body.should have_selector("author email", :text => commit.author_email)  
19 - page.body.should have_selector("entry summary", :text => commit.description)  
20 -end  
21 -  
22 -Then /^I see commit info$/ do  
23 - page.should have_content ValidCommit::MESSAGE  
24 - page.should have_content "Showing 1 changed file"  
25 -end  
26 -  
27 -Given /^I fill compare fields with refs$/ do  
28 - fill_in "from", :with => "master"  
29 - fill_in "to", :with => "stable"  
30 - click_button "Compare"  
31 -end  
32 -  
33 -Given /^I see compared refs$/ do  
34 - page.should have_content "Commits (27)"  
35 - page.should have_content "Compare View"  
36 - page.should have_content "Showing 73 changed files"  
37 -end  
38 -  
39 -Then /^I should see "(.*?)" recent branches list$/ do |arg1|  
40 - page.should have_content("Branches")  
41 - page.should have_content("master")  
42 -end  
43 -  
44 -Then /^I should see "(.*?)" all branches list$/ do |arg1|  
45 - page.should have_content("Branches")  
46 - page.should have_content("master")  
47 -end  
48 -  
49 -Then /^I should see "(.*?)" all tags list$/ do |arg1|  
50 - page.should have_content("Tags")  
51 - page.should have_content("v1.2.1")  
52 -end  
53 -  
54 -Then /^I should see "(.*?)" protected branches list$/ do |arg1|  
55 - within "table" do  
56 - page.should have_content "stable"  
57 - page.should_not have_content "master"  
58 - end  
59 -end  
60 -  
61 -Given /^project "(.*?)" has protected branches$/ do |arg1|  
62 - project = Project.find_by_name(arg1)  
63 - project.protected_branches.create(:name => "stable")  
64 -end  
features/step_definitions/project/project_issues_steps.rb
@@ -1,81 +0,0 @@ @@ -1,81 +0,0 @@
1 -Given /^project "(.*?)" have "(.*?)" open issue$/ do |arg1, arg2|  
2 - project = Project.find_by_name(arg1)  
3 - Factory.create(:issue, :title => arg2, :project => project, :author => project.users.first)  
4 -end  
5 -  
6 -Given /^project "(.*?)" have "(.*?)" closed issue$/ do |arg1, arg2|  
7 - project = Project.find_by_name(arg1)  
8 - Factory.create(:issue, :title => arg2, :project => project, :author => project.users.first, :closed => true)  
9 -end  
10 -  
11 -Given /^I should see "(.*?)" in issues$/ do |arg1|  
12 - page.should have_content arg1  
13 -end  
14 -  
15 -Given /^I should not see "(.*?)" in issues$/ do |arg1|  
16 - page.should_not have_content arg1  
17 -end  
18 -  
19 -Then /^I should see issue "(.*?)"$/ do |arg1|  
20 - issue = Issue.find_by_title(arg1)  
21 - page.should have_content issue.title  
22 - page.should have_content issue.author_name  
23 - page.should have_content issue.project.name  
24 -end  
25 -  
26 -Given /^I submit new issue "(.*?)"$/ do |arg1|  
27 - fill_in "issue_title", with: arg1  
28 - click_button "Submit new issue"  
29 -end  
30 -  
31 -Given /^project "(.*?)" have issues tags:$/ do |arg1, table|  
32 - project = Project.find_by_name(arg1)  
33 - table.hashes.each do |hash|  
34 - Factory :issue,  
35 - project: project,  
36 - label_list: [hash[:name]]  
37 - end  
38 -end  
39 -  
40 -Given /^I visit project "(.*?)" labels page$/ do |arg1|  
41 - visit project_labels_path(Project.find_by_name(arg1))  
42 -end  
43 -  
44 -Then /^I should see label "(.*?)"$/ do |arg1|  
45 - within ".labels-table" do  
46 - page.should have_content arg1  
47 - end  
48 -end  
49 -  
50 -Given /^I fill in issue search with "(.*?)"$/ do |arg1|  
51 - # Because fill_in, with: "" triggers nothing  
52 - # we need to trigger a keyup event  
53 - if arg1 == ''  
54 - page.execute_script("$('.issue_search').val('').keyup();");  
55 - end  
56 - fill_in 'issue_search', with: arg1  
57 -end  
58 -  
59 -When /^I select milestone "(.*?)"$/ do |milestone_title|  
60 - select milestone_title, from: "milestone_id"  
61 -end  
62 -  
63 -Then /^I should see selected milestone with title "(.*?)"$/ do |milestone_title|  
64 - issues_milestone_selector = "#issue_milestone_id_chzn/a"  
65 - wait_until{ page.has_content?("Details") }  
66 - page.find(issues_milestone_selector).should have_content(milestone_title)  
67 -end  
68 -  
69 -When /^I select first assignee from "(.*?)" project$/ do |project_name|  
70 - project = Project.find_by_name project_name  
71 - first_assignee = project.users.first  
72 - select first_assignee.name, from: "assignee_id"  
73 -end  
74 -  
75 -Then /^I should see first assignee from "(.*?)" as selected assignee$/ do |project_name|  
76 - issues_assignee_selector = "#issue_assignee_id_chzn/a"  
77 - wait_until{ page.has_content?("Details") }  
78 - project = Project.find_by_name project_name  
79 - assignee_name = project.users.first.name  
80 - page.find(issues_assignee_selector).should have_content(assignee_name)  
81 -end  
features/step_definitions/project/project_merge_requests_steps.rb
@@ -1,38 +0,0 @@ @@ -1,38 +0,0 @@
1 -Given /^project "(.*?)" have "(.*?)" open merge request$/ do |arg1, arg2|  
2 - project = Project.find_by_name(arg1)  
3 - Factory.create(:merge_request, :title => arg2, :project => project, :author => project.users.first)  
4 -end  
5 -  
6 -Given /^project "(.*?)" have "(.*?)" closed merge request$/ do |arg1, arg2|  
7 - project = Project.find_by_name(arg1)  
8 - Factory.create(:merge_request, :title => arg2, :project => project, :author => project.users.first, :closed => true)  
9 -end  
10 -  
11 -Then /^I should see "(.*?)" in merge requests$/ do |arg1|  
12 - page.should have_content arg1  
13 -end  
14 -  
15 -Then /^I should not see "(.*?)" in merge requests$/ do |arg1|  
16 - page.should_not have_content arg1  
17 -end  
18 -  
19 -Then /^I should see merge request "(.*?)"$/ do |arg1|  
20 - merge_request = MergeRequest.find_by_title(arg1)  
21 - page.should have_content(merge_request.title[0..10])  
22 - page.should have_content(merge_request.target_branch)  
23 - page.should have_content(merge_request.source_branch)  
24 -end  
25 -  
26 -Given /^I submit new merge request "(.*?)"$/ do |arg1|  
27 - fill_in "merge_request_title", :with => arg1  
28 - select "master", :from => "merge_request_source_branch"  
29 - select "stable", :from => "merge_request_target_branch"  
30 - click_button "Save"  
31 -end  
32 -  
33 -Then /^I should see closed merge request "(.*?)"$/ do |arg1|  
34 - mr = MergeRequest.find_by_title(arg1)  
35 - mr.closed.should be_true  
36 - page.should have_content "Closed by"  
37 -end  
38 -  
features/step_definitions/project/project_milestones_steps.rb
@@ -1,33 +0,0 @@ @@ -1,33 +0,0 @@
1 -Given /^project "(.*?)" has milestone "(.*?)"$/ do |arg1, arg2|  
2 - project = Project.find_by_name(arg1)  
3 -  
4 - milestone = Factory :milestone,  
5 - :title => arg2,  
6 - :project => project  
7 -  
8 - 3.times do |i|  
9 - issue = Factory :issue,  
10 - :project => project,  
11 - :milestone => milestone  
12 - end  
13 -end  
14 -  
15 -Then /^I should see active milestones$/ do  
16 - milestone = @project.milestones.first  
17 - page.should have_content(milestone.title[0..10])  
18 - page.should have_content(milestone.expires_at)  
19 - page.should have_content("Browse Issues")  
20 -end  
21 -  
22 -Then /^I should see milestone "(.*?)"$/ do |arg1|  
23 - milestone = @project.milestones.find_by_title(arg1)  
24 - page.should have_content(milestone.title[0..10])  
25 - page.should have_content(milestone.expires_at)  
26 - page.should have_content("Browse Issues")  
27 -end  
28 -  
29 -Given /^I submit new milestone "(.*?)"$/ do |arg1|  
30 - fill_in "milestone_title", :with => arg1  
31 - click_button "Create milestone"  
32 -end  
33 -  
features/step_definitions/project/project_team_steps.rb
@@ -1,55 +0,0 @@ @@ -1,55 +0,0 @@
1 -Given /^gitlab user "(.*?)"$/ do |arg1|  
2 - Factory :user, :name => arg1  
3 -end  
4 -  
5 -Given /^"(.*?)" is "(.*?)" developer$/ do |arg1, arg2|  
6 - user = User.find_by_name(arg1)  
7 - project = Project.find_by_name(arg2)  
8 - project.add_access(user, :write)  
9 -end  
10 -  
11 -Then /^I should be able to see myself in team$/ do  
12 - page.should have_content(@user.name)  
13 - page.should have_content(@user.email)  
14 -end  
15 -  
16 -Then /^I should see "(.*?)" in team list$/ do |arg1|  
17 - user = User.find_by_name(arg1)  
18 - page.should have_content(user.name)  
19 - page.should have_content(user.email)  
20 -end  
21 -  
22 -Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2|  
23 - user = User.find_by_name(arg1)  
24 - within "#new_team_member" do  
25 - select user.name, :from => "user_ids"  
26 - select arg2, :from => "project_access"  
27 - end  
28 - click_button "Save"  
29 -end  
30 -  
31 -Then /^I should see "(.*?)" in team list as "(.*?)"$/ do |arg1, arg2|  
32 - user = User.find_by_name(arg1)  
33 - role_id = find(".user_#{user.id} #team_member_project_access").value  
34 - role_id.should == UsersProject.access_roles[arg2].to_s  
35 -end  
36 -  
37 -Given /^I change "(.*?)" role to "(.*?)"$/ do |arg1, arg2|  
38 - user = User.find_by_name(arg1)  
39 - within ".user_#{user.id}" do  
40 - select arg2, :from => "team_member_project_access"  
41 - end  
42 -end  
43 -  
44 -Then /^I should see "(.*?)" team profile$/ do |arg1|  
45 - user = User.find_by_name(arg1)  
46 - page.should have_content(user.name)  
47 - page.should have_content(user.email)  
48 - page.should have_content("To team list")  
49 -end  
50 -  
51 -Then /^I should not see "(.*?)" in team list$/ do |arg1|  
52 - user = User.find_by_name(arg1)  
53 - page.should_not have_content(user.name)  
54 - page.should_not have_content(user.email)  
55 -end  
features/step_definitions/project/project_wiki_steps.rb
@@ -1,14 +0,0 @@ @@ -1,14 +0,0 @@
1 -Given /^I create Wiki page$/ do  
2 - fill_in "Title", :with => 'Test title'  
3 - fill_in "Content", :with => '[link test](test)'  
4 - click_on "Save"  
5 -end  
6 -  
7 -Then /^I should see newly created wiki page$/ do  
8 - page.should have_content("Test title")  
9 - page.should have_content("link test")  
10 -  
11 - click_link "link test"  
12 -  
13 - page.should have_content("Editing page")  
14 -end  
features/step_definitions/project/projects_steps.rb
@@ -1,77 +0,0 @@ @@ -1,77 +0,0 @@
1 -When /^I visit new project page$/ do  
2 - visit new_project_path  
3 -end  
4 -  
5 -When /^fill project form with valid data$/ do  
6 - fill_in 'project_name', :with => 'NewProject'  
7 - fill_in 'project_code', :with => 'NPR'  
8 - fill_in 'project_path', :with => 'newproject'  
9 - click_button "Create project"  
10 -end  
11 -  
12 -Then /^I should see project page$/ do  
13 - current_path.should == project_path(Project.last)  
14 - page.should have_content('NewProject')  
15 -end  
16 -  
17 -Then /^I should see empty project instuctions$/ do  
18 - page.should have_content("git init")  
19 - page.should have_content("git remote")  
20 - page.should have_content(Project.last.url_to_repo)  
21 -end  
22 -  
23 -Given /^I own project "(.*?)"$/ do |arg1|  
24 - @project = Factory :project, :name => arg1  
25 - @project.add_access(@user, :admin)  
26 -end  
27 -  
28 -Given /^I visit project "(.*?)" wall page$/ do |arg1|  
29 - project = Project.find_by_name(arg1)  
30 - visit wall_project_path(project)  
31 -end  
32 -  
33 -Then /^I should see project wall note "(.*?)"$/ do |arg1|  
34 - page.should have_content arg1  
35 -end  
36 -  
37 -Given /^project "(.*?)" has comment "(.*?)"$/ do |arg1, arg2|  
38 - project = Project.find_by_name(arg1)  
39 - project.notes.create(:note => arg1, :author => project.users.first)  
40 -end  
41 -  
42 -Given /^I write new comment "(.*?)"$/ do |arg1|  
43 - fill_in "note_note", :with => arg1  
44 - click_button "Add Comment"  
45 -end  
46 -  
47 -Given /^I visit project "(.*?)" page$/ do |arg1|  
48 - project = Project.find_by_name(arg1)  
49 - visit project_path(project)  
50 -end  
51 -  
52 -Given /^I visit project "(.*?)" network page$/ do |arg1|  
53 - project = Project.find_by_name(arg1)  
54 -  
55 - # Stub out find_all to speed this up (10 commits vs. 650)  
56 - commits = Grit::Commit.find_all(project.repo, nil, {max_count: 10})  
57 - Grit::Commit.stub(:find_all).and_return(commits)  
58 -  
59 - visit graph_project_path(project)  
60 -end  
61 -  
62 -Given /^page should have network graph$/ do  
63 - page.should have_content "Project Network Graph"  
64 - within ".graph" do  
65 - page.should have_content "master"  
66 - page.should have_content "scss_refactor..."  
67 - end  
68 -end  
69 -  
70 -Given /^I leave a comment like "(.*?)"$/ do |arg1|  
71 - fill_in "note_note", :with => arg1  
72 - click_button "Add Comment"  
73 -end  
74 -  
75 -Then /^I should see comment "(.*?)"$/ do |arg1|  
76 - page.should have_content(arg1)  
77 -end  
features/step_definitions/visit_steps.rb
@@ -1,91 +0,0 @@ @@ -1,91 +0,0 @@
1 -Given /^I visit project "(.*?)" issues page$/ do |arg1|  
2 - visit project_issues_path(Project.find_by_name(arg1))  
3 -end  
4 -  
5 -Given /^I visit issue page "(.*?)"$/ do |arg1|  
6 - issue = Issue.find_by_title(arg1)  
7 - visit project_issue_path(issue.project, issue)  
8 -end  
9 -  
10 -Given /^I visit project "(.*?)" merge requests page$/ do |arg1|  
11 - visit project_merge_requests_path(Project.find_by_name(arg1))  
12 -end  
13 -  
14 -Given /^I visit merge request page "(.*?)"$/ do |arg1|  
15 - mr = MergeRequest.find_by_title(arg1)  
16 - visit project_merge_request_path(mr.project, mr)  
17 -end  
18 -  
19 -Given /^I visit project "(.*?)" milestones page$/ do |arg1|  
20 - @project = Project.find_by_name(arg1)  
21 - visit project_milestones_path(@project)  
22 -end  
23 -  
24 -Given /^I visit project commits page$/ do  
25 - visit project_commits_path(@project)  
26 -end  
27 -  
28 -Given /^I visit compare refs page$/ do  
29 - visit compare_project_commits_path(@project)  
30 -end  
31 -  
32 -Given /^I visit project branches page$/ do  
33 - visit branches_project_repository_path(@project)  
34 -end  
35 -  
36 -Given /^I visit project commit page$/ do  
37 - visit project_commit_path(@project, ValidCommit::ID)  
38 -end  
39 -  
40 -Given /^I visit project tags page$/ do  
41 - visit tags_project_repository_path(@project)  
42 -end  
43 -  
44 -Given /^I click on commit link$/ do  
45 - visit project_commit_path(@project, ValidCommit::ID)  
46 -end  
47 -  
48 -Given /^I visit project source page$/ do  
49 - visit tree_project_ref_path(@project, @project.root_ref)  
50 -end  
51 -  
52 -Given /^I visit project source page for "(.*?)"$/ do |arg1|  
53 - visit tree_project_ref_path(@project, arg1)  
54 -end  
55 -  
56 -Given /^I visit blob file from repo$/ do  
57 - visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH)  
58 -end  
59 -  
60 -Given /^I visit project "(.*?)" team page$/ do |arg1|  
61 - visit team_project_path(Project.find_by_name(arg1))  
62 -end  
63 -  
64 -Given /^I visit project wiki page$/ do  
65 - visit project_wiki_path(@project, :index)  
66 -end  
67 -  
68 -Given /^I visit profile page$/ do  
69 - visit profile_path  
70 -end  
71 -  
72 -Given /^I visit profile token page$/ do  
73 - visit profile_token_path  
74 -end  
75 -  
76 -Given /^I visit profile password page$/ do  
77 - visit profile_password_path  
78 -end  
79 -  
80 -Given /^I visit dashboard page$/ do  
81 - visit dashboard_path  
82 -end  
83 -  
84 -Given /^I visit dashboard issues page$/ do  
85 - visit dashboard_issues_path  
86 -end  
87 -  
88 -Given /^I visit dashboard merge requests page$/ do  
89 - visit dashboard_merge_requests_path  
90 -end  
91 -  
features/steps/dashboard/dashboard.rb 0 → 100644
@@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
  1 +class Dashboard < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedPaths
  4 +
  5 + Then 'I should see "New Project" link' do
  6 + page.should have_link "New Project"
  7 + end
  8 +
  9 + Then 'I should see "Shop" project link' do
  10 + page.should have_link "Shop"
  11 + end
  12 +
  13 + Then 'I should see project "Shop" activity feed' do
  14 + project = Project.find_by_name("Shop")
  15 + page.should have_content "#{@user.name} pushed new branch new_design at #{project.name}"
  16 + end
  17 +
  18 + Then 'I should see last push widget' do
  19 + page.should have_content "Your pushed to branch new_design"
  20 + page.should have_link "Create Merge Request"
  21 + end
  22 +
  23 + And 'I click "Create Merge Request" link' do
  24 + click_link "Create Merge Request"
  25 + end
  26 +
  27 + Then 'I see prefilled new Merge Request page' do
  28 + current_path.should == new_project_merge_request_path(@project)
  29 + find("#merge_request_source_branch").value.should == "new_design"
  30 + find("#merge_request_target_branch").value.should == "master"
  31 + find("#merge_request_title").value.should == "New Design"
  32 + end
  33 +
  34 + Given 'user with name "John Doe" joined project "Shop"' do
  35 + user = Factory.create(:user, {name: "John Doe"})
  36 + project = Project.find_by_name "Shop"
  37 + Event.create(
  38 + project: project,
  39 + author_id: user.id,
  40 + action: Event::Joined
  41 + )
  42 + end
  43 +
  44 + Then 'I should see "John Doe joined project Shop" event' do
  45 + page.should have_content "John Doe joined project Shop"
  46 + end
  47 +
  48 + And 'user with name "John Doe" left project "Shop"' do
  49 + user = User.find_by_name "John Doe"
  50 + project = Project.find_by_name "Shop"
  51 + Event.create(
  52 + project: project,
  53 + author_id: user.id,
  54 + action: Event::Left
  55 + )
  56 + end
  57 +
  58 + Then 'I should see "John Doe left project Shop" event' do
  59 + page.should have_content "John Doe left project Shop"
  60 + end
  61 +
  62 + And 'I own project "Shop"' do
  63 + @project = Factory :project, :name => 'Shop'
  64 + @project.add_access(@user, :admin)
  65 + end
  66 +
  67 + And 'project "Shop" has push event' do
  68 + @project = Project.find_by_name("Shop")
  69 +
  70 + data = {
  71 + :before => "0000000000000000000000000000000000000000",
  72 + :after => "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e",
  73 + :ref => "refs/heads/new_design",
  74 + :user_id => @user.id,
  75 + :user_name => @user.name,
  76 + :repository => {
  77 + :name => @project.name,
  78 + :url => "localhost/rubinius",
  79 + :description => "",
  80 + :homepage => "localhost/rubinius",
  81 + :private => true
  82 + }
  83 + }
  84 +
  85 + @event = Event.create(
  86 + :project => @project,
  87 + :action => Event::Pushed,
  88 + :data => data,
  89 + :author_id => @user.id
  90 + )
  91 + end
  92 +end
features/steps/dashboard/dashboard_issues.rb 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +class DashboardIssues < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedPaths
  4 +
  5 + Then 'I should see issues assigned to me' do
  6 + issues = @user.issues
  7 + issues.each do |issue|
  8 + page.should have_content(issue.title[0..10])
  9 + page.should have_content(issue.project.name)
  10 + end
  11 + end
  12 +
  13 + And 'I have assigned issues' do
  14 + project = Factory :project
  15 + project.add_access(@user, :read, :write)
  16 +
  17 + 2.times { Factory :issue, :author => @user, :assignee => @user, :project => project }
  18 + end
  19 +end
features/steps/dashboard/dashboard_merge_requests.rb 0 → 100644
@@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
  1 +class DashboardMergeRequests < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedPaths
  4 +
  5 + Then 'I should see my merge requests' do
  6 + merge_requests = @user.merge_requests
  7 + merge_requests.each do |mr|
  8 + page.should have_content(mr.title[0..10])
  9 + page.should have_content(mr.project.name)
  10 + end
  11 + end
  12 +
  13 + And 'I have authored merge requests' do
  14 + project1 = Factory :project
  15 + project2 = Factory :project
  16 +
  17 + project1.add_access(@user, :read, :write)
  18 + project2.add_access(@user, :read, :write)
  19 +
  20 + merge_request1 = Factory :merge_request, :author => @user, :project => project1
  21 + merge_request2 = Factory :merge_request, :author => @user, :project => project2
  22 + end
  23 +end
features/steps/dashboard/dashboard_search.rb 0 → 100644
@@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
  1 +class DashboardSearch < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedPaths
  4 +
  5 + Given 'I search for "Sho"' do
  6 + fill_in "dashboard_search", :with => "Sho"
  7 + click_button "Search"
  8 + end
  9 +
  10 + Then 'I should see "Shop" project link' do
  11 + page.should have_link "Shop"
  12 + end
  13 +
  14 + And 'I own project "Shop"' do
  15 + @project = Factory :project, :name => "Shop"
  16 + @project.add_access(@user, :admin)
  17 + end
  18 +end
features/steps/profile/profile.rb 0 → 100644
@@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
  1 +class Profile < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedPaths
  4 +
  5 + Then 'I should see my profile info' do
  6 + page.should have_content "Profile"
  7 + page.should have_content @user.name
  8 + page.should have_content @user.email
  9 + end
  10 +
  11 + Then 'I change my contact info' do
  12 + fill_in "user_skype", :with => "testskype"
  13 + fill_in "user_linkedin", :with => "testlinkedin"
  14 + fill_in "user_twitter", :with => "testtwitter"
  15 + click_button "Save"
  16 + @user.reload
  17 + end
  18 +
  19 + And 'I should see new contact info' do
  20 + @user.skype.should == 'testskype'
  21 + @user.linkedin.should == 'testlinkedin'
  22 + @user.twitter.should == 'testtwitter'
  23 + end
  24 +
  25 + Then 'I change my password' do
  26 + fill_in "user_password", :with => "222333"
  27 + fill_in "user_password_confirmation", :with => "222333"
  28 + click_button "Save"
  29 + end
  30 +
  31 + And 'I should be redirected to sign in page' do
  32 + current_path.should == new_user_session_path
  33 + end
  34 +
  35 + Then 'I reset my token' do
  36 + @old_token = @user.private_token
  37 + click_button "Reset"
  38 + end
  39 +
  40 + And 'I should see new token' do
  41 + find("#token").value.should_not == @old_token
  42 + find("#token").value.should == @user.reload.private_token
  43 + end
  44 +end
features/steps/profile/profile_ssh_keys.rb 0 → 100644
@@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
  1 +class ProfileSshKeys < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 +
  4 + Then 'I should see my ssh keys' do
  5 + @user.keys.each do |key|
  6 + page.should have_content(key.title)
  7 + end
  8 + end
  9 +
  10 + Given 'I click link "Add new"' do
  11 + click_link "Add new"
  12 + end
  13 +
  14 + And 'I submit new ssh key "Laptop"' do
  15 + fill_in "key_title", :with => "Laptop"
  16 + fill_in "key_key", :with => "ssh-rsa publickey234="
  17 + click_button "Save"
  18 + end
  19 +
  20 + Then 'I should see new ssh key "Laptop"' do
  21 + key = Key.find_by_title("Laptop")
  22 + page.should have_content(key.title)
  23 + page.should have_content(key.key)
  24 + current_path.should == key_path(key)
  25 + end
  26 +
  27 + Given 'I click link "Work"' do
  28 + click_link "Work"
  29 + end
  30 +
  31 + And 'I click link "Remove"' do
  32 + click_link "Remove"
  33 + end
  34 +
  35 + Then 'I visit profile keys page' do
  36 + visit keys_path
  37 + end
  38 +
  39 + And 'I should not see "Work" ssh key' do
  40 + within "#keys-table" do
  41 + page.should_not have_content "Work"
  42 + end
  43 + end
  44 +
  45 + And 'I have ssh key "ssh-rsa Work"' do
  46 + Factory :key, :user => @user, :title => "ssh-rsa Work", :key => "jfKLJDFKSFJSHFJssh-rsa Work"
  47 + end
  48 +end
features/steps/project/create_project.rb 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +class CreateProject < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedPaths
  4 +
  5 + And 'fill project form with valid data' do
  6 + fill_in 'project_name', :with => 'NewProject'
  7 + fill_in 'project_code', :with => 'NPR'
  8 + fill_in 'project_path', :with => 'newproject'
  9 + click_button "Create project"
  10 + end
  11 +
  12 + Then 'I should see project page' do
  13 + current_path.should == project_path(Project.last)
  14 + page.should have_content "NewProject"
  15 + end
  16 +
  17 + And 'I should see empty project instuctions' do
  18 + page.should have_content "git init"
  19 + page.should have_content "git remote"
  20 + page.should have_content Project.last.url_to_repo
  21 + end
  22 +end
features/steps/project/project.rb 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +class Projects < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedPaths
  5 +end
features/steps/project/project_browse_branches.rb 0 → 100644
@@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
  1 +class ProjectBrowseBranches < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedPaths
  5 +
  6 + Then 'I should see "Shop" recent branches list' do
  7 + page.should have_content "Branches"
  8 + page.should have_content "master"
  9 + end
  10 +
  11 + Given 'I click link "All"' do
  12 + click_link "All"
  13 + end
  14 +
  15 + Then 'I should see "Shop" all branches list' do
  16 + page.should have_content "Branches"
  17 + page.should have_content "master"
  18 + end
  19 +
  20 + Given 'I click link "Protected"' do
  21 + click_link "Protected"
  22 + end
  23 +
  24 + Then 'I should see "Shop" protected branches list' do
  25 + within "table" do
  26 + page.should have_content "stable"
  27 + page.should_not have_content "master"
  28 + end
  29 + end
  30 +
  31 + And 'project "Shop" has protected branches' do
  32 + project = Project.find_by_name("Shop")
  33 + project.protected_branches.create(:name => "stable")
  34 + end
  35 +end
features/steps/project/project_browse_commits.rb 0 → 100644
@@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
  1 +class ProjectBrowseCommits < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedPaths
  5 +
  6 + Then 'I see project commits' do
  7 + current_path.should == project_commits_path(@project)
  8 +
  9 + commit = @project.commit
  10 + page.should have_content(@project.name)
  11 + page.should have_content(commit.message)
  12 + page.should have_content(commit.id.to_s[0..5])
  13 + end
  14 +
  15 + Given 'I click atom feed link' do
  16 + click_link "Feed"
  17 + end
  18 +
  19 + Then 'I see commits atom feed' do
  20 + commit = CommitDecorator.decorate(@project.commit)
  21 + page.response_headers['Content-Type'].should have_content("application/atom+xml")
  22 + page.body.should have_selector("title", :text => "Recent commits to #{@project.name}")
  23 + page.body.should have_selector("author email", :text => commit.author_email)
  24 + page.body.should have_selector("entry summary", :text => commit.description)
  25 + end
  26 +
  27 + Given 'I click on commit link' do
  28 + visit project_commit_path(@project, ValidCommit::ID)
  29 + end
  30 +
  31 + Then 'I see commit info' do
  32 + page.should have_content ValidCommit::MESSAGE
  33 + page.should have_content "Showing 1 changed file"
  34 + end
  35 +
  36 + And 'I fill compare fields with refs' do
  37 + fill_in "from", :with => "master"
  38 + fill_in "to", :with => "stable"
  39 + click_button "Compare"
  40 + end
  41 +
  42 + And 'I see compared refs' do
  43 + page.should have_content "Commits (27)"
  44 + page.should have_content "Compare View"
  45 + page.should have_content "Showing 73 changed files"
  46 + end
  47 +end
features/steps/project/project_browse_files.rb 0 → 100644
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
  1 +class ProjectBrowseFiles < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedPaths
  5 +
  6 + Then 'I should see files from repository' do
  7 + page.should have_content "app"
  8 + page.should have_content "History"
  9 + page.should have_content "Gemfile"
  10 + end
  11 +
  12 + Then 'I should see files from repository for "8470d70"' do
  13 + current_path.should == tree_project_ref_path(@project, "8470d70")
  14 + page.should have_content "app"
  15 + page.should have_content "History"
  16 + page.should have_content "Gemfile"
  17 + end
  18 +
  19 + Given 'I click on "Gemfile" file in repo' do
  20 + click_link "Gemfile"
  21 + end
  22 +
  23 + Then 'I should see it content' do
  24 + page.should have_content "rubygems.org"
  25 + end
  26 +
  27 + And 'I click link "raw"' do
  28 + click_link "raw"
  29 + end
  30 +
  31 + Then 'I should see raw file content' do
  32 + page.source.should == ValidCommit::BLOB_FILE
  33 + end
  34 +end
features/steps/project/project_browse_git_repo.rb 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +class ProjectBrowseGitRepo < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedPaths
  5 +
  6 + Given 'I click on "Gemfile" file in repo' do
  7 + click_link "Gemfile"
  8 + end
  9 +
  10 + And 'I click blame button' do
  11 + click_link "blame"
  12 + end
  13 +
  14 + Then 'I should see git file blame' do
  15 + page.should have_content "rubygems.org"
  16 + page.should have_content "Dmitriy Zaporozhets"
  17 + page.should have_content "bc3735004cb Moving to rails 3.2"
  18 + end
  19 +end
features/steps/project/project_browse_tags.rb 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +class ProjectBrowseTags < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedPaths
  5 +
  6 + Then 'I should see "Shop" all tags list' do
  7 + page.should have_content "Tags"
  8 + page.should have_content "v1.2.1"
  9 + end
  10 +end
features/steps/project/project_comment_commit.rb 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +class ProjectCommentCommit < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedNote
  5 + include SharedPaths
  6 +end
features/steps/project/project_issues.rb 0 → 100644
@@ -0,0 +1,134 @@ @@ -0,0 +1,134 @@
  1 +class ProjectIssues < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedNote
  5 + include SharedPaths
  6 +
  7 + Given 'I should see "Release 0.4" in issues' do
  8 + page.should have_content "Release 0.4"
  9 + end
  10 +
  11 + And 'I should not see "Release 0.3" in issues' do
  12 + page.should_not have_content "Release 0.3"
  13 + end
  14 +
  15 + Given 'I click link "Closed"' do
  16 + click_link "Closed"
  17 + end
  18 +
  19 + Then 'I should see "Release 0.3" in issues' do
  20 + page.should have_content "Release 0.3"
  21 + end
  22 +
  23 + And 'I should not see "Release 0.4" in issues' do
  24 + page.should_not have_content "Release 0.4"
  25 + end
  26 +
  27 + Given 'I click link "All"' do
  28 + click_link "All"
  29 + end
  30 +
  31 + Given 'I click link "Release 0.4"' do
  32 + click_link "Release 0.4"
  33 + end
  34 +
  35 + Then 'I should see issue "Release 0.4"' do
  36 + page.should have_content "Release 0.4"
  37 + end
  38 +
  39 + Given 'I click link "New Issue"' do
  40 + click_link "New Issue"
  41 + end
  42 +
  43 + And 'I submit new issue "500 error on profile"' do
  44 + fill_in "issue_title", :with => "500 error on profile"
  45 + click_button "Submit new issue"
  46 + end
  47 +
  48 + Given 'I click link "500 error on profile"' do
  49 + click_link "500 error on profile"
  50 + end
  51 +
  52 + Then 'I should see issue "500 error on profile"' do
  53 + issue = Issue.find_by_title("500 error on profile")
  54 + page.should have_content issue.title
  55 + page.should have_content issue.author_name
  56 + page.should have_content issue.project.name
  57 + end
  58 +
  59 + Given 'I fill in issue search with "Release"' do
  60 + fill_in 'issue_search', with: "Release"
  61 + end
  62 +
  63 + Given 'I fill in issue search with "Bug"' do
  64 + fill_in 'issue_search', with: "Bug"
  65 + end
  66 +
  67 + And 'I fill in issue search with "0.3"' do
  68 + fill_in 'issue_search', with: "0.3"
  69 + end
  70 +
  71 + And 'I fill in issue search with "Something"' do
  72 + fill_in 'issue_search', with: "Something"
  73 + end
  74 +
  75 + And 'I fill in issue search with ""' do
  76 + page.execute_script("$('.issue_search').val('').keyup();");
  77 + fill_in 'issue_search', with: ""
  78 + end
  79 +
  80 + Given 'project "Shop" has milestone "v2.2"' do
  81 + project = Project.find_by_name("Shop")
  82 + milestone = Factory :milestone, :title => "v2.2", :project => project
  83 +
  84 + 3.times { Factory :issue, :project => project, :milestone => milestone }
  85 + end
  86 +
  87 + And 'project "Shop" has milestone "v3.0"' do
  88 + project = Project.find_by_name("Shop")
  89 + milestone = Factory :milestone, :title => "v3.0", :project => project
  90 +
  91 + 3.times { Factory :issue, :project => project, :milestone => milestone }
  92 + end
  93 +
  94 + When 'I select milestone "v3.0"' do
  95 + select "v3.0", from: "milestone_id"
  96 + end
  97 +
  98 + Then 'I should see selected milestone with title "v3.0"' do
  99 + issues_milestone_selector = "#issue_milestone_id_chzn/a"
  100 + wait_until { page.has_content?("Details") }
  101 + page.find(issues_milestone_selector).should have_content("v3.0")
  102 + end
  103 +
  104 + When 'I select first assignee from "Shop" project' do
  105 + project = Project.find_by_name "Shop"
  106 + first_assignee = project.users.first
  107 + select first_assignee.name, from: "assignee_id"
  108 + end
  109 +
  110 + Then 'I should see first assignee from "Shop" as selected assignee' do
  111 + issues_assignee_selector = "#issue_assignee_id_chzn/a"
  112 + wait_until { page.has_content?("Details") }
  113 + project = Project.find_by_name "Shop"
  114 + assignee_name = project.users.first.name
  115 + page.find(issues_assignee_selector).should have_content(assignee_name)
  116 + end
  117 +
  118 + And 'project "Shop" have "Release 0.4" open issue' do
  119 + project = Project.find_by_name("Shop")
  120 + Factory.create(:issue,
  121 + :title => "Release 0.4",
  122 + :project => project,
  123 + :author => project.users.first)
  124 + end
  125 +
  126 + And 'project "Shop" have "Release 0.3" closed issue' do
  127 + project = Project.find_by_name("Shop")
  128 + Factory.create(:issue,
  129 + :title => "Release 0.3",
  130 + :project => project,
  131 + :author => project.users.first,
  132 + :closed => true)
  133 + end
  134 +end
features/steps/project/project_labels.rb 0 → 100644
@@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
  1 +class ProjectLabels < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedPaths
  5 +
  6 + Then 'I should see label "bug"' do
  7 + within ".labels-table" do
  8 + page.should have_content "bug"
  9 + end
  10 + end
  11 +
  12 + And 'I should see label "feature"' do
  13 + within ".labels-table" do
  14 + page.should have_content "feature"
  15 + end
  16 + end
  17 +
  18 + And 'project "Shop" have issues tags: "bug", "feature"' do
  19 + project = Project.find_by_name("Shop")
  20 + ['bug', 'feature'].each do |label|
  21 + Factory :issue, project: project, label_list: label
  22 + end
  23 + end
  24 +end
features/steps/project/project_merge_requests.rb 0 → 100644
@@ -0,0 +1,80 @@ @@ -0,0 +1,80 @@
  1 +class ProjectMergeRequests < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedNote
  5 + include SharedPaths
  6 +
  7 + Then 'I should see "Bug NS-04" in merge requests' do
  8 + page.should have_content "Bug NS-04"
  9 + end
  10 +
  11 + And 'I should not see "Feature NS-03" in merge requests' do
  12 + page.should_not have_content "Feature NS-03"
  13 + end
  14 +
  15 + Given 'I click link "Closed"' do
  16 + click_link "Closed"
  17 + end
  18 +
  19 + Then 'I should see "Feature NS-03" in merge requests' do
  20 + page.should have_content "Feature NS-03"
  21 + end
  22 +
  23 + And 'I should not see "Bug NS-04" in merge requests' do
  24 + page.should_not have_content "Bug NS-04"
  25 + end
  26 +
  27 + Given 'I click link "All"' do
  28 + click_link "All"
  29 + end
  30 +
  31 + Given 'I click link "Bug NS-04"' do
  32 + click_link "Bug NS-04"
  33 + end
  34 +
  35 + Then 'I should see merge request "Bug NS-04"' do
  36 + page.should have_content "Bug NS-04"
  37 + end
  38 +
  39 + And 'I click link "Close"' do
  40 + click_link "Close"
  41 + end
  42 +
  43 + Then 'I should see closed merge request "Bug NS-04"' do
  44 + mr = MergeRequest.find_by_title("Bug NS-04")
  45 + mr.closed.should be_true
  46 + page.should have_content "Closed by"
  47 + end
  48 +
  49 + Given 'I click link "New Merge Request"' do
  50 + click_link "New Merge Request"
  51 + end
  52 +
  53 + And 'I submit new merge request "Wiki Feature"' do
  54 + fill_in "merge_request_title", :with => "Wiki Feature"
  55 + select "master", :from => "merge_request_source_branch"
  56 + select "stable", :from => "merge_request_target_branch"
  57 + click_button "Save"
  58 + end
  59 +
  60 + Then 'I should see merge request "Wiki Feature"' do
  61 + page.should have_content "Wiki Feature"
  62 + end
  63 +
  64 + And 'project "Shop" have "Bug NS-04" open merge request' do
  65 + project = Project.find_by_name("Shop")
  66 + Factory.create(:merge_request,
  67 + :title => "Bug NS-04",
  68 + :project => project,
  69 + :author => project.users.first)
  70 + end
  71 +
  72 + And 'project "Shop" have "Feature NS-03" closed merge request' do
  73 + project = Project.find_by_name("Shop")
  74 + Factory.create(:merge_request,
  75 + :title => "Feature NS-03",
  76 + :project => project,
  77 + :author => project.users.first,
  78 + :closed => true)
  79 + end
  80 +end
features/steps/project/project_milestones.rb 0 → 100644
@@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
  1 +class ProjectMilestones < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedPaths
  5 +
  6 + Then 'I should see milestone "v2.2"' do
  7 + milestone = @project.milestones.find_by_title("v2.2")
  8 + page.should have_content(milestone.title[0..10])
  9 + page.should have_content(milestone.expires_at)
  10 + page.should have_content("Browse Issues")
  11 + end
  12 +
  13 + Given 'I click link "v2.2"' do
  14 + click_link "v2.2"
  15 + end
  16 +
  17 + Given 'I click link "New Milestone"' do
  18 + click_link "New Milestone"
  19 + end
  20 +
  21 + And 'I submit new milestone "v2.3"' do
  22 + fill_in "milestone_title", :with => "v2.3"
  23 + click_button "Create milestone"
  24 + end
  25 +
  26 + Then 'I should see milestone "v2.3"' do
  27 + milestone = @project.milestones.find_by_title("v2.3")
  28 + page.should have_content(milestone.title[0..10])
  29 + page.should have_content(milestone.expires_at)
  30 + page.should have_content("Browse Issues")
  31 + end
  32 +
  33 + And 'project "Shop" has milestone "v2.2"' do
  34 + project = Project.find_by_name("Shop")
  35 + milestone = Factory :milestone, :title => "v2.2", :project => project
  36 +
  37 + 3.times { Factory :issue, :project => project, :milestone => milestone }
  38 + end
  39 +end
features/steps/project/project_network_graph.rb 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +class ProjectNetworkGraph < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 +
  5 + Then 'page should have network graph' do
  6 + page.should have_content "Project Network Graph"
  7 + within ".graph" do
  8 + page.should have_content "master"
  9 + page.should have_content "scss_refactor..."
  10 + end
  11 + end
  12 +
  13 + And 'I visit project "Shop" network page' do
  14 + project = Project.find_by_name("Shop")
  15 +
  16 + # Stub out find_all to speed this up (10 commits vs. 650)
  17 + commits = Grit::Commit.find_all(project.repo, nil, {max_count: 10})
  18 + Grit::Commit.stub(:find_all).and_return(commits)
  19 +
  20 + visit graph_project_path(project)
  21 + end
  22 +end
features/steps/project/project_team_management.rb 0 → 100644
@@ -0,0 +1,89 @@ @@ -0,0 +1,89 @@
  1 +class ProjectTeamManagement < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedPaths
  5 +
  6 + Then 'I should be able to see myself in team' do
  7 + page.should have_content(@user.name)
  8 + page.should have_content(@user.email)
  9 + end
  10 +
  11 + And 'I should see "Sam" in team list' do
  12 + user = User.find_by_name("Sam")
  13 + page.should have_content(user.name)
  14 + page.should have_content(user.email)
  15 + end
  16 +
  17 + Given 'I click link "New Team Member"' do
  18 + click_link "New Team Member"
  19 + end
  20 +
  21 + And 'I select "Mike" as "Reporter"' do
  22 + user = User.find_by_name("Mike")
  23 + within "#new_team_member" do
  24 + select user.name, :from => "user_ids"
  25 + select "Reporter", :from => "project_access"
  26 + end
  27 + click_button "Save"
  28 + end
  29 +
  30 + Then 'I should see "Mike" in team list as "Reporter"' do
  31 + user = User.find_by_name("Mike")
  32 + role_id = find(".user_#{user.id} #team_member_project_access").value
  33 + role_id.should == UsersProject.access_roles["Reporter"].to_s
  34 + end
  35 +
  36 + Given 'I should see "Sam" in team list as "Developer"' do
  37 + user = User.find_by_name("Sam")
  38 + role_id = find(".user_#{user.id} #team_member_project_access").value
  39 + role_id.should == UsersProject.access_roles["Developer"].to_s
  40 + end
  41 +
  42 + And 'I change "Sam" role to "Reporter"' do
  43 + user = User.find_by_name("Sam")
  44 + within ".user_#{user.id}" do
  45 + select "Reporter", :from => "team_member_project_access"
  46 + end
  47 + end
  48 +
  49 + And 'I should see "Sam" in team list as "Reporter"' do
  50 + user = User.find_by_name("Sam")
  51 + role_id = find(".user_#{user.id} #team_member_project_access").value
  52 + role_id.should == UsersProject.access_roles["Reporter"].to_s
  53 + end
  54 +
  55 + Given 'I click link "Sam"' do
  56 + click_link "Sam"
  57 + end
  58 +
  59 + Then 'I should see "Sam" team profile' do
  60 + user = User.find_by_name("Sam")
  61 + page.should have_content(user.name)
  62 + page.should have_content(user.email)
  63 + page.should have_content("To team list")
  64 + end
  65 +
  66 + And 'I click link "Remove from team"' do
  67 + click_link "Remove from team"
  68 + end
  69 +
  70 + And 'I should not see "Sam" in team list' do
  71 + user = User.find_by_name("Sam")
  72 + page.should_not have_content(user.name)
  73 + page.should_not have_content(user.email)
  74 + end
  75 +
  76 + And 'gitlab user "Mike"' do
  77 + Factory :user, :name => "Mike"
  78 + end
  79 +
  80 + And 'gitlab user "Sam"' do
  81 + Factory :user, :name => "Sam"
  82 + end
  83 +
  84 + And '"Sam" is "Shop" developer' do
  85 + user = User.find_by_name("Sam")
  86 + project = Project.find_by_name("Shop")
  87 + project.add_access(user, :write)
  88 + end
  89 +end
features/steps/project/project_wall.rb 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +class ProjectWall < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedNote
  5 + include SharedPaths
  6 +end
features/steps/project/project_wiki.rb 0 → 100644
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +class ProjectWiki < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedProject
  4 + include SharedNote
  5 + include SharedPaths
  6 +
  7 + Given 'I create Wiki page' do
  8 + fill_in "Title", :with => 'Test title'
  9 + fill_in "Content", :with => '[link test](test)'
  10 + click_on "Save"
  11 + end
  12 +
  13 + Then 'I should see newly created wiki page' do
  14 + page.should have_content "Test title"
  15 + page.should have_content "link test"
  16 +
  17 + click_link "link test"
  18 + page.should have_content "Editing page"
  19 + end
  20 +end
features/steps/shared/authentication.rb 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +require Rails.root.join('spec', 'support', 'login_helpers')
  2 +
  3 +module SharedAuthentication
  4 + include Spinach::DSL
  5 + include LoginHelpers
  6 +
  7 + Given 'I sign in as a user' do
  8 + login_as :user
  9 + end
  10 +end
features/steps/shared/note.rb 0 → 100644
@@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
  1 +module SharedNote
  2 + include Spinach::DSL
  3 +
  4 + Given 'I leave a comment like "XML attached"' do
  5 + fill_in "note_note", :with => "XML attached"
  6 + click_button "Add Comment"
  7 + end
  8 +
  9 + Then 'I should see comment "XML attached"' do
  10 + page.should have_content "XML attached"
  11 + end
  12 +
  13 + Given 'I write new comment "my special test message"' do
  14 + fill_in "note_note", :with => "my special test message"
  15 + click_button "Add Comment"
  16 + end
  17 +
  18 + Then 'I should see project wall note "my special test message"' do
  19 + page.should have_content "my special test message"
  20 + end
  21 +end
features/steps/shared/paths.rb 0 → 100644
@@ -0,0 +1,112 @@ @@ -0,0 +1,112 @@
  1 +module SharedPaths
  2 + include Spinach::DSL
  3 +
  4 + And 'I visit dashboard search page' do
  5 + visit search_path
  6 + end
  7 +
  8 + And 'I visit dashboard merge requests page' do
  9 + visit dashboard_merge_requests_path
  10 + end
  11 +
  12 + And 'I visit dashboard issues page' do
  13 + visit dashboard_issues_path
  14 + end
  15 +
  16 + When 'I visit dashboard page' do
  17 + visit dashboard_path
  18 + end
  19 +
  20 + Given 'I visit profile page' do
  21 + visit profile_path
  22 + end
  23 +
  24 + Given 'I visit profile password page' do
  25 + visit profile_password_path
  26 + end
  27 +
  28 + Given 'I visit profile token page' do
  29 + visit profile_token_path
  30 + end
  31 +
  32 + When 'I visit new project page' do
  33 + visit new_project_path
  34 + end
  35 +
  36 + And 'I visit project "Shop" page' do
  37 + project = Project.find_by_name("Shop")
  38 + visit project_path(project)
  39 + end
  40 +
  41 + Given 'I visit project branches page' do
  42 + visit branches_project_repository_path(@project)
  43 + end
  44 +
  45 + Given 'I visit compare refs page' do
  46 + visit compare_project_commits_path(@project)
  47 + end
  48 +
  49 + Given 'I visit project commits page' do
  50 + visit project_commits_path(@project)
  51 + end
  52 +
  53 + Given 'I visit project source page' do
  54 + visit tree_project_ref_path(@project, @project.root_ref)
  55 + end
  56 +
  57 + Given 'I visit blob file from repo' do
  58 + visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH)
  59 + end
  60 +
  61 + Given 'I visit project source page for "8470d70"' do
  62 + visit tree_project_ref_path(@project, "8470d70")
  63 + end
  64 +
  65 + Given 'I visit project tags page' do
  66 + visit tags_project_repository_path(@project)
  67 + end
  68 +
  69 + Given 'I visit project commit page' do
  70 + visit project_commit_path(@project, ValidCommit::ID)
  71 + end
  72 +
  73 + And 'I visit project "Shop" issues page' do
  74 + visit project_issues_path(Project.find_by_name("Shop"))
  75 + end
  76 +
  77 + Given 'I visit issue page "Release 0.4"' do
  78 + issue = Issue.find_by_title("Release 0.4")
  79 + visit project_issue_path(issue.project, issue)
  80 + end
  81 +
  82 + Given 'I visit project "Shop" labels page' do
  83 + visit project_labels_path(Project.find_by_name("Shop"))
  84 + end
  85 +
  86 + Given 'I visit merge request page "Bug NS-04"' do
  87 + mr = MergeRequest.find_by_title("Bug NS-04")
  88 + visit project_merge_request_path(mr.project, mr)
  89 + end
  90 +
  91 + And 'I visit project "Shop" merge requests page' do
  92 + visit project_merge_requests_path(Project.find_by_name("Shop"))
  93 + end
  94 +
  95 + Given 'I visit project "Shop" milestones page' do
  96 + @project = Project.find_by_name("Shop")
  97 + visit project_milestones_path(@project)
  98 + end
  99 +
  100 + Then 'I visit project "Shop" team page' do
  101 + visit team_project_path(Project.find_by_name("Shop"))
  102 + end
  103 +
  104 + Then 'I visit project "Shop" wall page' do
  105 + project = Project.find_by_name("Shop")
  106 + visit wall_project_path(project)
  107 + end
  108 +
  109 + Given 'I visit project wiki page' do
  110 + visit project_wiki_path(@project, :index)
  111 + end
  112 +end
features/steps/shared/project.rb 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +module SharedProject
  2 + include Spinach::DSL
  3 +
  4 + And 'I own project "Shop"' do
  5 + @project = Factory :project, :name => "Shop"
  6 + @project.add_access(@user, :admin)
  7 + end
  8 +end
features/support/env.rb
1 -unless ENV['CI']  
2 - require 'simplecov'  
3 - SimpleCov.start 'rails'  
4 -end  
5 -  
6 -require 'cucumber/rails'  
7 -require 'webmock/cucumber'  
8 -  
9 -WebMock.allow_net_connect!  
10 -  
11 -require Rails.root.join 'spec/support/gitolite_stub'  
12 -require Rails.root.join 'spec/support/stubbed_repository'  
13 -require Rails.root.join 'spec/support/login_helpers'  
14 -require Rails.root.join 'spec/support/valid_commit' 1 +ENV['RAILS_ENV'] = 'test'
  2 +require './config/environment'
15 3
16 -Capybara.default_selector = :css  
17 -Capybara.javascript_driver = :webkit 4 +require 'rspec'
  5 +require 'database_cleaner'
  6 +require 'spinach/capybara'
18 7
19 -# By default, any exception happening in your Rails application will bubble up  
20 -# to Cucumber so that your scenario will fail. This is a different from how  
21 -# your application behaves in the production environment, where an error page will  
22 -# be rendered instead.  
23 -#  
24 -# Sometimes we want to override this default behaviour and allow Rails to rescue  
25 -# exceptions and display an error page (just like when the app is running in production).  
26 -# Typical scenarios where you want to do this is when you test your error pages.  
27 -# There are two ways to allow Rails to rescue exceptions:  
28 -#  
29 -# 1) Tag your scenario (or feature) with @allow-rescue  
30 -#  
31 -# 2) Set the value below to true. Beware that doing this globally is not  
32 -# recommended as it will mask a lot of errors for you!  
33 -#  
34 -ActionController::Base.allow_rescue = false  
35 -  
36 -# Remove/comment out the lines below if your app doesn't have a database.  
37 -# For some databases (like MongoDB and CouchDB) you may need to use :truncation instead.  
38 -begin  
39 - DatabaseCleaner.strategy = :transaction  
40 -rescue NameError  
41 - raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." 8 +%w(gitolite_stub stubbed_repository valid_commit).each do |f|
  9 + require Rails.root.join('spec', 'support', f)
42 end 10 end
43 11
44 -Cucumber::Rails::Database.javascript_strategy = :truncation 12 +Dir["#{Rails.root}/features/steps/shared/*.rb"].each {|file| require file}
45 13
46 -require 'headless' 14 +include GitoliteStub
47 15
48 -headless = Headless.new  
49 -headless.start 16 +WebMock.allow_net_connect!
  17 +Capybara.javascript_driver = :webkit
50 18
51 -require 'cucumber/rspec/doubles' 19 +DatabaseCleaner.strategy = :truncation
  20 +Spinach.hooks.before_scenario { DatabaseCleaner.start }
  21 +Spinach.hooks.after_scenario { DatabaseCleaner.clean }
52 22
53 -include GitoliteStub 23 +Spinach.hooks.before_run do
  24 + RSpec::Mocks::setup self
54 25
55 -Before do  
56 stub_gitolite! 26 stub_gitolite!
57 end 27 end
58 -  
59 -World(FactoryGirl::Syntax::Methods)  
lib/tasks/cucumber.rake
@@ -1,65 +0,0 @@ @@ -1,65 +0,0 @@
1 -# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.  
2 -# It is recommended to regenerate this file in the future when you upgrade to a  
3 -# newer version of cucumber-rails. Consider adding your own code to a new file  
4 -# instead of editing this one. Cucumber will automatically load all features/**/*.rb  
5 -# files.  
6 -  
7 -  
8 -unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks  
9 -  
10 -vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first  
11 -$LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil?  
12 -  
13 -begin  
14 - require 'cucumber/rake/task'  
15 -  
16 - namespace :cucumber do  
17 - Cucumber::Rake::Task.new({:ok => 'db:test:prepare'}, 'Run features that should pass') do |t|  
18 - t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.  
19 - t.fork = true # You may get faster startup if you set this to false  
20 - t.profile = 'default'  
21 - end  
22 -  
23 - Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t|  
24 - t.binary = vendored_cucumber_bin  
25 - t.fork = true # You may get faster startup if you set this to false  
26 - t.profile = 'wip'  
27 - end  
28 -  
29 - Cucumber::Rake::Task.new({:rerun => 'db:test:prepare'}, 'Record failing features and run only them if any exist') do |t|  
30 - t.binary = vendored_cucumber_bin  
31 - t.fork = true # You may get faster startup if you set this to false  
32 - t.profile = 'rerun'  
33 - end  
34 -  
35 - desc 'Run all features'  
36 - task :all => [:ok, :wip]  
37 -  
38 - task :statsetup do  
39 - require 'rails/code_statistics'  
40 - ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features')  
41 - ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features')  
42 - end  
43 - end  
44 - desc 'Alias for cucumber:ok'  
45 - task :cucumber => 'cucumber:ok'  
46 -  
47 - task :default => :cucumber  
48 -  
49 - task :features => :cucumber do  
50 - STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***"  
51 - end  
52 -  
53 - # In case we don't have ActiveRecord, append a no-op task that we can depend upon.  
54 - task 'db:test:prepare' do  
55 - end  
56 -  
57 - task :stats => 'cucumber:statsetup'  
58 -rescue LoadError  
59 - desc 'cucumber rake task not available (cucumber not installed)'  
60 - task :cucumber do  
61 - abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'  
62 - end  
63 -end  
64 -  
65 -end  
lib/tasks/gitlab/test.rake
1 namespace :gitlab do 1 namespace :gitlab do
2 - desc "GITLAB | Run both cucumber & rspec"  
3 - task :test => ['cucumber', 'spec'] 2 + desc "GITLAB | Run both spinach and rspec"
  3 + task :test => ['spinach', 'spec']
4 end 4 end
5 -  
lib/tasks/travis.rake
1 task :travis do 1 task :travis do
2 - ["cucumber", "rspec spec"].each do |cmd| 2 + ["spinach", "rspec spec"].each do |cmd|
3 puts "Starting to run #{cmd}..." 3 puts "Starting to run #{cmd}..."
4 system("export DISPLAY=:99.0 && bundle exec #{cmd}") 4 system("export DISPLAY=:99.0 && bundle exec #{cmd}")
5 raise "#{cmd} failed!" unless $?.exitstatus == 0 5 raise "#{cmd} failed!" unless $?.exitstatus == 0
script/cucumber
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -#!/usr/bin/env ruby  
2 -  
3 -vendored_cucumber_bin = Dir["#{File.dirname(__FILE__)}/../vendor/{gems,plugins}/cucumber*/bin/cucumber"].first  
4 -if vendored_cucumber_bin  
5 - load File.expand_path(vendored_cucumber_bin)  
6 -else  
7 - require 'rubygems' unless ENV['NO_RUBYGEMS']  
8 - require 'cucumber'  
9 - load Cucumber::BINARY  
10 -end