Commit 8e6a7a172eec57b56f5b460b3e041480dc8a740a

Authored by Riyad Preukschas
2 parents eb06dd79 c120457a

Merge branch 'master' into gitlab-flavored-markdown

Showing 70 changed files with 990 additions and 1701 deletions   Show diff stats
.travis.yml
... ... @@ -4,7 +4,6 @@ env:
4 4 before_install:
5 5 - sudo apt-get install libicu-dev -y
6 6 - gem install charlock_holmes -v="0.6.8"
7   - - echo "yes" | gem uninstall json ffi
8 7 branches:
9 8 only:
10 9 - 'master'
... ...
Gemfile
... ... @@ -60,6 +60,7 @@ group :development do
60 60 gem "letter_opener"
61 61 gem "rails-footnotes"
62 62 gem "annotate", :git => "https://github.com/ctran/annotate_models.git"
  63 + gem 'rack-mini-profiler'
63 64 end
64 65  
65 66 group :development, :test do
... ...
Gemfile.lock
... ... @@ -237,6 +237,8 @@ GEM
237 237 rack (1.4.1)
238 238 rack-cache (1.2)
239 239 rack (>= 0.4)
  240 + rack-mini-profiler (0.1.9)
  241 + rack (>= 1.1.3)
240 242 rack-mount (0.8.3)
241 243 rack (>= 1.0.0)
242 244 rack-protection (1.2.0)
... ... @@ -408,6 +410,7 @@ DEPENDENCIES
408 410 omniauth-ldap!
409 411 pry
410 412 pygments.rb!
  413 + rack-mini-profiler
411 414 rails (= 3.2.5)
412 415 rails-footnotes
413 416 raphael-rails (= 1.5.2)
... ...
app/assets/stylesheets/sections/issues.scss
... ... @@ -51,25 +51,51 @@
51 51  
52 52 input.check_all_issues {
53 53 float:left;
54   - padding: 8px 0;
55   - margin: 14px 0;
  54 + padding: 0;
  55 + margin:0;
56 56 margin-right: 10px;
  57 + position: relative;
  58 + top: 8px;
  59 + height: 22px;
  60 +}
  61 +
  62 +.issues_content {
  63 + .title {
  64 + height: 40px;
  65 + }
57 66 }
58 67  
59 68 #issues-table-holder {
  69 + .issues_filters {
  70 + form {
  71 + padding:0;
  72 + margin:0;
  73 + margin-top:7px
  74 + }
  75 + }
  76 +
60 77 .issues_bulk_update {
61   - padding: 0 5px;
62 78 margin: 0;
63 79 form {
  80 + padding:0;
64 81 margin:0;
65   - padding-bottom:5px;
  82 + margin-top:7px
66 83 }
67 84 .update_selected_issues {
68 85 position:relative;
69 86 top:-2px;
70   - margin-left:3px;
  87 + margin-left:4px;
  88 + float:left;
71 89 }
72   -
73 90  
  91 + .update_issues_text {
  92 + padding:3px;
  93 + line-height: 18px;
  94 + float:left;
  95 + }
74 96 }
75 97 }
  98 +
  99 +#update_status {
  100 + width:100px;
  101 +}
... ...
app/assets/stylesheets/sections/nav.scss
... ... @@ -14,6 +14,7 @@ ul.main_menu {
14 14 background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);
15 15 background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);
16 16 position:relative;
  17 + overflow:hidden;
