This commit is contained in:
Dmitriy Zaporozhets 2011-10-21 20:04:41 +03:00
parent 3a2b273316
commit 6b030fd41d
83 changed files with 1089 additions and 136 deletions

View file

@ -35,6 +35,12 @@ Factory.add(:issue, Issue) do |obj|
obj.content = Faker::Lorem.sentences
end
Factory.add(:snippet, Snippet) do |obj|
obj.title = Faker::Lorem.sentence
obj.file_name = Faker::Lorem.sentence
obj.content = Faker::Lorem.sentences
end
Factory.add(:note, Note) do |obj|
obj.note = Faker::Lorem.sentence
end

View file

@ -38,5 +38,6 @@ end
# created_at :datetime
# updated_at :datetime
# closed :boolean default(FALSE), not null
# position :integer default(0)
#

View file

@ -0,0 +1,30 @@
require 'spec_helper'
describe Snippet do
describe "Associations" do
it { should belong_to(:project) }
it { should belong_to(:author) }
end
describe "Validation" do
it { should validate_presence_of(:title) }
it { should validate_presence_of(:author_id) }
it { should validate_presence_of(:project_id) }
it { should validate_presence_of(:file_name) }
it { should validate_presence_of(:content) }
end
end
# == Schema Information
#
# Table name: snippets
#
# id :integer not null, primary key
# title :string(255)
# content :text
# author_id :integer not null
# project_id :integer not null
# created_at :datetime
# updated_at :datetime
# file_name :string(255)
#

View file

@ -39,5 +39,8 @@ end
# name :string(255)
# admin :boolean default(FALSE), not null
# projects_limit :integer
# skype :string
# linkedin :string
# twitter :string
#

View file

@ -14,6 +14,22 @@ describe "Profile" do
it { page.should have_content(@user.email) }
end
describe "Profile update" do
before do
visit profile_path
fill_in "user_skype", :with => "testskype"
fill_in "user_linkedin", :with => "testlinkedin"
fill_in "user_twitter", :with => "testtwitter"
click_button "Save"
@user.reload
end
it { @user.skype.should == 'testskype' }
it { @user.linkedin.should == 'testlinkedin' }
it { @user.twitter.should == 'testtwitter' }
end
describe "Password update" do
before do
visit profile_password_path

View file

@ -82,12 +82,18 @@ describe "Projects" do
end
describe "GET /project_code/blob" do
it { blob_project_path(@project).should be_allowed_for @u1 }
it { blob_project_path(@project).should be_allowed_for @u3 }
it { blob_project_path(@project).should be_denied_for :admin }
it { blob_project_path(@project).should be_denied_for @u2 }
it { blob_project_path(@project).should be_denied_for :user }
it { blob_project_path(@project).should be_denied_for :visitor }
before do
@commit = @project.commit
@path = @commit.tree.contents.select { |i| i.is_a?(Grit::Blob)}.first.name
@blob_path = blob_project_path(@project, :commit_id => @commit.id, :path => @path)
end
it { @blob_path.should be_allowed_for @u1 }
it { @blob_path.should be_allowed_for @u3 }
it { @blob_path.should be_denied_for :admin }
it { @blob_path.should be_denied_for @u2 }
it { @blob_path.should be_denied_for :user }
it { @blob_path.should be_denied_for :visitor }
end
describe "GET /project_code/edit" do
@ -107,5 +113,14 @@ describe "Projects" do
it { project_issues_path(@project).should be_denied_for :user }
it { project_issues_path(@project).should be_denied_for :visitor }
end
describe "GET /project_code/snippets" do
it { project_snippets_path(@project).should be_allowed_for @u1 }
it { project_snippets_path(@project).should be_allowed_for @u3 }
it { project_snippets_path(@project).should be_denied_for :admin }
it { project_snippets_path(@project).should be_denied_for @u2 }
it { project_snippets_path(@project).should be_denied_for :user }
it { project_snippets_path(@project).should be_denied_for :visitor }
end
end
end

View file

@ -72,7 +72,10 @@ describe "Projects" do
current_path.should == project_path(@project)
end
it_behaves_like :tree_view
it "should beahave like dashboard" do
page.should have_content("History")
end
end
describe "GET /projects/team" do
@ -134,8 +137,6 @@ describe "Projects" do
it "should show project" do
page.should have_content("Awesome")
end
it_behaves_like :tree_view
end
#describe "DELETE /projects/:id", :js => true do

