alphasights-integrity 0.1.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +13 -0
- data/CHANGES +48 -0
- data/README.md +82 -0
- data/Rakefile +58 -0
- data/bin/integrity +4 -0
- data/config/config.sample.ru +21 -0
- data/config/config.sample.yml +41 -0
- data/config/heroku/.gems +1 -0
- data/config/heroku/Rakefile +6 -0
- data/config/heroku/config.ru +7 -0
- data/config/heroku/integrity-config.rb +14 -0
- data/config/thin.sample.yml +13 -0
- data/integrity.gemspec +137 -0
- data/lib/integrity.rb +77 -0
- data/lib/integrity/app.rb +138 -0
- data/lib/integrity/author.rb +39 -0
- data/lib/integrity/build.rb +52 -0
- data/lib/integrity/commit.rb +61 -0
- data/lib/integrity/core_ext/object.rb +6 -0
- data/lib/integrity/helpers.rb +16 -0
- data/lib/integrity/helpers/authorization.rb +33 -0
- data/lib/integrity/helpers/breadcrumbs.rb +20 -0
- data/lib/integrity/helpers/gravatar.rb +16 -0
- data/lib/integrity/helpers/pretty_output.rb +45 -0
- data/lib/integrity/helpers/rendering.rb +49 -0
- data/lib/integrity/helpers/resources.rb +19 -0
- data/lib/integrity/helpers/urls.rb +59 -0
- data/lib/integrity/installer.rb +138 -0
- data/lib/integrity/migrations.rb +153 -0
- data/lib/integrity/notifier.rb +44 -0
- data/lib/integrity/notifier/base.rb +74 -0
- data/lib/integrity/notifier/test.rb +52 -0
- data/lib/integrity/notifier/test/fixtures.rb +108 -0
- data/lib/integrity/notifier/test/hpricot_matcher.rb +38 -0
- data/lib/integrity/project.rb +94 -0
- data/lib/integrity/project/notifiers.rb +31 -0
- data/lib/integrity/project/push.rb +43 -0
- data/lib/integrity/project_builder.rb +56 -0
- data/lib/integrity/scm.rb +19 -0
- data/lib/integrity/scm/git.rb +84 -0
- data/lib/integrity/scm/git/uri.rb +57 -0
- data/public/buttons.css +82 -0
- data/public/reset.css +7 -0
- data/public/spinner.gif +0 -0
- data/test/acceptance/api_test.rb +97 -0
- data/test/acceptance/browse_project_builds_test.rb +65 -0
- data/test/acceptance/browse_project_test.rb +99 -0
- data/test/acceptance/build_notifications_test.rb +114 -0
- data/test/acceptance/create_project_test.rb +97 -0
- data/test/acceptance/delete_project_test.rb +53 -0
- data/test/acceptance/edit_project_test.rb +117 -0
- data/test/acceptance/error_page_test.rb +21 -0
- data/test/acceptance/installer_test.rb +81 -0
- data/test/acceptance/manual_build_project_test.rb +82 -0
- data/test/acceptance/not_found_page_test.rb +29 -0
- data/test/acceptance/project_syndication_test.rb +30 -0
- data/test/acceptance/stylesheet_test.rb +26 -0
- data/test/acceptance/unauthorized_page_test.rb +20 -0
- data/test/helpers.rb +75 -0
- data/test/helpers/acceptance.rb +82 -0
- data/test/helpers/acceptance/email_notifier.rb +52 -0
- data/test/helpers/acceptance/git_helper.rb +99 -0
- data/test/helpers/acceptance/notifier_helper.rb +47 -0
- data/test/helpers/acceptance/textfile_notifier.rb +26 -0
- data/test/helpers/expectations.rb +4 -0
- data/test/helpers/expectations/be_a.rb +23 -0
- data/test/helpers/expectations/change.rb +90 -0
- data/test/helpers/expectations/have.rb +105 -0
- data/test/helpers/expectations/predicates.rb +37 -0
- data/test/helpers/initial_migration_fixture.sql +44 -0
- data/test/unit/build_test.rb +72 -0
- data/test/unit/commit_test.rb +66 -0
- data/test/unit/helpers_test.rb +103 -0
- data/test/unit/integrity_test.rb +35 -0
- data/test/unit/migrations_test.rb +57 -0
- data/test/unit/notifier/base_test.rb +43 -0
- data/test/unit/notifier_test.rb +96 -0
- data/test/unit/project_builder_test.rb +118 -0
- data/test/unit/project_test.rb +344 -0
- data/test/unit/scm_test.rb +54 -0
- data/views/_commit_info.haml +30 -0
- data/views/build.haml +2 -0
- data/views/error.haml +37 -0
- data/views/home.haml +22 -0
- data/views/integrity.sass +424 -0
- data/views/layout.haml +29 -0
- data/views/new.haml +50 -0
- data/views/not_found.haml +31 -0
- data/views/notifier.haml +7 -0
- data/views/project.builder +21 -0
- data/views/project.haml +31 -0
- data/views/unauthorized.haml +38 -0
- metadata +324 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../helpers/acceptance"
|
2
|
+
|
3
|
+
class BrowseProjectBuildsTest < Test::Unit::AcceptanceTestCase
|
4
|
+
story <<-EOS
|
5
|
+
As a user,
|
6
|
+
I want to browse the builds of a project in Integrity
|
7
|
+
So I can see the history of a project
|
8
|
+
EOS
|
9
|
+
|
10
|
+
scenario "a project with no builds should say so in a friendly manner" do
|
11
|
+
Project.gen(:integrity, :public => true, :commits => [])
|
12
|
+
|
13
|
+
visit "/integrity"
|
14
|
+
|
15
|
+
assert_have_no_tag("#last_build")
|
16
|
+
assert_have_no_tag("#previous_builds")
|
17
|
+
assert_contain("No builds for this project, buddy")
|
18
|
+
end
|
19
|
+
|
20
|
+
scenario "a user can see the last build and the list of previous builds on a project page" do
|
21
|
+
Project.gen(:integrity, :public => true, :commits => \
|
22
|
+
3.of { Commit.gen(:successful) } +
|
23
|
+
2.of { Commit.gen(:failed) } +
|
24
|
+
2.of { Commit.gen(:pending) })
|
25
|
+
|
26
|
+
visit "/integrity"
|
27
|
+
|
28
|
+
assert_have_tag("#last_build")
|
29
|
+
|
30
|
+
within("ul#previous_builds") do
|
31
|
+
assert_have_tag("li.pending", :count => 2)
|
32
|
+
assert_have_tag("li.failed", :count => 2)
|
33
|
+
assert_have_tag("li.success", :count => 2)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
scenario "a user can see details about the last build on the project page" do
|
38
|
+
commit = Commit.gen(:successful, :identifier => "7fee3f0014b529e2b76d591a8085d76eab0ff923",
|
39
|
+
:author => "Nicolas Sanguinetti <contacto@nicolassanguinetti.info>",
|
40
|
+
:message => "No more pending tests :)",
|
41
|
+
:committed_at => Time.mktime(2008, 12, 15, 18))
|
42
|
+
commit.build.update_attributes(:output => "This is the build output")
|
43
|
+
Project.gen(:integrity, :public => true, :commits => [commit])
|
44
|
+
|
45
|
+
visit "/integrity"
|
46
|
+
|
47
|
+
assert_have_tag("h1", :content => "Built 7fee3f0 successfully")
|
48
|
+
assert_have_tag("blockquote p", :content => "No more pending tests")
|
49
|
+
assert_have_tag("span.who", :content => "by: Nicolas Sanguinetti")
|
50
|
+
assert_have_tag("span.when", :content => "Dec 15th")
|
51
|
+
assert_have_tag("pre.output", :content => "This is the build output")
|
52
|
+
end
|
53
|
+
|
54
|
+
scenario "a user can browse to individual build pages" do
|
55
|
+
Project.gen(:integrity, :public => true, :commits => [
|
56
|
+
Commit.gen(:successful, :identifier => "7fee3f0014b529e2b76d591a8085d76eab0ff923"),
|
57
|
+
Commit.gen(:successful, :identifier => "87e673a83d273ecde121624a3fcfae57a04f2b76")
|
58
|
+
])
|
59
|
+
|
60
|
+
visit "/integrity"
|
61
|
+
click_link(/Build 87e673a/)
|
62
|
+
|
63
|
+
assert_have_tag("h1", :content => "Built 87e673a successfully")
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../helpers/acceptance"
|
2
|
+
|
3
|
+
class BrowsePublicProjectsTest < Test::Unit::AcceptanceTestCase
|
4
|
+
story <<-EOS
|
5
|
+
As a user,
|
6
|
+
I want to browse public projects on Integrity,
|
7
|
+
So I can follow the status of my favorite OSS projects
|
8
|
+
EOS
|
9
|
+
|
10
|
+
scenario "a user can see a public project listed on the home page" do
|
11
|
+
Project.gen(:integrity, :public => true)
|
12
|
+
Project.gen(:my_test_project, :public => true)
|
13
|
+
|
14
|
+
visit "/"
|
15
|
+
|
16
|
+
assert_have_tag("a", :content => "Integrity")
|
17
|
+
assert_have_tag("a", :content => "My Test Project")
|
18
|
+
end
|
19
|
+
|
20
|
+
scenario "a user can't see a private project listed on the home page" do
|
21
|
+
Project.gen(:my_test_project, :public => false)
|
22
|
+
Project.gen(:integrity, :public => true)
|
23
|
+
|
24
|
+
visit "/"
|
25
|
+
|
26
|
+
assert_have_no_tag("a", :content => "My Test Project")
|
27
|
+
assert_have_tag("a", :content => "Integrity")
|
28
|
+
end
|
29
|
+
|
30
|
+
scenario "a user can see the projects status on the home page" do
|
31
|
+
integrity = Project.gen(:integrity, :commits => 3.of { Commit.gen(:successful) })
|
32
|
+
test = Project.gen(:my_test_project, :commits => 2.of { Commit.gen(:failed) })
|
33
|
+
no_build = Project.gen(:public => true, :building => false)
|
34
|
+
building = Project.gen(:public => true, :building => true)
|
35
|
+
|
36
|
+
visit "/"
|
37
|
+
|
38
|
+
assert_contain("Built #{integrity.last_commit.short_identifier} successfully")
|
39
|
+
assert_contain("Built #{test.last_commit.short_identifier} and failed")
|
40
|
+
assert_contain("Never built yet")
|
41
|
+
assert_contain("Building!")
|
42
|
+
end
|
43
|
+
|
44
|
+
scenario "a user clicking through a link on the home page for a public project arrives at the project page" do
|
45
|
+
Project.gen(:my_test_project, :public => true)
|
46
|
+
|
47
|
+
visit "/"
|
48
|
+
click_link "My Test Project"
|
49
|
+
|
50
|
+
assert_have_tag("h1", :content => "My Test Project")
|
51
|
+
|
52
|
+
# He can then go back to the project listing
|
53
|
+
click_link "projects"
|
54
|
+
assert_have_tag("a", :content => "My Test Project")
|
55
|
+
end
|
56
|
+
|
57
|
+
scenario "a user gets a 404 when browsing to an unexisting project" do
|
58
|
+
visit "/who-are-you"
|
59
|
+
|
60
|
+
response_code.should == 404
|
61
|
+
assert_have_tag("h1", :content => "you seem a bit lost, sir")
|
62
|
+
end
|
63
|
+
|
64
|
+
scenario "a user browsing to the url of a private project gets a 401" do
|
65
|
+
Project.gen(:my_test_project, :public => false)
|
66
|
+
|
67
|
+
visit "/my-test-project"
|
68
|
+
|
69
|
+
response_code.should == 401
|
70
|
+
assert_have_tag("h1", :content => "know the password?")
|
71
|
+
end
|
72
|
+
|
73
|
+
scenario "an admin can browse to a private project just fine" do
|
74
|
+
Project.gen(:my_test_project, :public => false)
|
75
|
+
|
76
|
+
login_as "admin", "test"
|
77
|
+
|
78
|
+
visit "/"
|
79
|
+
click_link "My Test Project"
|
80
|
+
|
81
|
+
assert_have_tag("h1", :content => "My Test Project")
|
82
|
+
end
|
83
|
+
|
84
|
+
scenario "a user browsing to a public project with no build see a friendly message" do
|
85
|
+
project = Project.gen(:my_test_project, :public => true)
|
86
|
+
|
87
|
+
visit "/my-test-project"
|
88
|
+
assert_contain("No builds for this project, buddy")
|
89
|
+
end
|
90
|
+
|
91
|
+
scenario "an admin browsing to a private project with no build see a friendly message" do
|
92
|
+
Project.gen(:my_test_project, :public => false)
|
93
|
+
|
94
|
+
login_as "admin", "test"
|
95
|
+
visit "/my-test-project"
|
96
|
+
|
97
|
+
assert_contain("No builds for this project, buddy")
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../helpers/acceptance"
|
2
|
+
require "helpers/acceptance/notifier_helper"
|
3
|
+
require "helpers/acceptance/textfile_notifier"
|
4
|
+
require "helpers/acceptance/email_notifier"
|
5
|
+
|
6
|
+
class BuildNotificationsTest < Test::Unit::AcceptanceTestCase
|
7
|
+
include NotifierHelper
|
8
|
+
|
9
|
+
story <<-EOS
|
10
|
+
As an administrator,
|
11
|
+
I want to setup notifiers on my projects
|
12
|
+
So that I get alerts with every build
|
13
|
+
EOS
|
14
|
+
|
15
|
+
before(:each) do
|
16
|
+
# This is needed before any available notifier is unset
|
17
|
+
# in the global #before
|
18
|
+
Notifier.register(Integrity::Notifier::Textfile)
|
19
|
+
Notifier.register(Integrity::Notifier::Email)
|
20
|
+
end
|
21
|
+
|
22
|
+
scenario "an admin sets up a notifier and issue a manual build" do
|
23
|
+
git_repo(:my_test_project).add_successful_commit
|
24
|
+
Project.gen(:my_test_project, :uri => git_repo(:my_test_project).path)
|
25
|
+
rm_f "/tmp/textfile_notifications.txt"
|
26
|
+
|
27
|
+
login_as "admin", "test"
|
28
|
+
|
29
|
+
visit "/my-test-project"
|
30
|
+
|
31
|
+
click_link "Edit Project"
|
32
|
+
check "enabled_notifiers_textfile"
|
33
|
+
fill_in "File", :with => "/tmp/textfile_notifications.txt"
|
34
|
+
click_button "Update Project"
|
35
|
+
|
36
|
+
click_button "manual build"
|
37
|
+
|
38
|
+
notification = File.read("/tmp/textfile_notifications.txt")
|
39
|
+
notification.should =~ /=== Built #{git_repo(:my_test_project).short_head} successfully ===/
|
40
|
+
notification.should =~ /Build #{git_repo(:my_test_project).head} was successful/
|
41
|
+
notification.should =~
|
42
|
+
%r(http://www.example.com/my-test-project/commits/#{git_repo(:my_test_project).head})
|
43
|
+
notification.should =~ /Commit Author: John Doe/
|
44
|
+
notification.should =~ /Commit Date: (.+)/
|
45
|
+
notification.should =~ /Commit Message: This commit will work/
|
46
|
+
notification.should =~ /Build Output:\n\nRunning tests...\n/
|
47
|
+
end
|
48
|
+
|
49
|
+
scenario "an admin sets up the Textfile notifier but do not enable it" do
|
50
|
+
git_repo(:my_test_project).add_successful_commit
|
51
|
+
Project.gen(:my_test_project, :uri => git_repo(:my_test_project).path)
|
52
|
+
rm_f "/tmp/textfile_notifications.txt"
|
53
|
+
|
54
|
+
login_as "admin", "test"
|
55
|
+
|
56
|
+
visit "/my-test-project"
|
57
|
+
|
58
|
+
click_link "Edit Project"
|
59
|
+
uncheck "enabled_notifiers_textfile"
|
60
|
+
fill_in "File", :with => "/tmp/textfile_notifications.txt"
|
61
|
+
click_button "Update Project"
|
62
|
+
|
63
|
+
click_button "manual build"
|
64
|
+
|
65
|
+
assert ! File.file?("/tmp/textfile_notifications.txt")
|
66
|
+
end
|
67
|
+
|
68
|
+
scenario "an admin can setup a notifier without enabling it" do
|
69
|
+
Project.gen(:integrity)
|
70
|
+
|
71
|
+
login_as "admin", "test"
|
72
|
+
|
73
|
+
visit "/integrity"
|
74
|
+
click_link "Edit Project"
|
75
|
+
fill_in_email_notifier
|
76
|
+
click_button "Update Project"
|
77
|
+
|
78
|
+
visit "/integrity/edit"
|
79
|
+
assert_have_email_notifier
|
80
|
+
end
|
81
|
+
|
82
|
+
scenario "an admin configures various notifiers accros multiple projects" do
|
83
|
+
Project.first(:permalink => "integrity").should be_nil
|
84
|
+
|
85
|
+
login_as "admin", "test"
|
86
|
+
|
87
|
+
visit "/"
|
88
|
+
|
89
|
+
add_project "Integrity", "git://github.com/foca/integrity.git"
|
90
|
+
click_link "projects"
|
91
|
+
|
92
|
+
add_project "Webrat", "git://github.com/brynary/webrat.git"
|
93
|
+
click_link "projects"
|
94
|
+
|
95
|
+
add_project "Rails", "git://github.com/rails/rails.git"
|
96
|
+
click_link "projects"
|
97
|
+
|
98
|
+
edit_project "integrity"
|
99
|
+
edit_project "webrat"
|
100
|
+
edit_project "rails"
|
101
|
+
|
102
|
+
visit "/integrity"
|
103
|
+
click_link "Edit Project"
|
104
|
+
assert_have_email_notifier
|
105
|
+
|
106
|
+
visit "/webrat"
|
107
|
+
click_link "Edit Project"
|
108
|
+
assert_have_email_notifier
|
109
|
+
|
110
|
+
visit "/rails"
|
111
|
+
click_link "Edit Project"
|
112
|
+
assert_have_email_notifier
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../helpers/acceptance"
|
2
|
+
|
3
|
+
class CreateProjectTest < Test::Unit::AcceptanceTestCase
|
4
|
+
story <<-EOS
|
5
|
+
As an administrator,
|
6
|
+
I want to add projects to Integrity,
|
7
|
+
So that I can know their status whenever I push code
|
8
|
+
EOS
|
9
|
+
|
10
|
+
scenario "an admin can create a public project" do
|
11
|
+
Project.first(:permalink => "integrity").should be_nil
|
12
|
+
|
13
|
+
login_as "admin", "test"
|
14
|
+
|
15
|
+
visit "/new"
|
16
|
+
|
17
|
+
fill_in "Name", :with => "Integrity"
|
18
|
+
fill_in "Git repository", :with => "git://github.com/foca/integrity.git"
|
19
|
+
fill_in "Branch to track", :with => "master"
|
20
|
+
fill_in "Build script", :with => "rake"
|
21
|
+
check "Public project"
|
22
|
+
click_button "Create Project"
|
23
|
+
|
24
|
+
Project.first(:permalink => "integrity").should_not be_nil
|
25
|
+
|
26
|
+
assert_have_tag("h1", :content => "Integrity")
|
27
|
+
|
28
|
+
log_out
|
29
|
+
visit "/integrity"
|
30
|
+
|
31
|
+
assert_have_tag("h1", :content => "Integrity")
|
32
|
+
end
|
33
|
+
|
34
|
+
scenario "an admin can create a private project" do
|
35
|
+
Project.first(:permalink => "integrity").should be_nil
|
36
|
+
|
37
|
+
login_as "admin", "test"
|
38
|
+
|
39
|
+
visit "/new"
|
40
|
+
|
41
|
+
fill_in "Name", :with => "Integrity"
|
42
|
+
fill_in "Git repository", :with => "git://github.com/foca/integrity.git"
|
43
|
+
fill_in "Branch to track", :with => "master"
|
44
|
+
fill_in "Build script", :with => "rake"
|
45
|
+
uncheck "Public project"
|
46
|
+
click_button "Create Project"
|
47
|
+
|
48
|
+
assert_have_tag("h1", :content => "Integrity")
|
49
|
+
Project.first(:permalink => "integrity").should_not be_nil
|
50
|
+
|
51
|
+
log_out
|
52
|
+
visit "/integrity"
|
53
|
+
|
54
|
+
response_code.should == 401
|
55
|
+
assert_have_tag("h1", :content => "know the password?")
|
56
|
+
end
|
57
|
+
|
58
|
+
scenario "creating a project without required fields re-renders the new project form" do
|
59
|
+
Project.first(:permalink => "integrity").should be_nil
|
60
|
+
|
61
|
+
login_as "admin", "test"
|
62
|
+
|
63
|
+
visit "/new"
|
64
|
+
click_button "Create Project"
|
65
|
+
|
66
|
+
assert_have_tag(".with_errors label", :content => "Name must not be blank")
|
67
|
+
Project.first(:permalink => "integrity").should be_nil
|
68
|
+
|
69
|
+
fill_in "Name", :with => "Integrity"
|
70
|
+
fill_in "Git repository", :with => "git://github.com/foca/integrity.git"
|
71
|
+
click_button "Create Project"
|
72
|
+
|
73
|
+
assert_have_tag("h1", :content => 'Integrity')
|
74
|
+
Project.first(:permalink => "integrity").should_not be_nil
|
75
|
+
end
|
76
|
+
|
77
|
+
scenario "a user can't see the new project form" do
|
78
|
+
visit "/new"
|
79
|
+
response_code.should == 401
|
80
|
+
assert_have_tag("h1", :content => "know the password?")
|
81
|
+
end
|
82
|
+
|
83
|
+
scenario "a user can't post the project data (bypassing the form)" do
|
84
|
+
post "/", "project_data[name]" => "Integrity",
|
85
|
+
"project_data[uri]" => "git://github.com/foca/integrity.git",
|
86
|
+
"project_data[branch]" => "master",
|
87
|
+
"project_data[command]" => "rake"
|
88
|
+
|
89
|
+
response_code.should == 401
|
90
|
+
assert_have_tag("h1", :content => "know the password?")
|
91
|
+
Project.first(:permalink => "integrity").should be_nil
|
92
|
+
end
|
93
|
+
|
94
|
+
def post(path, data={})
|
95
|
+
webrat.request_page(path, :post, data)
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../helpers/acceptance"
|
2
|
+
|
3
|
+
class DeleteProjectTest < Test::Unit::AcceptanceTestCase
|
4
|
+
story <<-EOS
|
5
|
+
As an administrator,
|
6
|
+
I want to delete projects I don't care about anymore
|
7
|
+
So that Integrity isn't cluttered with unimportant projects
|
8
|
+
EOS
|
9
|
+
|
10
|
+
scenario "an admin can delete a project from the 'Edit Project' screen" do
|
11
|
+
Project.generate(:integrity, :commits => 4.of { Commit.gen })
|
12
|
+
|
13
|
+
login_as "admin", "test"
|
14
|
+
|
15
|
+
visit "/integrity"
|
16
|
+
click_link "Edit Project"
|
17
|
+
click_button "Yes, I'm sure, nuke it"
|
18
|
+
visit "/"
|
19
|
+
|
20
|
+
assert_have_no_tag("ul#projects", :content => "Integrity")
|
21
|
+
|
22
|
+
visit "/integrity"
|
23
|
+
|
24
|
+
response_code.should == 404
|
25
|
+
end
|
26
|
+
|
27
|
+
scenario "an admin can delete a project with an invalid SCM URI just fine" do
|
28
|
+
Project.generate(:integrity, :uri => "unknown://example.org")
|
29
|
+
|
30
|
+
login_as "admin", "test"
|
31
|
+
visit "/integrity/edit"
|
32
|
+
click_button "Yes, I'm sure, nuke it"
|
33
|
+
visit "/integrity"
|
34
|
+
|
35
|
+
response_code.should == 404
|
36
|
+
end
|
37
|
+
|
38
|
+
scenario "a user can't delete a project by doing a manual DELETE request" do
|
39
|
+
Project.gen(:integrity)
|
40
|
+
|
41
|
+
delete "/integrity"
|
42
|
+
|
43
|
+
response_code.should == 401
|
44
|
+
|
45
|
+
visit "/integrity"
|
46
|
+
|
47
|
+
assert_have_tag("h1", :content => 'Integrity')
|
48
|
+
end
|
49
|
+
|
50
|
+
def delete(path, data={})
|
51
|
+
webrat.request_page(path, :delete, data)
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../helpers/acceptance"
|
2
|
+
|
3
|
+
class EditProjectTest < Test::Unit::AcceptanceTestCase
|
4
|
+
story <<-EOS
|
5
|
+
As an administrator,
|
6
|
+
I want to be able to edit a project
|
7
|
+
So that I can correct mistakes or update the project after a change
|
8
|
+
EOS
|
9
|
+
|
10
|
+
scenario "an admin can edit the project information" do
|
11
|
+
Project.generate(:integrity)
|
12
|
+
|
13
|
+
login_as "admin", "test"
|
14
|
+
|
15
|
+
visit "/integrity"
|
16
|
+
click_link "Edit Project"
|
17
|
+
|
18
|
+
fill_in "Name", :with => "Integrity (test refactoring)"
|
19
|
+
fill_in "Branch to track", :with => "test-refactoring"
|
20
|
+
click_button "Update Project"
|
21
|
+
|
22
|
+
assert_have_tag("h1", :content => "Integrity (test refactoring)")
|
23
|
+
end
|
24
|
+
|
25
|
+
scenario "making a public project private will hide it from the home page for non-admins" do
|
26
|
+
Project.generate(:my_test_project, :public => true)
|
27
|
+
|
28
|
+
visit "/"
|
29
|
+
|
30
|
+
assert_contain("My Test Project")
|
31
|
+
|
32
|
+
login_as "admin", "test"
|
33
|
+
visit "/my-test-project"
|
34
|
+
click_link "Edit Project"
|
35
|
+
uncheck "Public project"
|
36
|
+
click_button "Update Project"
|
37
|
+
log_out
|
38
|
+
visit "/"
|
39
|
+
|
40
|
+
assert_have_no_tag("a", :content => "My Test Project")
|
41
|
+
end
|
42
|
+
|
43
|
+
scenario "making a private project public will show it in the home page for non-admins" do
|
44
|
+
Project.generate(:my_test_project, :public => false)
|
45
|
+
|
46
|
+
visit "/"
|
47
|
+
|
48
|
+
assert_not_contain("My Test Project")
|
49
|
+
|
50
|
+
login_as "admin", "test"
|
51
|
+
|
52
|
+
visit "/my-test-project"
|
53
|
+
click_link "Edit Project"
|
54
|
+
|
55
|
+
check "Public project"
|
56
|
+
click_button "Update Project"
|
57
|
+
|
58
|
+
log_out
|
59
|
+
|
60
|
+
visit "/"
|
61
|
+
|
62
|
+
assert_have_tag("a", :content => "My Test Project")
|
63
|
+
end
|
64
|
+
|
65
|
+
scenario "a user can't edit a project's information" do
|
66
|
+
Project.generate(:integrity)
|
67
|
+
|
68
|
+
visit "/integrity"
|
69
|
+
click_link "Edit Project"
|
70
|
+
|
71
|
+
response_code.should == 401
|
72
|
+
end
|
73
|
+
|
74
|
+
scenario "an admin can see the push URL on the edit page" do
|
75
|
+
disable_auth!
|
76
|
+
Project.generate(:my_test_project)
|
77
|
+
|
78
|
+
visit "/my-test-project"
|
79
|
+
click_link "Edit Project"
|
80
|
+
|
81
|
+
assert_have_tag("#push_url", :content => "http://www.example.com/my-test-project/push")
|
82
|
+
end
|
83
|
+
|
84
|
+
scenario "public projects have a ticked 'public' checkbox on edit form" do
|
85
|
+
Project.generate(:my_test_project, :public => true)
|
86
|
+
disable_auth!
|
87
|
+
visit "/my-test-project/edit"
|
88
|
+
|
89
|
+
assert_have_tag('input[@type="checkbox"][@checked="checked"][@name="project_data[public]"]')
|
90
|
+
end
|
91
|
+
|
92
|
+
scenario "private projects have an unticked 'public' checkbox on edit form" do
|
93
|
+
Project.generate(:my_test_project, :public => false)
|
94
|
+
disable_auth!
|
95
|
+
visit "/my-test-project/edit"
|
96
|
+
|
97
|
+
assert_have_no_tag('input[@type="checkbox"][@checked][@name="project_data[public]"]')
|
98
|
+
end
|
99
|
+
|
100
|
+
scenario "after I uncheck the public checkbox, it should still be uncheck after I save" do
|
101
|
+
Project.generate(:integrity, :public => true)
|
102
|
+
|
103
|
+
login_as "admin", "test"
|
104
|
+
|
105
|
+
visit "/integrity"
|
106
|
+
click_link "Edit Project"
|
107
|
+
|
108
|
+
assert_have_tag('input[@type="checkbox"][@checked="checked"][@name="project_data[public]"]')
|
109
|
+
|
110
|
+
uncheck "project_public"
|
111
|
+
click_button "Update Project"
|
112
|
+
|
113
|
+
click_link "Edit Project"
|
114
|
+
|
115
|
+
assert_have_no_tag('input[@type="checkbox"][@checked="checked"][@name="project_data[public]"]')
|
116
|
+
end
|
117
|
+
end
|