appyantra_admin 0.0.1

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.
Files changed (261) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +24 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +101 -0
  5. data/Rakefile +26 -0
  6. data/app/assets/images/appyantra_admin/.gitkeep +0 -0
  7. data/app/assets/images/appyantra_admin/breadcrumb_divider.png +0 -0
  8. data/app/assets/images/appyantra_admin/btn_submit.png +0 -0
  9. data/app/assets/images/appyantra_admin/btn_submit_2.png +0 -0
  10. data/app/assets/images/appyantra_admin/btn_view_site.png +0 -0
  11. data/app/assets/images/appyantra_admin/header_bg.png +0 -0
  12. data/app/assets/images/appyantra_admin/header_shadow.png +0 -0
  13. data/app/assets/images/appyantra_admin/icn_add_user.png +0 -0
  14. data/app/assets/images/appyantra_admin/icn_alert_error.png +0 -0
  15. data/app/assets/images/appyantra_admin/icn_alert_info.png +0 -0
  16. data/app/assets/images/appyantra_admin/icn_alert_success.png +0 -0
  17. data/app/assets/images/appyantra_admin/icn_alert_warning.png +0 -0
  18. data/app/assets/images/appyantra_admin/icn_audio.png +0 -0
  19. data/app/assets/images/appyantra_admin/icn_categories.png +0 -0
  20. data/app/assets/images/appyantra_admin/icn_edit.png +0 -0
  21. data/app/assets/images/appyantra_admin/icn_edit_article.png +0 -0
  22. data/app/assets/images/appyantra_admin/icn_folder.png +0 -0
  23. data/app/assets/images/appyantra_admin/icn_jump_back.png +0 -0
  24. data/app/assets/images/appyantra_admin/icn_logout.png +0 -0
  25. data/app/assets/images/appyantra_admin/icn_new_article.png +0 -0
  26. data/app/assets/images/appyantra_admin/icn_photo.png +0 -0
  27. data/app/assets/images/appyantra_admin/icn_profile.png +0 -0
  28. data/app/assets/images/appyantra_admin/icn_search.png +0 -0
  29. data/app/assets/images/appyantra_admin/icn_security.png +0 -0
  30. data/app/assets/images/appyantra_admin/icn_settings.png +0 -0
  31. data/app/assets/images/appyantra_admin/icn_tags.png +0 -0
  32. data/app/assets/images/appyantra_admin/icn_trash.png +0 -0
  33. data/app/assets/images/appyantra_admin/icn_user.png +0 -0
  34. data/app/assets/images/appyantra_admin/icn_video.png +0 -0
  35. data/app/assets/images/appyantra_admin/icn_view_users.png +0 -0
  36. data/app/assets/images/appyantra_admin/module_footer_bg.png +0 -0
  37. data/app/assets/images/appyantra_admin/post_message.png +0 -0
  38. data/app/assets/images/appyantra_admin/secondary_bar.png +0 -0
  39. data/app/assets/images/appyantra_admin/secondary_bar_shadow.png +0 -0
  40. data/app/assets/images/appyantra_admin/sidebar.png +0 -0
  41. data/app/assets/images/appyantra_admin/sidebar_divider.png +0 -0
  42. data/app/assets/images/appyantra_admin/sidebar_shadow.png +0 -0
  43. data/app/assets/images/appyantra_admin/table_sorter_header.png +0 -0
  44. data/app/assets/images/appyantra_admin/trash.png +0 -0
  45. data/app/assets/images/appyantra_admin/view.png +0 -0
  46. data/app/assets/images/website/600x300.gif +0 -0
  47. data/app/assets/images/website/alert-overlay.png +0 -0
  48. data/app/assets/images/website/bg.png +0 -0
  49. data/app/assets/images/website/link_bg.png +0 -0
  50. data/app/assets/images/website/link_border.png +0 -0
  51. data/app/assets/images/website/place_holder_img.png +0 -0
  52. data/app/assets/images/website/triangle.gif +0 -0
  53. data/app/assets/javascripts/appyantra_admin/admin_settings.js.coffee +3 -0
  54. data/app/assets/javascripts/appyantra_admin/admins/profiles.js.coffee +3 -0
  55. data/app/assets/javascripts/appyantra_admin/application.js +9 -0
  56. data/app/assets/javascripts/appyantra_admin/hideshow.js +39 -0
  57. data/app/assets/javascripts/appyantra_admin/home.js.coffee +3 -0
  58. data/app/assets/javascripts/appyantra_admin/jquery-1.5.2.min.js +16 -0
  59. data/app/assets/javascripts/appyantra_admin/jquery.equalHeight.js +20 -0
  60. data/app/assets/javascripts/appyantra_admin/jquery.tablesorter.min.js +4 -0
  61. data/app/assets/javascripts/appyantra_admin/managed_models.js.coffee +7 -0
  62. data/app/assets/javascripts/website/application.js +8 -0
  63. data/app/assets/javascripts/website/ie/DD_belatedPNG_0.0.8a-min.js +13 -0
  64. data/app/assets/javascripts/website/jquery.easing.1.3.js +205 -0
  65. data/app/assets/javascripts/website/jquery.roundabout-1.0.min.js +41 -0
  66. data/app/assets/javascripts/website/jquery.roundabout-shapes-1.1.js +150 -0
  67. data/app/assets/stylesheets/appyantra_admin/admin_settings.css.scss +3 -0
  68. data/app/assets/stylesheets/appyantra_admin/admins/profiles.css.scss +3 -0
  69. data/app/assets/stylesheets/appyantra_admin/application.css +7 -0
  70. data/app/assets/stylesheets/appyantra_admin/ie/ie.css +43 -0
  71. data/app/assets/stylesheets/appyantra_admin/main.css +1191 -0
  72. data/app/assets/stylesheets/appyantra_admin/managed_models.css.scss +3 -0
  73. data/app/assets/stylesheets/website/application.css +7 -0
  74. data/app/assets/stylesheets/website/reset.css +53 -0
  75. data/app/assets/stylesheets/website/styles.css +889 -0
  76. data/app/controllers/appyantra_admin/admin_settings_controller.rb +101 -0
  77. data/app/controllers/appyantra_admin/application_controller.rb +30 -0
  78. data/app/controllers/appyantra_admin/assets_controller.rb +91 -0
  79. data/app/controllers/appyantra_admin/home_controller.rb +24 -0
  80. data/app/controllers/appyantra_admin/pages_controller.rb +123 -0
  81. data/app/controllers/appyantra_admin/passwords_controller.rb +28 -0
  82. data/app/controllers/appyantra_admin/profiles_controller.rb +94 -0
  83. data/app/controllers/appyantra_admin/sessions_controller.rb +20 -0
  84. data/app/controllers/appyantra_admin/users/confirmations_controller.rb +15 -0
  85. data/app/controllers/appyantra_admin/users/passwords_controller.rb +16 -0
  86. data/app/controllers/appyantra_admin/users/registrations_controller.rb +16 -0
  87. data/app/controllers/appyantra_admin/users/sessions_controller.rb +15 -0
  88. data/app/controllers/appyantra_admin/users/user_paths.rb +33 -0
  89. data/app/controllers/appyantra_admin/users_controller.rb +92 -0
  90. data/app/helpers/appyantra_admin/admin_settings_helper.rb +9 -0
  91. data/app/helpers/appyantra_admin/application_helper.rb +73 -0
  92. data/app/helpers/appyantra_admin/pages_helper.rb +38 -0
  93. data/app/models/activity_feed.rb +5 -0
  94. data/app/models/activity_log_observer.rb +58 -0
  95. data/app/models/admin.rb +11 -0
  96. data/app/models/admin_setting.rb +74 -0
  97. data/app/models/encrypted_text.rb +20 -0
  98. data/app/models/link.rb +5 -0
  99. data/app/models/page.rb +24 -0
  100. data/app/models/page_keyword.rb +4 -0
  101. data/app/models/person.rb +14 -0
  102. data/app/models/short_text.rb +23 -0
  103. data/app/models/text.rb +11 -0
  104. data/app/models/user.rb +11 -0
  105. data/app/sweepers/appyantra_admin/pages_sweeper.rb +20 -0
  106. data/app/views/appyantra_admin/admin_settings/edit.html.haml +7 -0
  107. data/app/views/appyantra_admin/admin_settings/index.html.haml +56 -0
  108. data/app/views/appyantra_admin/admin_settings/mail_settings.html.haml +7 -0
  109. data/app/views/appyantra_admin/admin_settings/new.html.haml +7 -0
  110. data/app/views/appyantra_admin/assets/display.js.haml +3 -0
  111. data/app/views/appyantra_admin/assets/edit.html.haml +7 -0
  112. data/app/views/appyantra_admin/assets/new.html.haml +7 -0
  113. data/app/views/appyantra_admin/assets/show.html.haml +55 -0
  114. data/app/views/appyantra_admin/home/index.html.haml +74 -0
  115. data/app/views/appyantra_admin/mailer/reset_password_instructions.html.haml +6 -0
  116. data/app/views/appyantra_admin/mailer/unlock_instructions.html.haml +6 -0
  117. data/app/views/appyantra_admin/pages/_form.html.haml +40 -0
  118. data/app/views/appyantra_admin/pages/_page.html.haml +43 -0
  119. data/app/views/appyantra_admin/pages/edit.html.haml +19 -0
  120. data/app/views/appyantra_admin/pages/index.html.haml +46 -0
  121. data/app/views/appyantra_admin/pages/new.html.haml +7 -0
  122. data/app/views/appyantra_admin/pages/show.html.haml +1 -0
  123. data/app/views/appyantra_admin/passwords/edit.html.haml +15 -0
  124. data/app/views/appyantra_admin/passwords/new.html.haml +11 -0
  125. data/app/views/appyantra_admin/profiles/_admin_profile_form.html.haml +12 -0
  126. data/app/views/appyantra_admin/profiles/_admin_user.html.haml +11 -0
  127. data/app/views/appyantra_admin/profiles/edit.html.haml +18 -0
  128. data/app/views/appyantra_admin/profiles/index.html.haml +51 -0
  129. data/app/views/appyantra_admin/profiles/new.html.haml +6 -0
  130. data/app/views/appyantra_admin/profiles/show.html.haml +10 -0
  131. data/app/views/appyantra_admin/profiles/show.js.haml +3 -0
  132. data/app/views/appyantra_admin/sessions/new.html.haml +17 -0
  133. data/app/views/appyantra_admin/shared/_asset_item.html.haml +15 -0
  134. data/app/views/appyantra_admin/shared/_assets_list.html.haml +6 -0
  135. data/app/views/appyantra_admin/shared/_formtastic_semantic_form.html.haml +3 -0
  136. data/app/views/appyantra_admin/shared/_hash_form.html.haml +7 -0
  137. data/app/views/appyantra_admin/shared/_links.haml +6 -0
  138. data/app/views/appyantra_admin/shared/types/_encrypted_text.html.haml +1 -0
  139. data/app/views/appyantra_admin/shared/types/_link.html.haml +1 -0
  140. data/app/views/appyantra_admin/shared/types/_short_text.html.haml +1 -0
  141. data/app/views/appyantra_admin/shared/types/_text.html.haml +1 -0
  142. data/app/views/appyantra_admin/unlocks/new.html.haml +10 -0
  143. data/app/views/appyantra_admin/users/_form.html.haml +12 -0
  144. data/app/views/appyantra_admin/users/_user.html.haml +11 -0
  145. data/app/views/appyantra_admin/users/edit.html.haml +18 -0
  146. data/app/views/appyantra_admin/users/index.html.haml +54 -0
  147. data/app/views/appyantra_admin/users/new.html.haml +6 -0
  148. data/app/views/appyantra_admin/users/show.html.haml +10 -0
  149. data/app/views/appyantra_admin/users/show.js.haml +3 -0
  150. data/app/views/layouts/application.html.haml +98 -0
  151. data/app/views/layouts/appyantra_admin/application.html.haml +106 -0
  152. data/app/views/layouts/appyantra_admin/landing_page.html.haml +30 -0
  153. data/app/views/layouts/appyantra_admin/website.html.haml +96 -0
  154. data/app/views/pages/_google_analytics.html.haml +11 -0
  155. data/app/views/pages/_meta_tags.html.haml +2 -0
  156. data/app/views/pages/page.html.haml +4 -0
  157. data/app/views/users/confirmations/new.html.haml +26 -0
  158. data/app/views/users/mailer/confirmation_instructions.html.haml +4 -0
  159. data/app/views/users/mailer/reset_password_instructions.html.haml +6 -0
  160. data/app/views/users/mailer/unlock_instructions.html.haml +5 -0
  161. data/app/views/users/passwords/edit.html.haml +31 -0
  162. data/app/views/users/passwords/new.html.haml +22 -0
  163. data/app/views/users/registrations/edit.html.haml +42 -0
  164. data/app/views/users/registrations/new.html.haml +35 -0
  165. data/app/views/users/sessions/new.html.haml +26 -0
  166. data/app/views/website/index.html.haml +50 -0
  167. data/appyantra_admin.gemspec +24 -0
  168. data/config/initializers/devise.rb +209 -0
  169. data/config/initializers/formtastic.rb +82 -0
  170. data/config/initializers/mail_settings.rb +11 -0
  171. data/config/initializers/secret_token.rb +7 -0
  172. data/config/initializers/session_store.rb +8 -0
  173. data/config/initializers/wrap_parameters.rb +14 -0
  174. data/config/routes.rb +71 -0
  175. data/db/migrate/20120123093508_create_links.rb +15 -0
  176. data/db/migrate/20120123093916_create_texts.rb +10 -0
  177. data/db/migrate/20120123094124_create_admin_settings.rb +12 -0
  178. data/db/migrate/20120124202814_devise_create_admins.rb +25 -0
  179. data/db/migrate/20120125093505_add_name_to_admins.rb +6 -0
  180. data/db/migrate/20120217075442_devise_create_users.rb +25 -0
  181. data/db/migrate/20120217090326_add_name_to_users.rb +6 -0
  182. data/db/migrate/20120224210009_create_pages.rb +19 -0
  183. data/db/migrate/20120302084134_add_group_to_admin_settings.rb +5 -0
  184. data/db/migrate/20120309075847_create_encrypted_texts.rb +10 -0
  185. data/db/migrate/20120309075904_create_short_texts.rb +10 -0
  186. data/db/migrate/20120312234850_add_seo_to_pages.rb +5 -0
  187. data/db/migrate/20120312235235_create_keywords.rb +10 -0
  188. data/db/migrate/20120314063338_create_activity_feeds.rb +15 -0
  189. data/lib/appyantra_admin.rb +49 -0
  190. data/lib/appyantra_admin/crypto.rb +43 -0
  191. data/lib/appyantra_admin/engine.rb +17 -0
  192. data/lib/appyantra_admin/utils.rb +27 -0
  193. data/lib/appyantra_admin/version.rb +3 -0
  194. data/lib/generators/appyantra_admin/install/USAGE +8 -0
  195. data/lib/generators/appyantra_admin/install/install_generator.rb +34 -0
  196. data/lib/generators/appyantra_admin/install/templates/appyantra_admin.rb +28 -0
  197. data/lib/tasks/appyantra_admin_tasks.rake +47 -0
  198. data/script/rails +6 -0
  199. data/test/dummy/.gitignore +36 -0
  200. data/test/dummy/.rspec +1 -0
  201. data/test/dummy/Gemfile +43 -0
  202. data/test/dummy/Guardfile +19 -0
  203. data/test/dummy/README +261 -0
  204. data/test/dummy/Rakefile +8 -0
  205. data/test/dummy/app/assets/javascripts/application.js +9 -0
  206. data/test/dummy/app/assets/stylesheets/application.css +7 -0
  207. data/test/dummy/app/controllers/application_controller.rb +3 -0
  208. data/test/dummy/app/helpers/application_helper.rb +2 -0
  209. data/test/dummy/app/models/product.rb +2 -0
  210. data/test/dummy/config.ru +4 -0
  211. data/test/dummy/config/application.rb +48 -0
  212. data/test/dummy/config/boot.rb +6 -0
  213. data/test/dummy/config/environment.rb +5 -0
  214. data/test/dummy/config/environments/development.rb +30 -0
  215. data/test/dummy/config/environments/production.rb +60 -0
  216. data/test/dummy/config/environments/test.rb +39 -0
  217. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  218. data/test/dummy/config/initializers/inflections.rb +10 -0
  219. data/test/dummy/config/initializers/mime_types.rb +5 -0
  220. data/test/dummy/config/initializers/secret_token.rb +7 -0
  221. data/test/dummy/config/initializers/session_store.rb +8 -0
  222. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  223. data/test/dummy/config/locales/en.yml +5 -0
  224. data/test/dummy/config/routes.rb +4 -0
  225. data/test/dummy/db/migrate/20120213070715_create_products.rb +11 -0
  226. data/test/dummy/db/seeds.rb +7 -0
  227. data/test/dummy/doc/README_FOR_APP +2 -0
  228. data/test/dummy/public/404.html +26 -0
  229. data/test/dummy/public/422.html +26 -0
  230. data/test/dummy/public/500.html +26 -0
  231. data/test/dummy/public/favicon.ico +0 -0
  232. data/test/dummy/public/robots.txt +5 -0
  233. data/test/dummy/script/rails +6 -0
  234. data/test/dummy/spec/controllers/appyantra_admin/admin_settings_controller_spec.rb +56 -0
  235. data/test/dummy/spec/controllers/appyantra_admin/assets_controller_spec.rb +64 -0
  236. data/test/dummy/spec/controllers/appyantra_admin/home_controller_spec.rb +28 -0
  237. data/test/dummy/spec/controllers/appyantra_admin/passwords_controller_spec.rb +40 -0
  238. data/test/dummy/spec/controllers/appyantra_admin/profiles_controller_spec.rb +88 -0
  239. data/test/dummy/spec/controllers/appyantra_admin/sessions_controller_spec.rb +32 -0
  240. data/test/dummy/spec/factories.rb +55 -0
  241. data/test/dummy/spec/factories/products.rb +9 -0
  242. data/test/dummy/spec/helpers/appyantra_admin/application_helper_spec.rb +31 -0
  243. data/test/dummy/spec/models/admin_setting_spec.rb +22 -0
  244. data/test/dummy/spec/models/admin_spec.rb +10 -0
  245. data/test/dummy/spec/models/encrypted_text_spec.rb +13 -0
  246. data/test/dummy/spec/models/link_spec.rb +5 -0
  247. data/test/dummy/spec/models/text_spec.rb +5 -0
  248. data/test/dummy/spec/requests/appyantra_admin/admin_user_auth_spec.rb +54 -0
  249. data/test/dummy/spec/requests/appyantra_admin/dashboard_spec.rb +34 -0
  250. data/test/dummy/spec/requests/appyantra_admin/mailer_spec.rb +72 -0
  251. data/test/dummy/spec/requests/appyantra_admin/manage_pages_spec.rb +209 -0
  252. data/test/dummy/spec/requests/appyantra_admin/manage_website_users_spec.rb +97 -0
  253. data/test/dummy/spec/requests/appyantra_admin/website_users_spec.rb +25 -0
  254. data/test/dummy/spec/routing/sessions_routing_spec.rb +11 -0
  255. data/test/dummy/spec/spec_helper.rb +51 -0
  256. data/test/dummy/spec/support/capybara.rb +7 -0
  257. data/test/dummy/spec/support/controller_macros.rb +8 -0
  258. data/test/dummy/spec/support/integration_macros.rb +40 -0
  259. data/test/dummy/spec/support/load_routes.rb +5 -0
  260. data/test/dummy/spec/support/matchers/user_matcher.rb +13 -0
  261. metadata +428 -0
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe EncryptedText do
4
+
5
+ let(:name) { "secret" }
6
+ let(:secret_text) { "This is some top secret text" }
7
+
8
+ it "can be saved and retrieved" do
9
+ encr_text = EncryptedText.create(name: name, value: secret_text)
10
+ encr_text.entity_value.should == secret_text
11
+ end
12
+
13
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Link do
4
+ # nothing to test
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Text do
4
+ # nothing to test
5
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Admin User Authentication" do
4
+
5
+ describe "User lands on the Home page" do
6
+ it "redirects to the login page" do
7
+ get appyantra_admin_home_path
8
+ response.should redirect_to(new_admin_session_path)
9
+ end
10
+
11
+ it "opens the Sign-in page" do
12
+ visit appyantra_admin_home_path
13
+ within "article.module header h3" do
14
+ page.should have_content("Sign in")
15
+ end
16
+ end
17
+ end
18
+
19
+ describe "Admin User logs in" do
20
+
21
+ let(:password) { "admin123"}
22
+ let(:admin_user) { FactoryGirl.create(:admin, password: password) }
23
+
24
+ it "should succeed for the correct username and password" do
25
+ visit new_admin_session_path
26
+ within(".mini_form_box") do
27
+ fill_in 'Email', with: admin_user.email
28
+ fill_in 'Password', with: password
29
+ click_button "Sign in"
30
+ end
31
+ find('.breadcrumbs_container .breadcrumbs .current').should have_content('Dashboard')
32
+ end
33
+
34
+ it "should fail for an incorrect username" do
35
+ visit new_admin_session_path
36
+ within(".mini_form_box") do
37
+ fill_in 'Email', with: 'unknown@appyantra.com'
38
+ fill_in 'Password', with: password
39
+ click_button "Sign in"
40
+ end
41
+ find('.landing_alert h4').should have_content('Invalid email or password.')
42
+ end
43
+
44
+ it "should fail for an incorrect password" do
45
+ visit new_admin_session_path
46
+ within(".mini_form_box") do
47
+ fill_in 'Email', with: admin_user.email
48
+ fill_in 'Password', with: password + 'x'
49
+ click_button "Sign in"
50
+ end
51
+ find('.landing_alert h4').should have_content('Invalid email or password.')
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Admin lands on the Dashboard" do
4
+
5
+ login_admin
6
+
7
+ describe "when admin is logged in" do
8
+
9
+ let!(:user) { FactoryGirl.create(:user) }
10
+ let!(:previous_title) {'previous_title'}
11
+ let!(:page1) { FactoryGirl.create(:page, title: 'test_page1', slug: 'test_page1') }
12
+ let!(:page2) { FactoryGirl.create(:page, title: previous_title, slug: 'test_page2') }
13
+ let!(:updated_title) {'updated_title'}
14
+
15
+ it "activity feed is displayed" do
16
+ visit edit_appyantra_admin_page_path(page2)
17
+
18
+ within ".page_edit" do
19
+ fill_in 'Title', with: updated_title
20
+ click_button "Update"
21
+ end
22
+
23
+ visit appyantra_admin_home_path
24
+
25
+ within ".activity_feeds .module_content" do
26
+ page.should have_content("User #{user.display_name} was created")
27
+ page.should have_content("#{page1.created_by.display_name} created Page #{page1.title}")
28
+ page.should have_content("#{page1.created_by.display_name} created Page #{previous_title}")
29
+ page.should have_content("Admin User updated Page #{updated_title}")
30
+ end
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Admin user manages mailer settings" do
4
+
5
+ after :all do
6
+ ActionMailer::Base.delivery_method = :test
7
+ end
8
+
9
+ describe "when an admin is logged in" do
10
+
11
+ login_admin
12
+
13
+ describe "admin creates mail settings" do
14
+
15
+ # mail settings
16
+ let(:default_url_host) {'localhost:3000'}
17
+ let(:delivery_method) {'smtp'}
18
+ let(:address) {'smtp.gmail.com'}
19
+ let(:port) {'587'}
20
+ let(:domain) {'localhost'}
21
+ let(:user_name) {'speedy'}
22
+ let(:password) {'speedy123'}
23
+ let(:authentication) {'plain'}
24
+ let(:enable_starttls_auto) {'true'}
25
+
26
+ it "is displayed on the settings page" do
27
+ visit settings_path
28
+ within "div#mail_settings" do
29
+ click_link 'Create Mail Settings'
30
+ end
31
+
32
+ within ".module" do
33
+ fill_in 'Default url host', with: default_url_host
34
+ fill_in 'Delivery method', with: delivery_method
35
+ fill_in 'Address', with: address
36
+ fill_in 'Port', with: port
37
+ fill_in 'Domain', with: domain
38
+ fill_in 'User name', with: user_name
39
+ fill_in 'Password', with: password
40
+ fill_in 'Authentication', with: authentication
41
+ fill_in 'Enable starttls auto', with: enable_starttls_auto
42
+ click_button "Update"
43
+ end
44
+
45
+ within "div#mail_settings" do
46
+ page.should have_content(default_url_host)
47
+ page.should have_content(delivery_method)
48
+ page.should have_content(address)
49
+ page.should have_content(port)
50
+ page.should have_content(domain)
51
+ page.should have_content(user_name)
52
+ page.should have_content(password)
53
+ page.should have_content(authentication)
54
+ page.should have_content(enable_starttls_auto)
55
+ end
56
+
57
+ ActionMailer::Base.default_url_options[:host].should == default_url_host
58
+ ActionMailer::Base.delivery_method.should == delivery_method.to_sym
59
+ smtp_settings = ActionMailer::Base.smtp_settings
60
+ smtp_settings[:address].should == address
61
+ smtp_settings[:port].should == port.to_i
62
+ smtp_settings[:domain].should == domain
63
+ smtp_settings[:user_name].should == user_name
64
+ smtp_settings[:password].should == password
65
+ smtp_settings[:authentication].should == authentication
66
+ smtp_settings[:enable_starttls_auto].should == (enable_starttls_auto == "true")
67
+
68
+ end
69
+ end
70
+ end
71
+
72
+ end
@@ -0,0 +1,209 @@
1
+ require 'spec_helper'
2
+ require 'fileutils'
3
+
4
+ describe "Admin manages website pages" do
5
+
6
+ before :all do
7
+ # clears the cached pages if generated during dev runs
8
+ FileUtils.rm_rf Rails.root.join("public/pages")
9
+ end
10
+
11
+ context "when no pages are present" do
12
+
13
+ login_admin
14
+
15
+ it "should show no pages present message" do
16
+
17
+ within "li.icn_pages" do
18
+ click_link 'Manage Website Pages'
19
+ end
20
+
21
+ within "div.tab_content" do
22
+ page.should have_content('No pages found.')
23
+ end
24
+
25
+ end
26
+ end
27
+
28
+ describe "when pages are created" do
29
+
30
+ let!(:page1) { FactoryGirl.create(:page) }
31
+ let!(:page2) { FactoryGirl.create(:page) }
32
+ let!(:page3) { FactoryGirl.create(:page) }
33
+
34
+ login_admin
35
+
36
+ it "should show a list of pages" do
37
+
38
+ visit appyantra_admin_pages_path
39
+
40
+ within "article.module header h3" do
41
+ page.should have_content("Website Pages")
42
+ end
43
+
44
+ within "div.tab_content" do
45
+ page.should have_content(page1.title)
46
+ page.should have_content(page2.title)
47
+ page.should have_content(page3.title)
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "when an admin is logged in" do
53
+
54
+ login_admin
55
+
56
+ describe "when admin creates and publishes a page" do
57
+
58
+ let!(:title) { 'About' }
59
+ let!(:category) { 'static' }
60
+ let!(:content) { 'This is an About page' }
61
+ let!(:description) { 'This is the About page description' }
62
+ let!(:layout) { "application" }
63
+
64
+ it "is created and can be accessed" do
65
+ visit appyantra_admin_pages_path
66
+ within "div.new_button_frame" do
67
+ click_button 'Create New'
68
+ end
69
+
70
+ within ".page_new" do
71
+ fill_in 'Title', with: title
72
+ choose 'Yes'
73
+ fill_in 'page_category_input', with: category
74
+ fill_in 'Content', with: content
75
+ select layout, from: 'Layout'
76
+ fill_in 'Description', with: description
77
+ click_button "Create"
78
+ end
79
+
80
+ within "section#main.column" do
81
+ page.should have_content("Website Page was successfully created")
82
+ end
83
+
84
+ slug = title.parameterize # assuming that title is unique
85
+ saved_page = Page.find_by_slug(slug)
86
+ saved_page.should be
87
+
88
+ visit display_page_path(saved_page.slug)
89
+ page.should have_content(content)
90
+ page.should have_xpath("//head/meta[@name='description'][@content='" + description + "']")
91
+ end
92
+ end
93
+
94
+ describe "when admin updates and publishes a page" do
95
+
96
+ let!(:title) { 'About' }
97
+ let!(:category) { 'static' }
98
+ let!(:content) { 'This is an About page' }
99
+ let!(:page4) { FactoryGirl.create(:page) }
100
+
101
+ it "is updated and can be accessed" do
102
+ visit edit_appyantra_admin_page_path(page4)
103
+
104
+ within ".page_edit" do
105
+ fill_in 'Title', with: title
106
+ choose 'Yes'
107
+ fill_in 'page_category_input', with: category
108
+ fill_in 'Content', with: content
109
+ click_button "Update"
110
+ end
111
+
112
+ within "section#main.column" do
113
+ page.should have_content("Website Page was successfully updated")
114
+ end
115
+
116
+ slug = title.parameterize # assuming that title is unique
117
+ saved_page = Page.find_by_slug(slug)
118
+ saved_page.should be
119
+ visit display_page_path(saved_page.slug)
120
+
121
+ page.should have_content(content)
122
+ end
123
+ end
124
+
125
+ describe "when admin creates an unpublished page" do
126
+ let!(:title) { 'About' }
127
+ let!(:category) { 'static' }
128
+ let!(:content) { 'This is an About page' }
129
+
130
+ it "is created and cannot be accessed" do
131
+ visit appyantra_admin_pages_path
132
+ within "div.new_button_frame" do
133
+ click_button 'Create New'
134
+ end
135
+
136
+ within ".page_new" do
137
+ fill_in 'Title', with: title
138
+ choose 'No'
139
+ fill_in 'page_category_input', with: category
140
+ fill_in 'Content', with: content
141
+ click_button "Create"
142
+ end
143
+
144
+ within "section#main.column" do
145
+ page.should have_content("Website Page was successfully created")
146
+ end
147
+
148
+ slug = title.parameterize # assuming that title is unique
149
+ saved_page = Page.find_by_slug(slug)
150
+ saved_page.should be
151
+ visit display_page_path(saved_page.slug)
152
+
153
+ page.should_not have_content(content)
154
+ page.should have_content('Page not found')
155
+ end
156
+ end
157
+
158
+ describe "when admin publishes a page" do
159
+
160
+ let!(:title) { 'Contact' }
161
+ let!(:page5) { FactoryGirl.create(:page, title: title, published: false, slug: title.parameterize) }
162
+
163
+ it "it can be accessed" do
164
+ visit edit_appyantra_admin_page_path(page5)
165
+
166
+ within ".page_edit" do
167
+ choose 'Yes'
168
+ click_button "Update"
169
+ end
170
+
171
+ within "section#main.column" do
172
+ page.should have_content("Website Page was successfully updated")
173
+ end
174
+
175
+ visit display_page_path(page5.slug)
176
+
177
+ page.should have_content(page5.content)
178
+
179
+ end
180
+ end
181
+
182
+ describe "when admin add keywords to a page" do
183
+
184
+ let!(:page6) { FactoryGirl.create(:page, slug: 'test_slug') }
185
+ let!(:keywords) { 'keyword1, keyword2' }
186
+
187
+ it "it generates a meta tag for keywords" do
188
+ visit edit_appyantra_admin_page_path(page6)
189
+
190
+ within ".page_keywords" do
191
+ fill_in 'keywords', with: keywords
192
+ click_button "Update"
193
+ end
194
+
195
+ within "section#main.column" do
196
+ page.should have_content("Page keywords were successfully updated")
197
+ page.should have_content(keywords)
198
+ end
199
+
200
+ visit display_page_path(page6.slug)
201
+
202
+ page.should have_xpath("//head/meta[@name='keywords'][@content='" + keywords + "']")
203
+
204
+ end
205
+ end
206
+
207
+ end
208
+
209
+ end
@@ -0,0 +1,97 @@
1
+ require 'spec_helper'
2
+ require 'support/matchers/user_matcher'
3
+
4
+ describe "Admin manages website users" do
5
+
6
+ context "when no users are present" do
7
+
8
+ login_admin
9
+
10
+ it "should show no users present message" do
11
+
12
+ within "li.icn_view_users" do
13
+ click_link 'Manage Website Users'
14
+ end
15
+
16
+ within "div.tab_content" do
17
+ page.should have_content('No users found.')
18
+ end
19
+
20
+ end
21
+ end
22
+
23
+ context "when users are created" do
24
+
25
+ let!(:user1) { FactoryGirl.create(:user) }
26
+ let!(:user2) { FactoryGirl.create(:user) }
27
+ let!(:user3) { FactoryGirl.create(:user) }
28
+
29
+ login_admin
30
+
31
+ it "should show a list of users" do
32
+
33
+ visit appyantra_admin_users_path
34
+
35
+ within "article.module header h3" do
36
+ page.should have_content("Website Users")
37
+ end
38
+
39
+ within "div.tab_content" do
40
+ page.should have_content(user1.first_name)
41
+ page.should have_content(user1.last_name)
42
+ page.should have_content(user2.first_name)
43
+ page.should have_content(user2.last_name)
44
+ page.should have_content(user3.first_name)
45
+ page.should have_content(user3.last_name)
46
+ end
47
+ end
48
+ end
49
+
50
+ context "when an admin is logged in" do
51
+
52
+ login_admin
53
+
54
+ let(:user1) { FactoryGirl.build(:user) }
55
+
56
+ it "he can create a user" do
57
+ visit appyantra_admin_users_path
58
+ within "div.new_button_frame" do
59
+ click_button 'Create New'
60
+ end
61
+
62
+ within ".mini_form_box" do
63
+ fill_in 'First name', with: user1.first_name
64
+ fill_in 'Last name', with: user1.last_name
65
+ fill_in 'Email', with: user1.email
66
+ click_button "Create"
67
+ end
68
+
69
+ within "section#main.column" do
70
+ page.should have_content("User Profile was successfully created")
71
+ end
72
+
73
+ "created user".should be_displayed_on_show_page(user1)
74
+ end
75
+
76
+ let!(:user2) { FactoryGirl.create(:user) }
77
+ let!(:updated_user) { FactoryGirl.build(:user, first_name: 'Trey', last_name: 'Parker', email: 'trey@appyantra.com') }
78
+
79
+ it "he can edit a user" do
80
+ visit edit_appyantra_admin_user_path(user2)
81
+
82
+ within ".mini_form_box" do
83
+ fill_in 'First name', with: updated_user.first_name
84
+ fill_in 'Last name', with: updated_user.last_name
85
+ fill_in 'Email', with: updated_user.email
86
+ click_button "Update"
87
+ end
88
+
89
+ within "section#main.column" do
90
+ page.should have_content("User Profile was successfully updated")
91
+ end
92
+
93
+ "updated user".should be_displayed_on_show_page(updated_user)
94
+
95
+ end
96
+ end
97
+ end