View file

@ -0,0 +1,101 @@
require 'spec_helper'
describe "Snippets" do
let(:project) { Factory :project }
before do
login_as :user
project.add_access(@user, :read, :write)
end
describe "GET /snippets" do
before do
@snippet = Factory :snippet,
:author => @user,
:project => project
visit project_snippets_path(project)
end
subject { page }
it { should have_content(@snippet.title) }
it { should have_content(@snippet.project.name) }
it { should have_content(@snippet.author.name) }
describe "Destroy" do
before do
# admin access to remove snippet
@user.users_projects.destroy_all
project.add_access(@user, :read, :write, :admin)
visit project_snippets_path(project)
end
it "should remove entry" do
expect {
click_link "destroy_snippet_#{@snippet.id}"
}.to change { Snippet.count }.by(-1)
end
end
end
describe "New snippet" do
before do
visit project_snippets_path(project)
click_link "New Snippet"
end
it "should open new snippet popup" do
page.current_path.should == new_project_snippet_path(project)
end
describe "fill in" do
before do
fill_in "snippet_title", :with => "login function"
fill_in "snippet_file_name", :with => "test.rb"
fill_in "snippet_content", :with => "def login; end"
end
it { expect { click_button "Save" }.to change {Snippet.count}.by(1) }
it "should add new snippet to table" do
click_button "Save"
page.current_path.should == project_snippet_path(project, Snippet.last)
page.should have_content "login function"
page.should have_content "test.rb"
end
end
end
describe "Edit snippet" do
before do
@snippet = Factory :snippet,
:author => @user,
:project => project
visit project_snippets_path(project)
click_link "Edit"
end
it "should open edit page" do
page.current_path.should == edit_project_snippet_path(project, @snippet)
end
describe "fill in" do
before do
fill_in "snippet_title", :with => "login function"
fill_in "snippet_file_name", :with => "test.rb"
fill_in "snippet_content", :with => "def login; end"
end
it { expect { click_button "Save" }.to_not change {Snippet.count} }
it "should update snippet fields" do
click_button "Save"
page.current_path.should == project_snippet_path(project, @snippet)
page.should have_content "login function"
page.should have_content "test.rb"
end
end
end
end

View file

@ -7,6 +7,15 @@ describe "TeamMembers" do
@project.add_access(@user, :read, :admin)
end
describe "View profile" do
it "should be available" do
visit(team_project_path(@project))
find(:xpath, "//table[@id='team-table']//a[1]").click
page.should have_content @user.skype
page.should_not have_content 'Twitter'
end
end
describe "New Team member", :js => true do
before do
@user_1 = Factory :user

View file

@ -7,10 +7,10 @@ describe "Users Security" do
end
describe "GET /login" do
it { new_user_session_path.should be_denied_for @u1 }
it { new_user_session_path.should be_denied_for :admin }
it { new_user_session_path.should be_denied_for :user }
it { new_user_session_path.should be_allowed_for :visitor }
#it { new_user_session_path.should be_denied_for @u1 }
#it { new_user_session_path.should be_denied_for :admin }
#it { new_user_session_path.should be_denied_for :user }
it { new_user_session_path.should_not be_404_for :visitor }
end
describe "GET /keys" do

View file

@ -3,7 +3,8 @@ module LoginMacros
@user = User.create(:email => "user#{User.count}@mail.com",
:name => "John Smith",
:password => "123456",
:password_confirmation => "123456")
:password_confirmation => "123456",
:skype => 'user_skype')
if role == :admin
@user.admin = true

View file

@ -21,17 +21,30 @@ RSpec::Matchers.define :be_denied_for do |user|
end
end
RSpec::Matchers.define :be_404_for do |user|
match do |url|
include UrlAccess
url_404?(user, url)
end
end
module UrlAccess
def url_allowed?(user, url)
emulate_user(user)
visit url
result = (current_path == url)
(page.status_code != 404 && current_path != new_user_session_path)
end
def url_denied?(user, url)
emulate_user(user)
visit url
result = (current_path != url)
(page.status_code == 404 || current_path == new_user_session_path)
end
def url_404?(user, url)
emulate_user(user)
visit url
page.status_code == 404
end
def emulate_user(user)