17 18 @include shade;
18 19 .count {
19 20 position: relative;
... ...
app/controllers/application_controller.rb
... ... @@ -4,6 +4,7 @@ class ApplicationController < ActionController::Base
4 4 before_filter :set_current_user_for_mailer
5 5 before_filter :check_token_auth
6 6 before_filter :set_current_user_for_observers
  7 + before_filter :dev_tools if Rails.env == 'development'
7 8  
8 9 protect_from_forgery
9 10  
... ... @@ -142,4 +143,8 @@ class ApplicationController < ActionController::Base
142 143 def render_full_content
143 144 @full_content = true
144 145 end
  146 +
  147 + def dev_tools
  148 + Rack::MiniProfiler.authorize_request
  149 + end
145 150 end
... ...
app/helpers/application_helper.rb
... ... @@ -122,7 +122,7 @@ module ApplicationHelper
122 122 end
123 123  
124 124 def markdown(text)
125   - @__renderer ||= Redcarpet::Markdown.new(Redcarpet::Render::GitlabHTML.new(self, filter_html: true), {
  125 + @__renderer ||= Redcarpet::Markdown.new(Redcarpet::Render::GitlabHTML.new(self, filter_html: true, with_toc_data: true), {
126 126 no_intra_emphasis: true,
127 127 tables: true,
128 128 fenced_code_blocks: true,
... ...
app/models/web_hook.rb
... ... @@ -11,7 +11,16 @@ class WebHook < ActiveRecord::Base
11 11 message: "should be a valid url" }
12 12  
13 13 def execute(data)
14   - WebHook.post(url, body: data.to_json, headers: { "Content-Type" => "application/json" })
  14 + parsed_url = URI.parse(url)
  15 + if parsed_url.userinfo.blank?
  16 + WebHook.post(url, body: data.to_json, headers: { "Content-Type" => "application/json" })
  17 + else
  18 + post_url = url.gsub(parsed_url.userinfo+"@", "")
  19 + WebHook.post(post_url,
  20 + body: data.to_json,
  21 + headers: { "Content-Type" => "application/json" },
  22 + basic_auth: {username: parsed_url.user, password: parsed_url.password})
  23 + end
15 24 end
16 25  
17 26 end
... ...
app/views/issues/_show.html.haml
1 1 %li.wll{ :id => dom_id(issue), :class => issue_css_classes(issue), :url => project_issue_path(issue.project, issue) }
2   - .issue_check
3   - = check_box_tag dom_id(issue,"selected"), nil, false, 'data-id' => issue.id, :class => "selected_issue", :disabled => !can?(current_user, :modify_issue, issue)
  2 + - if controller.controller_name == 'issues'
  3 + .issue_check
  4 + = check_box_tag dom_id(issue,"selected"), nil, false, 'data-id' => issue.id, :class => "selected_issue", :disabled => !can?(current_user, :modify_issue, issue)
4 5 .right
5 6 - issue.labels.each do |label|
6 7 %span.label.label-issue.grouped
... ...
app/views/issues/index.html.haml
... ... @@ -22,13 +22,13 @@
22 22  
23 23 .issues_bulk_update.hide
24 24 = form_tag bulk_update_project_issues_path(@project), :method => :post do
25   - %span Update selected issues with
26   -  
27   - = select_tag('update[status]', options_for_select(['open', 'closed']), :prompt => "Status")
28   - = select_tag('update[assignee_id]', options_from_collection_for_select(@project.users.all, "id", "name", params[:assignee_id]), :prompt => "Assignee")
29   - = select_tag('update[milestone_id]', options_from_collection_for_select(@project.milestones.order("id desc").all, "id", "title", params[:milestone_id]), :prompt => "Milestone")
30   - = hidden_field_tag 'update[issues_ids]', []
31   - = hidden_field_tag :f, params[:f]
  25 + %span.update_issues_text Update selected issues with  
  26 + .left
  27 + = select_tag('update[status]', options_for_select(['open', 'closed']), :prompt => "Status")
  28 + = select_tag('update[assignee_id]', options_from_collection_for_select(@project.users.all, "id", "name", params[:assignee_id]), :prompt => "Assignee")
  29 + = select_tag('update[milestone_id]', options_from_collection_for_select(@project.milestones.order("id desc").all, "id", "title", params[:milestone_id]), :prompt => "Milestone")
  30 + = hidden_field_tag 'update[issues_ids]', []
  31 + = hidden_field_tag :f, params[:f]
32 32 = button_tag "Save", :class => "btn update_selected_issues"
33 33 .issues_filters
34 34 .left
... ...
app/views/projects/new.html.haml
... ... @@ -6,7 +6,7 @@
6 6 %div.ajax_loader.hide
7 7 %center
8 8 %div.padded= image_tag "ajax_loader.gif"
9   - %h3.prepend-top Creating project & repository. Please wait for few minutes
  9 + %h3.prepend-top Creating project & repository. Please wait a few minutes
10 10  
11 11 :javascript
12 12 $(function(){ new Projects(); });
... ...
doc/installation.md
... ... @@ -195,6 +195,11 @@ Application can be started with next command:
195 195 # As daemon
196 196 sudo -u gitlab bundle exec rails s -e production -d
197 197  
  198 +You can login via web using admin generated with setup:
  199 +
  200 + admin@local.host
  201 + 5iveL!fe
  202 +
198 203 # 6. Run resque process (for processing queue).
199 204  
200 205 # Manually
... ...
features/dashboard/dashboard.feature
... ... @@ -10,7 +10,7 @@ Feature: Dashboard
10 10 Then I should see "Shop" project link
11 11 Then I should see project "Shop" activity feed
12 12  
13   - Scenario: I should see last pish widget
  13 + Scenario: I should see last push widget
14 14 Then I should see last push widget
15 15 And I click "Create Merge Request" link
16 16 Then I see prefilled new Merge Request page
... ...
features/profile/profile.feature
... ... @@ -6,6 +6,11 @@ Feature: Profile
6 6 Given I visit profile page
7 7 Then I should see my profile info
8 8  
  9 + Scenario: I edit profile
  10 + Given I visit profile page
  11 + Then I change my contact info
  12 + And I should see new contact info
  13 +
9 14 Scenario: I change my password
10 15 Given I visit profile password page
11 16 Then I change my password
... ... @@ -15,4 +20,3 @@ Feature: Profile
15 20 Given I visit profile token page
16 21 Then I reset my token
17 22 And I should see new token
18   -
... ...
features/projects/commits/branches.feature
... ... @@ -2,9 +2,19 @@ Feature: Browse branches
2 2 Background:
3 3 Given I signin as a user
4 4 And I own project "Shop"
  5 + And project "Shop" has protected branches
5 6 Given I visit project branches page
6 7  
7   - Scenario: I can see all git branches
  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
8 18  
9 19 Scenario: I can download project by branch
10 20  
... ...
features/projects/commits/commit_comments.feature
... ... @@ -4,4 +4,7 @@ Feature: Comment commit
4 4 And I own project "Shop"
5 5 Given I visit project commit page
6 6  
7   - Scenario: I leave a comment for commit
  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/tags.feature
... ... @@ -5,7 +5,6 @@ Feature: Browse tags
5 5 Given I visit project tags page
6 6  
7 7 Scenario: I can see all git tags
  8 + Then I should see "Shop" all tags list
8 9  
9 10 Scenario: I can download project by tag
10   -
11   -
... ...
features/projects/issues/issues.feature
... ... @@ -7,6 +7,32 @@ Feature: Issues
7 7 And I visit project "Shop" issues page
8 8  
9 9 Scenario: I should see open issues
10   - Given I should see "Release 0.4" open issue
11   - And I should not see "Release 0.3" closed issue
  10 + Given I should see "Release 0.4" in issues
  11 + And I should not see "Release 0.3" in issues
12 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"
... ...
features/projects/issues/milestones.feature
... ... @@ -0,0 +1,18 @@
  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/project.feature 0 → 100644
... ... @@ -0,0 +1,11 @@
  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/source/browse_files.feature 0 → 100644
... ... @@ -0,0 +1,23 @@
  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/browse_files.feature.commented
... ... @@ -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
... ... @@ -0,0 +1,10 @@
  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/wiki.feature
... ... @@ -7,3 +7,9 @@ Feature: Wiki
7 7 Scenario: Add new page
8 8 Given I create Wiki page
9 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/browse_code_steps.rb
... ... @@ -1,40 +0,0 @@
1   -Given /^I visit project source page$/ do
2   - visit tree_project_ref_path(@project, @project.root_ref)
3   -end
4   -
5   -Then /^I should see files from repository$/ do
6   - page.should have_content("app")
7   - page.should have_content("History")
8   - page.should have_content("Gemfile")
9   -end
10   -
11   -Given /^I visit project source page for "(.*?)"$/ do |arg1|
12   - visit tree_project_ref_path(@project, arg1)
13   -end
14   -
15   -Then /^I should see files from repository for "(.*?)"$/ do |arg1|
16   - current_path.should == tree_project_ref_path(@project, arg1)
17   - page.should have_content("app")
18   - page.should have_content("History")
19   - page.should have_content("Gemfile")
20   -end
21   -
22   -Given /^I click on file from repo$/ do
23   - click_link "Gemfile"
24   -end
25   -
26   -Then /^I should see it content$/ do
27   - page.should have_content("rubygems.org")
28   -end
29   -
30   -Given /^I click on raw button$/ do
31   - click_link "raw"
32   -end
33   -
34   -Given /^I visit blob file from repo$/ do
35   - visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH)
36   -end
37   -
38   -Then /^I should see raw file content$/ do
39   - page.source.should == ValidCommit::BLOB_FILE
40   -end
features/step_definitions/profile/profile_keys_steps.rb 0 → 100644
... ... @@ -0,0 +1,34 @@
  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 => "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 0 → 100644
... ... @@ -0,0 +1,51 @@
  1 +Given /^I visit profile page$/ do
  2 + visit profile_path
  3 +end
  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 +Given /^I visit profile password page$/ do
  12 + visit profile_password_path
  13 +end
  14 +
  15 +Then /^I change my password$/ do
  16 + fill_in "user_password", :with => "222333"
  17 + fill_in "user_password_confirmation", :with => "222333"
  18 + click_button "Save"
  19 +end
  20 +
  21 +Then /^I should be redirected to sign in page$/ do
  22 + current_path.should == new_user_session_path
  23 +end
  24 +
  25 +Given /^I visit profile token page$/ do
  26 + visit profile_token_path
  27 +end
  28 +
  29 +Then /^I reset my token$/ do
  30 + @old_token = @user.private_token
  31 + click_button "Reset"
  32 +end
  33 +
  34 +Then /^I should see new token$/ do
  35 + find("#token").value.should_not == @old_token
  36 + find("#token").value.should == @user.reload.private_token
  37 +end
  38 +
  39 +Then /^I change my contact info$/ do
  40 + fill_in "user_skype", :with => "testskype"
  41 + fill_in "user_linkedin", :with => "testlinkedin"
  42 + fill_in "user_twitter", :with => "testtwitter"
  43 + click_button "Save"
  44 + @user.reload
  45 +end
  46 +
  47 +Then /^I should see new contact info$/ do
  48 + @user.skype.should == 'testskype'
  49 + @user.linkedin.should == 'testlinkedin'
  50 + @user.twitter.should == 'testtwitter'
  51 +end
... ...
features/step_definitions/profile_keys_steps.rb
... ... @@ -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 => "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_steps.rb
... ... @@ -1,38 +0,0 @@
1   -Given /^I visit profile page$/ do
2   - visit profile_path
3   -end
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   -Given /^I visit profile password page$/ do
12   - visit profile_password_path
13   -end
14   -
15   -Then /^I change my password$/ do
16   - fill_in "user_password", :with => "222333"
17   - fill_in "user_password_confirmation", :with => "222333"
18   - click_button "Save"
19   -end
20   -
21   -Then /^I should be redirected to sign in page$/ do
22   - current_path.should == new_user_session_path
23   -end
24   -
25   -Given /^I visit profile token page$/ do
26   - visit profile_token_path
27   -end
28   -
29   -Then /^I reset my token$/ do
30   - @old_token = @user.private_token
31   - click_button "Reset"
32   -end
33   -
34   -Then /^I should see new token$/ do
35   - find("#token").value.should_not == @old_token
36   - find("#token").value.should == @user.reload.private_token
37   -end
38   -
features/step_definitions/project/browse_code_steps.rb 0 → 100644
... ... @@ -0,0 +1,50 @@
  1 +Given /^I visit project source page$/ do
  2 + visit tree_project_ref_path(@project, @project.root_ref)
  3 +end
  4 +
  5 +Then /^I should see files from repository$/ do
  6 + page.should have_content("app")
  7 + page.should have_content("History")
  8 + page.should have_content("Gemfile")
  9 +end
  10 +
  11 +Given /^I visit project source page for "(.*?)"$/ do |arg1|
  12 + visit tree_project_ref_path(@project, arg1)
  13 +end
  14 +
  15 +Then /^I should see files from repository for "(.*?)"$/ do |arg1|
  16 + current_path.should == tree_project_ref_path(@project, arg1)
  17 + page.should have_content("app")
  18 + page.should have_content("History")
  19 + page.should have_content("Gemfile")
  20 +end
  21 +
  22 +Given /^I click on file from repo$/ do
  23 + click_link "Gemfile"
  24 +end
  25 +
  26 +Then /^I should see it content$/ do
  27 + page.should have_content("rubygems.org")
  28 +end
  29 +
  30 +Given /^I click on raw button$/ do
  31 + click_link "raw"
  32 +end
  33 +
  34 +Given /^I visit blob file from repo$/ do
  35 + visit tree_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH)
  36 +end
  37 +
  38 +Then /^I should see raw file content$/ do
  39 + page.source.should == ValidCommit::BLOB_FILE
  40 +end
  41 +
  42 +Given /^I click blame button$/ do
  43 + click_link "blame"
  44 +end
  45 +
  46 +Then /^I should see git file blame$/ do
  47 + page.should have_content("rubygems.org")
  48 + page.should have_content("Dmitriy Zaporozhets")
  49 + page.should have_content("bc3735004cb Moving to rails 3.2")
  50 +end
... ...
features/step_definitions/project/project_commits_steps.rb 0 → 100644
... ... @@ -0,0 +1,88 @@
  1 +Given /^I visit project commits page$/ do
  2 + visit project_commits_path(@project)
  3 +end
  4 +
  5 +Then /^I see project commits$/ do
  6 + current_path.should == project_commits_path(@project)
  7 +
  8 + commit = @project.commit
  9 + page.should have_content(@project.name)
  10 + page.should have_content(commit.message)
  11 + page.should have_content(commit.id.to_s[0..5])
  12 +end
  13 +
  14 +Given /^I click atom feed link$/ do
  15 + click_link "Feed"
  16 +end
  17 +
  18 +Then /^I see commits atom feed$/ do
  19 + commit = CommitDecorator.decorate(@project.commit)
  20 + page.response_headers['Content-Type'].should have_content("application/atom+xml")
  21 + page.body.should have_selector("title", :text => "Recent commits to #{@project.name}")
  22 + page.body.should have_selector("author email", :text => commit.author_email)
  23 + page.body.should have_selector("entry summary", :text => commit.description)
  24 +end
  25 +
  26 +Given /^I click on commit link$/ do
  27 + visit project_commit_path(@project, ValidCommit::ID)
  28 +end
  29 +
  30 +Then /^I see commit info$/ do
  31 + page.should have_content ValidCommit::MESSAGE
  32 + page.should have_content "Showing 1 changed file"
  33 +end
  34 +
  35 +Given /^I visit compare refs page$/ do
  36 + visit compare_project_commits_path(@project)
  37 +end
  38 +
  39 +Given /^I fill compare fields with refs$/ do
  40 + fill_in "from", :with => "master"
  41 + fill_in "to", :with => "stable"
  42 + click_button "Compare"
  43 +end
  44 +
  45 +Given /^I see compared refs$/ do
  46 + page.should have_content "Commits (27)"
  47 + page.should have_content "Compare View"
  48 + page.should have_content "Showing 73 changed files"
  49 +end
  50 +
  51 +Given /^I visit project branches page$/ do
  52 + visit branches_project_repository_path(@project)
  53 +end
  54 +
  55 +Given /^I visit project commit page$/ do
  56 + visit project_commit_path(@project, ValidCommit::ID)
  57 +end
  58 +
  59 +Given /^I visit project tags page$/ do
  60 + visit tags_project_repository_path(@project)
  61 +end
  62 +
  63 +Then /^I should see "(.*?)" recent branches list$/ do |arg1|
  64 + page.should have_content("Branches")
  65 + page.should have_content("master")
  66 +end
  67 +
  68 +Then /^I should see "(.*?)" all branches list$/ do |arg1|
  69 + page.should have_content("Branches")
  70 + page.should have_content("master")
  71 +end
  72 +
  73 +Then /^I should see "(.*?)" all tags list$/ do |arg1|
  74 + page.should have_content("Tags")
  75 + page.should have_content("v1.2.1")
  76 +end
  77 +
  78 +Then /^I should see "(.*?)" protected branches list$/ do |arg1|
  79 + within "table" do
  80 + page.should have_content "stable"
  81 + page.should_not have_content "master"
  82 + end
  83 +end
  84 +
  85 +Given /^project "(.*?)" has protected branches$/ do |arg1|
  86 + project = Project.find_by_name(arg1)
  87 + project.protected_branches.create(:name => "stable")
  88 +end
... ...
features/step_definitions/project/project_issues_steps.rb 0 → 100644
... ... @@ -0,0 +1,38 @@
  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 visit project "(.*?)" issues page$/ do |arg1|
  12 + visit project_issues_path(Project.find_by_name(arg1))
  13 +end
  14 +
  15 +Given /^I should see "(.*?)" in issues$/ do |arg1|
  16 + page.should have_content arg1
  17 +end
  18 +
  19 +Given /^I should not see "(.*?)" in issues$/ do |arg1|
  20 + page.should_not have_content arg1
  21 +end
  22 +
  23 +Then /^I should see issue "(.*?)"$/ do |arg1|
  24 + issue = Issue.find_by_title(arg1)
  25 + page.should have_content issue.title
  26 + page.should have_content issue.author_name
  27 + page.should have_content issue.project.name
  28 +end
  29 +
  30 +Given /^I visit issue page "(.*?)"$/ do |arg1|
  31 + issue = Issue.find_by_title(arg1)
  32 + visit project_issue_path(issue.project, issue)
  33 +end
  34 +
  35 +Given /^I submit new issue "(.*?)"$/ do |arg1|
  36 + fill_in "issue_title", :with => arg1
  37 + click_button "Submit new issue"
  38 +end
... ...
features/step_definitions/project/project_merge_requests_steps.rb 0 → 100644
... ... @@ -0,0 +1,38 @@
  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 +Given /^I visit project "(.*?)" milestones page$/ do |arg1|
  16 + @project = Project.find_by_name(arg1)
  17 + visit project_milestones_path(@project)
  18 +end
  19 +
  20 +Then /^I should see active milestones$/ do
  21 + milestone = @project.milestones.first
  22 + page.should have_content(milestone.title[0..10])
  23 + page.should have_content(milestone.expires_at)
  24 + page.should have_content("Browse Issues")
  25 +end
  26 +
  27 +Then /^I should see milestone "(.*?)"$/ do |arg1|
  28 + milestone = @project.milestones.find_by_title(arg1)
  29 + page.should have_content(milestone.title[0..10])
  30 + page.should have_content(milestone.expires_at)
  31 + page.should have_content("Browse Issues")
  32 +end
  33 +
  34 +Given /^I submit new milestone "(.*?)"$/ do |arg1|
  35 + fill_in "milestone_title", :with => arg1
  36 + click_button "Create milestone"
  37 +end
  38 +
... ...
features/step_definitions/project/project_team_steps.rb 0 → 100644
... ... @@ -0,0 +1,63 @@
  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 +Given /^I visit project "(.*?)" team page$/ do |arg1|
  12 + visit team_project_path(Project.find_by_name(arg1))
  13 +end
  14 +
  15 +Then /^I should be able to see myself in team$/ do
  16 + page.should have_content(@user.name)
  17 + page.should have_content(@user.email)
  18 +end
  19 +
  20 +Then /^I should see "(.*?)" in team list$/ do |arg1|
  21 + user = User.find_by_name(arg1)
  22 + page.should have_content(user.name)
  23 + page.should have_content(user.email)
  24 +end
  25 +
  26 +Given /^I click link "(.*?)"$/ do |arg1|
  27 + click_link arg1
  28 +end
  29 +
  30 +Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2|
  31 + user = User.find_by_name(arg1)
  32 + within "#new_team_member" do
  33 + select user.name, :from => "team_member_user_id"
  34 + select arg2, :from => "team_member_project_access"
  35 + end
  36 + click_button "Save"
  37 +end
  38 +
  39 +Then /^I should see "(.*?)" in team list as "(.*?)"$/ do |arg1, arg2|
  40 + user = User.find_by_name(arg1)
  41 + role_id = find(".user_#{user.id} #team_member_project_access").value
  42 + role_id.should == UsersProject.access_roles[arg2].to_s
  43 +end
  44 +
  45 +Given /^I change "(.*?)" role to "(.*?)"$/ do |arg1, arg2|
  46 + user = User.find_by_name(arg1)
  47 + within ".user_#{user.id}" do
  48 + select arg2, :from => "team_member_project_access"
  49 + end
  50 +end
  51 +
  52 +Then /^I should see "(.*?)" team profile$/ do |arg1|
  53 + user = User.find_by_name(arg1)
  54 + page.should have_content(user.name)
  55 + page.should have_content(user.email)
  56 + page.should have_content("To team list")
  57 +end
  58 +
  59 +Then /^I should not see "(.*?)" in team list$/ do |arg1|
  60 + user = User.find_by_name(arg1)
  61 + page.should_not have_content(user.name)
  62 + page.should_not have_content(user.email)
  63 +end
... ...
features/step_definitions/project/project_wiki_steps.rb 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +Given /^I visit project wiki page$/ do
  2 + visit project_wiki_path(@project, :index)
  3 +end
  4 +
  5 +Given /^I create Wiki page$/ do
  6 + fill_in "Title", :with => 'Test title'
  7 + fill_in "Content", :with => '[link test](test)'
  8 + click_on "Save"
  9 +end
  10 +
  11 +Then /^I should see newly created wiki page$/ do
  12 + page.should have_content("Test title")
  13 + page.should have_content("link test")
  14 +
  15 + click_link "link test"
  16 +
  17 + page.should have_content("Editing page")
  18 +end
... ...
features/step_definitions/project/projects_steps.rb 0 → 100644
... ... @@ -0,0 +1,82 @@
  1 +include LoginMacros
  2 +
  3 +Given /^I signin as a user$/ do
  4 + login_as :user
  5 +end
  6 +
  7 +When /^I visit new project page$/ do
  8 + visit new_project_path
  9 +end
  10 +
  11 +When /^fill project form with valid data$/ do
  12 + fill_in 'project_name', :with => 'NewProject'
  13 + fill_in 'project_code', :with => 'NPR'
  14 + fill_in 'project_path', :with => 'newproject'
  15 + click_button "Create project"
  16 +end
  17 +
  18 +Then /^I should see project page$/ do
  19 + current_path.should == project_path(Project.last)
  20 + page.should have_content('NewProject')
  21 +end
  22 +
  23 +Then /^I should see empty project instuctions$/ do
  24 + page.should have_content("git init")
  25 + page.should have_content("git remote")
  26 + page.should have_content(Project.last.url_to_repo)
  27 +end
  28 +
  29 +Given /^I own project "(.*?)"$/ do |arg1|
  30 + @project = Factory :project, :name => arg1
  31 + @project.add_access(@user, :admin)
  32 +end
  33 +
  34 +Given /^I visit project "(.*?)" wall page$/ do |arg1|
  35 + project = Project.find_by_name(arg1)
  36 + visit wall_project_path(project)
  37 +end
  38 +
  39 +Then /^I should see project wall note "(.*?)"$/ do |arg1|
  40 + page.should have_content arg1
  41 +end
  42 +
  43 +Given /^project "(.*?)" has comment "(.*?)"$/ do |arg1, arg2|
  44 + project = Project.find_by_name(arg1)
  45 + project.notes.create(:note => arg1, :author => project.users.first)
  46 +end
  47 +
  48 +Given /^I write new comment "(.*?)"$/ do |arg1|
  49 + fill_in "note_note", :with => arg1
  50 + click_button "Add Comment"
  51 +end
  52 +
  53 +Given /^I visit project "(.*?)" page$/ do |arg1|
  54 + project = Project.find_by_name(arg1)
  55 + visit project_path(project)
  56 +end
  57 +
  58 +Given /^I visit project "(.*?)" network page$/ do |arg1|
  59 + project = Project.find_by_name(arg1)
  60 + visit graph_project_path(project)
  61 +end
  62 +
  63 +Given /^show me page$/ do
  64 + save_and_open_page
  65 +end
  66 +
  67 +Given /^page should have network graph$/ do
  68 + page.should have_content "Project Network Graph"
  69 + within ".graph" do
  70 + page.should have_content "stable"
  71 + page.should have_content "notes_refacto..."
  72 + end
  73 +end
  74 +
  75 +Given /^I leave a comment like "(.*?)"$/ do |arg1|
  76 + fill_in "note_note", :with => arg1
  77 + click_button "Add Comment"
  78 +end
  79 +
  80 +Then /^I should see comment "(.*?)"$/ do |arg1|
  81 + page.should have_content(arg1)
  82 +end
... ...
features/step_definitions/project_commits_steps.rb
... ... @@ -1,61 +0,0 @@
1   -Given /^I visit project commits page$/ do
2   - visit project_commits_path(@project)
3   -end
4   -
5   -Then /^I see project commits$/ do
6   - current_path.should == project_commits_path(@project)
7   -
8   - commit = @project.commit
9   - page.should have_content(@project.name)
10   - page.should have_content(commit.message)
11   - page.should have_content(commit.id.to_s[0..5])
12   -end
13   -
14   -Given /^I click atom feed link$/ do
15   - click_link "Feed"
16   -end
17   -
18   -Then /^I see commits atom feed$/ do
19   - commit = CommitDecorator.decorate(@project.commit)
20   - page.response_headers['Content-Type'].should have_content("application/atom+xml")
21   - page.body.should have_selector("title", :text => "Recent commits to #{@project.name}")
22   - page.body.should have_selector("author email", :text => commit.author_email)
23   - page.body.should have_selector("entry summary", :text => commit.description)
24   -end
25   -
26   -Given /^I click on commit link$/ do
27   - visit project_commit_path(@project, ValidCommit::ID)
28   -end
29   -
30   -Then /^I see commit info$/ do
31   - page.should have_content ValidCommit::MESSAGE
32   - page.should have_content "Showing 1 changed file"
33   -end
34   -
35   -Given /^I visit compare refs page$/ do
36   - visit compare_project_commits_path(@project)
37   -end
38   -
39   -Given /^I fill compare fields with refs$/ do
40   - fill_in "from", :with => "master"
41   - fill_in "to", :with => "stable"
42   - click_button "Compare"
43   -end
44   -
45   -Given /^I see compared refs$/ do
46   - page.should have_content "Commits (27)"
47   - page.should have_content "Compare View"
48   - page.should have_content "Showing 73 changed files"
49   -end
50   -
51   -Given /^I visit project branches page$/ do
52   - visit branches_project_repository_path(@project)
53   -end
54   -
55   -Given /^I visit project commit page$/ do
56   - visit project_commit_path(@project, ValidCommit::ID)
57   -end
58   -
59   -Given /^I visit project tags page$/ do
60   - visit tags_project_repository_path(@project)
61   -end
features/step_definitions/project_issues_steps.rb
... ... @@ -1,22 +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 visit project "(.*?)" issues page$/ do |arg1|
12   - visit project_issues_path(Project.find_by_name(arg1))
13   -end
14   -
15   -Given /^I should see "(.*?)" open issue$/ do |arg1|
16   - page.should have_content arg1
17   -end
18   -
19   -Given /^I should not see "(.*?)" closed issue$/ do |arg1|
20   - page.should_not have_content arg1
21   -end
22   -
features/step_definitions/project_team_steps.rb
... ... @@ -1,63 +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   -Given /^I visit project "(.*?)" team page$/ do |arg1|
12   - visit team_project_path(Project.find_by_name(arg1))
13   -end
14   -
15   -Then /^I should be able to see myself in team$/ do
16   - page.should have_content(@user.name)
17   - page.should have_content(@user.email)
18   -end
19   -
20   -Then /^I should see "(.*?)" in team list$/ do |arg1|
21   - user = User.find_by_name(arg1)
22   - page.should have_content(user.name)
23   - page.should have_content(user.email)
24   -end
25   -
26   -Given /^I click link "(.*?)"$/ do |arg1|
27   - click_link arg1
28   -end
29   -
30   -Given /^I select "(.*?)" as "(.*?)"$/ do |arg1, arg2|
31   - user = User.find_by_name(arg1)
32   - within "#new_team_member" do
33   - select user.name, :from => "team_member_user_id"
34   - select arg2, :from => "team_member_project_access"
35   - end
36   - click_button "Save"
37   -end
38   -
39   -Then /^I should see "(.*?)" in team list as "(.*?)"$/ do |arg1, arg2|
40   - user = User.find_by_name(arg1)
41   - role_id = find(".user_#{user.id} #team_member_project_access").value
42   - role_id.should == UsersProject.access_roles[arg2].to_s
43   -end
44   -
45   -Given /^I change "(.*?)" role to "(.*?)"$/ do |arg1, arg2|
46   - user = User.find_by_name(arg1)
47   - within ".user_#{user.id}" do
48   - select arg2, :from => "team_member_project_access"
49   - end
50   -end
51   -
52   -Then /^I should see "(.*?)" team profile$/ do |arg1|
53   - user = User.find_by_name(arg1)
54   - page.should have_content(user.name)
55   - page.should have_content(user.email)
56   - page.should have_content("To team list")
57   -end
58   -
59   -Then /^I should not see "(.*?)" in team list$/ do |arg1|
60   - user = User.find_by_name(arg1)
61   - page.should_not have_content(user.name)
62   - page.should_not have_content(user.email)
63   -end
features/step_definitions/project_wiki_steps.rb
... ... @@ -1,18 +0,0 @@
1   -Given /^I visit project wiki page$/ do
2   - visit project_wiki_path(@project, :index)
3   -end
4   -
5   -Given /^I create Wiki page$/ do
6   - fill_in "Title", :with => 'Test title'
7   - fill_in "Content", :with => '[link test](test)'
8   - click_on "Save"
9   -end
10   -
11   -Then /^I should see newly created wiki page$/ do
12   - page.should have_content("Test title")
13   - page.should have_content("link test")
14   -
15   - click_link "link test"
16   -
17   - page.should have_content("Editing page")
18   -end
features/step_definitions/projects_steps.rb
... ... @@ -1,68 +0,0 @@
1   -include LoginMacros
2   -
3   -Given /^I signin as a user$/ do
4   - login_as :user
5   -end
6   -
7   -When /^I visit new project page$/ do
8   - visit new_project_path
9   -end
10   -
11   -When /^fill project form with valid data$/ do
12   - fill_in 'project_name', :with => 'NewProject'
13   - fill_in 'project_code', :with => 'NPR'
14   - fill_in 'project_path', :with => 'newproject'
15   - click_button "Create project"
16   -end
17   -
18   -Then /^I should see project page$/ do
19   - current_path.should == project_path(Project.last)
20   - page.should have_content('NewProject')
21   -end
22   -
23   -Then /^I should see empty project instuctions$/ do
24   - page.should have_content("git init")
25   - page.should have_content("git remote")
26   - page.should have_content(Project.last.url_to_repo)
27   -end
28   -
29   -Given /^I own project "(.*?)"$/ do |arg1|
30   - @project = Factory :project, :name => arg1
31   - @project.add_access(@user, :admin)
32   -end
33   -
34   -Given /^I visit project "(.*?)" wall page$/ do |arg1|
35   - project = Project.find_by_name(arg1)
36   - visit wall_project_path(project)
37   -end
38   -
39   -Then /^I should see project wall note "(.*?)"$/ do |arg1|
40   - page.should have_content arg1
41   -end
42   -
43   -Given /^project "(.*?)" has comment "(.*?)"$/ do |arg1, arg2|
44   - project = Project.find_by_name(arg1)
45   - project.notes.create(:note => arg1, :author => project.users.first)
46   -end
47   -
48   -Given /^I write new comment "(.*?)"$/ do |arg1|
49   - fill_in "note_note", :with => arg1
50   - click_button "Add Comment"
51   -end
52   -
53   -Given /^I visit project "(.*?)" network page$/ do |arg1|
54   - project = Project.find_by_name(arg1)
55   - visit graph_project_path(project)
56   -end
57   -
58   -Given /^show me page$/ do
59   - save_and_open_page
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 "stable"
66   - page.should have_content "notes_refacto..."
67   - end
68   -end
lib/tasks/gitlab/status.rake
... ... @@ -49,7 +49,7 @@ namespace :gitlab do
49 49 end
50 50  
51 51 print "UMASK for .gitolite.rc is 0007? ............"
52   - unless open("#{git_base_path}/../.gitolite.rc").grep(/REPO_UMASK = 0007/).empty?
  52 + unless open("#{git_base_path}/../.gitolite.rc").grep(/UMASK([ \t]*)=([ \t>]*)0007/).empty?
53 53 puts "YES".green
54 54 else
55 55 puts "NO".red
... ...
spec/models/protected_branch_spec.rb
... ... @@ -37,19 +37,6 @@ describe ProtectedBranch do
37 37 end
38 38 end
39 39  
40   - describe '#update_repository' do
41   - let(:gitolite) { mock }
42   -
43   - subject { ProtectedBranch.new(:project => project) }
44   -
45   - it "updates the branch's project repo permissions" do
46   - Gitlab::GitHost.should_receive(:system).and_return(gitolite)
47   - gitolite.should_receive(:update_project).with(project.path, project)
48   -
49   - subject.update_repository
50   - end
51   - end
52   -
53 40 describe '#commit' do
54 41 subject { ProtectedBranch.new(:project => project, :name => 'cant_touch_this') }
55 42  
... ...
spec/monkeypatch.rb
... ... @@ -44,4 +44,8 @@ class FakeSatellite
44 44 end
45 45 end
46 46  
47   -
  47 +class ProtectedBranch
  48 + def update_repository
  49 + true
  50 + end
  51 +end
... ...
spec/requests/atom/dashboard_issues_spec.rb 0 → 100644
... ... @@ -0,0 +1,47 @@
  1 +require 'spec_helper'
  2 +
  3 +describe "User Issues Dashboard" do
  4 + describe "GET /issues" do
  5 + before do
  6 +
  7 + login_as :user
  8 +
  9 + @project1 = Factory :project,
  10 + :path => "project1",
  11 + :code => "TEST1"
  12 +
  13 + @project2 = Factory :project,
  14 + :path => "project2",
  15 + :code => "TEST2"
  16 +
  17 + @project1.add_access(@user, :read, :write)
  18 + @project2.add_access(@user, :read, :write)
  19 +
  20 + @issue1 = Factory :issue,
  21 + :author => @user,
  22 + :assignee => @user,
  23 + :project => @project1
  24 +
  25 + @issue2 = Factory :issue,
  26 + :author => @user,
  27 + :assignee => @user,
  28 + :project => @project2
  29 +
  30 + visit dashboard_issues_path
  31 + end
  32 +
  33 + describe "atom feed", :js => false do
  34 + it "should render atom feed via private token" do
  35 + logout
  36 + visit dashboard_issues_path(:atom, :private_token => @user.private_token)
  37 +
  38 + page.response_headers['Content-Type'].should have_content("application/atom+xml")
  39 + page.body.should have_selector("title", :text => "#{@user.name} issues")
  40 + page.body.should have_selector("author email", :text => @issue1.author_email)
  41 + page.body.should have_selector("entry summary", :text => @issue1.title)
  42 + page.body.should have_selector("author email", :text => @issue2.author_email)
  43 + page.body.should have_selector("entry summary", :text => @issue2.title)
  44 + end
  45 + end
  46 + end
  47 +end
... ...
spec/requests/atom/dashboard_spec.rb 0 → 100644
... ... @@ -0,0 +1,27 @@
  1 +require 'spec_helper'
  2 +
  3 +describe "User Dashboard" do
  4 + before { login_as :user }
  5 +
  6 + describe "GET /" do
  7 + before do
  8 + @project = Factory :project, :owner => @user
  9 + @project.add_access(@user, :read)
  10 + visit dashboard_path
  11 + end
  12 +
  13 + it "should render projects atom feed via private token" do
  14 + logout
  15 +
  16 + visit dashboard_path(:atom, :private_token => @user.private_token)
  17 + page.body.should have_selector("feed title")
  18 + end
  19 +
  20 + it "should not render projects page via private token" do
  21 + logout
  22 +
  23 + visit dashboard_path(:private_token => @user.private_token)
  24 + current_path.should == new_user_session_path
  25 + end
  26 + end
  27 +end
... ...
spec/requests/atom/issues_spec.rb 0 → 100644
... ... @@ -0,0 +1,40 @@
  1 +require 'spec_helper'
  2 +
  3 +describe "Issues" do
  4 + let(:project) { Factory :project }
  5 +
  6 + before do
  7 + login_as :user
  8 + project.add_access(@user, :read, :write)
  9 + end
  10 +
  11 + describe "GET /issues" do
  12 + before do
  13 + @issue = Factory :issue,
  14 + :author => @user,
  15 + :assignee => @user,
  16 + :project => project
  17 +
  18 + visit project_issues_path(project)
  19 + end
  20 +
  21 + it "should render atom feed" do
  22 + visit project_issues_path(project, :atom)
  23 +
  24 + page.response_headers['Content-Type'].should have_content("application/atom+xml")
  25 + page.body.should have_selector("title", :text => "#{project.name} issues")
  26 + page.body.should have_selector("author email", :text => @issue.author_email)
  27 + page.body.should have_selector("entry summary", :text => @issue.title)
  28 + end
  29 +
  30 + it "should render atom feed via private token" do
  31 + logout
  32 + visit project_issues_path(project, :atom, :private_token => @user.private_token)
  33 +
  34 + page.response_headers['Content-Type'].should have_content("application/atom+xml")
  35 + page.body.should have_selector("title", :text => "#{project.name} issues")
  36 + page.body.should have_selector("author email", :text => @issue.author_email)
  37 + page.body.should have_selector("entry summary", :text => @issue.title)
  38 + end
  39 + end
  40 +end
... ...
spec/requests/commits_notes_spec.rb
... ... @@ -1,28 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Issues" do
4   - let(:project) { Factory :project }
5   - let!(:commit) { project.repo.commits.first }
6   -
7   - before do
8   - login_as :user
9   - project.add_access(@user, :read, :write)
10   - end
11   -
12   - describe "add new note", :js => true do
13   - before do
14   - visit project_commit_path(project, commit)
15   - fill_in "note_note", :with => "I commented this commit"
16   - click_button "Add Comment"
17   - end
18   -
19   - it "should conatin new note" do
20   - page.should have_content("I commented this commit")
21   - end
22   -
23   - it "should be displayed when i visit this commit again" do
24   - visit project_commit_path(project, commit)
25   - page.should have_content("I commented this commit")
26   - end
27   - end
28   -end
spec/requests/commits_spec.rb
... ... @@ -1,68 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Commits" do
4   - let(:project) { Factory :project }
5   - let!(:commit) { CommitDecorator.decorate(project.commit) }
6   - before do
7   - login_as :user
8   - project.add_access(@user, :read)
9   - end
10   -
11   - describe "GET /commits" do
12   - before do
13   - visit project_commits_path(project)
14   - end
15   -
16   - it "should have valid path" do
17   - current_path.should == project_commits_path(project)
18   - end
19   -
20   - it "should have project name" do
21   - page.should have_content(project.name)
22   - end
23   -
24   - it "should list commits" do
25   - page.should have_content(commit.description)
26   - page.should have_content(commit.short_id(8))
27   - end
28   -
29   - it "should render atom feed" do
30   - visit project_commits_path(project, :atom)
31   -
32   - page.response_headers['Content-Type'].should have_content("application/atom+xml")
33   - page.body.should have_selector("title", :text => "Recent commits to #{project.name}")
34   - page.body.should have_selector("author email", :text => commit.author_email)
35   - page.body.should have_selector("entry summary", :text => commit.description)
36   - end
37   -
38   - it "should render atom feed via private token" do
39   - logout
40   - visit project_commits_path(project, :atom, :private_token => @user.private_token)
41   -
42   - page.response_headers['Content-Type'].should have_content("application/atom+xml")
43   - page.body.should have_selector("title", :text => "Recent commits to #{project.name}")
44   - page.body.should have_selector("author email", :text => commit.author_email)
45   - page.body.should have_selector("entry summary", :text => commit.description)
46   - end
47   - end
48   -
49   - describe "GET /commits/:id" do
50   - before do
51   - visit project_commit_path(project, commit.id)
52   - end
53   -
54   - it "should have valid path" do
55   - current_path.should == project_commit_path(project, commit.id)
56   - end
57   - end
58   -
59   - describe "GET /commits/compare" do
60   - before do
61   - visit compare_project_commits_path(project)
62   - end
63   -
64   - it "should have valid path" do
65   - current_path.should == compare_project_commits_path(project)
66   - end
67   - end
68   -end
spec/requests/dashboard_issues_spec.rb
... ... @@ -1,55 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "User Issues Dashboard" do
4   - describe "GET /issues" do
5   - before do
6   -
7   - login_as :user
8   -
9   - @project1 = Factory :project,
10   - :path => "project1",
11   - :code => "TEST1"
12   -
13   - @project2 = Factory :project,
14   - :path => "project2",
15   - :code => "TEST2"
16   -
17   - @project1.add_access(@user, :read, :write)
18   - @project2.add_access(@user, :read, :write)
19   -
20   - @issue1 = Factory :issue,
21   - :author => @user,
22   - :assignee => @user,
23   - :project => @project1
24   -
25   - @issue2 = Factory :issue,
26   - :author => @user,
27   - :assignee => @user,
28   - :project => @project2
29   -
30   - visit dashboard_issues_path
31   - end
32   -
33   - subject { page }
34   -
35   - it { should have_content(@issue1.title[0..10]) }
36   - it { should have_content(@issue1.project.name) }
37   -
38   - it { should have_content(@issue2.title[0..10]) }
39   - it { should have_content(@issue2.project.name) }
40   -
41   - describe "atom feed", :js => false do
42   - it "should render atom feed via private token" do
43   - logout
44   - visit dashboard_issues_path(:atom, :private_token => @user.private_token)
45   -
46   - page.response_headers['Content-Type'].should have_content("application/atom+xml")
47   - page.body.should have_selector("title", :text => "#{@user.name} issues")
48   - page.body.should have_selector("author email", :text => @issue1.author_email)
49   - page.body.should have_selector("entry summary", :text => @issue1.title)
50   - page.body.should have_selector("author email", :text => @issue2.author_email)
51   - page.body.should have_selector("entry summary", :text => @issue2.title)
52   - end
53   - end
54   - end
55   -end
spec/requests/dashboard_merge_requests_spec.rb
... ... @@ -1,40 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "User MergeRequests" do
4   - describe "GET /issues" do
5   - before do
6   -
7   - login_as :user
8   -
9   - @project1 = Factory :project,
10   - :path => "project1",
11   - :code => "TEST1"
12   -
13   - @project2 = Factory :project,
14   - :path => "project2",
15   - :code => "TEST2"
16   -
17   - @project1.add_access(@user, :read, :write)
18   - @project2.add_access(@user, :read, :write)
19   -
20   - @merge_request1 = Factory :merge_request,
21   - :author => @user,
22   - :assignee => @user,
23   - :project => @project1
24   -
25   - @merge_request2 = Factory :merge_request,
26   - :author => @user,
27   - :assignee => @user,
28   - :project => @project2
29   -
30   - visit dashboard_merge_requests_path
31   - end
32   -
33   - subject { page }
34   -
35   - it { should have_content(@merge_request1.title[0..10]) }
36   - it { should have_content(@merge_request1.project.name) }
37   - it { should have_content(@merge_request2.title[0..10]) }
38   - it { should have_content(@merge_request2.project.name) }
39   - end
40   -end
spec/requests/dashboard_spec.rb
... ... @@ -1,39 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "User Dashboard" do
4   - before { login_as :user }
5   -
6   - describe "GET /" do
7   - before do
8   - @project = Factory :project, :owner => @user
9   - @project.add_access(@user, :read)
10   - visit dashboard_path
11   - end
12   -
13   - it "should be on projects page" do
14   - current_path.should == dashboard_path
15   - end
16   -
17   - it "should have link to new project" do
18   - page.should have_content("New Project")
19   - end
20   -
21   - it "should have project" do
22   - page.should have_content(@project.name)
23   - end
24   -
25   - it "should render projects atom feed via private token" do
26   - logout
27   -
28   - visit dashboard_path(:atom, :private_token => @user.private_token)
29   - page.body.should have_selector("feed title")
30   - end
31   -
32   - it "should not render projects page via private token" do
33   - logout
34   -
35   - visit dashboard_path(:private_token => @user.private_token)
36   - current_path.should == new_user_session_path
37   - end
38   - end
39   -end
spec/requests/file_blame_spec.rb
... ... @@ -1,25 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Blame file" do
4   - before { login_as :user }
5   -
6   - describe "GET /:projectname/:commit/blob/Gemfile" do
7   - before do
8   - @project = Factory :project
9   - @project.add_access(@user, :read)
10   -
11   - visit tree_project_ref_path(@project, @project.root_ref, :path => "Gemfile")
12   - click_link "blame"
13   - end
14   -
15   - it "should be correct path" do
16   - current_path.should == blame_file_project_ref_path(@project, @project.root_ref, :path => "Gemfile")
17   - end
18   -
19   - it "should contain file view" do
20   - page.should have_content("rubygems.org")
21   - page.should have_content("Dmitriy Zaporozhets")
22   - page.should have_content("bc3735004cb Moving to rails 3.2")
23   - end
24   - end
25   -end
spec/requests/issues_notes_spec.rb
... ... @@ -1,27 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Issues" do
4   - let(:project) { Factory :project }
5   -
6   - before do
7   - login_as :user
8   - project.add_access(@user, :read, :write)
9   -
10   - @issue = Factory :issue,
11   - :author => @user,
12   - :assignee => @user,
13   - :project => project
14   - end
15   -
16   - describe "add new note", :js => true do
17   - before do
18   - visit project_issue_path(project, @issue)
19   - fill_in "note_note", :with => "I commented this issue"
20   - click_button "Add Comment"
21   - end
22   -
23   - it "should conatin new note" do
24   - page.should have_content("I commented this issue")
25   - end
26   - end
27   -end
spec/requests/issues_spec.rb
... ... @@ -11,161 +11,6 @@ describe "Issues" do
11 11 project.add_access(@user2, :read, :write)
12 12 end
13 13  
14   - describe "GET /issues" do
15   - before do
16   - @issue = Factory :issue,
17   - :author => @user,
18   - :assignee => @user,
19   - :project => project
20   -
21   - visit project_issues_path(project)
22   - end
23   -
24   - subject { page }
25   -
26   - it { should have_content(@issue.title[0..20]) }
27   - it { should have_content(@issue.project.name) }
28   - it { should have_content(@issue.assignee.name) }
29   -
30   - it "should render atom feed" do
31   - visit project_issues_path(project, :atom)
32   -
33   - page.response_headers['Content-Type'].should have_content("application/atom+xml")
34   - page.body.should have_selector("title", :text => "#{project.name} issues")
35   - page.body.should have_selector("author email", :text => @issue.author_email)
36   - page.body.should have_selector("entry summary", :text => @issue.title)
37   - end
38   -
39   - it "should render atom feed via private token" do
40   - logout
41   - visit project_issues_path(project, :atom, :private_token => @user.private_token)
42   -
43   - page.response_headers['Content-Type'].should have_content("application/atom+xml")
44   - page.body.should have_selector("title", :text => "#{project.name} issues")
45   - page.body.should have_selector("author email", :text => @issue.author_email)
46   - page.body.should have_selector("entry summary", :text => @issue.title)
47   - end
48   -
49   - describe "statuses" do
50   - before do
51   - @closed_issue = Factory :issue,
52   - :author => @user,
53   - :assignee => @user,
54   - :project => project,
55   - :closed => true
56   - end
57   -
58   - it "should show only open" do
59   - should have_content(@issue.title[0..25])
60   - should have_no_content(@closed_issue.title)
61   - end
62   -
63   - it "should show only closed" do
64   - click_link "Closed"
65   - should have_no_content(@issue.title)
66   - should have_content(@closed_issue.title[0..25])
67   - end
68   -
69   - it "should show all" do
70   - click_link "All"
71   - should have_content(@issue.title[0..25])
72   - should have_content(@closed_issue.title[0..25])
73   - end
74   - end
75   - end
76   -
77   - describe "New issue", :js => true do
78   - before do
79   - visit project_issues_path(project)
80   - click_link "New Issue"
81   - end
82   -
83   - it "should open new issue form" do
84   - page.should have_content("New Issue")
85   - end
86   -
87   - describe "fill in" do
88   - describe 'assign to me' do
89   - before do
90   - fill_in "issue_title", :with => "bug 345"
91   - page.execute_script("$('#issue_assignee_id').show();")
92   - select @user.name, :from => "issue_assignee_id"
93   - end
94   -
95   - it { expect { click_button "Submit new issue" }.to change {Issue.count}.by(1) }
96   -
97   - it "should add new issue to table" do
98   - click_button "Submit new issue"
99   -
100   - page.should_not have_content("Add new issue")
101   - page.should have_content @user.name
102   - page.should have_content "bug 345"
103   - page.should have_content project.name
104   - end
105   -
106   - it "should call send mail" do
107   - Notify.should_not_receive(:new_issue_email)
108   - click_button "Submit new issue"
109   - end
110   - end
111   -
112   - describe 'assign to other' do
113   - before do
114   - fill_in "issue_title", :with => "bug 345"
115   - page.execute_script("$('#issue_assignee_id').show();")
116   - select @user2.name, :from => "issue_assignee_id"
117   - end
118   -
119   - it { expect { click_button "Submit new issue" }.to change {Issue.count}.by(1) }
120   -
121   - it "should add new issue to table" do
122   - click_button "Submit new issue"
123   -
124   - page.should_not have_content("Add new issue")
125   - page.should have_content @user2.name
126   - page.should have_content "bug 345"
127   - page.should have_content project.name
128   - end
129   -
130   - it "should call send mail" do
131   - Issue.observers.enable :issue_observer do
132   - Notify.should_receive(:new_issue_email).and_return(stub(:deliver => true))
133   - click_button "Submit new issue"
134   - end
135   - end
136   -
137   - it "should send valid email to user" do
138   - Issue.observers.enable :issue_observer do
139   - with_resque do
140   - click_button "Submit new issue"
141   - end
142   - issue = Issue.last
143   - email = ActionMailer::Base.deliveries.last
144   - email.subject.should have_content("New Issue was created")
145   - email.body.should have_content(issue.title)
146   - end
147   - end
148   -
149   - end
150   - end
151   - end
152   -
153   - describe "Show issue" do
154   - before do
155   - @issue = Factory :issue,
156   - :author => @user,
157   - :assignee => @user,
158   - :project => project
159   -
160   - visit project_issue_path(project, @issue)
161   - end
162   -
163   - it "should have valid show page for issue" do
164   - page.should have_content @issue.title
165   - page.should have_content @user.name
166   - end
167   - end
168   -
169 14 describe "Edit issue", :js => true do
170 15 before do
171 16 @issue = Factory :issue,
... ...
spec/requests/keys_spec.rb
... ... @@ -1,65 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Issues" do
4   - before do
5   - login_as :user
6   - end
7   -
8   - describe "GET /keys" do
9   - before do
10   - @key = Factory :key, :user => @user
11   - visit keys_path
12   - end
13   -
14   - subject { page }
15   -
16   - it { should have_content(@key.title) }
17   -
18   - describe "Destroy" do
19   - before { visit key_path(@key) }
20   -
21   - it "should remove entry" do
22   - expect {
23   - click_link "Remove"
24   - }.to change { @user.keys.count }.by(-1)
25   - end
26   - end
27   - end
28   -
29   - describe "New key" do
30   - before do
31   - visit keys_path
32   - click_link "Add new"
33   - end
34   -
35   - it "should open new key popup" do
36   - page.should have_content("New key")
37   - end
38   -
39   - describe "fill in" do
40   - before do
41   - fill_in "key_title", :with => "laptop"
42   - fill_in "key_key", :with => "publickey234="
43   - end
44   -
45   - it { expect { click_button "Save" }.to change {Key.count}.by(1) }
46   -
47   - it "should add new key to table" do
48   - click_button "Save"
49   -
50   - page.should_not have_content("New key")
51   - page.should have_content "laptop"
52   - end
53   - end
54   - end
55   -
56   - describe "Show page" do
57   - before do
58   - @key = Factory :key, :user => @user
59   - visit key_path(@key)
60   - end
61   -
62   - it { page.should have_content @key.title }
63   - it { page.should have_content @key.key[0..10] }
64   - end
65   -end
spec/requests/last_push_widget_spec.rb
... ... @@ -1,52 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Last Push widget" do
4   - before { login_as :user }
5   -
6   - before do
7   - @project = Factory :project, :owner => @user
8   - @project.add_access(@user, :read)
9   - create_push_event
10   - visit dashboard_path
11   - end
12   -
13   - it "should display last push widget with link to merge request page" do
14   - page.should have_content "Your pushed to branch new_design"
15   - page.should have_link "Create Merge Request"
16   - end
17   -
18   - describe "click create MR" do
19   - before { click_link "Create Merge Request" }
20   -
21   - it { current_path.should == new_project_merge_request_path(@project) }
22   - it { find("#merge_request_source_branch").value.should == "new_design" }
23   - it { find("#merge_request_target_branch").value.should == "master" }
24   - it { find("#merge_request_title").value.should == "New Design" }
25   - end
26   -
27   -
28   - def create_push_event
29   - data = {
30   - :before => "0000000000000000000000000000000000000000",
31   - :after => "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e",
32   - :ref => "refs/heads/new_design",
33   - :user_id => @user.id,
34   - :user_name => @user.name,
35   - :repository => {
36   - :name => @project.name,
37   - :url => "localhost/rubinius",
38   - :description => "",
39   - :homepage => "localhost/rubinius",
40   - :private => true
41   - }
42   - }
43   -
44   - @event = Event.create(
45   - :project => @project,
46   - :action => Event::Pushed,
47   - :data => data,
48   - :author_id => @user.id
49   - )
50   - end
51   -end
52   -
spec/requests/milestones_spec.rb
... ... @@ -1,51 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Milestones" do
4   - let(:project) { Factory :project }
5   -
6   - before do
7   - login_as :user
8   - project.add_access(@user, :admin)
9   -
10   - @milestone = Factory :milestone, :project => project
11   - @issue = Factory :issue, :project => project
12   -
13   - @milestone.issues << @issue
14   - end
15   -
16   - describe "GET /milestones" do
17   - before do
18   - visit project_milestones_path(project)
19   - end
20   -
21   - subject { page }
22   -
23   - it { should have_content(@milestone.title[0..10]) }
24   - it { should have_content(@milestone.expires_at) }
25   - it { should have_content("Browse Issues") }
26   - end
27   -
28   - describe "GET /milestone/:id" do
29   - before do
30   - visit project_milestone_path(project, @milestone)
31   - end
32   -
33   - subject { page }
34   -
35   - it { should have_content(@milestone.title[0..10]) }
36   - it { should have_content(@milestone.expires_at) }
37   - it { should have_content("Browse Issues") }
38   - end
39   -
40   - describe "GET /milestones/new" do
41   - before do
42   - visit new_project_milestone_path(project)
43   - fill_in "milestone_title", :with => "v2.3"
44   - click_button "Create milestone"
45   - end
46   -
47   - it { current_path.should == project_milestone_path(project, project.milestones.last) }
48   - it { page.should have_content(project.milestones.last.title[0..10]) }
49   - it { page.should have_content(project.milestones.last.expires_at) }
50   - end
51   -end
spec/requests/profile_spec.rb
... ... @@ -1,82 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Profile" do
4   - before do
5   - login_as :user
6   - end
7   -
8   - describe "Show profile" do
9   - before do
10   - visit profile_path
11   - end
12   -
13   - it { page.should have_content(@user.name) }
14   - end
15   -
16   - describe "Profile update" do
17   - before do
18   - visit profile_path
19   - fill_in "user_skype", :with => "testskype"
20   - fill_in "user_linkedin", :with => "testlinkedin"
21   - fill_in "user_twitter", :with => "testtwitter"
22   - click_button "Save"
23   - @user.reload
24   - end
25   -
26   - it { @user.skype.should == 'testskype' }
27   - it { @user.linkedin.should == 'testlinkedin' }
28   - it { @user.twitter.should == 'testtwitter' }
29   - end
30   -
31   - describe "Reset private token" do
32   - before do
33   - visit profile_token_path
34   - end
35   -
36   - it "should reset private token" do
37   - user_first_token = @user.private_token
38   - click_button "Reset"
39   - @user.reload
40   - @user.private_token.should_not == user_first_token
41   - end
42   - end
43   -
44   - describe "Password update" do
45   - before do
46   - visit profile_password_path
47   - end
48   -
49   - it { page.should have_content("Password") }
50   - it { page.should have_content("Password confirmation") }
51   -
52   - describe "change password" do
53   - before do
54   - @old_pwd = @user.encrypted_password
55   - fill_in "user_password", :with => "777777"
56   - fill_in "user_password_confirmation", :with => "777777"
57   - click_button "Save"
58   - @user.reload
59   - end
60   -
61   - it "should redirect to signin page" do
62   - current_path.should == new_user_session_path
63   - end
64   -
65   - it "should change password" do
66   - @user.encrypted_password.should_not == @old_pwd
67   - end
68   -
69   - describe "login with new password" do
70   - before do
71   - fill_in "user_email", :with => @user.email
72   - fill_in "user_password", :with => "777777"
73   - click_button "Sign in"
74   - end
75   -
76   - it "should login user" do
77   - current_path.should == root_path
78   - end
79   - end
80   - end
81   - end
82   -end
spec/requests/projects_security_spec.rb
... ... @@ -1,187 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Projects Security" do
4   - describe "GET /" do
5   - it { root_path.should be_allowed_for :admin }
6   - it { root_path.should be_allowed_for :user }
7   - it { root_path.should be_denied_for :visitor }
8   - end
9   -
10   - describe "GET /projects/new" do
11   - it { new_project_path.should be_allowed_for :admin }
12   - it { new_project_path.should be_allowed_for :user }
13   - it { new_project_path.should be_denied_for :visitor }
14   - end
15   -
16   - describe "Project" do
17   - before do
18   - @project = Factory :project
19   - @u1 = Factory :user
20   - @u2 = Factory :user
21   - @u3 = Factory :user
22   - # full access
23   - @project.users_projects.create(:user => @u1, :project_access => UsersProject::MASTER)
24   - # readonly
25   - @project.users_projects.create(:user => @u3, :project_access => UsersProject::REPORTER)
26   - end
27   -
28   - describe "GET /project_code" do
29   - it { project_path(@project).should be_allowed_for @u1 }
30   - it { project_path(@project).should be_allowed_for @u3 }
31   - it { project_path(@project).should be_denied_for :admin }
32   - it { project_path(@project).should be_denied_for @u2 }
33   - it { project_path(@project).should be_denied_for :user }
34   - it { project_path(@project).should be_denied_for :visitor }
35   - end
36   -
37   - describe "GET /project_code/master/tree" do
38   - it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u1 }
39   - it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u3 }
40   - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :admin }
41   - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for @u2 }
42   - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :user }
43   - it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :visitor }
44   - end
45   -
46   - describe "GET /project_code/commits" do
47   - it { project_commits_path(@project).should be_allowed_for @u1 }
48   - it { project_commits_path(@project).should be_allowed_for @u3 }
49   - it { project_commits_path(@project).should be_denied_for :admin }
50   - it { project_commits_path(@project).should be_denied_for @u2 }
51   - it { project_commits_path(@project).should be_denied_for :user }
52   - it { project_commits_path(@project).should be_denied_for :visitor }
53   - end
54   -
55   - describe "GET /project_code/commit" do
56   - it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u1 }
57   - it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u3 }
58   - it { project_commit_path(@project, @project.commit.id).should be_denied_for :admin }
59   - it { project_commit_path(@project, @project.commit.id).should be_denied_for @u2 }
60   - it { project_commit_path(@project, @project.commit.id).should be_denied_for :user }
61   - it { project_commit_path(@project, @project.commit.id).should be_denied_for :visitor }
62   - end
63   -
64   - describe "GET /project_code/team" do
65   - it { team_project_path(@project).should be_allowed_for @u1 }
66   - it { team_project_path(@project).should be_allowed_for @u3 }
67   - it { team_project_path(@project).should be_denied_for :admin }
68   - it { team_project_path(@project).should be_denied_for @u2 }
69   - it { team_project_path(@project).should be_denied_for :user }
70   - it { team_project_path(@project).should be_denied_for :visitor }
71   - end
72   -
73   - describe "GET /project_code/wall" do
74   - it { wall_project_path(@project).should be_allowed_for @u1 }
75   - it { wall_project_path(@project).should be_allowed_for @u3 }
76   - it { wall_project_path(@project).should be_denied_for :admin }
77   - it { wall_project_path(@project).should be_denied_for @u2 }
78   - it { wall_project_path(@project).should be_denied_for :user }
79   - it { wall_project_path(@project).should be_denied_for :visitor }
80   - end
81   -
82   - describe "GET /project_code/blob" do
83   - before do
84   - @commit = @project.commit
85   - @path = @commit.tree.contents.select { |i| i.is_a?(Grit::Blob)}.first.name
86   - @blob_path = blob_project_ref_path(@project, @commit.id, :path => @path)
87   - end
88   -
89   - it { @blob_path.should be_allowed_for @u1 }
90   - it { @blob_path.should be_allowed_for @u3 }
91   - it { @blob_path.should be_denied_for :admin }
92   - it { @blob_path.should be_denied_for @u2 }
93   - it { @blob_path.should be_denied_for :user }
94   - it { @blob_path.should be_denied_for :visitor }
95   - end
96   -
97   - describe "GET /project_code/edit" do
98   - it { edit_project_path(@project).should be_allowed_for @u1 }
99   - it { edit_project_path(@project).should be_denied_for @u3 }
100   - it { edit_project_path(@project).should be_denied_for :admin }
101   - it { edit_project_path(@project).should be_denied_for @u2 }
102   - it { edit_project_path(@project).should be_denied_for :user }
103   - it { edit_project_path(@project).should be_denied_for :visitor }
104   - end
105   -
106   - describe "GET /project_code/deploy_keys" do
107   - it { project_deploy_keys_path(@project).should be_allowed_for @u1 }
108   - it { project_deploy_keys_path(@project).should be_denied_for @u3 }
109   - it { project_deploy_keys_path(@project).should be_denied_for :admin }
110   - it { project_deploy_keys_path(@project).should be_denied_for @u2 }
111   - it { project_deploy_keys_path(@project).should be_denied_for :user }
112   - it { project_deploy_keys_path(@project).should be_denied_for :visitor }
113   - end
114   -
115   - describe "GET /project_code/issues" do
116   - it { project_issues_path(@project).should be_allowed_for @u1 }
117   - it { project_issues_path(@project).should be_allowed_for @u3 }
118   - it { project_issues_path(@project).should be_denied_for :admin }
119   - it { project_issues_path(@project).should be_denied_for @u2 }
120   - it { project_issues_path(@project).should be_denied_for :user }
121   - it { project_issues_path(@project).should be_denied_for :visitor }
122   - end
123   -
124   - describe "GET /project_code/snippets" do
125   - it { project_snippets_path(@project).should be_allowed_for @u1 }
126   - it { project_snippets_path(@project).should be_allowed_for @u3 }
127   - it { project_snippets_path(@project).should be_denied_for :admin }
128   - it { project_snippets_path(@project).should be_denied_for @u2 }
129   - it { project_snippets_path(@project).should be_denied_for :user }
130   - it { project_snippets_path(@project).should be_denied_for :visitor }
131   - end
132   -
133   - describe "GET /project_code/merge_requests" do
134   - it { project_merge_requests_path(@project).should be_allowed_for @u1 }
135   - it { project_merge_requests_path(@project).should be_allowed_for @u3 }
136   - it { project_merge_requests_path(@project).should be_denied_for :admin }
137   - it { project_merge_requests_path(@project).should be_denied_for @u2 }
138   - it { project_merge_requests_path(@project).should be_denied_for :user }
139   - it { project_merge_requests_path(@project).should be_denied_for :visitor }
140   - end
141   -
142   - describe "GET /project_code/repository" do
143   - it { project_repository_path(@project).should be_allowed_for @u1 }
144   - it { project_repository_path(@project).should be_allowed_for @u3 }
145   - it { project_repository_path(@project).should be_denied_for :admin }
146   - it { project_repository_path(@project).should be_denied_for @u2 }
147   - it { project_repository_path(@project).should be_denied_for :user }
148   - it { project_repository_path(@project).should be_denied_for :visitor }
149   - end
150   -
151   - describe "GET /project_code/repository/branches" do
152   - it { branches_project_repository_path(@project).should be_allowed_for @u1 }
153   - it { branches_project_repository_path(@project).should be_allowed_for @u3 }
154   - it { branches_project_repository_path(@project).should be_denied_for :admin }
155   - it { branches_project_repository_path(@project).should be_denied_for @u2 }
156   - it { branches_project_repository_path(@project).should be_denied_for :user }
157   - it { branches_project_repository_path(@project).should be_denied_for :visitor }
158   - end
159   -
160   - describe "GET /project_code/repository/tags" do
161   - it { tags_project_repository_path(@project).should be_allowed_for @u1 }
162   - it { tags_project_repository_path(@project).should be_allowed_for @u3 }
163   - it { tags_project_repository_path(@project).should be_denied_for :admin }
164   - it { tags_project_repository_path(@project).should be_denied_for @u2 }
165   - it { tags_project_repository_path(@project).should be_denied_for :user }
166   - it { tags_project_repository_path(@project).should be_denied_for :visitor }
167   - end
168   -
169   - describe "GET /project_code/hooks" do
170   - it { project_hooks_path(@project).should be_allowed_for @u1 }
171   - it { project_hooks_path(@project).should be_allowed_for @u3 }
172   - it { project_hooks_path(@project).should be_denied_for :admin }
173   - it { project_hooks_path(@project).should be_denied_for @u2 }
174   - it { project_hooks_path(@project).should be_denied_for :user }
175   - it { project_hooks_path(@project).should be_denied_for :visitor }
176   - end
177   -
178   - describe "GET /project_code/files" do
179   - it { files_project_path(@project).should be_allowed_for @u1 }
180   - it { files_project_path(@project).should be_allowed_for @u3 }
181   - it { files_project_path(@project).should be_denied_for :admin }
182   - it { files_project_path(@project).should be_denied_for @u2 }
183   - it { files_project_path(@project).should be_denied_for :user }
184   - it { files_project_path(@project).should be_denied_for :visitor }
185   - end
186   - end
187   -end
spec/requests/projects_spec.rb
... ... @@ -3,47 +3,6 @@ require &#39;spec_helper&#39;
3 3 describe "Projects" do
4 4 before { login_as :user }
5 5  
6   - describe "GET /projects/new" do
7   - before do
8   - visit root_path
9   - click_link "New Project"
10   - end
11   -
12   - it "should be correct path" do
13   - current_path.should == new_project_path
14   - end
15   -
16   - it "should have labels for new project" do
17   - page.should have_content("Project name is")
18   - end
19   - end
20   -
21   - describe "POST /projects" do
22   - before do
23   - visit new_project_path
24   - fill_in 'project_name', :with => 'NewProject'
25   - fill_in 'project_code', :with => 'NPR'
26   - fill_in 'project_path', :with => 'newproject'
27   - expect { click_button "Create project" }.to change { Project.count }.by(1)
28   - @project = Project.last
29   - end
30   -
31   - it "should be correct path" do
32   - current_path.should == project_path(@project)
33   - end
34   -
35   - it "should show project" do
36   - page.should have_content(@project.name)
37   - page.should have_content(@project.path)
38   - page.should have_content(@project.description)
39   - end
40   -
41   - it "should init repo instructions" do
42   - page.should have_content("git remote")
43   - page.should have_content(@project.url_to_repo)
44   - end
45   - end
46   -
47 6 describe "GET /projects/show" do
48 7 before do
49 8 @project = Factory :project, :owner => @user
... ... @@ -57,42 +16,6 @@ describe &quot;Projects&quot; do
57 16 end
58 17 end
59 18  
60   - describe "GET /projects/graph" do
61   - before do
62   - @project = Factory :project
63   - @project.add_access(@user, :read)
64   -
65   - visit graph_project_path(@project)
66   - end
67   -
68   - it "should be correct path" do
69   - current_path.should == graph_project_path(@project)
70   - end
71   -
72   - it "should have as as team member" do
73   - page.should have_content("master")
74   - end
75   - end
76   -
77   - describe "GET /projects/team" do
78   - before do
79   - @project = Factory :project
80   - @project.add_access(@user, :read)
81   -
82   - visit team_project_path(@project,
83   - :path => ValidCommit::BLOB_FILE_PATH,
84   - :commit_id => ValidCommit::ID)
85   - end
86   -
87   - it "should be correct path" do
88   - current_path.should == team_project_path(@project)
89   - end
90   -
91   - it "should have as as team member" do
92   - page.should have_content(@user.name)
93   - end
94   - end
95   -
96 19 describe "GET /projects/:id/edit" do
97 20 before do
98 21 @project = Factory :project
... ...
spec/requests/projects_tree_spec.rb
... ... @@ -1,90 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Projects" do
4   - before { login_as :user }
5   -
6   - describe "GET /projects/tree" do
7   - describe "head" do
8   - before do
9   - @project = Factory :project
10   - @project.add_access(@user, :read)
11   -
12   - visit tree_project_ref_path(@project, @project.root_ref)
13   - end
14   -
15   - it "should be correct path" do
16   - current_path.should == tree_project_ref_path(@project, @project.root_ref)
17   - end
18   -
19   - it_behaves_like :tree_view
20   - end
21   -
22   - describe ValidCommit::ID do
23   - before do
24   - @project = Factory :project
25   - @project.add_access(@user, :read)
26   -
27   - visit tree_project_ref_path(@project, ValidCommit::ID)
28   - end
29   -
30   - it "should be correct path" do
31   - current_path.should == tree_project_ref_path(@project, ValidCommit::ID)
32   - end
33   -
34   - it_behaves_like :tree_view
35   - it_behaves_like :project_side_pane
36   - end
37   -
38   - describe "branch passed" do
39   - before do
40   - @project = Factory :project
41   - @project.add_access(@user, :read)
42   -
43   - visit tree_project_ref_path(@project, @project.root_ref)
44   - end
45   -
46   - it "should be correct path" do
47   - current_path.should == tree_project_ref_path(@project, @project.root_ref)
48   - end
49   -
50   - it_behaves_like :tree_view
51   - it_behaves_like :project_side_pane
52   - end
53   -
54   - # TREE FILE PREVIEW
55   - describe "file preview" do
56   - before do
57   - @project = Factory :project
58   - @project.add_access(@user, :read)
59   -
60   - visit tree_project_ref_path(@project, @project.root_ref, :path => "Gemfile")
61   - end
62   -
63   - it "should be correct path" do
64   - current_path.should == tree_project_ref_path(@project, @project.root_ref)
65   - end
66   -
67   - it "should contain file view" do
68   - page.should have_content("rubygems.org")
69   - end
70   - end
71   - end
72   -
73   - # RAW FILE
74   - describe "GET /projects/blob" do
75   - before do
76   - @project = Factory :project
77   - @project.add_access(@user, :read)
78   -
79   - visit blob_project_ref_path(@project, ValidCommit::ID, :path => ValidCommit::BLOB_FILE_PATH)
80   - end
81   -
82   - it "should be correct path" do
83   - current_path.should == blob_project_ref_path(@project, ValidCommit::ID)
84   - end
85   -
86   - it "raw file response" do
87   - page.source.should == ValidCommit::BLOB_FILE
88   - end
89   - end
90   -end
spec/requests/projects_wall_spec.rb
... ... @@ -1,33 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Projects", "Wall" do
4   - let(:project) { Factory :project }
5   -
6   - before do
7   - login_as :user
8   - project.add_access(@user, :read, :write)
9   - end
10   -
11   - describe "View notes on wall", :js => true do
12   - before do
13   - Factory :note, :project => project, :note => "Project specs", :author => @user
14   - visit wall_project_path(project)
15   - end
16   -
17   - it { page.should have_content("Project specs") }
18   - it { page.should have_content(@user.name) }
19   - it { page.should have_content("less than a minute ago") }
20   - end
21   -
22   - describe "add new note", :js => true do
23   - before do
24   - visit wall_project_path(project)
25   - fill_in "note_note", :with => "my post on wall"
26   - click_button "Add Comment"
27   - end
28   -
29   - it "should conatin new note" do
30   - page.should have_content("my post on wall")
31   - end
32   - end
33   -end
spec/requests/repositories_spec.rb
... ... @@ -1,49 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Repository" do
4   -
5   - before do
6   - @user = Factory :user
7   - @project = Factory :project
8   - @project.add_access(@user, :read, :write)
9   - login_with @user
10   - end
11   -
12   - describe "GET /:project_name/repository" do
13   - before do
14   - visit project_repository_path(@project)
15   - end
16   -
17   - it "should be on projects page" do
18   - current_path.should == project_repository_path(@project)
19   - end
20   -
21   - it "should have link to last commit for activities tab" do
22   - page.should have_content(@project.commit.safe_message[0..20])
23   - end
24   - end
25   -
26   - describe "GET /:project_name/repository/branches" do
27   - before do
28   - visit branches_project_repository_path(@project)
29   - end
30   -
31   - it "should have link to repo activities" do
32   - page.should have_content("Branches")
33   - page.should have_content("master")
34   - end
35   - end
36   -
37   - # TODO: Add new repo to seeds with tags list
38   - describe "GET /:project_name/repository/tags" do
39   - before do
40   - visit tags_project_repository_path(@project)
41   - end
42   -
43   - it "should have link to repo activities" do
44   - page.should have_content("Tags")
45   - page.should have_content("v1.2.1")
46   - end
47   - end
48   -end
49   -
spec/requests/security/profile_access_spec.rb 0 → 100644
... ... @@ -0,0 +1,34 @@
  1 +require 'spec_helper'
  2 +
  3 +describe "Users Security" do
  4 + describe "Project" do
  5 + before do
  6 + @u1 = Factory :user
  7 + end
  8 +
  9 + describe "GET /login" do
  10 + it { new_user_session_path.should_not be_404_for :visitor }
  11 + end
  12 +
  13 + describe "GET /keys" do
  14 + it { keys_path.should be_allowed_for @u1 }
  15 + it { keys_path.should be_allowed_for :admin }
  16 + it { keys_path.should be_allowed_for :user }
  17 + it { keys_path.should be_denied_for :visitor }
  18 + end
  19 +
  20 + describe "GET /profile" do
  21 + it { profile_path.should be_allowed_for @u1 }
  22 + it { profile_path.should be_allowed_for :admin }
  23 + it { profile_path.should be_allowed_for :user }
  24 + it { profile_path.should be_denied_for :visitor }
  25 + end
  26 +
  27 + describe "GET /profile/password" do
  28 + it { profile_password_path.should be_allowed_for @u1 }
  29 + it { profile_password_path.should be_allowed_for :admin }
  30 + it { profile_password_path.should be_allowed_for :user }
  31 + it { profile_password_path.should be_denied_for :visitor }
  32 + end
  33 + end
  34 +end
... ...
spec/requests/security/project_access_spec.rb 0 → 100644
... ... @@ -0,0 +1,187 @@
  1 +require 'spec_helper'
  2 +
  3 +describe "Application access" do
  4 + describe "GET /" do
  5 + it { root_path.should be_allowed_for :admin }
  6 + it { root_path.should be_allowed_for :user }
  7 + it { root_path.should be_denied_for :visitor }
  8 + end
  9 +
  10 + describe "GET /projects/new" do
  11 + it { new_project_path.should be_allowed_for :admin }
  12 + it { new_project_path.should be_allowed_for :user }
  13 + it { new_project_path.should be_denied_for :visitor }
  14 + end
  15 +
  16 + describe "Project" do
  17 + before do
  18 + @project = Factory :project
  19 + @u1 = Factory :user
  20 + @u2 = Factory :user
  21 + @u3 = Factory :user
  22 + # full access
  23 + @project.users_projects.create(:user => @u1, :project_access => UsersProject::MASTER)
  24 + # readonly
  25 + @project.users_projects.create(:user => @u3, :project_access => UsersProject::REPORTER)
  26 + end
  27 +
  28 + describe "GET /project_code" do
  29 + it { project_path(@project).should be_allowed_for @u1 }
  30 + it { project_path(@project).should be_allowed_for @u3 }
  31 + it { project_path(@project).should be_denied_for :admin }
  32 + it { project_path(@project).should be_denied_for @u2 }
  33 + it { project_path(@project).should be_denied_for :user }
  34 + it { project_path(@project).should be_denied_for :visitor }
  35 + end
  36 +
  37 + describe "GET /project_code/master/tree" do
  38 + it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u1 }
  39 + it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u3 }
  40 + it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :admin }
  41 + it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for @u2 }
  42 + it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :user }
  43 + it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :visitor }
  44 + end
  45 +
  46 + describe "GET /project_code/commits" do
  47 + it { project_commits_path(@project).should be_allowed_for @u1 }
  48 + it { project_commits_path(@project).should be_allowed_for @u3 }
  49 + it { project_commits_path(@project).should be_denied_for :admin }
  50 + it { project_commits_path(@project).should be_denied_for @u2 }
  51 + it { project_commits_path(@project).should be_denied_for :user }
  52 + it { project_commits_path(@project).should be_denied_for :visitor }
  53 + end
  54 +
  55 + describe "GET /project_code/commit" do
  56 + it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u1 }
  57 + it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u3 }
  58 + it { project_commit_path(@project, @project.commit.id).should be_denied_for :admin }
  59 + it { project_commit_path(@project, @project.commit.id).should be_denied_for @u2 }
  60 + it { project_commit_path(@project, @project.commit.id).should be_denied_for :user }
  61 + it { project_commit_path(@project, @project.commit.id).should be_denied_for :visitor }
  62 + end
  63 +
  64 + describe "GET /project_code/team" do
  65 + it { team_project_path(@project).should be_allowed_for @u1 }
  66 + it { team_project_path(@project).should be_allowed_for @u3 }
  67 + it { team_project_path(@project).should be_denied_for :admin }
  68 + it { team_project_path(@project).should be_denied_for @u2 }
  69 + it { team_project_path(@project).should be_denied_for :user }
  70 + it { team_project_path(@project).should be_denied_for :visitor }
  71 + end
  72 +
  73 + describe "GET /project_code/wall" do
  74 + it { wall_project_path(@project).should be_allowed_for @u1 }
  75 + it { wall_project_path(@project).should be_allowed_for @u3 }
  76 + it { wall_project_path(@project).should be_denied_for :admin }
  77 + it { wall_project_path(@project).should be_denied_for @u2 }
  78 + it { wall_project_path(@project).should be_denied_for :user }
  79 + it { wall_project_path(@project).should be_denied_for :visitor }
  80 + end
  81 +
  82 + describe "GET /project_code/blob" do
  83 + before do
  84 + @commit = @project.commit
  85 + @path = @commit.tree.contents.select { |i| i.is_a?(Grit::Blob)}.first.name
  86 + @blob_path = blob_project_ref_path(@project, @commit.id, :path => @path)
  87 + end
  88 +
  89 + it { @blob_path.should be_allowed_for @u1 }
  90 + it { @blob_path.should be_allowed_for @u3 }
  91 + it { @blob_path.should be_denied_for :admin }
  92 + it { @blob_path.should be_denied_for @u2 }
  93 + it { @blob_path.should be_denied_for :user }
  94 + it { @blob_path.should be_denied_for :visitor }
  95 + end
  96 +
  97 + describe "GET /project_code/edit" do
  98 + it { edit_project_path(@project).should be_allowed_for @u1 }
  99 + it { edit_project_path(@project).should be_denied_for @u3 }
  100 + it { edit_project_path(@project).should be_denied_for :admin }
  101 + it { edit_project_path(@project).should be_denied_for @u2 }
  102 + it { edit_project_path(@project).should be_denied_for :user }
  103 + it { edit_project_path(@project).should be_denied_for :visitor }
  104 + end
  105 +
  106 + describe "GET /project_code/deploy_keys" do
  107 + it { project_deploy_keys_path(@project).should be_allowed_for @u1 }
  108 + it { project_deploy_keys_path(@project).should be_denied_for @u3 }
  109 + it { project_deploy_keys_path(@project).should be_denied_for :admin }
  110 + it { project_deploy_keys_path(@project).should be_denied_for @u2 }
  111 + it { project_deploy_keys_path(@project).should be_denied_for :user }
  112 + it { project_deploy_keys_path(@project).should be_denied_for :visitor }
  113 + end
  114 +
  115 + describe "GET /project_code/issues" do
  116 + it { project_issues_path(@project).should be_allowed_for @u1 }
  117 + it { project_issues_path(@project).should be_allowed_for @u3 }
  118 + it { project_issues_path(@project).should be_denied_for :admin }
  119 + it { project_issues_path(@project).should be_denied_for @u2 }
  120 + it { project_issues_path(@project).should be_denied_for :user }
  121 + it { project_issues_path(@project).should be_denied_for :visitor }
  122 + end
  123 +
  124 + describe "GET /project_code/snippets" do
  125 + it { project_snippets_path(@project).should be_allowed_for @u1 }
  126 + it { project_snippets_path(@project).should be_allowed_for @u3 }
  127 + it { project_snippets_path(@project).should be_denied_for :admin }
  128 + it { project_snippets_path(@project).should be_denied_for @u2 }
  129 + it { project_snippets_path(@project).should be_denied_for :user }
  130 + it { project_snippets_path(@project).should be_denied_for :visitor }
  131 + end
  132 +
  133 + describe "GET /project_code/merge_requests" do
  134 + it { project_merge_requests_path(@project).should be_allowed_for @u1 }
  135 + it { project_merge_requests_path(@project).should be_allowed_for @u3 }
  136 + it { project_merge_requests_path(@project).should be_denied_for :admin }
  137 + it { project_merge_requests_path(@project).should be_denied_for @u2 }
  138 + it { project_merge_requests_path(@project).should be_denied_for :user }
  139 + it { project_merge_requests_path(@project).should be_denied_for :visitor }
  140 + end
  141 +
  142 + describe "GET /project_code/repository" do
  143 + it { project_repository_path(@project).should be_allowed_for @u1 }
  144 + it { project_repository_path(@project).should be_allowed_for @u3 }
  145 + it { project_repository_path(@project).should be_denied_for :admin }
  146 + it { project_repository_path(@project).should be_denied_for @u2 }
  147 + it { project_repository_path(@project).should be_denied_for :user }
  148 + it { project_repository_path(@project).should be_denied_for :visitor }
  149 + end
  150 +
  151 + describe "GET /project_code/repository/branches" do
  152 + it { branches_project_repository_path(@project).should be_allowed_for @u1 }
  153 + it { branches_project_repository_path(@project).should be_allowed_for @u3 }
  154 + it { branches_project_repository_path(@project).should be_denied_for :admin }
  155 + it { branches_project_repository_path(@project).should be_denied_for @u2 }
  156 + it { branches_project_repository_path(@project).should be_denied_for :user }
  157 + it { branches_project_repository_path(@project).should be_denied_for :visitor }
  158 + end
  159 +
  160 + describe "GET /project_code/repository/tags" do
  161 + it { tags_project_repository_path(@project).should be_allowed_for @u1 }
  162 + it { tags_project_repository_path(@project).should be_allowed_for @u3 }
  163 + it { tags_project_repository_path(@project).should be_denied_for :admin }
  164 + it { tags_project_repository_path(@project).should be_denied_for @u2 }
  165 + it { tags_project_repository_path(@project).should be_denied_for :user }
  166 + it { tags_project_repository_path(@project).should be_denied_for :visitor }
  167 + end
  168 +
  169 + describe "GET /project_code/hooks" do
  170 + it { project_hooks_path(@project).should be_allowed_for @u1 }
  171 + it { project_hooks_path(@project).should be_allowed_for @u3 }
  172 + it { project_hooks_path(@project).should be_denied_for :admin }
  173 + it { project_hooks_path(@project).should be_denied_for @u2 }
  174 + it { project_hooks_path(@project).should be_denied_for :user }
  175 + it { project_hooks_path(@project).should be_denied_for :visitor }
  176 + end
  177 +
  178 + describe "GET /project_code/files" do
  179 + it { files_project_path(@project).should be_allowed_for @u1 }
  180 + it { files_project_path(@project).should be_allowed_for @u3 }
  181 + it { files_project_path(@project).should be_denied_for :admin }
  182 + it { files_project_path(@project).should be_denied_for @u2 }
  183 + it { files_project_path(@project).should be_denied_for :user }
  184 + it { files_project_path(@project).should be_denied_for :visitor }
  185 + end
  186 + end
  187 +end
