typus 0.9.17

Sign up to get free protection for your applications and to get access to all the features.
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