typus 0.9.17

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 (154) hide show
  1. data/.gitignore +8 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +86 -0
  4. data/Rakefile +61 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/admin/master_controller.rb +354 -0
  7. data/app/controllers/typus_controller.rb +128 -0
  8. data/app/helpers/admin/form_helper.rb +386 -0
  9. data/app/helpers/admin/master_helper.rb +104 -0
  10. data/app/helpers/admin/public_helper.rb +27 -0
  11. data/app/helpers/admin/sidebar_helper.rb +236 -0
  12. data/app/helpers/admin/table_helper.rb +227 -0
  13. data/app/helpers/typus_helper.rb +194 -0
  14. data/app/models/typus_mailer.rb +14 -0
  15. data/app/models/typus_user.rb +5 -0
  16. data/app/views/admin/dashboard/_sidebar.html.erb +9 -0
  17. data/app/views/admin/resources/edit.html.erb +24 -0
  18. data/app/views/admin/resources/index.html.erb +23 -0
  19. data/app/views/admin/resources/new.html.erb +22 -0
  20. data/app/views/admin/resources/show.html.erb +18 -0
  21. data/app/views/admin/shared/_footer.html.erb +1 -0
  22. data/app/views/admin/shared/_pagination.html.erb +28 -0
  23. data/app/views/layouts/admin.html.erb +73 -0
  24. data/app/views/layouts/typus.html.erb +29 -0
  25. data/app/views/typus/dashboard.html.erb +9 -0
  26. data/app/views/typus/recover_password.html.erb +7 -0
  27. data/app/views/typus/reset_password.html.erb +15 -0
  28. data/app/views/typus/sign_in.html.erb +9 -0
  29. data/app/views/typus/sign_up.html.erb +7 -0
  30. data/app/views/typus_mailer/reset_password_link.erb +11 -0
  31. data/config/locales/typus/de.yml +109 -0
  32. data/config/locales/typus/es.yml +109 -0
  33. data/config/locales/typus/language.yml.template +113 -0
  34. data/config/locales/typus/pt-BR.yml +111 -0
  35. data/config/locales/typus/ru.yml +111 -0
  36. data/generators/typus/templates/config/initializers/typus.rb +33 -0
  37. data/generators/typus/templates/config/typus/README +51 -0
  38. data/generators/typus/templates/config/typus/application.yml +6 -0
  39. data/generators/typus/templates/config/typus/application_roles.yml +23 -0
  40. data/generators/typus/templates/config/typus/typus.yml +14 -0
  41. data/generators/typus/templates/config/typus/typus_roles.yml +2 -0
  42. data/generators/typus/templates/db/create_typus_users.rb +21 -0
  43. data/generators/typus/templates/public/images/admin/arrow_down.gif +0 -0
  44. data/generators/typus/templates/public/images/admin/arrow_up.gif +0 -0
  45. data/generators/typus/templates/public/images/admin/spinner.gif +0 -0
  46. data/generators/typus/templates/public/images/admin/status_false.gif +0 -0
  47. data/generators/typus/templates/public/images/admin/status_true.gif +0 -0
  48. data/generators/typus/templates/public/images/admin/trash.gif +0 -0
  49. data/generators/typus/templates/public/javascripts/admin/application.js +14 -0
  50. data/generators/typus/templates/public/stylesheets/admin/reset.css +68 -0
  51. data/generators/typus/templates/public/stylesheets/admin/screen.css +729 -0
  52. data/generators/typus/typus_generator.rb +122 -0
  53. data/generators/typus_update_schema_to_01/templates/config/typus.yml +14 -0
  54. data/generators/typus_update_schema_to_01/templates/migration.rb +11 -0
  55. data/generators/typus_update_schema_to_01/typus_update_schema_to_01_generator.rb +19 -0
  56. data/lib/typus.rb +122 -0
  57. data/lib/typus/active_record.rb +307 -0
  58. data/lib/typus/authentication.rb +142 -0
  59. data/lib/typus/configuration.rb +85 -0
  60. data/lib/typus/extensions/routes.rb +15 -0
  61. data/lib/typus/format.rb +55 -0
  62. data/lib/typus/generator.rb +81 -0
  63. data/lib/typus/hash.rb +8 -0
  64. data/lib/typus/locale.rb +17 -0
  65. data/lib/typus/object.rb +21 -0
  66. data/lib/typus/quick_edit.rb +40 -0
  67. data/lib/typus/reloader.rb +15 -0
  68. data/lib/typus/string.rb +11 -0
  69. data/lib/typus/templates/index.html.erb +11 -0
  70. data/lib/typus/templates/resource_controller.rb.erb +15 -0
  71. data/lib/typus/templates/resource_controller_test.rb.erb +10 -0
  72. data/lib/typus/templates/resources_controller.rb.erb +37 -0
  73. data/lib/typus/user.rb +134 -0
  74. data/lib/vendor/active_record.rb +15 -0
  75. data/lib/vendor/paginator.rb +143 -0
  76. data/rails/init.rb +3 -0
  77. data/tasks/typus_tasks.rake +32 -0
  78. data/test/config/broken/application.yml +68 -0
  79. data/test/config/broken/application_roles.yml +20 -0
  80. data/test/config/broken/empty.yml +0 -0
  81. data/test/config/broken/empty_roles.yml +0 -0
  82. data/test/config/broken/undefined.yml +3 -0
  83. data/test/config/broken/undefined_roles.yml +6 -0
  84. data/test/config/default/typus.yml +14 -0
  85. data/test/config/default/typus_roles.yml +2 -0
  86. data/test/config/empty/empty_01.yml +0 -0
  87. data/test/config/empty/empty_01_roles.yml +0 -0
  88. data/test/config/empty/empty_02.yml +0 -0
  89. data/test/config/empty/empty_02_roles.yml +0 -0
  90. data/test/config/locales/es.yml +10 -0
  91. data/test/config/ordered/001_roles.yml +2 -0
  92. data/test/config/ordered/002_roles.yml +2 -0
  93. data/test/config/unordered/app_one_roles.yml +2 -0
  94. data/test/config/unordered/app_two_roles.yml +2 -0
  95. data/test/config/working/application.yml +68 -0
  96. data/test/config/working/application_roles.yml +22 -0
  97. data/test/config/working/typus.yml +14 -0
  98. data/test/config/working/typus_roles.yml +2 -0
  99. data/test/fixtures/app/controllers/admin/assets_controller.rb +2 -0
  100. data/test/fixtures/app/controllers/admin/categories_controller.rb +2 -0
  101. data/test/fixtures/app/controllers/admin/comments_controller.rb +2 -0
  102. data/test/fixtures/app/controllers/admin/pages_controller.rb +2 -0
  103. data/test/fixtures/app/controllers/admin/posts_controller.rb +2 -0
  104. data/test/fixtures/app/controllers/admin/status_controller.rb +6 -0
  105. data/test/fixtures/app/controllers/admin/typus_users_controller.rb +2 -0
  106. data/test/fixtures/app/controllers/admin/watch_dog_controller.rb +6 -0
  107. data/test/fixtures/app/views/admin/comments/_edit.html.erb +1 -0
  108. data/test/fixtures/app/views/admin/comments/_index.html.erb +1 -0
  109. data/test/fixtures/app/views/admin/comments/_new.html.erb +1 -0
  110. data/test/fixtures/app/views/admin/comments/_show.html.erb +1 -0
  111. data/test/fixtures/app/views/admin/comments/_sidebar.html.erb +1 -0
  112. data/test/fixtures/app/views/admin/dashboard/_content.html.erb +1 -0
  113. data/test/fixtures/app/views/admin/dashboard/_sidebar.html.erb +1 -0
  114. data/test/fixtures/app/views/admin/resources/_sidebar.html.erb +1 -0
  115. data/test/fixtures/app/views/admin/shared/_footer.html.erb +1 -0
  116. data/test/fixtures/app/views/admin/status/index.html.erb +1 -0
  117. data/test/fixtures/app/views/admin/templates/_datepicker.html.erb +1 -0
  118. data/test/fixtures/assets.yml +11 -0
  119. data/test/fixtures/categories.yml +14 -0
  120. data/test/fixtures/comments.yml +27 -0
  121. data/test/fixtures/pages.yml +41 -0
  122. data/test/fixtures/posts.yml +37 -0
  123. data/test/fixtures/typus_users.yml +54 -0
  124. data/test/functional/admin/assets_controller_test.rb +57 -0
  125. data/test/functional/admin/categories_controller_test.rb +106 -0
  126. data/test/functional/admin/comments_controller_test.rb +120 -0
  127. data/test/functional/admin/master_controller_test.rb +5 -0
  128. data/test/functional/admin/posts_controller_test.rb +261 -0
  129. data/test/functional/admin/status_controller_test.rb +43 -0
  130. data/test/functional/admin/typus_users_controller_test.rb +239 -0
  131. data/test/functional/typus_controller_test.rb +321 -0
  132. data/test/helper.rb +51 -0
  133. data/test/helpers/admin/form_helper_test.rb +337 -0
  134. data/test/helpers/admin/master_helper_test.rb +69 -0
  135. data/test/helpers/admin/public_helper_test.rb +26 -0
  136. data/test/helpers/admin/sidebar_helper_test.rb +335 -0
  137. data/test/helpers/admin/table_helper_test.rb +239 -0
  138. data/test/helpers/typus_helper_test.rb +117 -0
  139. data/test/lib/active_record_test.rb +382 -0
  140. data/test/lib/configuration_test.rb +94 -0
  141. data/test/lib/hash_test.rb +11 -0
  142. data/test/lib/routes_test.rb +71 -0
  143. data/test/lib/string_test.rb +25 -0
  144. data/test/lib/typus_test.rb +85 -0
  145. data/test/models.rb +51 -0
  146. data/test/schema.rb +64 -0
  147. data/test/unit/typus_mailer_test.rb +33 -0
  148. data/test/unit/typus_test.rb +17 -0
  149. data/test/unit/typus_user_roles_test.rb +90 -0
  150. data/test/unit/typus_user_test.rb +177 -0
  151. data/test/vendor/active_record_test.rb +18 -0
  152. data/test/vendor/paginator_test.rb +136 -0
  153. data/typus.gemspec +228 -0
  154. metadata +241 -0