... ...
spec/requests/team_members_spec.rb
... ... @@ -1,68 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "TeamMembers" do
4   - before do
5   - login_as :user
6   - @project = Factory :project
7   - @project.add_access(@user, :read, :admin)
8   - end
9   -
10   - describe "Update profile", :js => true do
11   - it "should update user role" do
12   - @project.master_access_for?(@user).should be_true
13   - visit team_project_path(@project)
14   - select "Developer", :from => "team_member_project_access"
15   - @project.master_access_for?(@user).should be_false
16   - @project.dev_access_for?(@user).should be_true
17   - end
18   - end
19   -
20   - describe "View profile" do
21   - it "should be available" do
22   - visit(team_project_path(@project))
23   - click_link(@user.name)
24   - page.should have_content @user.skype
25   - page.should_not have_content 'Twitter'
26   - end
27   - end
28   -
29   - describe "New Team member" do
30   - before do
31   - @user_1 = Factory :user
32   - visit team_project_path(@project)
33   - click_link "New Team Member"
34   - end
35   -
36   - it "should open new team member popup" do
37   - page.should have_content("New Team member")
38   - end
39   -
40   - describe "fill in" do
41   - before do
42   - within "#new_team_member" do
43   - select @user_1.name, :from => "team_member_user_id"
44   - select "Reporter", :from => "team_member_project_access"
45   - end
46   - end
47   -
48   - it { expect { click_button "Save";sleep(1) }.to change {UsersProject.count}.by(1) }
49   -
50   - it "should add new member to table" do
51   - click_button "Save"
52   - @member = UsersProject.last
53   -
54   - page.should have_content @user_1.name
55   -
56   - @member.reload
57   - @member.project_access.should == UsersProject::REPORTER
58   - end
59   - end
60   - end
61   -
62   - describe "Cancel membership" do
63   - it "should cancel membership" do
64   - visit project_team_member_path(@project, @project.users_projects.last)
65   - expect { click_link "Remove from team" }.to change { UsersProject.count }.by(-1)
66   - end
67   - end
68   -end
spec/requests/user_security_spec.rb
... ... @@ -1,37 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Users Security" do
4   - describe "Project" do
5   - before do
6   - @u1 = Factory :user
7   - end
8   -
9   - describe "GET /login" do
10   - #it { new_user_session_path.should be_denied_for @u1 }
11   - #it { new_user_session_path.should be_denied_for :admin }
12   - #it { new_user_session_path.should be_denied_for :user }
13   - it { new_user_session_path.should_not be_404_for :visitor }
14   - end
15   -
16   - describe "GET /keys" do
17   - it { keys_path.should be_allowed_for @u1 }
18   - it { keys_path.should be_allowed_for :admin }
19   - it { keys_path.should be_allowed_for :user }
20   - it { keys_path.should be_denied_for :visitor }
21   - end
22   -
23   - describe "GET /profile" do
24   - it { profile_path.should be_allowed_for @u1 }
25   - it { profile_path.should be_allowed_for :admin }
26   - it { profile_path.should be_allowed_for :user }
27   - it { profile_path.should be_denied_for :visitor }
28   - end
29   -
30   - describe "GET /profile/password" do
31   - it { profile_password_path.should be_allowed_for @u1 }
32   - it { profile_password_path.should be_allowed_for :admin }
33   - it { profile_password_path.should be_allowed_for :user }
34   - it { profile_password_path.should be_denied_for :visitor }
35   - end
36   - end
37   -end
spec/requests/wikis_notes_spec.rb
... ... @@ -1,29 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Wikis" do
4   - let(:project) { Factory :project }
5   -
6   - before do
7   - login_as :user
8   - project.add_access(@user, :read, :write)
9   - end
10   -
11   - describe "add new note", :js => true do
12   - before do
13   - visit project_wiki_path(project, :index)
14   -
15   - fill_in "Title", :with => 'Test title'
16   - fill_in "Content", :with => '[link test](test)'
17   - click_on "Save"
18   -
19   - page.should have_content("Test title")
20   -
21   - fill_in "note_note", :with => "Comment on wiki!"
22   - click_button "Add Comment"
23   - end
24   -
25   - it "should contain the new note" do
26   - page.should have_content("Comment on wiki!")
27   - end
28   - end
29   -end
spec/requests/wikis_spec.rb
... ... @@ -1,35 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe "Wiki" do
4   - let(:project) { Factory :project }
5   -
6   - before do
7   - login_as :user
8   - project.add_access(@user, :read, :write)
9   - end
10   -
11   - describe "Add pages" do
12   - before do
13   - visit project_wiki_path(project, :index)
14   - end
15   -
16   - it "should see form" do
17   - page.should have_content("Editing page")
18   - end
19   -
20   - it "should see added page" do
21   - fill_in "Title", :with => 'Test title'
22   - fill_in "Content", :with => '[link test](test)'
23   - click_on "Save"
24   -
25   - page.should have_content("Test title")
26   - page.should have_content("link test")
27   -
28   - click_link "link test"
29   -
30   - page.should have_content("Editing page")
31   - end
32   -
33   - end
34   -
35   -end