saulolso-activeadmin 0.2.2

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 (255) hide show
  1. data/.document +5 -0
  2. data/.gitignore +32 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.rdoc +76 -0
  5. data/Gemfile +26 -0
  6. data/LICENSE +25 -0
  7. data/README.rdoc +450 -0
  8. data/Rakefile +100 -0
  9. data/activeadmin.gemspec +28 -0
  10. data/cucumber.yml +2 -0
  11. data/features/comments/commenting.feature +99 -0
  12. data/features/comments/viewing_index.feature +19 -0
  13. data/features/dashboard.feature +26 -0
  14. data/features/edit_page.feature +77 -0
  15. data/features/first_boot.feature +16 -0
  16. data/features/global_navigation.feature +30 -0
  17. data/features/index/format_as_csv.feature +45 -0
  18. data/features/index/formats.feature +10 -0
  19. data/features/index/index_as_block.feature +15 -0
  20. data/features/index/index_as_blog.feature +50 -0
  21. data/features/index/index_as_grid.feature +45 -0
  22. data/features/index/index_as_table.feature +79 -0
  23. data/features/index/index_scopes.feature +52 -0
  24. data/features/index/pagination.feature +23 -0
  25. data/features/menu.feature +26 -0
  26. data/features/new_page.feature +75 -0
  27. data/features/registering_assets.feature +35 -0
  28. data/features/registering_resources.feature +33 -0
  29. data/features/show/default_content.feature +43 -0
  30. data/features/show/page_title.feature +33 -0
  31. data/features/sidebar_sections.feature +127 -0
  32. data/features/specifying_actions.feature +60 -0
  33. data/features/step_definitions/action_item_steps.rb +7 -0
  34. data/features/step_definitions/additional_web_steps.rb +67 -0
  35. data/features/step_definitions/asset_steps.rb +7 -0
  36. data/features/step_definitions/attribute_steps.rb +15 -0
  37. data/features/step_definitions/comment_steps.rb +8 -0
  38. data/features/step_definitions/configuration_steps.rb +31 -0
  39. data/features/step_definitions/dashboard_steps.rb +11 -0
  40. data/features/step_definitions/factory_steps.rb +28 -0
  41. data/features/step_definitions/flash_steps.rb +3 -0
  42. data/features/step_definitions/format_steps.rb +34 -0
  43. data/features/step_definitions/index_scope_steps.rb +20 -0
  44. data/features/step_definitions/menu_steps.rb +7 -0
  45. data/features/step_definitions/pagination_steps.rb +8 -0
  46. data/features/step_definitions/sidebar_steps.rb +11 -0
  47. data/features/step_definitions/tab_steps.rb +3 -0
  48. data/features/step_definitions/user_steps.rb +20 -0
  49. data/features/step_definitions/web_steps.rb +219 -0
  50. data/features/sti_resource.feature +49 -0
  51. data/features/support/env.rb +92 -0
  52. data/features/support/paths.rb +48 -0
  53. data/features/users/logging_in.feature +34 -0
  54. data/features/users/logging_out.feature +13 -0
  55. data/lib/active_admin/abstract_view_factory.rb +95 -0
  56. data/lib/active_admin/action_items.rb +37 -0
  57. data/lib/active_admin/application.rb +204 -0
  58. data/lib/active_admin/arbre/attributes.rb +20 -0
  59. data/lib/active_admin/arbre/class_list.rb +28 -0
  60. data/lib/active_admin/arbre/collection.rb +27 -0
  61. data/lib/active_admin/arbre/context.rb +8 -0
  62. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  63. data/lib/active_admin/arbre/document.rb +42 -0
  64. data/lib/active_admin/arbre/element.rb +151 -0
  65. data/lib/active_admin/arbre/html.rb +84 -0
  66. data/lib/active_admin/arbre/html5_elements.rb +47 -0
  67. data/lib/active_admin/arbre/tag.rb +137 -0
  68. data/lib/active_admin/arbre/text_node.rb +35 -0
  69. data/lib/active_admin/arbre.rb +23 -0
  70. data/lib/active_admin/asset_registration.rb +34 -0
  71. data/lib/active_admin/callbacks.rb +87 -0
  72. data/lib/active_admin/comments/comment.rb +21 -0
  73. data/lib/active_admin/comments/configuration.rb +18 -0
  74. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  75. data/lib/active_admin/comments/resource_helper.rb +17 -0
  76. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  77. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  78. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  79. data/lib/active_admin/comments/views.rb +3 -0
  80. data/lib/active_admin/comments.rb +88 -0
  81. data/lib/active_admin/component.rb +22 -0
  82. data/lib/active_admin/controller_action.rb +12 -0
  83. data/lib/active_admin/csv_builder.rb +45 -0
  84. data/lib/active_admin/dashboards/dashboard_controller.rb +47 -0
  85. data/lib/active_admin/dashboards/section.rb +34 -0
  86. data/lib/active_admin/dashboards.rb +48 -0
  87. data/lib/active_admin/devise.rb +43 -0
  88. data/lib/active_admin/dsl.rb +215 -0
  89. data/lib/active_admin/event.rb +31 -0
  90. data/lib/active_admin/form_builder.rb +109 -0
  91. data/lib/active_admin/helpers/optional_display.rb +34 -0
  92. data/lib/active_admin/iconic/icons.rb +142 -0
  93. data/lib/active_admin/iconic.rb +51 -0
  94. data/lib/active_admin/locales/da.yml +26 -0
  95. data/lib/active_admin/locales/en.yml +34 -0
  96. data/lib/active_admin/locales/es.yml +34 -0
  97. data/lib/active_admin/locales/pt.yml +34 -0
  98. data/lib/active_admin/menu.rb +42 -0
  99. data/lib/active_admin/menu_item.rb +73 -0
  100. data/lib/active_admin/namespace.rb +198 -0
  101. data/lib/active_admin/page_config.rb +15 -0
  102. data/lib/active_admin/renderer.rb +87 -0
  103. data/lib/active_admin/resource/belongs_to.rb +31 -0
  104. data/lib/active_admin/resource.rb +229 -0
  105. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  106. data/lib/active_admin/resource_controller/actions.rb +79 -0
  107. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  108. data/lib/active_admin/resource_controller/collection.rb +144 -0
  109. data/lib/active_admin/resource_controller/filters.rb +58 -0
  110. data/lib/active_admin/resource_controller/form.rb +42 -0
  111. data/lib/active_admin/resource_controller/menu.rb +29 -0
  112. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  113. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  114. data/lib/active_admin/resource_controller/sidebars.rb +38 -0
  115. data/lib/active_admin/resource_controller.rb +119 -0
  116. data/lib/active_admin/router.rb +85 -0
  117. data/lib/active_admin/scope.rb +17 -0
  118. data/lib/active_admin/sidebar.rb +43 -0
  119. data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
  120. data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
  121. data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
  122. data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
  123. data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
  124. data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
  125. data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
  126. data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
  127. data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
  128. data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
  129. data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
  130. data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
  131. data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
  132. data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
  133. data/lib/active_admin/stylesheets/active_admin.scss +429 -0
  134. data/lib/active_admin/version.rb +3 -0
  135. data/lib/active_admin/view_factory.rb +21 -0
  136. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  137. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  138. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  139. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  140. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  141. data/lib/active_admin/view_helpers/filter_form_helper.rb +185 -0
  142. data/lib/active_admin/view_helpers/form_helper.rb +12 -0
  143. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  144. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  145. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  146. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  147. data/lib/active_admin/view_helpers/table_helper.rb +12 -0
  148. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  149. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  150. data/lib/active_admin/view_helpers.rb +23 -0
  151. data/lib/active_admin/views/action_items.rb +17 -0
  152. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  153. data/lib/active_admin/views/components/columns.rb +47 -0
  154. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  155. data/lib/active_admin/views/components/panel.rb +26 -0
  156. data/lib/active_admin/views/components/scopes.rb +70 -0
  157. data/lib/active_admin/views/components/sidebar_section.rb +30 -0
  158. data/lib/active_admin/views/components/status_tag.rb +55 -0
  159. data/lib/active_admin/views/components/table_for.rb +193 -0
  160. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  161. data/lib/active_admin/views/header_renderer.rb +37 -0
  162. data/lib/active_admin/views/index_as_block.rb +24 -0
  163. data/lib/active_admin/views/index_as_blog.rb +89 -0
  164. data/lib/active_admin/views/index_as_grid.rb +49 -0
  165. data/lib/active_admin/views/index_as_table.rb +75 -0
  166. data/lib/active_admin/views/pages/base.rb +144 -0
  167. data/lib/active_admin/views/pages/dashboard.rb +59 -0
  168. data/lib/active_admin/views/pages/edit.rb +27 -0
  169. data/lib/active_admin/views/pages/index.rb +66 -0
  170. data/lib/active_admin/views/pages/new.rb +27 -0
  171. data/lib/active_admin/views/pages/show.rb +56 -0
  172. data/lib/active_admin/views/tabs_renderer.rb +58 -0
  173. data/lib/active_admin/views/templates/active_admin/dashboard/index.html.arb +1 -0
  174. data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  175. data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  176. data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
  177. data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
  178. data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
  179. data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
  180. data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
  181. data/lib/active_admin/views/templates/active_admin/resource/edit.html.arb +1 -0
  182. data/lib/active_admin/views/templates/active_admin/resource/index.csv.erb +20 -0
  183. data/lib/active_admin/views/templates/active_admin/resource/index.html.arb +1 -0
  184. data/lib/active_admin/views/templates/active_admin/resource/new.html.arb +1 -0
  185. data/lib/active_admin/views/templates/active_admin/resource/show.html.arb +1 -0
  186. data/lib/active_admin/views/templates/layouts/active_admin.html.erb +39 -0
  187. data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
  188. data/lib/active_admin/views.rb +8 -0
  189. data/lib/active_admin.rb +71 -0
  190. data/lib/activeadmin.rb +1 -0
  191. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  192. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  193. data/lib/generators/active_admin/install/templates/active_admin.js +51 -0
  194. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +78 -0
  195. data/lib/generators/active_admin/install/templates/active_admin_vendor.js +382 -0
  196. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  197. data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
  198. data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
  199. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
  200. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
  201. data/lib/generators/active_admin/install/templates/images/orderable.png +0 -0
  202. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  203. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  204. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  205. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  206. data/spec/integration/belongs_to_spec.rb +42 -0
  207. data/spec/spec_helper.rb +156 -0
  208. data/spec/support/integration_example_group.rb +33 -0
  209. data/spec/support/rails_template.rb +32 -0
  210. data/spec/support/rails_template_with_data.rb +32 -0
  211. data/spec/support/templates/cucumber.rb +24 -0
  212. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  213. data/spec/unit/action_builder_spec.rb +88 -0
  214. data/spec/unit/action_items_spec.rb +27 -0
  215. data/spec/unit/application_spec.rb +67 -0
  216. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  217. data/spec/unit/arbre/html/element_spec.rb +224 -0
  218. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  219. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  220. data/spec/unit/arbre/html_spec.rb +210 -0
  221. data/spec/unit/asset_registration_spec.rb +37 -0
  222. data/spec/unit/auto_link_spec.rb +39 -0
  223. data/spec/unit/belongs_to_spec.rb +45 -0
  224. data/spec/unit/breadcrumbs_spec.rb +110 -0
  225. data/spec/unit/comments_spec.rb +57 -0
  226. data/spec/unit/component_spec.rb +18 -0
  227. data/spec/unit/components/attributes_table_spec.rb +100 -0
  228. data/spec/unit/components/columns_spec.rb +75 -0
  229. data/spec/unit/components/panel_spec.rb +31 -0
  230. data/spec/unit/components/sidebar_section_spec.rb +37 -0
  231. data/spec/unit/components/status_tag_spec.rb +81 -0
  232. data/spec/unit/components/table_for_spec.rb +130 -0
  233. data/spec/unit/controller_filters_spec.rb +27 -0
  234. data/spec/unit/csv_builder_spec.rb +83 -0
  235. data/spec/unit/dashboard_controller_spec.rb +26 -0
  236. data/spec/unit/dashboard_section_spec.rb +56 -0
  237. data/spec/unit/dashboards_spec.rb +59 -0
  238. data/spec/unit/display_name_spec.rb +29 -0
  239. data/spec/unit/event_spec.rb +41 -0
  240. data/spec/unit/filter_form_builder_spec.rb +179 -0
  241. data/spec/unit/form_builder_spec.rb +238 -0
  242. data/spec/unit/menu_item_spec.rb +143 -0
  243. data/spec/unit/menu_spec.rb +53 -0
  244. data/spec/unit/namespace_spec.rb +203 -0
  245. data/spec/unit/pretty_format_spec.rb +35 -0
  246. data/spec/unit/registration_spec.rb +76 -0
  247. data/spec/unit/renderer_spec.rb +108 -0
  248. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  249. data/spec/unit/resource_controller_spec.rb +147 -0
  250. data/spec/unit/resource_spec.rb +290 -0
  251. data/spec/unit/routing_spec.rb +88 -0
  252. data/spec/unit/scope_spec.rb +31 -0
  253. data/spec/unit/tabs_renderer_spec.rb +85 -0
  254. data/spec/unit/view_factory_spec.rb +16 -0
  255. metadata +482 -0
