Merge pull request #1300 from tsigo/spec_reorganize
Spec cleanup/reorganization
This commit is contained in:
commit
79e936e632
|
@ -28,17 +28,9 @@ class Milestone < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def percent_complete
|
def percent_complete
|
||||||
@percent_complete ||= begin
|
((self.issues.closed.count * 100) / self.issues.count).abs
|
||||||
total_i = self.issues.count
|
rescue ZeroDivisionError
|
||||||
closed_i = self.issues.closed.count
|
100
|
||||||
if total_i > 0
|
|
||||||
(closed_i * 100) / total_i
|
|
||||||
else
|
|
||||||
100
|
|
||||||
end
|
|
||||||
rescue => ex
|
|
||||||
0
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def expires_at
|
def expires_at
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
include LoginMacros
|
include LoginHelpers
|
||||||
|
|
||||||
Given /^I signin as a user$/ do
|
Given /^I signin as a user$/ do
|
||||||
login_as :user
|
login_as :user
|
||||||
|
|
|
@ -7,9 +7,9 @@ require 'cucumber/rails'
|
||||||
require 'webmock/cucumber'
|
require 'webmock/cucumber'
|
||||||
WebMock.allow_net_connect!
|
WebMock.allow_net_connect!
|
||||||
|
|
||||||
require Rails.root.join 'spec/monkeypatch'
|
|
||||||
require Rails.root.join 'spec/factories'
|
require Rails.root.join 'spec/factories'
|
||||||
require Rails.root.join 'spec/support/login'
|
require Rails.root.join 'spec/support/monkeypatch'
|
||||||
|
require Rails.root.join 'spec/support/login_helpers'
|
||||||
require Rails.root.join 'spec/support/valid_commit'
|
require Rails.root.join 'spec/support/valid_commit'
|
||||||
|
|
||||||
Capybara.default_selector = :css
|
Capybara.default_selector = :css
|
||||||
|
|
|
@ -31,24 +31,33 @@ describe Milestone do
|
||||||
|
|
||||||
it { milestone.should be_valid }
|
it { milestone.should be_valid }
|
||||||
|
|
||||||
describe "Issues" do
|
describe "#percent_complete" do
|
||||||
before do
|
it "should not count open issues" do
|
||||||
milestone.issues << issue
|
milestone.issues << issue
|
||||||
|
milestone.percent_complete.should == 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it { milestone.percent_complete.should == 0 }
|
it "should count closed issues" do
|
||||||
|
issue.update_attributes(closed: true)
|
||||||
|
milestone.issues << issue
|
||||||
|
milestone.percent_complete.should == 100
|
||||||
|
end
|
||||||
|
|
||||||
it do
|
it "should recover from dividing by zero" do
|
||||||
issue.update_attributes closed: true
|
milestone.issues.should_receive(:count).and_return(0)
|
||||||
milestone.percent_complete.should == 100
|
milestone.percent_complete.should == 100
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe :expires_at do
|
describe "#expires_at" do
|
||||||
before do
|
it "should be nil when due_date is unset" do
|
||||||
milestone.update_attributes due_date: Date.today + 1.day
|
milestone.update_attributes(due_date: nil)
|
||||||
|
milestone.expires_at.should be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it { milestone.expires_at.should_not be_nil }
|
it "should not be nil when due_date is set" do
|
||||||
|
milestone.update_attributes(due_date: Date.tomorrow)
|
||||||
|
milestone.expires_at.should be_present
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,20 +2,26 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe "Admin::Projects" do
|
describe "Admin::Projects" do
|
||||||
describe "GET /admin/projects" do
|
describe "GET /admin/projects" do
|
||||||
it { admin_projects_path.should be_allowed_for :admin }
|
subject { admin_projects_path }
|
||||||
it { admin_projects_path.should be_denied_for :user }
|
|
||||||
it { admin_projects_path.should be_denied_for :visitor }
|
it { should be_allowed_for :admin }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /admin/users" do
|
describe "GET /admin/users" do
|
||||||
it { admin_users_path.should be_allowed_for :admin }
|
subject { admin_users_path }
|
||||||
it { admin_users_path.should be_denied_for :user }
|
|
||||||
it { admin_users_path.should be_denied_for :visitor }
|
it { should be_allowed_for :admin }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /admin/hooks" do
|
describe "GET /admin/hooks" do
|
||||||
it { admin_hooks_path.should be_allowed_for :admin }
|
subject { admin_hooks_path }
|
||||||
it { admin_hooks_path.should be_denied_for :user }
|
|
||||||
it { admin_hooks_path.should be_denied_for :visitor }
|
it { should be_allowed_for :admin }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Gitlab::API do
|
describe Gitlab::API do
|
||||||
|
include ApiHelpers
|
||||||
|
|
||||||
let(:user) { Factory :user }
|
let(:user) { Factory :user }
|
||||||
let!(:project) { Factory :project, owner: user }
|
let!(:project) { Factory :project, owner: user }
|
||||||
let!(:issue) { Factory :issue, author: user, assignee: user, project: project }
|
let!(:issue) { Factory :issue, author: user, assignee: user, project: project }
|
||||||
|
@ -8,13 +10,13 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /issues" do
|
describe "GET /issues" do
|
||||||
it "should return authentication error" do
|
it "should return authentication error" do
|
||||||
get "#{api_prefix}/issues"
|
get api("/issues")
|
||||||
response.status.should == 401
|
response.status.should == 401
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "authenticated GET /issues" do
|
describe "authenticated GET /issues" do
|
||||||
it "should return an array of issues" do
|
it "should return an array of issues" do
|
||||||
get "#{api_prefix}/issues?private_token=#{user.private_token}"
|
get api("/issues", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response.should be_an Array
|
json_response.should be_an Array
|
||||||
json_response.first['title'].should == issue.title
|
json_response.first['title'].should == issue.title
|
||||||
|
@ -24,7 +26,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /projects/:id/issues" do
|
describe "GET /projects/:id/issues" do
|
||||||
it "should return project issues" do
|
it "should return project issues" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/issues?private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/issues", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response.should be_an Array
|
json_response.should be_an Array
|
||||||
json_response.first['title'].should == issue.title
|
json_response.first['title'].should == issue.title
|
||||||
|
@ -33,7 +35,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /projects/:id/issues/:issue_id" do
|
describe "GET /projects/:id/issues/:issue_id" do
|
||||||
it "should return a project issue by id" do
|
it "should return a project issue by id" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/issues/#{issue.id}", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response['title'].should == issue.title
|
json_response['title'].should == issue.title
|
||||||
end
|
end
|
||||||
|
@ -41,7 +43,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "POST /projects/:id/issues" do
|
describe "POST /projects/:id/issues" do
|
||||||
it "should create a new project issue" do
|
it "should create a new project issue" do
|
||||||
post "#{api_prefix}/projects/#{project.code}/issues?private_token=#{user.private_token}",
|
post api("/projects/#{project.code}/issues", user),
|
||||||
title: 'new issue', labels: 'label, label2'
|
title: 'new issue', labels: 'label, label2'
|
||||||
response.status.should == 201
|
response.status.should == 201
|
||||||
json_response['title'].should == 'new issue'
|
json_response['title'].should == 'new issue'
|
||||||
|
@ -52,7 +54,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "PUT /projects/:id/issues/:issue_id" do
|
describe "PUT /projects/:id/issues/:issue_id" do
|
||||||
it "should update a project issue" do
|
it "should update a project issue" do
|
||||||
put "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}",
|
put api("/projects/#{project.code}/issues/#{issue.id}", user),
|
||||||
title: 'updated title', labels: 'label2', closed: 1
|
title: 'updated title', labels: 'label2', closed: 1
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response['title'].should == 'updated title'
|
json_response['title'].should == 'updated title'
|
||||||
|
@ -64,7 +66,7 @@ describe Gitlab::API do
|
||||||
describe "DELETE /projects/:id/issues/:issue_id" do
|
describe "DELETE /projects/:id/issues/:issue_id" do
|
||||||
it "should delete a project issue" do
|
it "should delete a project issue" do
|
||||||
expect {
|
expect {
|
||||||
delete "#{api_prefix}/projects/#{project.code}/issues/#{issue.id}?private_token=#{user.private_token}"
|
delete api("/projects/#{project.code}/issues/#{issue.id}", user)
|
||||||
}.to change { Issue.count }.by(-1)
|
}.to change { Issue.count }.by(-1)
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -1,6 +1,8 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Gitlab::API do
|
describe Gitlab::API do
|
||||||
|
include ApiHelpers
|
||||||
|
|
||||||
let(:user) { Factory :user }
|
let(:user) { Factory :user }
|
||||||
let!(:project) { Factory :project, owner: user }
|
let!(:project) { Factory :project, owner: user }
|
||||||
let!(:snippet) { Factory :snippet, author: user, project: project, title: 'example' }
|
let!(:snippet) { Factory :snippet, author: user, project: project, title: 'example' }
|
||||||
|
@ -8,13 +10,13 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /projects" do
|
describe "GET /projects" do
|
||||||
it "should return authentication error" do
|
it "should return authentication error" do
|
||||||
get "#{api_prefix}/projects"
|
get api("/projects")
|
||||||
response.status.should == 401
|
response.status.should == 401
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "authenticated GET /projects" do
|
describe "authenticated GET /projects" do
|
||||||
it "should return an array of projects" do
|
it "should return an array of projects" do
|
||||||
get "#{api_prefix}/projects?private_token=#{user.private_token}"
|
get api("/projects", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response.should be_an Array
|
json_response.should be_an Array
|
||||||
json_response.first['name'].should == project.name
|
json_response.first['name'].should == project.name
|
||||||
|
@ -25,20 +27,20 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /projects/:id" do
|
describe "GET /projects/:id" do
|
||||||
it "should return a project by id" do
|
it "should return a project by id" do
|
||||||
get "#{api_prefix}/projects/#{project.id}?private_token=#{user.private_token}"
|
get api("/projects/#{project.id}", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response['name'].should == project.name
|
json_response['name'].should == project.name
|
||||||
json_response['owner']['email'].should == user.email
|
json_response['owner']['email'].should == user.email
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return a project by code name" do
|
it "should return a project by code name" do
|
||||||
get "#{api_prefix}/projects/#{project.code}?private_token=#{user.private_token}"
|
get api("/projects/#{project.code}", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response['name'].should == project.name
|
json_response['name'].should == project.name
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return a 404 error if not found" do
|
it "should return a 404 error if not found" do
|
||||||
get "#{api_prefix}/projects/42?private_token=#{user.private_token}"
|
get api("/projects/42", user)
|
||||||
response.status.should == 404
|
response.status.should == 404
|
||||||
json_response['message'].should == '404 Not found'
|
json_response['message'].should == '404 Not found'
|
||||||
end
|
end
|
||||||
|
@ -46,7 +48,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /projects/:id/repository/branches" do
|
describe "GET /projects/:id/repository/branches" do
|
||||||
it "should return an array of project branches" do
|
it "should return an array of project branches" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/repository/branches?private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/repository/branches", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response.should be_an Array
|
json_response.should be_an Array
|
||||||
json_response.first['name'].should == project.repo.heads.sort_by(&:name).first.name
|
json_response.first['name'].should == project.repo.heads.sort_by(&:name).first.name
|
||||||
|
@ -55,7 +57,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /projects/:id/repository/branches/:branch" do
|
describe "GET /projects/:id/repository/branches/:branch" do
|
||||||
it "should return the branch information for a single branch" do
|
it "should return the branch information for a single branch" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/repository/branches/new_design?private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/repository/branches/new_design", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
|
|
||||||
json_response['name'].should == 'new_design'
|
json_response['name'].should == 'new_design'
|
||||||
|
@ -65,7 +67,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /projects/:id/repository/tags" do
|
describe "GET /projects/:id/repository/tags" do
|
||||||
it "should return an array of project tags" do
|
it "should return an array of project tags" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/repository/tags?private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/repository/tags", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response.should be_an Array
|
json_response.should be_an Array
|
||||||
json_response.first['name'].should == project.repo.tags.sort_by(&:name).reverse.first.name
|
json_response.first['name'].should == project.repo.tags.sort_by(&:name).reverse.first.name
|
||||||
|
@ -74,7 +76,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /projects/:id/snippets/:snippet_id" do
|
describe "GET /projects/:id/snippets/:snippet_id" do
|
||||||
it "should return a project snippet" do
|
it "should return a project snippet" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/snippets/#{snippet.id}", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response['title'].should == snippet.title
|
json_response['title'].should == snippet.title
|
||||||
end
|
end
|
||||||
|
@ -82,7 +84,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "POST /projects/:id/snippets" do
|
describe "POST /projects/:id/snippets" do
|
||||||
it "should create a new project snippet" do
|
it "should create a new project snippet" do
|
||||||
post "#{api_prefix}/projects/#{project.code}/snippets?private_token=#{user.private_token}",
|
post api("/projects/#{project.code}/snippets", user),
|
||||||
title: 'api test', file_name: 'sample.rb', code: 'test'
|
title: 'api test', file_name: 'sample.rb', code: 'test'
|
||||||
response.status.should == 201
|
response.status.should == 201
|
||||||
json_response['title'].should == 'api test'
|
json_response['title'].should == 'api test'
|
||||||
|
@ -91,7 +93,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "PUT /projects/:id/snippets" do
|
describe "PUT /projects/:id/snippets" do
|
||||||
it "should update an existing project snippet" do
|
it "should update an existing project snippet" do
|
||||||
put "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}",
|
put api("/projects/#{project.code}/snippets/#{snippet.id}", user),
|
||||||
code: 'updated code'
|
code: 'updated code'
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response['title'].should == 'example'
|
json_response['title'].should == 'example'
|
||||||
|
@ -102,34 +104,31 @@ describe Gitlab::API do
|
||||||
describe "DELETE /projects/:id/snippets/:snippet_id" do
|
describe "DELETE /projects/:id/snippets/:snippet_id" do
|
||||||
it "should delete existing project snippet" do
|
it "should delete existing project snippet" do
|
||||||
expect {
|
expect {
|
||||||
delete "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}"
|
delete api("/projects/#{project.code}/snippets/#{snippet.id}", user)
|
||||||
}.to change { Snippet.count }.by(-1)
|
}.to change { Snippet.count }.by(-1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /projects/:id/snippets/:snippet_id/raw" do
|
describe "GET /projects/:id/snippets/:snippet_id/raw" do
|
||||||
it "should get a raw project snippet" do
|
it "should get a raw project snippet" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}/raw?private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/snippets/#{snippet.id}/raw", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /projects/:id/:sha/blob" do
|
describe "GET /projects/:id/:sha/blob" do
|
||||||
it "should get the raw file contents" do
|
it "should get the raw file contents" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/repository/commits/master/blob?filepath=README.md&private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/repository/commits/master/blob?filepath=README.md", user)
|
||||||
|
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return 404 for invalid branch_name" do
|
it "should return 404 for invalid branch_name" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/repository/commits/invalid_branch_name/blob?filepath=README.md&private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/repository/commits/invalid_branch_name/blob?filepath=README.md", user)
|
||||||
|
|
||||||
response.status.should == 404
|
response.status.should == 404
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return 404 for invalid file" do
|
it "should return 404 for invalid file" do
|
||||||
get "#{api_prefix}/projects/#{project.code}/repository/commits/master/blob?filepath=README.invalid&private_token=#{user.private_token}"
|
get api("/projects/#{project.code}/repository/commits/master/blob?filepath=README.invalid", user)
|
||||||
|
|
||||||
response.status.should == 404
|
response.status.should == 404
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -1,17 +1,19 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Gitlab::API do
|
describe Gitlab::API do
|
||||||
|
include ApiHelpers
|
||||||
|
|
||||||
let(:user) { Factory :user }
|
let(:user) { Factory :user }
|
||||||
|
|
||||||
describe "GET /users" do
|
describe "GET /users" do
|
||||||
it "should return authentication error" do
|
it "should return authentication error" do
|
||||||
get "#{api_prefix}/users"
|
get api("/users")
|
||||||
response.status.should == 401
|
response.status.should == 401
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "authenticated GET /users" do
|
describe "authenticated GET /users" do
|
||||||
it "should return an array of users" do
|
it "should return an array of users" do
|
||||||
get "#{api_prefix}/users?private_token=#{user.private_token}"
|
get api("/users", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response.should be_an Array
|
json_response.should be_an Array
|
||||||
json_response.first['email'].should == user.email
|
json_response.first['email'].should == user.email
|
||||||
|
@ -21,7 +23,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /users/:id" do
|
describe "GET /users/:id" do
|
||||||
it "should return a user by id" do
|
it "should return a user by id" do
|
||||||
get "#{api_prefix}/users/#{user.id}?private_token=#{user.private_token}"
|
get api("/users/#{user.id}", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response['email'].should == user.email
|
json_response['email'].should == user.email
|
||||||
end
|
end
|
||||||
|
@ -29,7 +31,7 @@ describe Gitlab::API do
|
||||||
|
|
||||||
describe "GET /user" do
|
describe "GET /user" do
|
||||||
it "should return current user" do
|
it "should return current user" do
|
||||||
get "#{api_prefix}/user?private_token=#{user.private_token}"
|
get api("/user", user)
|
||||||
response.status.should == 200
|
response.status.should == 200
|
||||||
json_response['email'].should == user.email
|
json_response['email'].should == user.email
|
||||||
end
|
end
|
|
@ -11,24 +11,30 @@ describe "Users Security" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /keys" do
|
describe "GET /keys" do
|
||||||
it { keys_path.should be_allowed_for @u1 }
|
subject { keys_path }
|
||||||
it { keys_path.should be_allowed_for :admin }
|
|
||||||
it { keys_path.should be_allowed_for :user }
|
it { should be_allowed_for @u1 }
|
||||||
it { keys_path.should be_denied_for :visitor }
|
it { should be_allowed_for :admin }
|
||||||
|
it { should be_allowed_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /profile" do
|
describe "GET /profile" do
|
||||||
it { profile_path.should be_allowed_for @u1 }
|
subject { profile_path }
|
||||||
it { profile_path.should be_allowed_for :admin }
|
|
||||||
it { profile_path.should be_allowed_for :user }
|
it { should be_allowed_for @u1 }
|
||||||
it { profile_path.should be_denied_for :visitor }
|
it { should be_allowed_for :admin }
|
||||||
|
it { should be_allowed_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /profile/password" do
|
describe "GET /profile/password" do
|
||||||
it { profile_password_path.should be_allowed_for @u1 }
|
subject { profile_password_path }
|
||||||
it { profile_password_path.should be_allowed_for :admin }
|
|
||||||
it { profile_password_path.should be_allowed_for :user }
|
it { should be_allowed_for @u1 }
|
||||||
it { profile_password_path.should be_denied_for :visitor }
|
it { should be_allowed_for :admin }
|
||||||
|
it { should be_allowed_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,64 +26,76 @@ describe "Application access" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code" do
|
describe "GET /project_code" do
|
||||||
it { project_path(@project).should be_allowed_for @u1 }
|
subject { project_path(@project) }
|
||||||
it { project_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { project_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { project_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { project_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { project_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/master/tree" do
|
describe "GET /project_code/master/tree" do
|
||||||
it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u1 }
|
subject { tree_project_ref_path(@project, @project.root_ref) }
|
||||||
it { tree_project_ref_path(@project, @project.root_ref).should be_allowed_for @u3 }
|
|
||||||
it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { tree_project_ref_path(@project, @project.root_ref).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/commits" do
|
describe "GET /project_code/commits" do
|
||||||
it { project_commits_path(@project).should be_allowed_for @u1 }
|
subject { project_commits_path(@project) }
|
||||||
it { project_commits_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { project_commits_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { project_commits_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { project_commits_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { project_commits_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/commit" do
|
describe "GET /project_code/commit" do
|
||||||
it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u1 }
|
subject { project_commit_path(@project, @project.commit.id) }
|
||||||
it { project_commit_path(@project, @project.commit.id).should be_allowed_for @u3 }
|
|
||||||
it { project_commit_path(@project, @project.commit.id).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { project_commit_path(@project, @project.commit.id).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { project_commit_path(@project, @project.commit.id).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { project_commit_path(@project, @project.commit.id).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/team" do
|
describe "GET /project_code/team" do
|
||||||
it { team_project_path(@project).should be_allowed_for @u1 }
|
subject { team_project_path(@project) }
|
||||||
it { team_project_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { team_project_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { team_project_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { team_project_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { team_project_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/wall" do
|
describe "GET /project_code/wall" do
|
||||||
it { wall_project_path(@project).should be_allowed_for @u1 }
|
subject { wall_project_path(@project) }
|
||||||
it { wall_project_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { wall_project_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { wall_project_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { wall_project_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { wall_project_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/blob" do
|
describe "GET /project_code/blob" do
|
||||||
before do
|
before do
|
||||||
@commit = @project.commit
|
commit = @project.commit
|
||||||
@path = @commit.tree.contents.select { |i| i.is_a?(Grit::Blob)}.first.name
|
path = commit.tree.contents.select { |i| i.is_a?(Grit::Blob)}.first.name
|
||||||
@blob_path = blob_project_ref_path(@project, @commit.id, path: @path)
|
@blob_path = blob_project_ref_path(@project, commit.id, path: path)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { @blob_path.should be_allowed_for @u1 }
|
it { @blob_path.should be_allowed_for @u1 }
|
||||||
|
@ -95,93 +107,113 @@ describe "Application access" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/edit" do
|
describe "GET /project_code/edit" do
|
||||||
it { edit_project_path(@project).should be_allowed_for @u1 }
|
subject { edit_project_path(@project) }
|
||||||
it { edit_project_path(@project).should be_denied_for @u3 }
|
|
||||||
it { edit_project_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { edit_project_path(@project).should be_denied_for @u2 }
|
it { should be_denied_for @u3 }
|
||||||
it { edit_project_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { edit_project_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/deploy_keys" do
|
describe "GET /project_code/deploy_keys" do
|
||||||
it { project_deploy_keys_path(@project).should be_allowed_for @u1 }
|
subject { project_deploy_keys_path(@project) }
|
||||||
it { project_deploy_keys_path(@project).should be_denied_for @u3 }
|
|
||||||
it { project_deploy_keys_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { project_deploy_keys_path(@project).should be_denied_for @u2 }
|
it { should be_denied_for @u3 }
|
||||||
it { project_deploy_keys_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { project_deploy_keys_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/issues" do
|
describe "GET /project_code/issues" do
|
||||||
it { project_issues_path(@project).should be_allowed_for @u1 }
|
subject { project_issues_path(@project) }
|
||||||
it { project_issues_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { project_issues_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { project_issues_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { project_issues_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { project_issues_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/snippets" do
|
describe "GET /project_code/snippets" do
|
||||||
it { project_snippets_path(@project).should be_allowed_for @u1 }
|
subject { project_snippets_path(@project) }
|
||||||
it { project_snippets_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { project_snippets_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { project_snippets_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { project_snippets_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { project_snippets_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/merge_requests" do
|
describe "GET /project_code/merge_requests" do
|
||||||
it { project_merge_requests_path(@project).should be_allowed_for @u1 }
|
subject { project_merge_requests_path(@project) }
|
||||||
it { project_merge_requests_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { project_merge_requests_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { project_merge_requests_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { project_merge_requests_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { project_merge_requests_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/repository" do
|
describe "GET /project_code/repository" do
|
||||||
it { project_repository_path(@project).should be_allowed_for @u1 }
|
subject { project_repository_path(@project) }
|
||||||
it { project_repository_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { project_repository_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { project_repository_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { project_repository_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { project_repository_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/repository/branches" do
|
describe "GET /project_code/repository/branches" do
|
||||||
it { branches_project_repository_path(@project).should be_allowed_for @u1 }
|
subject { branches_project_repository_path(@project) }
|
||||||
it { branches_project_repository_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { branches_project_repository_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { branches_project_repository_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { branches_project_repository_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { branches_project_repository_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/repository/tags" do
|
describe "GET /project_code/repository/tags" do
|
||||||
it { tags_project_repository_path(@project).should be_allowed_for @u1 }
|
subject { tags_project_repository_path(@project) }
|
||||||
it { tags_project_repository_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { tags_project_repository_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { tags_project_repository_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { tags_project_repository_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { tags_project_repository_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/hooks" do
|
describe "GET /project_code/hooks" do
|
||||||
it { project_hooks_path(@project).should be_allowed_for @u1 }
|
subject { project_hooks_path(@project) }
|
||||||
it { project_hooks_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { project_hooks_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { project_hooks_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { project_hooks_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { project_hooks_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /project_code/files" do
|
describe "GET /project_code/files" do
|
||||||
it { files_project_path(@project).should be_allowed_for @u1 }
|
subject { files_project_path(@project) }
|
||||||
it { files_project_path(@project).should be_allowed_for @u3 }
|
|
||||||
it { files_project_path(@project).should be_denied_for :admin }
|
it { should be_allowed_for @u1 }
|
||||||
it { files_project_path(@project).should be_denied_for @u2 }
|
it { should be_allowed_for @u3 }
|
||||||
it { files_project_path(@project).should be_denied_for :user }
|
it { should be_denied_for :admin }
|
||||||
it { files_project_path(@project).should be_denied_for :visitor }
|
it { should be_denied_for @u2 }
|
||||||
|
it { should be_denied_for :user }
|
||||||
|
it { should be_denied_for :visitor }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,10 +9,8 @@ require File.expand_path("../../config/environment", __FILE__)
|
||||||
require 'rspec/rails'
|
require 'rspec/rails'
|
||||||
require 'capybara/rails'
|
require 'capybara/rails'
|
||||||
require 'capybara/rspec'
|
require 'capybara/rspec'
|
||||||
require 'capybara/dsl'
|
|
||||||
require 'webmock/rspec'
|
require 'webmock/rspec'
|
||||||
require 'factories'
|
require 'factories'
|
||||||
require 'monkeypatch'
|
|
||||||
require 'email_spec'
|
require 'email_spec'
|
||||||
require 'headless'
|
require 'headless'
|
||||||
|
|
||||||
|
@ -23,10 +21,12 @@ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
|
||||||
# Use capybara-webkit
|
# Use capybara-webkit
|
||||||
Capybara.javascript_driver = :webkit
|
Capybara.javascript_driver = :webkit
|
||||||
|
|
||||||
|
WebMock.disable_net_connect!(allow_localhost: true)
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.mock_with :rspec
|
config.mock_with :rspec
|
||||||
|
|
||||||
config.include LoginMacros
|
config.include LoginHelpers, type: :request
|
||||||
|
|
||||||
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
||||||
# examples within a transaction, remove the following line or assign false
|
# examples within a transaction, remove the following line or assign false
|
||||||
|
@ -38,35 +38,9 @@ RSpec.configure do |config|
|
||||||
headless.start
|
headless.start
|
||||||
end
|
end
|
||||||
|
|
||||||
config.before :each, type: :integration do
|
|
||||||
DeviseSessionMock.disable
|
|
||||||
end
|
|
||||||
|
|
||||||
config.before do
|
config.before do
|
||||||
if example.metadata[:js]
|
|
||||||
DatabaseCleaner.strategy = :truncation
|
|
||||||
Capybara::Selenium::Driver::DEFAULT_OPTIONS[:resynchronize] = true
|
|
||||||
else
|
|
||||||
DatabaseCleaner.strategy = :transaction
|
|
||||||
end
|
|
||||||
|
|
||||||
DatabaseCleaner.start
|
|
||||||
|
|
||||||
WebMock.disable_net_connect!(allow_localhost: true)
|
|
||||||
|
|
||||||
# !!! Observers disabled by default in tests
|
# !!! Observers disabled by default in tests
|
||||||
#
|
ActiveRecord::Base.observers.disable(:all)
|
||||||
# Use next code to enable observers
|
# ActiveRecord::Base.observers.enable(:all)
|
||||||
# before(:each) { ActiveRecord::Base.observers.enable(:all) }
|
|
||||||
#
|
|
||||||
ActiveRecord::Base.observers.disable :all
|
|
||||||
end
|
end
|
||||||
|
|
||||||
config.after do
|
|
||||||
DatabaseCleaner.clean
|
|
||||||
end
|
|
||||||
|
|
||||||
config.include RSpec::Rails::RequestExampleGroup, type: :request, example_group: {
|
|
||||||
file_path: /spec\/api/
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
def api_prefix
|
|
||||||
"/api/#{Gitlab::API::VERSION}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def json_response
|
|
||||||
JSON.parse(response.body)
|
|
||||||
end
|
|
34
spec/support/api_helpers.rb
Normal file
34
spec/support/api_helpers.rb
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
module ApiHelpers
|
||||||
|
# Public: Prepend a request path with the path to the API
|
||||||
|
#
|
||||||
|
# path - Path to append
|
||||||
|
# user - User object - If provided, automatically appends private_token query
|
||||||
|
# string for authenticated requests
|
||||||
|
#
|
||||||
|
# Examples
|
||||||
|
#
|
||||||
|
# >> api('/issues')
|
||||||
|
# => "/api/v2/issues"
|
||||||
|
#
|
||||||
|
# >> api('/issues', User.last)
|
||||||
|
# => "/api/v2/issues?private_token=..."
|
||||||
|
#
|
||||||
|
# >> api('/issues?foo=bar', User.last)
|
||||||
|
# => "/api/v2/issues?foo=bar&private_token=..."
|
||||||
|
#
|
||||||
|
# Returns the relative path to the requested API resource
|
||||||
|
def api(path, user = nil)
|
||||||
|
"/api/#{Gitlab::API::VERSION}#{path}" +
|
||||||
|
|
||||||
|
# Normalize query string
|
||||||
|
(path.index('?') ? '' : '?') +
|
||||||
|
|
||||||
|
# Append private_token if given a User object
|
||||||
|
(user.respond_to?(:private_token) ?
|
||||||
|
"&private_token=#{user.private_token}" : "")
|
||||||
|
end
|
||||||
|
|
||||||
|
def json_response
|
||||||
|
JSON.parse(response.body)
|
||||||
|
end
|
||||||
|
end
|
18
spec/support/db_cleaner.rb
Normal file
18
spec/support/db_cleaner.rb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
require 'database_cleaner'
|
||||||
|
|
||||||
|
RSpec.configure do |config|
|
||||||
|
config.before do
|
||||||
|
if example.metadata[:js]
|
||||||
|
DatabaseCleaner.strategy = :truncation
|
||||||
|
Capybara::Selenium::Driver::DEFAULT_OPTIONS[:resynchronize] = true
|
||||||
|
else
|
||||||
|
DatabaseCleaner.strategy = :transaction
|
||||||
|
end
|
||||||
|
|
||||||
|
DatabaseCleaner.start
|
||||||
|
end
|
||||||
|
|
||||||
|
config.after do
|
||||||
|
DatabaseCleaner.clean
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +0,0 @@
|
||||||
module JsPatch
|
|
||||||
def confirm_js_popup
|
|
||||||
page.evaluate_script("window.alert = function(msg) { return true; }")
|
|
||||||
page.evaluate_script("window.confirm = function(msg) { return true; }")
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,30 +0,0 @@
|
||||||
module LoginMacros
|
|
||||||
def login_as role
|
|
||||||
@user = User.create(email: "user#{User.count}@mail.com",
|
|
||||||
name: "John Smith",
|
|
||||||
password: "123456",
|
|
||||||
password_confirmation: "123456",
|
|
||||||
skype: 'user_skype')
|
|
||||||
|
|
||||||
if role == :admin
|
|
||||||
@user.admin = true
|
|
||||||
@user.save!
|
|
||||||
end
|
|
||||||
|
|
||||||
visit new_user_session_path
|
|
||||||
fill_in "user_email", with: @user.email
|
|
||||||
fill_in "user_password", with: "123456"
|
|
||||||
click_button "Sign in"
|
|
||||||
end
|
|
||||||
|
|
||||||
def login_with(user)
|
|
||||||
visit new_user_session_path
|
|
||||||
fill_in "user_email", with: user.email
|
|
||||||
fill_in "user_password", with: "123456"
|
|
||||||
click_button "Sign in"
|
|
||||||
end
|
|
||||||
|
|
||||||
def logout
|
|
||||||
click_link "Logout" rescue nil
|
|
||||||
end
|
|
||||||
end
|
|
23
spec/support/login_helpers.rb
Normal file
23
spec/support/login_helpers.rb
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
module LoginHelpers
|
||||||
|
# Internal: Create and log in as a user of the specified role
|
||||||
|
#
|
||||||
|
# role - User role (e.g., :admin, :user)
|
||||||
|
def login_as(role)
|
||||||
|
@user = Factory(role)
|
||||||
|
login_with(@user)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Internal: Login as the specified user
|
||||||
|
#
|
||||||
|
# user - User instance to login with
|
||||||
|
def login_with(user)
|
||||||
|
visit new_user_session_path
|
||||||
|
fill_in "user_email", with: user.email
|
||||||
|
fill_in "user_password", with: "123456"
|
||||||
|
click_button "Sign in"
|
||||||
|
end
|
||||||
|
|
||||||
|
def logout
|
||||||
|
click_link "Logout" rescue nil
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,16 +0,0 @@
|
||||||
shared_examples_for :project_side_pane do
|
|
||||||
subject { page }
|
|
||||||
it { should have_content((@project || project).name) }
|
|
||||||
it { should have_content("Commits") }
|
|
||||||
it { should have_content("Files") }
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples_for :tree_view do
|
|
||||||
subject { page }
|
|
||||||
|
|
||||||
it "should have Tree View of project" do
|
|
||||||
should have_content("app")
|
|
||||||
should have_content("History")
|
|
||||||
should have_content("Gemfile")
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue