cornerstone 0.0.1 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/.rspec +1 -0
- data/Gemfile +23 -0
- data/Gemfile.lock +168 -0
- data/Guardfile +22 -0
- data/README.rdoc +4 -1
- data/Rakefile +11 -1
- data/TODO +11 -0
- data/VERSION +1 -0
- data/app/assets/images/.gitkeep +0 -0
- data/app/assets/javascripts/.gitkeep +0 -0
- data/app/assets/javascripts/cornerstone.js +11 -0
- data/app/assets/javascripts/cornerstone/discussions.js +2 -0
- data/app/assets/javascripts/cornerstone/help.js +2 -0
- data/app/assets/stylesheets/.gitkeep +0 -0
- data/app/assets/stylesheets/cornerstone.css +8 -0
- data/app/assets/stylesheets/cornerstone/discussions.css +4 -0
- data/app/assets/stylesheets/cornerstone/help.css +4 -0
- data/app/controllers/.gitkeep +0 -0
- data/app/controllers/cornerstone/admin/application_controller.rb +7 -0
- data/app/controllers/cornerstone/admin/articles_controller.rb +61 -0
- data/app/controllers/cornerstone/admin/categories_controller.rb +46 -0
- data/app/controllers/cornerstone/admin/discussions_controller.rb +32 -0
- data/app/controllers/cornerstone/application_controller.rb +6 -0
- data/app/controllers/cornerstone/discussions_controller.rb +58 -0
- data/app/controllers/cornerstone/help_controller.rb +11 -0
- data/app/controllers/cornerstone/posts_controller.rb +66 -0
- data/app/helpers/.gitkeep +0 -0
- data/app/helpers/cornerstone/application_helper.rb +5 -0
- data/app/helpers/cornerstone/discussions_helper.rb +16 -0
- data/app/helpers/cornerstone/help_helper.rb +4 -0
- data/app/mailers/cornerstone/cornerstone_mailer.rb +31 -0
- data/app/models/.gitkeep +0 -0
- data/app/models/cornerstone/article.rb +20 -0
- data/app/models/cornerstone/category.rb +45 -0
- data/app/models/cornerstone/discussion.rb +90 -0
- data/app/models/cornerstone/post.rb +103 -0
- data/app/models/cornerstone/post_observer.rb +23 -0
- data/app/views/.gitkeep +0 -0
- data/app/views/cornerstone/admin/articles/_article.html.erb +9 -0
- data/app/views/cornerstone/admin/articles/_form.html.erb +22 -0
- data/app/views/cornerstone/admin/articles/edit.html.erb +7 -0
- data/app/views/cornerstone/admin/articles/index.html.erb +25 -0
- data/app/views/cornerstone/admin/articles/new.html.erb +6 -0
- data/app/views/cornerstone/admin/articles/show.html.erb +4 -0
- data/app/views/cornerstone/admin/categories/_category.html.erb +12 -0
- data/app/views/cornerstone/admin/categories/_form.html.erb +17 -0
- data/app/views/cornerstone/admin/categories/edit.html.erb +6 -0
- data/app/views/cornerstone/admin/categories/index.html.erb +11 -0
- data/app/views/cornerstone/admin/categories/new.html.erb +6 -0
- data/app/views/cornerstone/admin/discussions/edit.html.erb +7 -0
- data/app/views/cornerstone/cornerstone_mailer/new_discussion.html.erb +14 -0
- data/app/views/cornerstone/cornerstone_mailer/new_discussion.text.erb +5 -0
- data/app/views/cornerstone/cornerstone_mailer/new_discussion_user.html.erb +7 -0
- data/app/views/cornerstone/cornerstone_mailer/new_post.html.erb +7 -0
- data/app/views/cornerstone/cornerstone_mailer/new_post.text.erb +8 -0
- data/app/views/cornerstone/discussions/_discussion.html.erb +12 -0
- data/app/views/cornerstone/discussions/_discussion_category.html.erb +14 -0
- data/app/views/cornerstone/discussions/_form.html.erb +33 -0
- data/app/views/cornerstone/discussions/_latest_discussion.html.erb +4 -0
- data/app/views/cornerstone/discussions/categorical_index.html.erb +27 -0
- data/app/views/cornerstone/discussions/index.html.erb +25 -0
- data/app/views/cornerstone/discussions/new.html.erb +6 -0
- data/app/views/cornerstone/discussions/show.html.erb +19 -0
- data/app/views/cornerstone/help/index.html.erb +7 -0
- data/app/views/cornerstone/posts/_fields.html.erb +44 -0
- data/app/views/cornerstone/posts/_form.html.erb +19 -0
- data/app/views/cornerstone/posts/_post.html.erb +17 -0
- data/app/views/cornerstone/posts/edit.html.erb +9 -0
- data/app/views/cornerstone/shared/_errors.html.erb +11 -0
- data/app/views/cornerstone/shared/_flash_messages.html.erb +15 -0
- data/app/views/layouts/cornerstone/application.html.erb +16 -0
- data/config/cucumber.yml +8 -0
- data/config/locales/cornerstone.action_mailer.en.yml +9 -0
- data/config/routes.rb +24 -0
- data/cornerstone-0.0.1.gem +0 -0
- data/cornerstone.gemspec +33 -0
- data/db/migrate/20110723004024_create_cornerstone_discussions.rb +17 -0
- data/db/migrate/20110804190853_create_cornerstone_categories.rb +15 -0
- data/db/migrate/20110809233551_create_cornerstone_posts.rb +13 -0
- data/db/migrate/20111006172857_create_cornerstone_articles.rb +12 -0
- data/lib/cornerstone.rb +6 -0
- data/lib/cornerstone/acts_as_cornerstone_user.rb +79 -0
- data/lib/cornerstone/config.rb +33 -0
- data/lib/cornerstone/controller_additions.rb +25 -0
- data/lib/cornerstone/engine.rb +8 -1
- data/lib/cornerstone/exceptions.rb +16 -0
- data/lib/cornerstone/helpers.rb +35 -0
- data/lib/tasks/cucumber.rake +65 -0
- data/lib/templates/cornerstone_config.rb +31 -0
- data/script/cucumber +10 -0
- data/script/rails +7 -0
- data/spec/controllers/cornerstone/admin/articles_controller_spec.rb +250 -0
- data/spec/controllers/cornerstone/admin/categories_controller_spec.rb +205 -0
- data/spec/controllers/cornerstone/admin/discussions_controller_spec.rb +95 -0
- data/spec/controllers/cornerstone/application_controller_spec.rb +34 -0
- data/spec/controllers/cornerstone/discussions_controller_spec.rb +157 -0
- data/spec/controllers/cornerstone/help_controller_spec.rb +20 -0
- data/spec/controllers/cornerstone/posts_controller_spec.rb +212 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +9 -0
- data/spec/dummy/app/assets/javascripts/tester.js +2 -0
- data/spec/dummy/app/assets/stylesheets/application.css +7 -0
- data/spec/dummy/app/assets/stylesheets/tester.css +4 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/tester_controller.rb +7 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/helpers/tester_helper.rb +6 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/.gitkeep +0 -0
- data/spec/dummy/app/models/user.rb +23 -0
- data/spec/dummy/app/views/devise/confirmations/new.html.erb +12 -0
- data/spec/dummy/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/spec/dummy/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/spec/dummy/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/spec/dummy/app/views/devise/passwords/edit.html.erb +16 -0
- data/spec/dummy/app/views/devise/passwords/new.html.erb +12 -0
- data/spec/dummy/app/views/devise/registrations/edit.html.erb +29 -0
- data/spec/dummy/app/views/devise/registrations/new.html.erb +22 -0
- data/spec/dummy/app/views/devise/sessions/new.html.erb +19 -0
- data/spec/dummy/app/views/devise/shared/_links.erb +25 -0
- data/spec/dummy/app/views/devise/unlocks/new.html.erb +12 -0
- data/spec/dummy/app/views/layouts/application.html.erb +15 -0
- data/spec/dummy/app/views/tester/index.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +42 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +28 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +31 -0
- data/spec/dummy/config/environments/production.rb +54 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cornerstone_config.rb +30 -0
- data/spec/dummy/config/initializers/devise.rb +204 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +12 -0
- data/spec/dummy/config/locales/devise.en.yml +53 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +65 -0
- data/spec/dummy/db/migrate/20110724011421_create_user.rb +11 -0
- data/spec/dummy/db/migrate/20110724194307_devise_create_users.rb +41 -0
- data/spec/dummy/db/migrate/20110804174004_add_name_to_user.rb +5 -0
- data/spec/dummy/db/schema.rb +76 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/test/functional/tester_controller_test.rb +9 -0
- data/spec/dummy/test/unit/helpers/tester_helper_test.rb +4 -0
- data/spec/fixtures/cornerstone/cornerstone_mailer/new_discussion +3 -0
- data/spec/lib/cornerstone/acts_as_cornerstone_user_spec.rb +56 -0
- data/spec/lib/cornerstone/helpers_spec.rb +32 -0
- data/spec/mailers/cornerstone/cornerstone_mailer_spec.rb +55 -0
- data/spec/models/cornerstone/article_spec.rb +25 -0
- data/spec/models/cornerstone/category_spec.rb +97 -0
- data/spec/models/cornerstone/discussion_spec.rb +243 -0
- data/spec/models/cornerstone/post_observer_spec.rb +65 -0
- data/spec/models/cornerstone/post_spec.rb +210 -0
- data/spec/requests/emails_spec.rb +51 -0
- data/spec/requests/interact_discussions_spec.rb +103 -0
- data/spec/requests/manage_articles_spec.rb +59 -0
- data/spec/requests/manage_categories_spec.rb +64 -0
- data/spec/requests/view_home_spec.rb +26 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/devise.rb +4 -0
- data/spec/support/factories.rb +62 -0
- data/spec/support/general_helper_methods.rb +20 -0
- data/spec/support/mailer_macros.rb +15 -0
- data/spec/support/mass_assignment.rb +46 -0
- data/tmp/log/development.log +0 -0
- metadata +301 -20
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature "Cornerstone emails" do
|
4
|
+
|
5
|
+
background do
|
6
|
+
end
|
7
|
+
|
8
|
+
scenario "Sent to administrators when a discussion is created" do
|
9
|
+
category = Factory(:category, :name => "General Help",
|
10
|
+
:category_type => "Discussion")
|
11
|
+
visit discussions_path
|
12
|
+
click_link("New Discussion")
|
13
|
+
|
14
|
+
select category.name, :from => "discussion_category_id"
|
15
|
+
fill_in "Subject", :with => "I need help!"
|
16
|
+
fill_in "Name", :with => "Waffles"
|
17
|
+
fill_in "Email", :with => "w@ihop.com"
|
18
|
+
fill_in "post_body", :with => "Please help me out. k thx."
|
19
|
+
click_button "Create"
|
20
|
+
|
21
|
+
d = Cornerstone::Discussion.find_by_subject("I need help!")
|
22
|
+
current_path.should match category_discussion_path(category, d)
|
23
|
+
|
24
|
+
emails.size.should == 2
|
25
|
+
emails.first.to.should == ["admins@cornerstone.com"]
|
26
|
+
emails.second.to.should == ["w@ihop.com"]
|
27
|
+
end
|
28
|
+
|
29
|
+
scenario "Sent to other participants when reply is created" do
|
30
|
+
user = Factory(:user, :name => "New guy")
|
31
|
+
sign_in_user(user)
|
32
|
+
discussion = Factory(:discussion_w_user, :user => user)
|
33
|
+
reply1 = Factory(:post, :discussion => discussion,
|
34
|
+
:name => "Reply Author",
|
35
|
+
:email => "email@email.com")
|
36
|
+
reply2 = Factory(:post, :discussion => discussion,
|
37
|
+
:name => "Reply2 Author",
|
38
|
+
:email => "email2@email.com")
|
39
|
+
emails.clear
|
40
|
+
|
41
|
+
visit category_discussion_path(discussion.category, discussion)
|
42
|
+
fill_in "post_body", :with => "Final reply."
|
43
|
+
click_button "Comment"
|
44
|
+
current_path.should match category_discussion_path(discussion.category, discussion)
|
45
|
+
|
46
|
+
emails.size.should == 2
|
47
|
+
emails.first.to.should == ["email@email.com"]
|
48
|
+
emails.last.to.should == ["email2@email.com"]
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature "Interact with Discussions" do
|
4
|
+
|
5
|
+
background do
|
6
|
+
@c1 = Factory(:category, :name => "General Help",
|
7
|
+
:category_type => "Discussion")
|
8
|
+
@c2 = Factory(:category, :name => "FAQ's",
|
9
|
+
:category_type => "Article")
|
10
|
+
@c3 = Factory(:category, :name => "Refunds",
|
11
|
+
:category_type => "Discussion")
|
12
|
+
end
|
13
|
+
|
14
|
+
scenario "See what people are takling about" do
|
15
|
+
visit discussions_path
|
16
|
+
page.should have_content(@c1.name)
|
17
|
+
page.should_not have_content(@c2.name)
|
18
|
+
page.should have_content(@c3.name)
|
19
|
+
page.should have_link("New Discussion")
|
20
|
+
end
|
21
|
+
|
22
|
+
scenario "Select a category and then a discussion" do
|
23
|
+
d = Factory(:discussion_w_user, :subject => "I have a problem",
|
24
|
+
:privte => false,
|
25
|
+
:category => @c1)
|
26
|
+
visit discussions_path
|
27
|
+
page.should have_content(@c1.name)
|
28
|
+
click_link(@c1.name)
|
29
|
+
current_path.should match discussions_category_path(@c1)
|
30
|
+
|
31
|
+
page.should have_content(d.subject)
|
32
|
+
click_link(d.subject)
|
33
|
+
current_path.should match category_discussion_path(@c1, d)
|
34
|
+
end
|
35
|
+
|
36
|
+
scenario "Create a new discussion when not logged in" do
|
37
|
+
visit discussions_path
|
38
|
+
click_link("New Discussion")
|
39
|
+
|
40
|
+
select @c1.name, :from => "discussion_category_id"
|
41
|
+
fill_in "Subject", :with => "I need help!"
|
42
|
+
fill_in "Name", :with => "Waffles"
|
43
|
+
fill_in "Email", :with => "w@ihop.com"
|
44
|
+
fill_in "post_body", :with => "Please help me out. k thx."
|
45
|
+
click_button "Create"
|
46
|
+
|
47
|
+
d = Cornerstone::Discussion.find_by_subject("I need help!")
|
48
|
+
current_path.should match category_discussion_path(@c1, d)
|
49
|
+
end
|
50
|
+
|
51
|
+
scenario "Create a new discussion when logged in" do
|
52
|
+
sign_in_user
|
53
|
+
visit discussions_path
|
54
|
+
click_link("New Discussion")
|
55
|
+
|
56
|
+
select @c1.name, :from => "discussion_category_id"
|
57
|
+
fill_in "Subject", :with => "I need help!"
|
58
|
+
fill_in "post_body", :with => "Please help me out. k thx."
|
59
|
+
click_button "Create"
|
60
|
+
|
61
|
+
d = Cornerstone::Discussion.find_by_subject("I need help!")
|
62
|
+
current_path.should match category_discussion_path(@c1, d)
|
63
|
+
page.should have_content(@user.name)
|
64
|
+
end
|
65
|
+
|
66
|
+
scenario "New discussion from within category view should have category pre-selected" do
|
67
|
+
visit discussions_category_path(@c1)
|
68
|
+
click_link ("New Discussion")
|
69
|
+
current_path.should match new_discussion_path
|
70
|
+
page.find("#discussion_category_id").value.should == @c1.id.to_s
|
71
|
+
end
|
72
|
+
|
73
|
+
scenario "Reply to an existing discussion when logged in" do
|
74
|
+
sign_in_user
|
75
|
+
discussion = Factory(:discussion_w_user, :user => @user)
|
76
|
+
reply1 = Factory(:post, :discussion => discussion,
|
77
|
+
:name => "Reply Author",
|
78
|
+
:email => "email@email.com")
|
79
|
+
|
80
|
+
|
81
|
+
visit category_discussion_path(discussion.category, discussion)
|
82
|
+
fill_in "post_body", :with => "Please help me out. k thx."
|
83
|
+
click_button "Comment"
|
84
|
+
current_path.should match category_discussion_path(discussion.category, discussion)
|
85
|
+
page.should have_content "Comment was successfully created."
|
86
|
+
end
|
87
|
+
|
88
|
+
scenario "Reply to an existing discussion when not logged in" do
|
89
|
+
discussion = Factory(:discussion_w_user)
|
90
|
+
reply1 = Factory(:post, :discussion => discussion,
|
91
|
+
:name => "Reply Author",
|
92
|
+
:email => "email@email.com")
|
93
|
+
|
94
|
+
|
95
|
+
visit category_discussion_path(discussion.category, discussion)
|
96
|
+
fill_in "Name", :with => "Anonymous"
|
97
|
+
fill_in "Email", :with => "anonymous@whatever.com"
|
98
|
+
fill_in "post_body", :with => "Please help me out. k thx."
|
99
|
+
click_button "Comment"
|
100
|
+
current_path.should match category_discussion_path(discussion.category, discussion)
|
101
|
+
page.should have_content "Comment was successfully created."
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature "Manage Articles" do
|
4
|
+
|
5
|
+
background do
|
6
|
+
sign_in_admin
|
7
|
+
end
|
8
|
+
|
9
|
+
scenario "Articles are listed with action buttons" do
|
10
|
+
Factory(:article, :title => "General Help")
|
11
|
+
Factory(:article, :title => "How to ask for help")
|
12
|
+
visit admin_articles_path
|
13
|
+
page.should have_content("General Help")
|
14
|
+
page.should have_content("How to ask for help")
|
15
|
+
page.should have_link("Edit")
|
16
|
+
page.should have_link("Destroy")
|
17
|
+
page.should have_link("New Article", :href => new_admin_article_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
scenario "Create a new article successfully" do
|
21
|
+
Factory(:category, :name => "FAQs",
|
22
|
+
:category_type => "Article")
|
23
|
+
visit new_admin_article_path
|
24
|
+
|
25
|
+
fill_in "Title", :with => "name 1"
|
26
|
+
select "FAQs", :from => "article_category_id"
|
27
|
+
fill_in "Body", :with => "some article body"
|
28
|
+
click_button "Create"
|
29
|
+
|
30
|
+
page.should have_content("name 1")
|
31
|
+
page.should have_content("some article body")
|
32
|
+
# TODO: flash in admin namespace
|
33
|
+
# page.should have_content("Article created successfully.")
|
34
|
+
end
|
35
|
+
|
36
|
+
scenario "Update an article successfully" do
|
37
|
+
article = Factory(:article, :title => "whatever")
|
38
|
+
visit admin_articles_path
|
39
|
+
click_link "Edit"
|
40
|
+
current_path.should match edit_admin_article_path(article)
|
41
|
+
fill_in "Title", :with => "Different Title"
|
42
|
+
click_button "Update"
|
43
|
+
|
44
|
+
page.should have_content("Different Title")
|
45
|
+
end
|
46
|
+
|
47
|
+
scenario "Delete an Article" do
|
48
|
+
Factory(:article, :title => "One")
|
49
|
+
Factory(:article, :title => "Two")
|
50
|
+
Factory(:article, :title => "Three")
|
51
|
+
visit admin_articles_path
|
52
|
+
within("table#articles tr:last-child") do
|
53
|
+
click_link "Destroy"
|
54
|
+
end
|
55
|
+
current_path.should match admin_articles_path
|
56
|
+
page.should_not have_content("Three")
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature "Manage Categories" do
|
4
|
+
|
5
|
+
background do
|
6
|
+
sign_in_admin
|
7
|
+
end
|
8
|
+
|
9
|
+
scenario "Categories are listed with action buttons" do
|
10
|
+
Factory(:category, :name => "General Help",
|
11
|
+
:category_type => "Discussion")
|
12
|
+
Factory(:category, :name => "FAQs",
|
13
|
+
:category_type => "Article")
|
14
|
+
visit admin_categories_path
|
15
|
+
page.should have_content("General Help")
|
16
|
+
page.should have_content("FAQs")
|
17
|
+
page.should have_link("Edit")
|
18
|
+
page.should have_link("Destroy")
|
19
|
+
page.should have_link("New Category", :href => new_admin_category_path)
|
20
|
+
end
|
21
|
+
|
22
|
+
scenario "Create a new category successfully" do
|
23
|
+
visit new_admin_category_path
|
24
|
+
|
25
|
+
fill_in "Name", :with => "name 1"
|
26
|
+
select "Discussion", :from => "category_type"
|
27
|
+
fill_in "Description", :with => "some description"
|
28
|
+
click_button "Create"
|
29
|
+
|
30
|
+
current_path.should match admin_categories_path
|
31
|
+
page.should have_content("name 1")
|
32
|
+
# TODO: flash in admin namespace
|
33
|
+
# page.should have_content("Category created successfully.")
|
34
|
+
end
|
35
|
+
|
36
|
+
scenario "Update a category successfully" do
|
37
|
+
category = Factory(:category, :name => "FAQs",
|
38
|
+
:category_type => "Article")
|
39
|
+
visit admin_categories_path
|
40
|
+
click_link "Edit"
|
41
|
+
current_path.should match edit_admin_category_path(category)
|
42
|
+
fill_in "Name", :with => "Different Name"
|
43
|
+
click_button "Update"
|
44
|
+
|
45
|
+
current_path.should match admin_categories_path
|
46
|
+
page.should have_content("Different Name")
|
47
|
+
end
|
48
|
+
|
49
|
+
scenario "Delete a category" do
|
50
|
+
Factory(:category, :name => "General Help",
|
51
|
+
:category_type => "Discussion")
|
52
|
+
Factory(:category, :name => "Other Help",
|
53
|
+
:category_type => "Discussion")
|
54
|
+
Factory(:category, :name => "FAQs",
|
55
|
+
:category_type => "Article")
|
56
|
+
visit admin_categories_path
|
57
|
+
within("table#discussion_categories tr:last-child") do
|
58
|
+
click_link "Destroy"
|
59
|
+
end
|
60
|
+
current_path.should match admin_categories_path
|
61
|
+
page.should_not have_content("Other Help")
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature "Manage Articles" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
visit root_url
|
7
|
+
end
|
8
|
+
|
9
|
+
scenario "Visit the home page" do
|
10
|
+
page.should have_content("Browse Discussions")
|
11
|
+
# page.should have_content("Browse Knowledge Base")
|
12
|
+
end
|
13
|
+
|
14
|
+
scenario "Browse discussions" do
|
15
|
+
click_link "Browse Discussions"
|
16
|
+
current_path.should match discussions_path
|
17
|
+
end
|
18
|
+
|
19
|
+
scenario "Browse knowledge base" do
|
20
|
+
pending
|
21
|
+
# click_link "Browse Knowledge Base"
|
22
|
+
# current_path.should match knowledge_base_path
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
2
|
+
ENV["RAILS_ENV"] ||= 'test'
|
3
|
+
require File.expand_path("../dummy/config/environment", __FILE__)
|
4
|
+
require 'rspec/rails'
|
5
|
+
require 'factory_girl_rails'
|
6
|
+
require 'capybara/rails'
|
7
|
+
|
8
|
+
ENGINE_RAILS_ROOT = File.join(File.dirname(__FILE__), '../')
|
9
|
+
|
10
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
11
|
+
# in spec/support/ and its subdirectories.
|
12
|
+
#Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
|
13
|
+
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
|
14
|
+
|
15
|
+
include Warden::Test::Helpers
|
16
|
+
|
17
|
+
RSpec.configure do |config|
|
18
|
+
# == Mock Framework
|
19
|
+
#
|
20
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
21
|
+
#
|
22
|
+
# config.mock_with :mocha
|
23
|
+
# config.mock_with :flexmock
|
24
|
+
# config.mock_with :rr
|
25
|
+
config.mock_with :rspec
|
26
|
+
|
27
|
+
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
28
|
+
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
29
|
+
|
30
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
31
|
+
# examples within a transaction, remove the following line or assign false
|
32
|
+
# instead of true.
|
33
|
+
config.use_transactional_fixtures = true
|
34
|
+
|
35
|
+
config.include Cornerstone::Engine.routes.url_helpers
|
36
|
+
|
37
|
+
|
38
|
+
config.include(MailerMacros)
|
39
|
+
config.before(:each) { reset_email }
|
40
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
Factory.sequence :email do |n|
|
2
|
+
"email#{n}@example.com"
|
3
|
+
end
|
4
|
+
|
5
|
+
Factory.sequence :category_name do |n|
|
6
|
+
"Category - #{n}"
|
7
|
+
end
|
8
|
+
|
9
|
+
FactoryGirl.define do
|
10
|
+
|
11
|
+
factory :discussion, :class => Cornerstone::Discussion do
|
12
|
+
subject "Help please"
|
13
|
+
status Cornerstone::Discussion::STATUS.first
|
14
|
+
category
|
15
|
+
end
|
16
|
+
|
17
|
+
factory :discussion_no_user, :parent => :discussion do |discussion|
|
18
|
+
discussion.after_build { |d| Factory(:post_no_user, :discussion => d) }
|
19
|
+
end
|
20
|
+
|
21
|
+
factory :discussion_w_user, :parent => :discussion do |discussion|
|
22
|
+
user
|
23
|
+
discussion.after_build { |d| Factory(:post_w_user, :discussion => d,
|
24
|
+
:user => d.user) }
|
25
|
+
end
|
26
|
+
|
27
|
+
factory :user do
|
28
|
+
name "Alice Mcduffry"
|
29
|
+
email { Factory.next(:email) }
|
30
|
+
password "tester"
|
31
|
+
encrypted_password "$2a$10$5JwEZ3gf0udh3MRlNYQP3Ow3fAsw/jFJZA4tKMB760wC.Uv7w7jJi"
|
32
|
+
end
|
33
|
+
|
34
|
+
factory :category, :class => Cornerstone::Category do
|
35
|
+
name { Factory.next(:category_name) }
|
36
|
+
category_type Cornerstone::Category::TYPES.first
|
37
|
+
description "Description for category."
|
38
|
+
item_count 4
|
39
|
+
end
|
40
|
+
|
41
|
+
factory :post, :class => Cornerstone::Post do
|
42
|
+
body "This is a post"
|
43
|
+
discussion
|
44
|
+
end
|
45
|
+
|
46
|
+
factory :post_no_user, :parent => :post do
|
47
|
+
name "Joe Blow"
|
48
|
+
email { Factory.next(:email) }
|
49
|
+
end
|
50
|
+
|
51
|
+
factory :post_w_user, :parent => :post do
|
52
|
+
user
|
53
|
+
end
|
54
|
+
|
55
|
+
factory :article, :class => Cornerstone::Article do
|
56
|
+
title "How to Create a Widget"
|
57
|
+
body "Step 1: bla bla"
|
58
|
+
category
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
def random_alphanumeric(size=16)
|
2
|
+
s = ""
|
3
|
+
size.times { s << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }
|
4
|
+
s
|
5
|
+
end
|
6
|
+
|
7
|
+
|
8
|
+
def sign_in_admin(admin=nil)
|
9
|
+
@admin = admin || Factory(:user)
|
10
|
+
login_as @admin
|
11
|
+
controller.stub(:current_cornerstone_user) {@admin} if controller
|
12
|
+
@admin.stub(:cornerstone_admin?) {true}
|
13
|
+
end
|
14
|
+
|
15
|
+
def sign_in_user(user=nil)
|
16
|
+
@user = user || Factory(:user)
|
17
|
+
login_as @user
|
18
|
+
controller.stub(:current_cornerstone_user) {@user} if controller
|
19
|
+
@user.stub(:cornerstone_admin?) {false}
|
20
|
+
end
|