@@ -0,0 +1,52 @@
1
+ Feature: Index Scoping
2
+
3
+ Viewing resources and scoping them
4
+
5
+ Scenario: Viewing resources with one scope and no default
6
+ Given 10 posts exist
7
+ And an index configuration of:
8
+ """
9
+ ActiveAdmin.register Post do
10
+ scope :all
11
+ end
12
+ """
13
+ Then I should see the scope "All" not selected
14
+ And I should see the scope "All" with the count 10
15
+ And I should see 10 posts in the table
16
+
17
+ Scenario: Viewing resources with one scope as the default
18
+ Given 10 posts exist
19
+ And an index configuration of:
20
+ """
21
+ ActiveAdmin.register Post do
22
+ scope :all, :default => true
23
+ end
24
+ """
25
+ Then I should see the scope "All" selected
26
+ And I should see the scope "All" with the count 10
27
+ And I should see 10 posts in the table
28
+
29
+ Scenario: Viewing resources with mulitple scopes as blocks
30
+ Given 10 posts exist
31
+ And an index configuration of:
32
+ """
33
+ ActiveAdmin.register Post do
34
+ scope 'Today', :default => true do |posts|
35
+ posts.where(["created_at > ? AND created_at < ?", ::Time.zone.now.beginning_of_day, ::Time.zone.now.end_of_day])
36
+ end
37
+ scope 'Tomorrow' do |posts|
38
+ posts.where(["created_at > ? AND created_at < ?", ::Time.zone.now.beginning_of_day + 1.day, ::Time.zone.now.end_of_day + 1.day])
39
+ end
40
+ end
41
+ """
42
+ Then I should see the scope "Today" selected
43
+ And I should see the scope "Tomorrow" not selected
44
+ And I should see the scope "Today" with the count 10
45
+ And I should see the scope "Tomorrow" with the count 0
46
+ And I should see 10 posts in the table
47
+ And I should see a link to "Tomorrow"
48
+
49
+ When I follow "Tomorrow"
50
+ Then I should see the scope "Tomorrow" selected
51
+ And I should see the scope "Today" not selected
52
+ And I should see a link to "Today"
@@ -0,0 +1,23 @@
1
+ Feature: Index Pagination
2
+
3
+ Background:
4
+ Given an index configuration of:
5
+ """
6
+ ActiveAdmin.register Post
7
+ """
8
+
9
+ Scenario: Viewing index when no resources exist
10
+ When I am on the index page for posts
11
+ Then I should see "No Posts found"
12
+ And I should not see pagination
13
+
14
+ Scenario: Viewing index when one page of resources exist
15
+ Given 20 posts exist
16
+ When I am on the index page for posts
17
+ Then I should see "Displaying all 20 Posts"
18
+ And I should not see pagination
19
+
20
+ Scenario: Viewing index when multiple pages of resources exist
21
+ Given 31 posts exist
22
+ When I am on the index page for posts
23
+ Then I should see pagination with 2 pages
@@ -0,0 +1,26 @@
1
+ Feature: Menu
2
+
3
+ Background:
4
+ Given I am logged in
5
+
6
+ Scenario: Hide the menu item
7
+ Given a configuration of:
8
+ """
9
+ ActiveAdmin.register Post do
10
+ menu false
11
+ end
12
+ """
13
+ When I am on the dashboard
14
+ Then I should not see a menu item for "Posts"
15
+
16
+ @wip
17
+ Scenario: Set the menu item label
18
+ Given a configuration of:
19
+ """
20
+ ActiveAdmin.register Post do
21
+ menu :label => "Articles"
22
+ end
23
+ """
24
+ When I am on the dashboard
25
+ Then I should see a menu item for "Articles"
26
+ And I should not see a menu item for "Posts"
@@ -0,0 +1,75 @@
1
+ Feature: New Page
2
+
3
+ Customizing the form to create new resources
4
+
5
+ Background:
6
+ Given a category named "Music" exists
7
+ Given a user named "John Doe" exists
8
+ And I am logged in
9
+ Given a configuration of:
10
+ """
11
+ ActiveAdmin.register Post
12
+ """
13
+ When I am on the index page for posts
14
+
15
+ Scenario: Default form with no config
16
+ Given I follow "New Post"
17
+ When I fill in "Title" with "Hello World"
18
+ And I fill in "Body" with "This is the body"
19
+ And I select "Music" from "Category"
20
+ And I select "John Doe" from "Author"
21
+ And I press "Create Post"
22
+ Then I should see "Post was successfully created."
23
+ And I should see the attribute "Title" with "Hello World"
24
+ And I should see the attribute "Body" with "This is the body"
25
+ And I should see the attribute "Category" with "Music"
26
+ And I should see the attribute "Author" with "John Doe"
27
+
28
+ Scenario: Generating a custom form
29
+ Given a configuration of:
30
+ """
31
+ ActiveAdmin.register Post do
32
+ form do |f|
33
+ f.inputs "Your Post" do
34
+ f.input :title
35
+ f.input :body
36
+ end
37
+ f.inputs "Publishing" do
38
+ f.input :published_at
39
+ end
40
+ f.buttons
41
+ end
42
+ end
43
+ """
44
+ Given I follow "New Post"
45
+ Then I should see a fieldset titled "Your Post"
46
+ And I should see a fieldset titled "Publishing"
47
+ When I fill in "Title" with "Hello World"
48
+ And I fill in "Body" with "This is the body"
49
+ And I press "Create Post"
50
+ Then I should see "Post was successfully created."
51
+ And I should see the attribute "Title" with "Hello World"
52
+ And I should see the attribute "Body" with "This is the body"
53
+
54
+ Scenario: Generating a form from a partial
55
+ Given "app/views/admin/posts/_form.html.erb" contains:
56
+ """
57
+ <% url = @post.new_record? ? admin_posts_path : admin_post_path(@post) %>
58
+ <%= active_admin_form_for @post, :url => url do |f|
59
+ f.inputs :title, :body
60
+ f.buttons
61
+ end %>
62
+ """
63
+ Given a configuration of:
64
+ """
65
+ ActiveAdmin.register Post do
66
+ form :partial => "form"
67
+ end
68
+ """
69
+ Given I follow "New Post"
70
+ When I fill in "Title" with "Hello World"
71
+ And I fill in "Body" with "This is the body"
72
+ And I press "Create Post"
73
+ Then I should see "Post was successfully created."
74
+ And I should see the attribute "Title" with "Hello World"
75
+ And I should see the attribute "Body" with "This is the body"
@@ -0,0 +1,35 @@
1
+ Feature: Registering Assets
2
+
3
+ Registering CSS and JS files
4
+
5
+ Background:
6
+ Given a configuration of:
7
+ """
8
+ ActiveAdmin.register Post
9
+ """
10
+ And I am logged in
11
+
12
+
13
+ Scenario: Viewing default asset files
14
+ When I am on the index page for posts
15
+ Then I should see the css file "admin/active_admin.css"
16
+ Then I should see the js file "active_admin_vendor.js"
17
+ Then I should see the js file "active_admin.js"
18
+
19
+ Scenario: Registering a CSS file
20
+ Given a configuration of:
21
+ """
22
+ ActiveAdmin.application.register_stylesheet "some-random-css.css"
23
+ ActiveAdmin.register Post
24
+ """
25
+ When I am on the index page for posts
26
+ Then I should see the css file "some-random-css.css"
27
+
28
+ Scenario: Registering a JS file
29
+ Given a configuration of:
30
+ """
31
+ ActiveAdmin.application.register_javascript "some-random-js.js"
32
+ ActiveAdmin.register Post
33
+ """
34
+ When I am on the index page for posts
35
+ Then I should see the js file "some-random-js.js"
@@ -0,0 +1,33 @@
1
+ Feature: Registering Resources
2
+
3
+ Registering resources within Active Admin
4
+
5
+ Background:
6
+ Given I am logged in
7
+ And a post with the title "Hello World" exists
8
+
9
+ Scenario: Registering a resource with the defaults
10
+ Given a configuration of:
11
+ """
12
+ ActiveAdmin.register Post
13
+ """
14
+ When I go to the dashboard
15
+ Then I should see "Posts"
16
+ When I follow "Posts"
17
+ Then I should see "Hello World"
18
+ When I follow "View"
19
+ Then I should see "Hello World"
20
+ And I should be in the resource section for Post
21
+
22
+ Scenario: Registering a resource with another name
23
+ Given a configuration of:
24
+ """
25
+ ActiveAdmin.register Post, :as => "My Post"
26
+ """
27
+ When I go to the dashboard
28
+ Then I should see "My Posts"
29
+ When I follow "My Posts"
30
+ Then I should see "Hello World"
31
+ When I follow "View"
32
+ Then I should see "Hello World"
33
+ And I should be in the resource section for My Post
@@ -0,0 +1,43 @@
1
+ Feature: Show - Default Content
2
+
3
+ Viewing the show page for a resource
4
+
5
+ Background:
6
+ Given a post with the title "Hello World" written by "Jane Doe" exists
7
+
8
+ Scenario: Viewing the default show page
9
+ Given a show configuration of:
10
+ """
11
+ ActiveAdmin.register Post
12
+ """
13
+ Then I should see the attribute "Title" with "Hello World"
14
+ And I should see the attribute "Body" with "Empty"
15
+ And I should see the attribute "Created At" with a nicely formatted datetime
16
+ And I should see the attribute "Author" with "jane_doe"
17
+ And I should see an action item button "Delete Post"
18
+ And I should see an action item button "Edit Post"
19
+
20
+ Scenario: Attributes should link when linked resource is registered
21
+ Given a show configuration of:
22
+ """
23
+ ActiveAdmin.register User
24
+ ActiveAdmin.register Post
25
+ """
26
+ Then I should see the attribute "Author" with "jane_doe"
27
+ And I should see a link to "jane_doe"
28
+
29
+ Scenario: Customizing the attributes table with a set of attributes
30
+ Given a show configuration of:
31
+ """
32
+ ActiveAdmin.register Post do
33
+
34
+ show do
35
+ attributes_table :title, :body, :created_at, :updated_at
36
+ end
37
+
38
+ end
39
+ """
40
+ Then I should see the attribute "Title" with "Hello World"
41
+ And I should see the attribute "Body" with "Empty"
42
+ And I should see the attribute "Created At" with a nicely formatted datetime
43
+ And I should not see the attribute "Author"
@@ -0,0 +1,33 @@
1
+ Feature: Show - Page Title
2
+
3
+ Modifying the page title on the show screen
4
+
5
+ Background:
6
+ Given a post with the title "Hello World" written by "Jane Doe" exists
7
+
8
+ Scenario: Set a method to be called on the resource as the title
9
+ Given a show configuration of:
10
+ """
11
+ ActiveAdmin.register Post do
12
+ show :title => :title
13
+ end
14
+ """
15
+ Then I should see the page title "Hello World"
16
+
17
+ Scenario: Set a string as the title
18
+ Given a show configuration of:
19
+ """
20
+ ActiveAdmin.register Post do
21
+ show :title => "Title From String"
22
+ end
23
+ """
24
+ Then I should see the page title "Title From String"
25
+
26
+ Scenario: Set a proc as the title
27
+ Given a show configuration of:
28
+ """
29
+ ActiveAdmin.register Post do
30
+ show :title => proc{|post| "Title: " + post.title }
31
+ end
32
+ """
33
+ Then I should see the page title "Title: Hello World"
@@ -0,0 +1,127 @@
1
+ Feature: Sidebar Sections
2
+
3
+ Creating and Configuring sidebar sections
4
+
5
+ Background:
6
+ Given I am logged in
7
+ And a post with the title "Hello World" exists
8
+
9
+ Scenario: Create a sidebar for all actions
10
+ Given a configuration of:
11
+ """
12
+ ActiveAdmin.register Post do
13
+ sidebar :help do
14
+ "Need help? Email us at help@example.com"
15
+ end
16
+ end
17
+ """
18
+ When I am on the index page for posts
19
+ Then I should see a sidebar titled "Help"
20
+ Then I should see /Need help/ within the sidebar "Help"
21
+
22
+ When I follow "View"
23
+ Then I should see a sidebar titled "Help"
24
+
25
+ When I follow "Edit Post"
26
+ Then I should see a sidebar titled "Help"
27
+
28
+ When I am on the index page for posts
29
+ When I follow "New Post"
30
+ Then I should see a sidebar titled "Help"
31
+
32
+
33
+ Scenario: Create a sidebar for only one action
34
+ Given a configuration of:
35
+ """
36
+ ActiveAdmin.register Post do
37
+ sidebar :help, :only => :index do
38
+ "Need help? Email us at help@example.com"
39
+ end
40
+ end
41
+ """
42
+ When I am on the index page for posts
43
+ Then I should see a sidebar titled "Help"
44
+ Then I should see /Need help/ within the sidebar "Help"
45
+
46
+ When I follow "View"
47
+ Then I should not see a sidebar titled "Help"
48
+
49
+ When I follow "Edit Post"
50
+ Then I should not see a sidebar titled "Help"
51
+
52
+ When I am on the index page for posts
53
+ When I follow "New Post"
54
+ Then I should not see a sidebar titled "Help"
55
+
56
+
57
+ Scenario: Create a sidebar for all except one action
58
+ Given a configuration of:
59
+ """
60
+ ActiveAdmin.register Post do
61
+ sidebar :help, :except => :index do
62
+ "Need help? Email us at help@example.com"
63
+ end
64
+ end
65
+ """
66
+ When I am on the index page for posts
67
+ Then I should not see a sidebar titled "Help"
68
+
69
+ When I follow "View"
70
+ Then I should see a sidebar titled "Help"
71
+
72
+ When I follow "Edit Post"
73
+ Then I should see a sidebar titled "Help"
74
+
75
+ When I am on the index page for posts
76
+ When I follow "New Post"
77
+ Then I should see a sidebar titled "Help"
78
+
79
+ Scenario: Create a sidebar with deep content
80
+ Given a configuration of:
81
+ """
82
+ ActiveAdmin.register Post do
83
+ sidebar :help do
84
+ ul do
85
+ li "First List First Item"
86
+ li "First List Second Item"
87
+ end
88
+ ul do
89
+ li "Second List First Item"
90
+ li "Second List Second Item"
91
+ end
92
+ end
93
+ end
94
+ """
95
+ When I am on the index page for posts
96
+ Then I should see a sidebar titled "Help"
97
+ And I should see "First List First Item" within "ul li"
98
+ And I should see "Second List Second Item" within "ul li"
99
+
100
+ Scenario: Rendering sidebar by default without a block or partial name
101
+ Given "app/views/admin/posts/_help_sidebar.html.erb" contains:
102
+ """
103
+ <p>Hello World from a partial</p>
104
+ """
105
+ Given a configuration of:
106
+ """
107
+ ActiveAdmin.register Post do
108
+ sidebar :help
109
+ end
110
+ """
111
+ When I am on the index page for posts
112
+ Then I should see "Hello World from a partial" within ".sidebar_section"
113
+
114
+ Scenario: Rendering a partial as the sidebar content
115
+ Given "app/views/admin/posts/_custom_help_partial.html.erb" contains:
116
+ """
117
+ <p>Hello World from a partial</p>
118
+ """
119
+ Given a configuration of:
120
+ """
121
+ ActiveAdmin.register Post do
122
+ sidebar :help, :partial => "custom_help_partial"
123
+ end
124
+ """
125
+ When I am on the index page for posts
126
+ Then I should see "Hello World from a partial" within ".sidebar_section"
127
+
@@ -0,0 +1,60 @@
1
+ Feature: Specifying Actions
2
+
3
+ Specifying which actions to allow on my resource
4
+
5
+ @allow-rescue
6
+ Scenario: Only creating the index action
7
+ Given a configuration of:
8
+ """
9
+ ActiveAdmin.register Post do
10
+ actions :index
11
+ end
12
+ """
13
+ And I am logged in
14
+ And a post with the title "Hello World" exists
15
+ When I am on the index page for posts
16
+ Then an "AbstractController::ActionNotFound" exception should be raised when I follow "View"
17
+
18
+ Scenario: Specify a custom collection action with template
19
+ Given a configuration of:
20
+ """
21
+ ActiveAdmin.register Post do
22
+ action_item(:only => :index) do
23
+ link_to('Import Posts', import_admin_posts_path)
24
+ end
25
+
26
+ collection_action :import
27
+ end
28
+ """
29
+ Given "app/views/admin/posts/import.html.erb" contains:
30
+ """
31
+ <p>We are currently working on this feature...</p>
32
+ """
33
+ And I am logged in
34
+ When I am on the index page for posts
35
+ And I follow "Import"
36
+ Then I should see "We are currently working on this feature"
37
+
38
+ Scenario: Specify a custom member action with template
39
+ Given a configuration of:
40
+ """
41
+ ActiveAdmin.register Post do
42
+ action_item(:only => :show) do
43
+ link_to('Review', review_admin_post_path)
44
+ end
45
+
46
+ member_action :review do
47
+ @post = Post.find(params[:id])
48
+ end
49
+ end
50
+ """
51
+ Given "app/views/admin/posts/review.html.erb" contains:
52
+ """
53
+ <h1>Review: <%= @post.title %></h1>
54
+ """
55
+ And I am logged in
56
+ And a post with the title "Hello World" exists
57
+ When I am on the index page for posts
58
+ And I follow "View"
59
+ And I follow "Review"
60
+ Then I should see "Review: Hello World"
@@ -0,0 +1,7 @@
1
+ Then /^I should see an action item button "([^"]*)"$/ do |content|
2
+ Then %{I should see "#{content}" within ".action_items a"}
3
+ end
4
+
5
+ Then /^I should not see an action item button "([^"]*)"$/ do |content|
6
+ Then %{I should not see "#{content}" within ".action_items"}
7
+ end
@@ -0,0 +1,67 @@
1
+ Then /^I should see a table header with "([^"]*)"$/ do |content|
2
+ Then "I should see \"#{content}\" within \"th\""
3
+ end
4
+
5
+ Then /^I should not see a table header with "([^"]*)"$/ do |content|
6
+ Then "I should not see \"#{content}\" within \"th\""
7
+ end
8
+
9
+ Then /^I should see a sortable table header with "([^"]*)"$/ do |content|
10
+ Then "I should see \"#{content}\" within \"th.sortable\""
11
+ end
12
+
13
+ Then /^the table "([^"]*)" should have (\d+) rows/ do |selector, count|
14
+ with_scope(selector) do
15
+ page.all(:css, 'tr').size.should == count.to_i
16
+ end
17
+ end
18
+
19
+ Then /^the table "([^"]*)" should have (\d+) columns/ do |selector, count|
20
+ with_scope(selector + " tr:first") do
21
+ page.all(:css, "td").size.should == count.to_i
22
+ end
23
+ end
24
+
25
+ Then /^there should be (\d+) "([^"]*)" tags within "([^"]*)"$/ do |count, tag, selector|
26
+ with_scope(selector) do
27
+ page.all(:css, tag).size.should == count.to_i
28
+ end
29
+ end
30
+
31
+ Then /^I should see a link to "([^"]*)"$/ do |link|
32
+ Then "I should see \"#{link}\" within \"a\""
33
+ end
34
+
35
+ Then /^I should see a link to \/([^\/]*)\/$/ do |regexp|
36
+ regexp = Regexp.new(regexp)
37
+ if page.respond_to? :should
38
+ page.should have_xpath('//a', :text => regexp)
39
+ else
40
+ assert page.has_xpath?('//a', :text => regexp)
41
+ end
42
+ end
43
+
44
+ Then /^an "([^"]*)" exception should be raised when I follow "([^"]*)"$/ do |error, link|
45
+ lambda {
46
+ When "I follow \"#{link}\""
47
+ }.should raise_error(error.constantize)
48
+ end
49
+
50
+ Then /^I should be in the resource section for (.+)$/ do |resource_name|
51
+ current_url.should include(resource_name.gsub(' ', '').underscore.pluralize)
52
+ end
53
+
54
+ Then /^I should wait and see "([^"]*)"(?: within "([^"]*)")?$/ do |text, selector|
55
+ sleep 1
56
+ Then 'show me the page'
57
+ selector ||= "*"
58
+ locate(:xpath, "//#{selector}[text()='#{text}']")
59
+ end
60
+
61
+ Then /^I should see the page title "([^"]*)"$/ do |title|
62
+ Then %{I should see "#{title}" within "h2#page_title"}
63
+ end
64
+
65
+ Then /^I should see a fieldset titled "([^"]*)"$/ do |title|
66
+ Then %{I should see "#{title}" within "fieldset legend"}
67
+ end
@@ -0,0 +1,7 @@
1
+ Then /^I should see the css file "([^"]*)"$/ do |path|
2
+ page.should have_xpath("//link[contains(@href, /stylesheets/#{path})]")
3
+ end
4
+
5
+ Then /^I should see the js file "([^"]*)"$/ do |path|
6
+ page.should have_xpath("//script[contains(@src, /javascripts/#{path})]")
7
+ end
@@ -0,0 +1,15 @@
1
+ Then /^I should see the attribute "([^"]*)" with "([^"]*)"$/ do |title, value|
2
+ Then "I should see \"#{title}\" within \".attributes_table th\""
3
+ And "I should see \"#{value}\" within \".attributes_table td\""
4
+ end
5
+
6
+ Then /^I should see the attribute "([^"]*)" with a nicely formatted datetime$/ do |title|
7
+ Then "I should see \"#{title}\" within \".attributes_table th\""
8
+ with_scope ".attributes_table td" do
9
+ page.body.should =~ /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
10
+ end
11
+ end
12
+
13
+ Then /^I should not see the attribute "([^"]*)"$/ do |title|
14
+ Then "I should not see \"#{title}\" within \".attributes_table th\""
15
+ end
@@ -0,0 +1,8 @@
1
+ Then /^I should see a comment by "([^"]*)"$/ do |name|
2
+ Then %{I should see "#{name}" within ".active_admin_comment_author"}
3
+ end
4
+
5
+ When /^I add a comment "([^"]*)"$/ do |comment|
6
+ When %{I fill in "active_admin_comment_body" with "#{comment}"}
7
+ And %{I press "Add Comment"}
8
+ end
@@ -0,0 +1,31 @@
1
+ Given /^a configuration of:$/ do |configuration_content|
2
+ eval configuration_content
3
+ Rails.application.reload_routes!
4
+ ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
5
+ end
6
+
7
+ Given /^an index configuration of:$/ do |configuration_content|
8
+ eval configuration_content
9
+ Rails.application.reload_routes!
10
+ ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
11
+
12
+ And 'I am logged in'
13
+ When "I am on the index page for posts"
14
+ end
15
+
16
+ Given /^a show configuration of:$/ do |configuration_content|
17
+ eval configuration_content
18
+ Rails.application.reload_routes!
19
+ ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
20
+
21
+ And 'I am logged in'
22
+ When "I am on the index page for posts"
23
+ And 'I follow "View"'
24
+ end
25
+
26
+ Given /^"([^"]*)" contains:$/ do |filename, contents|
27
+ require 'fileutils'
28
+ filepath = Rails.root + filename
29
+ FileUtils.mkdir_p File.dirname(filepath)
30
+ File.open(filepath, 'w+'){|f| f << contents }
31
+ end
@@ -0,0 +1,11 @@
1
+ Then /^I should see the default welcome message$/ do
2
+ Then %{I should see "Welcome to Active Admin" within "#dashboard_default_message"}
3
+ end
4
+
5
+ Then /^I should not see the default welcome message$/ do
6
+ Then %{I should not see "Welcome to Active Admin"}
7
+ end
8
+
9
+ Then /^I should see a dashboard widget "([^"]*)"$/ do |name|
10
+ Then %{I should see "#{name}" within ".dashboard .panel h3"}
11
+ end