@@ -0,0 +1,117 @@
1
+ require 'test/helper'
2
+
3
+ class TypusHelperTest < ActiveSupport::TestCase
4
+
5
+ include TypusHelper
6
+ include ActionView::Helpers::UrlHelper
7
+ include ActionView::Helpers::TextHelper
8
+ include ActionController::UrlWriter
9
+
10
+ def test_applications
11
+ assert true
12
+ end
13
+
14
+ def test_resources
15
+ assert true
16
+ end
17
+
18
+ def test_typus_block_when_partial_does_not_exist
19
+ output = typus_block(:resource => 'posts', :location => 'sidebar', :partial => 'pum')
20
+ assert output.nil?
21
+ end
22
+
23
+ def test_page_title
24
+ params = {}
25
+ options = { :app_name => 'whatistypus.com' }
26
+ Typus::Configuration.stubs(:options).returns(options)
27
+ output = page_title('custom_action')
28
+ assert_equal 'whatistypus.com - Custom action', output
29
+ end
30
+
31
+ def test_header_with_root_path
32
+
33
+ # Add root named route
34
+ ActionController::Routing::Routes.add_named_route :root, "/", { :controller => "posts" }
35
+
36
+ # ActionView::Helpers::UrlHelper does not support strings, which are returned by named routes
37
+ # link root_path
38
+ self.stubs(:link_to).returns(%(<a href="/">View site</a>))
39
+ self.stubs(:link_to_unless_current).returns(%(<a href="/admin/dashboard">Dashboard</a>))
40
+
41
+ output = header
42
+ expected = <<-HTML
43
+ <h1>#{Typus::Configuration.options[:app_name]}</h1>
44
+ <ul>
45
+ <li><a href="/admin/dashboard">Dashboard</a></li>
46
+ <li><a href="/admin/dashboard">Dashboard</a></li>
47
+ <li><a href="/">View site</a></li>
48
+ </ul>
49
+ HTML
50
+
51
+ assert_equal expected, output
52
+
53
+ end
54
+
55
+ def test_header_without_root_path
56
+
57
+ # Remove root route from list
58
+ ActionController::Routing::Routes.named_routes.routes.reject! {|key, route| key == :root }
59
+
60
+ self.stubs(:link_to_unless_current).returns(%(<a href="/admin/dashboard">Dashboard</a>))
61
+
62
+ output = header
63
+ expected = <<-HTML
64
+ <h1>#{Typus::Configuration.options[:app_name]}</h1>
65
+ <ul>
66
+ <li><a href="/admin/dashboard">Dashboard</a></li>
67
+ <li><a href="/admin/dashboard">Dashboard</a></li>
68
+ </ul>
69
+ HTML
70
+
71
+ assert_equal expected, output
72
+
73
+ end
74
+
75
+ def test_display_flash_message
76
+
77
+ message = { :test => 'This is the message.' }
78
+
79
+ output = display_flash_message(message)
80
+ expected = <<-HTML
81
+ <div id="flash" class="test">
82
+ <p>This is the message.</p>
83
+ </div>
84
+ HTML
85
+
86
+ assert_equal expected, output
87
+
88
+ message = {}
89
+ output = display_flash_message(message)
90
+ assert output.nil?
91
+
92
+ end
93
+
94
+ def test_typus_message
95
+ output = typus_message('chunky bacon', 'yay')
96
+ expected = <<-HTML
97
+ <div id="flash" class="yay">
98
+ <p>chunky bacon</p>
99
+ </div>
100
+ HTML
101
+ assert_equal expected, output
102
+ end
103
+
104
+ def test_locales
105
+
106
+ options = { :locales => [ [ "English", :en ], [ "Español", :es ] ] }
107
+ Typus::Configuration.stubs(:options).returns(options)
108
+
109
+ output = locales('set_locale')
110
+ expected = <<-HTML
111
+ <p>Set language to <a href=\"set_locale?locale=en\">english</a>, <a href=\"set_locale?locale=es\">español</a>.</p>
112
+ HTML
113
+ assert_equal expected, output
114
+
115
+ end
116
+
117
+ end
@@ -0,0 +1,382 @@
1
+ require 'test/helper'
2
+
3
+ class ActiveRecordTest < ActiveSupport::TestCase
4
+
5
+ def test_should_verify_model_fields_is_an_instance_of_active_support_ordered_hash
6
+ assert TypusUser.model_fields.instance_of?(ActiveSupport::OrderedHash)
7
+ end
8
+
9
+ def test_should_return_model_fields_for_typus_user
10
+ expected_fields = [[:id, :integer],
11
+ [:first_name, :string],
12
+ [:last_name, :string],
13
+ [:role, :string],
14
+ [:email, :string],
15
+ [:status, :boolean],
16
+ [:token, :string],
17
+ [:salt, :string],
18
+ [:crypted_password, :string],
19
+ [:created_at, :datetime],
20
+ [:updated_at, :datetime]]
21
+ assert_equal expected_fields.map { |i| i.first }, TypusUser.model_fields.keys
22
+ assert_equal expected_fields.map { |i| i.last }, TypusUser.model_fields.values
23
+ end
24
+
25
+ def test_should_return_model_fields_for_post
26
+ expected_fields = [[:id, :integer],
27
+ [:title, :string],
28
+ [:body, :text],
29
+ [:status, :boolean],
30
+ [:favorite_comment_id, :integer],
31
+ [:created_at, :datetime],
32
+ [:updated_at, :datetime],
33
+ [:published_at, :datetime],
34
+ [:typus_user_id, :integer]]
35
+ assert_equal expected_fields.map { |i| i.first }, Post.model_fields.keys
36
+ assert_equal expected_fields.map { |i| i.last }, Post.model_fields.values
37
+ end
38
+
39
+ def test_should_verify_model_relationships_is_an_instance_of_active_support_ordered_hash
40
+ assert TypusUser.model_relationships.instance_of?(ActiveSupport::OrderedHash)
41
+ end
42
+
43
+ def test_should_return_model_relationships_for_post
44
+ expected = [[:comments, :has_many],
45
+ [:categories, :has_and_belongs_to_many],
46
+ [:user, nil],
47
+ [:assets, :has_many]]
48
+ expected.each do |i|
49
+ assert_equal i.last, Post.model_relationships[i.first]
50
+ end
51
+ end
52
+
53
+ def test_should_return_description_of_a_model
54
+ assert TypusUser.respond_to?(:typus_description)
55
+ assert_equal "System Users Administration", TypusUser.typus_description
56
+ end
57
+
58
+ def test_should_return_typus_fields_for_list_for_typus_user
59
+ expected_fields = [['email', :string],
60
+ ['role', :selector],
61
+ ['status', :boolean]]
62
+ assert_equal expected_fields.map { |i| i.first }, TypusUser.typus_fields_for('list').keys
63
+ assert_equal expected_fields.map { |i| i.last }, TypusUser.typus_fields_for('list').values
64
+ assert_equal expected_fields.map { |i| i.first }, TypusUser.typus_fields_for(:list).keys
65
+ assert_equal expected_fields.map { |i| i.last }, TypusUser.typus_fields_for(:list).values
66
+ end
67
+
68
+ def test_should_return_typus_fields_for_list_for_post
69
+ expected_fields = [['title', :string],
70
+ ['created_at', :datetime],
71
+ ['status', :selector]]
72
+ assert_equal expected_fields.map { |i| i.first }, Post.typus_fields_for('list').keys
73
+ assert_equal expected_fields.map { |i| i.last }, Post.typus_fields_for('list').values
74
+ assert_equal expected_fields.map { |i| i.first }, Post.typus_fields_for(:list).keys
75
+ assert_equal expected_fields.map { |i| i.last }, Post.typus_fields_for(:list).values
76
+ end
77
+
78
+ def test_should_return_typus_fields_for_form_for_typus_user
79
+ expected_fields = [['first_name', :string],
80
+ ['last_name', :string],
81
+ ['role', :selector],
82
+ ['email', :string],
83
+ ['password', :password],
84
+ ['password_confirmation', :password]]
85
+ assert_equal expected_fields.map { |i| i.first }, TypusUser.typus_fields_for('form').keys
86
+ assert_equal expected_fields.map { |i| i.last }, TypusUser.typus_fields_for('form').values
87
+ assert_equal expected_fields.map { |i| i.first }, TypusUser.typus_fields_for(:form).keys
88
+ assert_equal expected_fields.map { |i| i.last }, TypusUser.typus_fields_for(:form).values
89
+ end
90
+
91
+ def test_should_return_typus_fields_for_a_model_without_configuration
92
+ expected_fields = []
93
+ klass = Class.new(ActiveRecord::Base)
94
+ assert_equal expected_fields, klass.typus_fields_for(:form)
95
+ assert_equal expected_fields, klass.typus_fields_for(:list)
96
+ end
97
+
98
+ def test_should_return_typus_fields_for_relationship_for_typus_user
99
+ expected_fields = [['email', :string],
100
+ ['role', :selector],
101
+ ['status', :boolean]]
102
+ assert_equal expected_fields.map { |i| i.first }, TypusUser.typus_fields_for('relationship').keys
103
+ assert_equal expected_fields.map { |i| i.last }, TypusUser.typus_fields_for('relationship').values
104
+ assert_equal expected_fields.map { |i| i.first }, TypusUser.typus_fields_for(:relationship).keys
105
+ assert_equal expected_fields.map { |i| i.last }, TypusUser.typus_fields_for(:relationship).values
106
+ end
107
+
108
+ def test_should_return_all_fields_for_undefined_field_type_on_typus_user
109
+ expected_fields = [['email', :string],
110
+ ['role', :selector],
111
+ ['status', :boolean]]
112
+ assert_equal expected_fields.map { |i| i.first }, TypusUser.typus_fields_for('undefined').keys
113
+ assert_equal expected_fields.map { |i| i.last }, TypusUser.typus_fields_for('undefined').values
114
+ assert_equal expected_fields.map { |i| i.first }, TypusUser.typus_fields_for(:undefined).keys
115
+ assert_equal expected_fields.map { |i| i.last }, TypusUser.typus_fields_for(:undefined).values
116
+ end
117
+
118
+ def test_should_return_filters_for_typus_user
119
+ expected = [['status', :boolean],
120
+ ['role', :string]]
121
+ assert_equal 'status, role', Typus::Configuration.config['TypusUser']['filters']
122
+ assert_equal expected.map { |i| i.first }, TypusUser.typus_filters.keys
123
+ assert_equal expected.map { |i| i.last }, TypusUser.typus_filters.values
124
+ end
125
+
126
+ def test_should_return_post_typus_filters
127
+ expected = [['status', :boolean],
128
+ ['created_at', :datetime],
129
+ ['user', nil],
130
+ ['user_id', nil]]
131
+ assert_equal expected.map { |i| i.first }.join(', '), Typus::Configuration.config['Post']['filters']
132
+ assert_equal expected.map { |i| i.first }, Post.typus_filters.keys
133
+ assert_equal expected.map { |i| i.last }, Post.typus_filters.values
134
+ end
135
+
136
+ def test_should_return_actions_on_list_for_typus_user
137
+ assert TypusUser.typus_actions_for('list').empty?
138
+ assert TypusUser.typus_actions_for(:list).empty?
139
+ end
140
+
141
+ def test_should_return_post_actions_on_index
142
+ assert_equal %w( cleanup ), Post.typus_actions_for('index')
143
+ assert_equal %w( cleanup ), Post.typus_actions_for(:index)
144
+ end
145
+
146
+ def test_should_return_post_actions_on_edit
147
+ assert_equal %w( send_as_newsletter preview ), Post.typus_actions_for('edit')
148
+ assert_equal %w( send_as_newsletter preview ), Post.typus_actions_for(:edit)
149
+ end
150
+
151
+ def test_should_return_field_options_for_post
152
+ assert_equal [ :status ], Post.typus_field_options_for('selectors')
153
+ assert_equal [ :status ], Post.typus_field_options_for(:selectors)
154
+ assert_equal [ :permalink ], Post.typus_field_options_for('read_only')
155
+ assert_equal [ :permalink ], Post.typus_field_options_for(:read_only)
156
+ assert_equal [ :created_at ], Post.typus_field_options_for('auto_generated')
157
+ assert_equal [ :created_at ], Post.typus_field_options_for(:auto_generated)
158
+ end
159
+
160
+ def test_should_return_options_for_post_and_page
161
+
162
+ assert_equal 10, Post.typus_options_for(:form_rows)
163
+ assert_equal 10, Post.typus_options_for('form_rows')
164
+
165
+ assert_equal 25, Page.typus_options_for(:form_rows)
166
+ assert_equal 25, Page.typus_options_for('form_rows')
167
+
168
+ assert_equal 10, Asset.typus_options_for(:form_rows)
169
+ assert_equal 10, Asset.typus_options_for('form_rows')
170
+
171
+ assert_equal 10, TypusUser.typus_options_for(:form_rows)
172
+ assert_equal 10, TypusUser.typus_options_for('form_rows')
173
+
174
+ assert Page.typus_options_for(:on_header)
175
+ assert !TypusUser.typus_options_for(:on_header)
176
+
177
+ assert_nil TypusUser.typus_options_for(:unexisting)
178
+
179
+ end
180
+
181
+ def test_should_verify_typus_boolean_is_an_instance_of_active_support_ordered_hash
182
+ assert TypusUser.typus_boolean.instance_of?(ActiveSupport::OrderedHash)
183
+ end
184
+
185
+ def test_should_return_booleans_for_typus_users
186
+ assert_equal [ :true, :false ], TypusUser.typus_boolean('status').keys
187
+ assert_equal [ "Active", "Inactive" ], TypusUser.typus_boolean('status').values
188
+ assert_equal [ :true, :false ], TypusUser.typus_boolean(:status).keys
189
+ assert_equal [ "Active", "Inactive" ], TypusUser.typus_boolean(:status).values
190
+ end
191
+
192
+ def test_should_return_default_booleans_for_typus_users
193
+ assert_equal [ :true, :false ], TypusUser.typus_boolean.keys
194
+ assert_equal [ "True", "False" ], TypusUser.typus_boolean.values
195
+ end
196
+
197
+ def test_should_return_booleans_for_post
198
+ assert_equal [ :true, :false ], Post.typus_boolean('status').keys
199
+ assert_equal [ "True", "False" ], Post.typus_boolean('status').values
200
+ assert_equal [ :true, :false ], Post.typus_boolean(:status).keys
201
+ assert_equal [ "True", "False" ], Post.typus_boolean(:status).values
202
+ end
203
+
204
+ def test_should_return_date_formats_for_post
205
+ assert_equal :post_short, Post.typus_date_format('created_at')
206
+ assert_equal :post_short, Post.typus_date_format(:created_at)
207
+ assert_equal :db, Post.typus_date_format
208
+ assert_equal :db, Post.typus_date_format('unknown')
209
+ assert_equal :db, Post.typus_date_format(:unknown)
210
+ end
211
+
212
+ def test_should_return_defaults_for_post
213
+ assert_equal %w( title ), Post.typus_defaults_for('search')
214
+ assert_equal %w( title ), Post.typus_defaults_for(:search)
215
+ assert_equal %w( title -created_at ), Post.typus_defaults_for('order_by')
216
+ assert_equal %w( title -created_at ), Post.typus_defaults_for(:order_by)
217
+ end
218
+
219
+ def test_should_return_relationships_for_post
220
+ assert_equal %w( assets categories ), Post.typus_defaults_for('relationships')
221
+ assert_equal %w( assets categories ), Post.typus_defaults_for(:relationships)
222
+ assert !Post.typus_defaults_for('relationships').empty?
223
+ assert !Post.typus_defaults_for(:relationships).empty?
224
+ end
225
+
226
+ def test_should_return_order_by_for_model
227
+ assert_equal "posts.title ASC, posts.created_at DESC", Post.typus_order_by
228
+ assert_equal %w( title -created_at ), Post.typus_defaults_for('order_by')
229
+ assert_equal %w( title -created_at ), Post.typus_defaults_for(:order_by)
230
+ end
231
+
232
+ def test_should_return_sql_conditions_on_search_for_typus_user
233
+ expected = "(LOWER(first_name) LIKE '%francesc%' OR LOWER(last_name) LIKE '%francesc%' OR LOWER(email) LIKE '%francesc%' OR LOWER(role) LIKE '%francesc%')"
234
+ params = { :search => 'francesc' }
235
+ assert_equal expected, TypusUser.build_conditions(params).first
236
+ params = { :search => 'Francesc' }
237
+ assert_equal expected, TypusUser.build_conditions(params).first
238
+ end
239
+
240
+ def test_should_return_sql_conditions_on_search_and_filter_for_typus_user
241
+
242
+ case ENV['DB']
243
+ when /mysql/
244
+ boolean_true = "(`typus_users`.`status` = 1)"
245
+ boolean_false = "(`typus_users`.`status` = 0)"
246
+ else
247
+ boolean_true = "(\"typus_users\".\"status\" = 't')"
248
+ boolean_false = "(\"typus_users\".\"status\" = 'f')"
249
+ end
250
+
251
+ expected = "((LOWER(first_name) LIKE '%francesc%' OR LOWER(last_name) LIKE '%francesc%' OR LOWER(email) LIKE '%francesc%' OR LOWER(role) LIKE '%francesc%')) AND #{boolean_true}"
252
+ params = { :search => 'francesc', :status => 'true' }
253
+ assert_equal expected, TypusUser.build_conditions(params).first
254
+ params = { :search => 'francesc', :status => 'false' }
255
+ assert_match /#{boolean_false}/, TypusUser.build_conditions(params).first
256
+
257
+ end
258
+
259
+ def test_should_return_sql_conditions_on_filtering_typus_users_by_status
260
+
261
+ case ENV['DB']
262
+ when /mysql/
263
+ boolean_true = "(`typus_users`.`status` = 1)"
264
+ boolean_false = "(`typus_users`.`status` = 0)"
265
+ else
266
+ boolean_true = "(\"typus_users\".\"status\" = 't')"
267
+ boolean_false = "(\"typus_users\".\"status\" = 'f')"
268
+ end
269
+
270
+ params = { :status => 'true' }
271
+ assert_equal boolean_true, TypusUser.build_conditions(params).first
272
+ params = { :status => 'false' }
273
+ assert_equal boolean_false, TypusUser.build_conditions(params).first
274
+
275
+ end
276
+
277
+ def test_should_return_sql_conditions_on_filtering_typus_users_by_created_at
278
+
279
+ expected = case ENV['DB']
280
+ when /postgresql/
281
+ "(created_at BETWEEN E'#{Time.new.midnight.to_s(:db)}' AND E'#{Time.new.midnight.tomorrow.to_s(:db)}')"
282
+ else
283
+ "(created_at BETWEEN '#{Time.new.midnight.to_s(:db)}' AND '#{Time.new.midnight.tomorrow.to_s(:db)}')"
284
+ end
285
+ params = { :created_at => 'today' }
286
+ assert_equal expected, TypusUser.build_conditions(params).first
287
+
288
+
289
+ expected = case ENV['DB']
290
+ when /postgresql/
291
+ "(created_at BETWEEN E'#{6.days.ago.midnight.to_s(:db)}' AND E'#{Time.new.midnight.tomorrow.to_s(:db)}')"
292
+ else
293
+ "(created_at BETWEEN '#{6.days.ago.midnight.to_s(:db)}' AND '#{Time.new.midnight.tomorrow.to_s(:db)}')"
294
+ end
295
+ params = { :created_at => 'past_7_days' }
296
+ assert_equal expected, TypusUser.build_conditions(params).first
297
+
298
+
299
+ expected = case ENV['DB']
300
+ when /postgresql/
301
+ "(created_at BETWEEN E'#{Time.new.midnight.last_month.to_s(:db)}' AND E'#{Time.new.midnight.tomorrow.to_s(:db)}')"
302
+ else
303
+ "(created_at BETWEEN '#{Time.new.midnight.last_month.to_s(:db)}' AND '#{Time.new.midnight.tomorrow.to_s(:db)}')"
304
+ end
305
+ params = { :created_at => 'this_month' }
306
+ assert_equal expected, TypusUser.build_conditions(params).first
307
+
308
+ expected = case ENV['DB']
309
+ when /postgresql/
310
+ "(created_at BETWEEN E'#{Time.new.midnight.last_year.to_s(:db)}' AND E'#{Time.new.midnight.tomorrow.to_s(:db)}')"
311
+ else
312
+ "(created_at BETWEEN '#{Time.new.midnight.last_year.to_s(:db)}' AND '#{Time.new.midnight.tomorrow.to_s(:db)}')"
313
+ end
314
+ params = { :created_at => 'this_year' }
315
+ assert_equal expected, TypusUser.build_conditions(params).first
316
+
317
+ end
318
+
319
+ def test_should_return_sql_conditions_on_filtering_posts_by_published_at
320
+ expected = case ENV['DB']
321
+ when /postgresql/
322
+ "(published_at BETWEEN E'#{Time.new.midnight.to_s(:db)}' AND E'#{Time.new.midnight.tomorrow.to_s(:db)}')"
323
+ else
324
+ "(published_at BETWEEN '#{Time.new.midnight.to_s(:db)}' AND '#{Time.new.midnight.tomorrow.to_s(:db)}')"
325
+ end
326
+ params = { :published_at => 'today' }
327
+ assert_equal expected, Post.build_conditions(params).first
328
+ end
329
+
330
+ def test_should_return_sql_conditions_on_filtering_posts_by_string
331
+ expected = case ENV['DB']
332
+ when /postgresql/
333
+ "(\"typus_users\".\"role\" = E'admin')"
334
+ when /mysql/
335
+ "(`typus_users`.`role` = 'admin')"
336
+ else
337
+ "(\"typus_users\".\"role\" = 'admin')"
338
+ end
339
+ params = { :role => 'admin' }
340
+ assert_equal expected, TypusUser.build_conditions(params).first
341
+ end
342
+
343
+ def test_should_verify_previous_and_next
344
+ assert TypusUser.instance_methods.include?('previous_and_next')
345
+ assert typus_users(:admin).previous_and_next.kind_of?(Array)
346
+ end
347
+
348
+ def test_should_verify_previous_and_next_works_without_conditions
349
+ expected = [ typus_users(:admin), typus_users(:disabled_user) ]
350
+ assert_equal expected, typus_users(:editor).previous_and_next
351
+ end
352
+
353
+ def test_should_verify_previous_and_next_works_with_conditions
354
+ expected = [ typus_users(:editor), typus_users(:removed_role) ]
355
+ conditions = { 'status' => 'true' }
356
+ assert_equal expected, typus_users(:designer).previous_and_next(conditions)
357
+ end
358
+
359
+ def test_should_verify_typus_name_is_working_properly
360
+
361
+ assert Category.new.respond_to?(:name)
362
+ assert_equal 'First Category', categories(:first).typus_name
363
+
364
+ assert !Page.new.respond_to?(:name)
365
+ assert_equal 'Page#1', pages(:published).typus_name
366
+
367
+ assert Comment.new.respond_to?(:name)
368
+ assert_equal "John", comments(:first).typus_name
369
+
370
+ end
371
+
372
+ def test_should_verify_typus_template_is_working_properly
373
+
374
+ assert_equal 'datepicker', Post.typus_template('published_at')
375
+ assert_equal 'datepicker', Post.typus_template(:published_at)
376
+
377
+ assert_nil Post.typus_template('created_at')
378
+ assert_nil Post.typus_template('unknown')
379
+
380
+ end
381
+
382
+ end