open_porch 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +41 -0
- data/Gemfile.lock +130 -0
- data/README.md +170 -0
- data/Rakefile +19 -0
- data/VERSION +1 -0
- data/app/controllers/admin/areas/base_controller.rb +11 -0
- data/app/controllers/admin/areas/issues_controller.rb +67 -0
- data/app/controllers/admin/areas/memberships_controller.rb +7 -0
- data/app/controllers/admin/areas/posts_controller.rb +44 -0
- data/app/controllers/admin/areas_controller.rb +89 -0
- data/app/controllers/admin/base_controller.rb +16 -0
- data/app/controllers/admin/user_activity_controller.rb +29 -0
- data/app/controllers/admin/users_controller.rb +57 -0
- data/app/controllers/application_controller.rb +15 -0
- data/app/controllers/areas/base_controller.rb +25 -0
- data/app/controllers/areas/issues_controller.rb +35 -0
- data/app/controllers/areas/posts_controller.rb +28 -0
- data/app/controllers/areas_controller.rb +30 -0
- data/app/controllers/passwords_controller.rb +42 -0
- data/app/controllers/registrations_controller.rb +42 -0
- data/app/controllers/sessions_controller.rb +33 -0
- data/app/controllers/users_controller.rb +77 -0
- data/app/helpers/open_porch_helper.rb +24 -0
- data/app/mailers/user_mailer.rb +35 -0
- data/app/models/address.rb +57 -0
- data/app/models/area.rb +171 -0
- data/app/models/area_activity.rb +24 -0
- data/app/models/email_message.rb +104 -0
- data/app/models/issue.rb +66 -0
- data/app/models/issue_number.rb +22 -0
- data/app/models/membership.rb +27 -0
- data/app/models/post.rb +64 -0
- data/app/models/session_user.rb +69 -0
- data/app/models/user.rb +140 -0
- data/app/models/user_activity.rb +31 -0
- data/app/models/user_authority_check.rb +14 -0
- data/app/views/admin/areas/_form.html.haml +8 -0
- data/app/views/admin/areas/_nav.html.haml +12 -0
- data/app/views/admin/areas/edit.html.haml +22 -0
- data/app/views/admin/areas/edit_borders.html.haml +44 -0
- data/app/views/admin/areas/index.html.haml +61 -0
- data/app/views/admin/areas/issues/_post.html.haml +15 -0
- data/app/views/admin/areas/issues/add_posts.js.rjs +3 -0
- data/app/views/admin/areas/issues/edit.html.haml +37 -0
- data/app/views/admin/areas/issues/index.html.haml +31 -0
- data/app/views/admin/areas/issues/remove_posts.js.rjs +3 -0
- data/app/views/admin/areas/issues/show.html.haml +13 -0
- data/app/views/admin/areas/memberships/index.html.haml +17 -0
- data/app/views/admin/areas/new.html.haml +6 -0
- data/app/views/admin/areas/new.js.haml +4 -0
- data/app/views/admin/areas/posts/_edit.html.haml +6 -0
- data/app/views/admin/areas/posts/_post_status.html.haml +1 -0
- data/app/views/admin/areas/posts/destroy.js.rjs +1 -0
- data/app/views/admin/areas/posts/edit.js.rjs +1 -0
- data/app/views/admin/areas/posts/show.js.rjs +1 -0
- data/app/views/admin/areas/posts/toggle_reviewed_by.js.rjs +1 -0
- data/app/views/admin/areas/posts/update.js.rjs +5 -0
- data/app/views/admin/areas/show.html.haml +5 -0
- data/app/views/admin/user_activity/show.html.haml +5 -0
- data/app/views/admin/users/_form.html.haml +21 -0
- data/app/views/admin/users/edit.html.haml +5 -0
- data/app/views/admin/users/index.html.haml +31 -0
- data/app/views/admin/users/new.html.haml +5 -0
- data/app/views/areas/issues/index.html.haml +31 -0
- data/app/views/areas/issues/show.html.haml +22 -0
- data/app/views/areas/posts/_post.html.haml +8 -0
- data/app/views/areas/posts/_posts_search_form.html.haml +8 -0
- data/app/views/areas/posts/index.html.haml +27 -0
- data/app/views/areas/posts/new.html.haml +10 -0
- data/app/views/areas/show.html.haml +47 -0
- data/app/views/layouts/_account_nav.html.haml +18 -0
- data/app/views/layouts/_flash_message.html.haml +4 -0
- data/app/views/layouts/_footer.html.haml +9 -0
- data/app/views/layouts/_head.html.haml +16 -0
- data/app/views/layouts/admin/_nav.html.haml +13 -0
- data/app/views/layouts/admin.html.haml +15 -0
- data/app/views/layouts/application.html.haml +14 -0
- data/app/views/layouts/area_editor.html.haml +11 -0
- data/app/views/passwords/edit.html.haml +9 -0
- data/app/views/passwords/new.html.haml +13 -0
- data/app/views/registrations/_address_form.html.haml +7 -0
- data/app/views/registrations/create.html.haml +49 -0
- data/app/views/registrations/index.html.haml +30 -0
- data/app/views/registrations/new.html.haml +17 -0
- data/app/views/sessions/new.html.haml +18 -0
- data/app/views/stylesheets/common.sass +239 -0
- data/app/views/stylesheets/content.sass +193 -0
- data/app/views/stylesheets/reset.sass +46 -0
- data/app/views/stylesheets/structure.sass +11 -0
- data/app/views/stylesheets/typography.sass +57 -0
- data/app/views/user_mailer/email_verification.html.erb +5 -0
- data/app/views/user_mailer/email_verification.text.erb +7 -0
- data/app/views/user_mailer/new_issue.html.erb +32 -0
- data/app/views/user_mailer/new_issue.text.erb +26 -0
- data/app/views/user_mailer/password_reset.html.erb +7 -0
- data/app/views/user_mailer/password_reset.text.erb +6 -0
- data/app/views/users/_form.html.haml +5 -0
- data/app/views/users/edit.html.haml +11 -0
- data/app/views/users/new.html.haml +41 -0
- data/app/views/users/show.html.haml +30 -0
- data/bin/open_porch_engine +135 -0
- data/config/application.rb +43 -0
- data/config/boot.rb +13 -0
- data/config/database_example.yml +59 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +26 -0
- data/config/environments/production.rb +49 -0
- data/config/environments/test.rb +35 -0
- data/config/initializers/backtrace_silencers.rb +7 -0
- data/config/initializers/email_regex.rb +38 -0
- data/config/initializers/geokit_config.rb +61 -0
- data/config/initializers/inflections.rb +20 -0
- data/config/initializers/meta_search.rb +7 -0
- data/config/initializers/mime_types.rb +5 -0
- data/config/initializers/open_porch.rb +41 -0
- data/config/initializers/sass.rb +1 -0
- data/config/initializers/secret_token.rb +7 -0
- data/config/initializers/session_store.rb +8 -0
- data/config/initializers/states_provinces.rb +2 -0
- data/config/initializers/will_paginate.rb +2 -0
- data/config/locales/en.yml +5 -0
- data/config/open_porch_example.yml +23 -0
- data/config/routes.rb +54 -0
- data/config/schedule.rb +9 -0
- data/config.ru +4 -0
- data/db/migrate/01_create_areas.rb +21 -0
- data/db/migrate/02_create_users.rb +28 -0
- data/db/migrate/03_create_memberships.rb +14 -0
- data/db/migrate/04_create_posts.rb +20 -0
- data/db/migrate/05_create_issue_numbers.rb +13 -0
- data/db/migrate/06_create_issues.rb +21 -0
- data/db/migrate/20110204173301_add_published_to_areas.rb +10 -0
- data/db/migrate/20110204194840_create_user_activities.rb +13 -0
- data/db/migrate/20110208163604_add_zip_to_areas.rb +11 -0
- data/db/migrate/20110209175723_add_counters_to_areas.rb +11 -0
- data/db/migrate/20110209182244_remove_subject_from_issues.rb +9 -0
- data/db/migrate/20110209190146_add_reviewer_info_to_posts.rb +9 -0
- data/db/migrate/20110215173144_add_email_validation_key_to_users.rb +13 -0
- data/db/migrate/20110215182716_remove_published_from_areas.rb +10 -0
- data/db/migrate/20110215211012_create_area_activities.rb +19 -0
- data/db/migrate/20110215213802_create_email_messages.rb +19 -0
- data/db/migrate/20110217165018_change_send_mode_to_string.rb +17 -0
- data/db/migrate/20110223160609_denormalize_user_info_in_posts.rb +19 -0
- data/db/seeds.rb +7 -0
- data/doc/README_FOR_APP +2 -0
- data/lib/generators/open_porch_generator.rb +37 -0
- data/lib/open_porch/engine.rb +20 -0
- data/lib/open_porch.rb +3 -0
- data/lib/tasks/.gitkeep +0 -0
- data/lib/tasks/open_porch.rake +10 -0
- data/lib/tasks/postageapp_tasks.rake +78 -0
- data/open_porch.gemspec +335 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/images/icons/ajax-loader.gif +0 -0
- data/public/images/icons/calendar.png +0 -0
- data/public/images/icons/post_new.png +0 -0
- data/public/images/icons/post_reviewed.png +0 -0
- data/public/javascripts/application.js +3 -0
- data/public/javascripts/google_maps.js +153 -0
- data/public/javascripts/highcharts.js +162 -0
- data/public/javascripts/highcharts_init.js +30 -0
- data/public/javascripts/issue_edit.js +57 -0
- data/public/javascripts/jquery-ui.min.js +191 -0
- data/public/javascripts/jquery.js +154 -0
- data/public/javascripts/rails.js +137 -0
- data/public/javascripts/region_editor.js +616 -0
- data/public/javascripts/user_activity.js +29 -0
- data/public/robots.txt +5 -0
- data/public/stylesheets/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/stylesheets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/stylesheets/images/ui-icons_222222_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_454545_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_888888_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/jquery-ui.css +362 -0
- data/script/rails +6 -0
- data/test/dummy/area.rb +5 -0
- data/test/dummy/area_activity.rb +7 -0
- data/test/dummy/issue.rb +4 -0
- data/test/dummy/membership.rb +4 -0
- data/test/dummy/post.rb +12 -0
- data/test/dummy/user.rb +29 -0
- data/test/dummy/user_activity.rb +11 -0
- data/test/functional/admin/areas/issues_controller_test.rb +48 -0
- data/test/functional/admin/areas/memberships_controller_test.rb +45 -0
- data/test/functional/admin/areas/posts_controller_test.rb +54 -0
- data/test/functional/admin/areas_controller_test.rb +134 -0
- data/test/functional/admin/base_controller_test.rb +8 -0
- data/test/functional/admin/user_activity_controller_test.rb +28 -0
- data/test/functional/admin/users_controller_test.rb +144 -0
- data/test/functional/areas/issues_controller_test.rb +33 -0
- data/test/functional/areas/posts_controller_test.rb +50 -0
- data/test/functional/areas_controller_test.rb +12 -0
- data/test/functional/passwords_controller_test.rb +64 -0
- data/test/functional/registrations_controller_test.rb +64 -0
- data/test/functional/sessions_controller_test.rb +120 -0
- data/test/functional/users_controller_test.rb +144 -0
- data/test/performance/browsing_test.rb +9 -0
- data/test/test_helper.rb +92 -0
- data/test/unit/address_test.rb +25 -0
- data/test/unit/area_activity_test.rb +57 -0
- data/test/unit/area_test.rb +92 -0
- data/test/unit/email_message_test.rb +8 -0
- data/test/unit/issue_number_test.rb +25 -0
- data/test/unit/issue_test.rb +154 -0
- data/test/unit/membership_test.rb +20 -0
- data/test/unit/post_test.rb +69 -0
- data/test/unit/session_user_test.rb +65 -0
- data/test/unit/user_activity_test.rb +31 -0
- data/test/unit/user_mailer_test.rb +20 -0
- data/test/unit/user_test.rb +61 -0
- data/vendor/plugins/.gitkeep +0 -0
- metadata +456 -0
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Admin::AreasControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@user = a User
|
7
|
+
assert_created @user
|
8
|
+
|
9
|
+
@user.update_attribute(:role, 'admin')
|
10
|
+
assert @user.is_admin?
|
11
|
+
|
12
|
+
@area = Area.create_dummy(
|
13
|
+
:name => 'Oakledge',
|
14
|
+
:border => Polygon.from_coordinates([[
|
15
|
+
[44.450713, -73.227265],
|
16
|
+
[44.456838, -73.225943],
|
17
|
+
[44.455921, -73.218375],
|
18
|
+
[44.449365, -73.220694],
|
19
|
+
[44.450713, -73.227265]
|
20
|
+
]])
|
21
|
+
)
|
22
|
+
assert_created @area
|
23
|
+
|
24
|
+
@user.areas << @area
|
25
|
+
assert_equal @area, @user.areas.first
|
26
|
+
|
27
|
+
login_as(@user)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_require_admin
|
31
|
+
@user.update_attribute(:role, 'regular_user')
|
32
|
+
login_as(@user)
|
33
|
+
|
34
|
+
get :index
|
35
|
+
assert_equal "You're not authorized to access that page.", flash[:alert]
|
36
|
+
assert_redirected_to area_path(@user.areas.first)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_get_index
|
40
|
+
get :index
|
41
|
+
assert_response :success
|
42
|
+
assert_template :index
|
43
|
+
assert assigns(:areas)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_get_new
|
47
|
+
get :new
|
48
|
+
assert_response :success
|
49
|
+
assert_template :new
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_create
|
53
|
+
assert_difference ['Area.count', 'IssueNumber.count'], 1 do
|
54
|
+
post :create, :area => area_params
|
55
|
+
end
|
56
|
+
assert_redirected_to admin_areas_path
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_create_fails
|
60
|
+
assert_no_difference ['Area.count', 'IssueNumber.count'] do
|
61
|
+
post :create, :area => area_params(:name => '')
|
62
|
+
end
|
63
|
+
assert_response :success
|
64
|
+
assert_template :new
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_create_from_js
|
68
|
+
assert_difference ['Area.count', 'IssueNumber.count'], 1 do
|
69
|
+
xhr :post, :create, :area => area_params
|
70
|
+
end
|
71
|
+
assert_response :success
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_get_edit
|
75
|
+
area = an Area
|
76
|
+
get :edit, :id => area
|
77
|
+
assert_response :success
|
78
|
+
assert_template :edit
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_update
|
82
|
+
area = an Area
|
83
|
+
put :update, :id => area, :area => { :name => '[EDIT] New Area Name'}
|
84
|
+
area.reload
|
85
|
+
assert_equal '[EDIT] New Area Name', area.name
|
86
|
+
assert_redirected_to admin_areas_path
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_update_fails
|
90
|
+
area = an Area
|
91
|
+
put :update, :id => area, :area => { :name => '' }
|
92
|
+
assert_response :success
|
93
|
+
assert_template :edit
|
94
|
+
assert_not_nil area.name
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_destroy
|
98
|
+
area = an Area
|
99
|
+
assert_difference ['Area.count', 'IssueNumber.count'], -1 do
|
100
|
+
delete :destroy, :id => area
|
101
|
+
end
|
102
|
+
assert_redirected_to admin_areas_path
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_edit_borders
|
106
|
+
get :edit_borders, :id => @area.id
|
107
|
+
assert_response :success
|
108
|
+
assert_template :edit_borders
|
109
|
+
assert_equal [@area], assigns(:areas)
|
110
|
+
assert_equal @area, assigns(:selected_area)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_bulk_update
|
114
|
+
skip # < --------------------
|
115
|
+
xhr :post, :bulk_update, "areas"=>{
|
116
|
+
"0"=>{
|
117
|
+
"id"=> @area.id,
|
118
|
+
"coordinates"=>{"0"=>["44.471237230753886", "-73.23112146041126"], "1"=>["44.46936923281188", "-73.22386876723499"], "2"=>["44.4617123643827", "-73.22558538100452"]}
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
new_area = Area.find(@area.id)
|
123
|
+
puts new_area.to_a.to_yaml
|
124
|
+
assert_equal [44.450713, -73.227265], [area.border.first.points.first.x, area.border.first.points.first.y]
|
125
|
+
end
|
126
|
+
|
127
|
+
protected
|
128
|
+
def area_params(options = {})
|
129
|
+
{
|
130
|
+
:name => 'New Area',
|
131
|
+
:slug => 'new-area'
|
132
|
+
}.merge(options)
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Admin::UserActivityControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
login_as(:admin)
|
7
|
+
@user_activity = a UserActivity
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_require_admin
|
11
|
+
user = login_as(:regular_user)
|
12
|
+
get :show, :id => @user_activity
|
13
|
+
assert_equal "You're not authorized to access that page.", flash[:alert]
|
14
|
+
assert_redirected_to area_path(user.areas.first)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_get_show
|
18
|
+
get :show, :id => @user_activity
|
19
|
+
assert_response :success
|
20
|
+
assert_template :show
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_update
|
24
|
+
put :update, :id => @user_activity
|
25
|
+
assert (@user_activity.expires_at > Time.now)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Admin::UsersControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@user = a User
|
7
|
+
assert_created @user
|
8
|
+
|
9
|
+
@user.update_attribute(:role, 'admin')
|
10
|
+
assert @user.is_admin?
|
11
|
+
|
12
|
+
@area = Area.create_dummy(
|
13
|
+
:name => 'Oakledge',
|
14
|
+
:border => Polygon.from_coordinates([[
|
15
|
+
[44.450713, -73.227265],
|
16
|
+
[44.456838, -73.225943],
|
17
|
+
[44.455921, -73.218375],
|
18
|
+
[44.449365, -73.220694],
|
19
|
+
[44.450713, -73.227265]
|
20
|
+
]])
|
21
|
+
)
|
22
|
+
assert_created @area
|
23
|
+
|
24
|
+
@user.areas << @area
|
25
|
+
assert_equal @area, @user.areas.first
|
26
|
+
|
27
|
+
login_as(@user)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_require_admin
|
31
|
+
@user.update_attribute(:role, 'regular_user')
|
32
|
+
login_as(@user)
|
33
|
+
get :index
|
34
|
+
assert_equal "You're not authorized to access that page.", flash[:alert]
|
35
|
+
assert_redirected_to area_path(@user.areas.first)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_get_index
|
39
|
+
get :index
|
40
|
+
assert_response :success
|
41
|
+
assert_template :index
|
42
|
+
assert assigns(:users)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_get_new
|
46
|
+
get :new
|
47
|
+
assert_response :success
|
48
|
+
assert_template :new
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_create
|
52
|
+
assert_difference 'User.count', 1 do
|
53
|
+
post :create, :user => user_params(:password => 'testtest', :password_confirmation => 'testtest')
|
54
|
+
end
|
55
|
+
assert_equal 'User was successfully created.', flash[:notice]
|
56
|
+
assert_redirected_to admin_users_path
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_creation_fail
|
60
|
+
assert_no_difference 'User.count' do
|
61
|
+
post :create, :user => user_params(:first_name => '')
|
62
|
+
end
|
63
|
+
assert_response :success
|
64
|
+
assert_template :new
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_get_edit
|
68
|
+
user = a User
|
69
|
+
get :edit, :id => user
|
70
|
+
assert_response :success
|
71
|
+
assert_template :edit
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_update_from_users
|
75
|
+
user = a User
|
76
|
+
assert_not_equal 'user@domain.com', user.email
|
77
|
+
assert_not_equal 'Test', user.first_name
|
78
|
+
assert_not_equal 'Name', user.last_name
|
79
|
+
assert_not_equal 'Test Address', user.address
|
80
|
+
assert_not_equal 'Test City', user.city
|
81
|
+
assert_not_equal 'Test State', user.state
|
82
|
+
put :update, :id => user, :user => user_params, :area_id => nil
|
83
|
+
user.reload
|
84
|
+
assert_equal flash[:notice], 'User has been successfully updated.'
|
85
|
+
assert_equal 'user@domain.com', user.email
|
86
|
+
assert_equal 'Test', user.first_name
|
87
|
+
assert_equal 'Name', user.last_name
|
88
|
+
assert_equal 'Test Address', user.address
|
89
|
+
assert_equal 'Test City', user.city
|
90
|
+
assert_equal 'Test State', user.state
|
91
|
+
assert_redirected_to admin_users_path
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_update_from_areas
|
95
|
+
area = an Area
|
96
|
+
user = a User
|
97
|
+
assert_not_equal 'user@domain.com', user.email
|
98
|
+
assert_not_equal 'Test', user.first_name
|
99
|
+
assert_not_equal 'Name', user.last_name
|
100
|
+
assert_not_equal 'Test Address', user.address
|
101
|
+
assert_not_equal 'Test City', user.city
|
102
|
+
assert_not_equal 'Test State', user.state
|
103
|
+
put :update, :id => user, :user => user_params, :area_id => area
|
104
|
+
assert_equal flash[:notice], 'User has been successfully updated.'
|
105
|
+
assert_equal 'user@domain.com', assigns(:user).email
|
106
|
+
assert_equal 'Test', assigns(:user).first_name
|
107
|
+
assert_equal 'Name', assigns(:user).last_name
|
108
|
+
assert_equal 'Test Address', assigns(:user).address
|
109
|
+
assert_equal 'Test City', assigns(:user).city
|
110
|
+
assert_equal 'Test State', assigns(:user).state
|
111
|
+
assert_redirected_to admin_area_memberships_path(area)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_update_fails
|
115
|
+
user = a User
|
116
|
+
put :update, :id => user, :user => { :email => '' }
|
117
|
+
assert_response :success
|
118
|
+
assert_template :edit
|
119
|
+
assert_not_nil assigns(:user).email
|
120
|
+
assert assigns(:user).errors[:email].include?("Please enter your email address")
|
121
|
+
assert assigns(:user).errors[:email].include?("The email address you entered is to short")
|
122
|
+
assert assigns(:user).errors[:email].include?("The email address you entered is not valid")
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_destroy
|
126
|
+
user = a User
|
127
|
+
assert_difference 'User.count', -1 do
|
128
|
+
delete :destroy, :id => user
|
129
|
+
end
|
130
|
+
assert_redirected_to admin_users_path
|
131
|
+
end
|
132
|
+
|
133
|
+
protected
|
134
|
+
def user_params(options = {})
|
135
|
+
{
|
136
|
+
:email => 'user@domain.com',
|
137
|
+
:first_name => 'Test',
|
138
|
+
:last_name => 'Name',
|
139
|
+
:address => 'Test Address',
|
140
|
+
:city => 'Test City',
|
141
|
+
:state => 'Test State'
|
142
|
+
}.merge(options)
|
143
|
+
end
|
144
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Areas::IssuesControllerTest < ActionController::TestCase
|
4
|
+
def setup
|
5
|
+
login_as(:regular_user)
|
6
|
+
@current_user = @controller.current_user
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_get_index
|
10
|
+
issue = Issue.create_dummy
|
11
|
+
@current_user.memberships.create(:area => issue.area)
|
12
|
+
get :index, :area_id => issue.area
|
13
|
+
assert_response :success
|
14
|
+
assert_template :index
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_get_show
|
18
|
+
issue = an Issue
|
19
|
+
issue.update_attribute(:sent_at, Time.now)
|
20
|
+
@current_user.memberships.create(:area => issue.area)
|
21
|
+
get :show, :area_id => issue.area, :id => issue.number
|
22
|
+
assert_response :success
|
23
|
+
assert_template :show
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_get_archive
|
27
|
+
area = an Area
|
28
|
+
@current_user.memberships.create(:area => area)
|
29
|
+
get :index, :area_id => area, :year => 2011, :month => 01
|
30
|
+
assert_response :success
|
31
|
+
assert_template :index
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Areas::PostsControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
login_as(:regular_user)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_new
|
10
|
+
area = an Area
|
11
|
+
assert_created area
|
12
|
+
@controller.current_user.memberships.create!(:area => area)
|
13
|
+
get :new, :area_id => area
|
14
|
+
assert_response :success
|
15
|
+
assert_template :new
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_create
|
19
|
+
area = an Area
|
20
|
+
assert_created area
|
21
|
+
@controller.current_user.memberships.create!(:area => area)
|
22
|
+
assert_difference 'Post.count', 1 do
|
23
|
+
post :create, :area_id => area, :post => { :title => "New Post", :content => 'test'}
|
24
|
+
end
|
25
|
+
assert_redirected_to area_path(area)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_create_fails
|
29
|
+
area = an Area
|
30
|
+
assert_created area
|
31
|
+
@controller.current_user.memberships.create!(:area => area)
|
32
|
+
assert_no_difference 'Post.count' do
|
33
|
+
post :create, :area_id => area
|
34
|
+
end
|
35
|
+
assert_errors_on assigns(:post), :title, :content
|
36
|
+
assert_response :success
|
37
|
+
assert_template :new
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_shouldnt_post_to_other_forums
|
41
|
+
area = an Area
|
42
|
+
assert_created area
|
43
|
+
assert !@controller.current_user.is_admin?
|
44
|
+
assert_no_difference 'Post.count' do
|
45
|
+
post :create, :area_id => area
|
46
|
+
end
|
47
|
+
assert_redirected_to user_path
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class PasswordsControllerTest < ActionController::TestCase
|
4
|
+
def test_new
|
5
|
+
get :new
|
6
|
+
assert_response :success
|
7
|
+
assert_template 'new'
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_create
|
11
|
+
user = a User
|
12
|
+
assert_created user
|
13
|
+
assert_difference 'ActionMailer::Base.deliveries.size', 1 do
|
14
|
+
assert_emails 1 do
|
15
|
+
post :create, :email => user.email
|
16
|
+
assert_equal 'Email to reset password successfully sent.', flash[:notice]
|
17
|
+
assert_redirected_to login_path
|
18
|
+
user.reload
|
19
|
+
assert_not_nil user.perishable_token
|
20
|
+
end
|
21
|
+
end
|
22
|
+
response = ActionMailer::Base.deliveries.last
|
23
|
+
assert_equal 2, response.arguments['content'].length
|
24
|
+
response.arguments['content'].each do |content_type, body|
|
25
|
+
assert_match user.perishable_token, body
|
26
|
+
end
|
27
|
+
assert_equal user.email, response.to[0]
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_edit
|
31
|
+
user = a User
|
32
|
+
user.reset_perishable_token!
|
33
|
+
get :edit, :id => user.perishable_token
|
34
|
+
assert_response :success
|
35
|
+
assert_template 'edit'
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_edit_redirects_on_invalid_perishable_token
|
39
|
+
user = a User
|
40
|
+
user.reset_perishable_token!
|
41
|
+
get :edit, :id => user.perishable_token + 'bogus'
|
42
|
+
assert_redirected_to login_path
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_update
|
46
|
+
user = a User
|
47
|
+
user.reset_perishable_token!
|
48
|
+
assert !user.password_match?('newpassword')
|
49
|
+
put :update, :id => user.perishable_token, :user => {:password => 'newpassword', :password_confirmation => 'newpassword'}
|
50
|
+
assert_redirected_to user_path(user)
|
51
|
+
user.reload
|
52
|
+
assert_nil user.perishable_token
|
53
|
+
assert user.password_match?('newpassword')
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_update_redirects_on_invalid_perishable_token
|
57
|
+
user = a User
|
58
|
+
user.reset_perishable_token!
|
59
|
+
put :update, :id => user.perishable_token + 'bogus', :user => {:password => 'newpassword', :password_confirmation => 'newpassword'}
|
60
|
+
assert_redirected_to login_path
|
61
|
+
user.reload
|
62
|
+
assert_not_nil user.perishable_token
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RegistrationsControllerTest < ActionController::TestCase
|
4
|
+
include GeoKit::Geocoders
|
5
|
+
|
6
|
+
def test_index
|
7
|
+
get :index
|
8
|
+
assert_response :success
|
9
|
+
assert_template 'index'
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_new
|
13
|
+
get :new
|
14
|
+
assert_response :success
|
15
|
+
assert_template 'new'
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_create
|
19
|
+
oakledge = Area.create_dummy(
|
20
|
+
:name => 'Oakledge',
|
21
|
+
:border => Polygon.from_coordinates([[
|
22
|
+
[44.450713, -73.227265],
|
23
|
+
[44.456838, -73.225943],
|
24
|
+
[44.455921, -73.218375],
|
25
|
+
[44.449365, -73.220694],
|
26
|
+
[44.450713, -73.227265]
|
27
|
+
]])
|
28
|
+
)
|
29
|
+
Geokit::Geocoders::GoogleGeocoder.expects(:geocode).returns(success_geocode(44.4533518, -73.2219273))
|
30
|
+
|
31
|
+
post :create, :address => {:address=>"123 Fake St", :city=>"Burlington", :state=>"Vermont"}
|
32
|
+
assert assigns(:areas).empty?
|
33
|
+
assert_equal oakledge, assigns(:selected_area)
|
34
|
+
assert_response :success
|
35
|
+
assert_template 'create'
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_create_with_invalid_address
|
39
|
+
Address.any_instance.stubs(:closest_regions).returns([])
|
40
|
+
post :create, :address => {:address=>"123 Fake St"}
|
41
|
+
assert_redirected_to root_path
|
42
|
+
assert !assigns(:address).valid?
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_create_with_no_regions
|
46
|
+
Address.any_instance.stubs(:closest_regions).returns([])
|
47
|
+
post :create, :address => {:address=>"123 Fake St", :city=>"Burlington", :state=>"Vermont"}
|
48
|
+
assert_equal flash.now[:alert], "Sorry, we couldn't find any neighbourhoods close to you!"
|
49
|
+
assert_redirected_to root_path
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
def success_geocode(lat, lng)
|
54
|
+
@success = Geokit::GeoLoc.new({
|
55
|
+
:street_address=>"some address",
|
56
|
+
:city=>"SAN FRANCISCO",
|
57
|
+
:state=>"CA",
|
58
|
+
:country_code=>"US",
|
59
|
+
:lat=>lat,
|
60
|
+
:lng=>lng})
|
61
|
+
@success.success = true
|
62
|
+
@success
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SessionsControllerTest < ActionController::TestCase
|
4
|
+
def setup
|
5
|
+
@regular_user = a User
|
6
|
+
assert_created @regular_user
|
7
|
+
|
8
|
+
@regular_user.set_email_verification_key
|
9
|
+
@regular_user.role = 'regular_user'
|
10
|
+
@regular_user.save!
|
11
|
+
assert !@regular_user.is_admin?
|
12
|
+
assert !@regular_user.is_verified?
|
13
|
+
|
14
|
+
area = an Area
|
15
|
+
assert_created area
|
16
|
+
|
17
|
+
@regular_user.areas << area
|
18
|
+
assert_equal area, @regular_user.areas.first
|
19
|
+
end
|
20
|
+
|
21
|
+
# >> Login -----------------------------------------------------------
|
22
|
+
|
23
|
+
def test_get_new
|
24
|
+
get :new
|
25
|
+
assert_response :success
|
26
|
+
assert_template 'new'
|
27
|
+
assert !@controller.logged_in?
|
28
|
+
assert_nil @controller.current_user
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_should_login_with_email_and_redirect
|
32
|
+
@regular_user.update_attribute(:verified_at, Time.now)
|
33
|
+
assert @regular_user.is_verified?
|
34
|
+
|
35
|
+
post :create, :session_user => { :email => @regular_user.email, :password => @regular_user.password }
|
36
|
+
assert_equal "Welcome, you are now logged in.", flash[:notice]
|
37
|
+
assert_equal session[:user_id], @regular_user.id
|
38
|
+
assert_redirected_to area_path(@controller.current_user.areas.first)
|
39
|
+
assert @controller.logged_in?
|
40
|
+
assert_equal @controller.current_user, @regular_user
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_login_errors
|
44
|
+
post :create, :session_user => { :email => 'a', :password => 'b' }
|
45
|
+
assert_equal "Login failed. Did you mistype?", flash[:alert]
|
46
|
+
assert_nil session[:user]
|
47
|
+
assert_response :success
|
48
|
+
assert_template 'new'
|
49
|
+
assert !@controller.logged_in?
|
50
|
+
assert_nil @controller.current_user
|
51
|
+
|
52
|
+
assert !assigns(:session_user).valid?
|
53
|
+
assert_errors_on assigns(:session_user), :email, :password
|
54
|
+
assert assigns(:session_user).errors[:email].include?("The email address you entered is not valid")
|
55
|
+
assert assigns(:session_user).errors[:email].include?("The email address you entered is to short")
|
56
|
+
assert assigns(:session_user).errors[:password].include?("The password you entered is too short (minimum is 4 characters)")
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_login_with_email_not_verified
|
60
|
+
post :create, :session_user => { :email => @regular_user.email, :password => @regular_user.password }
|
61
|
+
assert_equal "Login failed. Did you mistype?", flash[:alert]
|
62
|
+
assert_nil session[:user]
|
63
|
+
assert_response :success
|
64
|
+
assert_template 'new'
|
65
|
+
assert !@controller.logged_in?
|
66
|
+
assert_nil @controller.current_user
|
67
|
+
assert_errors_on assigns(:session_user), :email
|
68
|
+
assert assigns(:session_user).errors[:email].include?("This email address needs to be verified before you can login. <a href='/resend-email-verification/#{@regular_user.email_verification_key}'>Resend verification</a>")
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_new_redirects_if_logged_in
|
72
|
+
login_as(@regular_user)
|
73
|
+
assert_equal session[:user_id], @regular_user.id
|
74
|
+
assert @controller.logged_in?
|
75
|
+
assert_equal @controller.current_user, @regular_user
|
76
|
+
|
77
|
+
get :new
|
78
|
+
assert_redirected_to user_path
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_create_redirects_if_logged_in
|
82
|
+
login_as(@regular_user)
|
83
|
+
assert_equal session[:user_id], @regular_user.id
|
84
|
+
assert @controller.logged_in?
|
85
|
+
assert_equal @controller.current_user, @regular_user
|
86
|
+
|
87
|
+
post :create, :session_user => { :email => @regular_user.email, :password => @regular_user.password }
|
88
|
+
assert_redirected_to user_path
|
89
|
+
end
|
90
|
+
|
91
|
+
# >> Logout -----------------------------------------------------------
|
92
|
+
|
93
|
+
def test_should_logout
|
94
|
+
login_as(@regular_user)
|
95
|
+
assert_equal session[:user_id], @regular_user.id
|
96
|
+
assert @controller.logged_in?
|
97
|
+
assert_equal @controller.current_user, @regular_user
|
98
|
+
|
99
|
+
get :destroy
|
100
|
+
assert_redirected_to root_path
|
101
|
+
assert_nil cookies[:login_token]
|
102
|
+
assert_nil session[:user_id]
|
103
|
+
@regular_user.reload
|
104
|
+
assert_nil @regular_user.remember_token
|
105
|
+
assert !@controller.logged_in?
|
106
|
+
assert_nil @controller.current_user
|
107
|
+
end
|
108
|
+
|
109
|
+
# >> Remember me -----------------------------------------------------------
|
110
|
+
|
111
|
+
def test_remember_me
|
112
|
+
@regular_user.update_attribute(:verified_at, Time.now)
|
113
|
+
assert @regular_user.is_verified?
|
114
|
+
|
115
|
+
post :create, :session_user => { :email => @regular_user.email, :password => @regular_user.password , :remember_me => '1' }
|
116
|
+
assert_equal request.session[:user_id], @regular_user.id
|
117
|
+
assert_not_nil assigns(:session_user).user.remember_token
|
118
|
+
assert_equal assigns(:session_user).user.remember_token, cookies['login_token']
|
119
|
+
end
|
120
|
+
end
|