admin_assistant 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. data/Rakefile +2 -2
  2. data/VERSION +1 -1
  3. data/admin_assistant.gemspec +2 -171
  4. metadata +4 -173
  5. data/rails_3_0/Gemfile +0 -12
  6. data/rails_3_0/Gemfile.lock +0 -100
  7. data/rails_3_0/README +0 -256
  8. data/rails_3_0/Rakefile +0 -7
  9. data/rails_3_0/app/controllers/admin/appointments2_controller.rb +0 -15
  10. data/rails_3_0/app/controllers/admin/appointments_controller.rb +0 -11
  11. data/rails_3_0/app/controllers/admin/blog_posts2_controller.rb +0 -138
  12. data/rails_3_0/app/controllers/admin/blog_posts3_controller.rb +0 -76
  13. data/rails_3_0/app/controllers/admin/blog_posts4_controller.rb +0 -21
  14. data/rails_3_0/app/controllers/admin/blog_posts5_controller.rb +0 -27
  15. data/rails_3_0/app/controllers/admin/blog_posts6_controller.rb +0 -10
  16. data/rails_3_0/app/controllers/admin/blog_posts_controller.rb +0 -9
  17. data/rails_3_0/app/controllers/admin/blog_posts_custom_new_and_edit_controller.rb +0 -15
  18. data/rails_3_0/app/controllers/admin/blog_posts_read_only_controller.rb +0 -19
  19. data/rails_3_0/app/controllers/admin/bookmarks_controller.rb +0 -11
  20. data/rails_3_0/app/controllers/admin/comments2_controller.rb +0 -14
  21. data/rails_3_0/app/controllers/admin/comments_controller.rb +0 -12
  22. data/rails_3_0/app/controllers/admin/images2_controller.rb +0 -11
  23. data/rails_3_0/app/controllers/admin/images_controller.rb +0 -6
  24. data/rails_3_0/app/controllers/admin/misconfigured1_controller.rb +0 -7
  25. data/rails_3_0/app/controllers/admin/not_migrated_yets_controller.rb +0 -9
  26. data/rails_3_0/app/controllers/admin/product_categories2_controller.rb +0 -7
  27. data/rails_3_0/app/controllers/admin/product_categories_controller.rb +0 -5
  28. data/rails_3_0/app/controllers/admin/television_airings_controller.rb +0 -5
  29. data/rails_3_0/app/controllers/admin/television_time_slots_controller.rb +0 -5
  30. data/rails_3_0/app/controllers/admin/users2_controller.rb +0 -10
  31. data/rails_3_0/app/controllers/admin/users_controller.rb +0 -48
  32. data/rails_3_0/app/controllers/application_controller.rb +0 -7
  33. data/rails_3_0/app/controllers/blog_posts_controller.rb +0 -5
  34. data/rails_3_0/app/helpers/admin/appointments_helper.rb +0 -2
  35. data/rails_3_0/app/helpers/admin/blog_posts2_helper.rb +0 -27
  36. data/rails_3_0/app/helpers/admin/blog_posts3_helper.rb +0 -2
  37. data/rails_3_0/app/helpers/admin/blog_posts4_helper.rb +0 -2
  38. data/rails_3_0/app/helpers/admin/blog_posts6_helper.rb +0 -13
  39. data/rails_3_0/app/helpers/admin/blog_posts_custom_new_and_edit_helper.rb +0 -29
  40. data/rails_3_0/app/helpers/admin/blog_posts_helper.rb +0 -2
  41. data/rails_3_0/app/helpers/admin/blog_posts_read_only_helper.rb +0 -2
  42. data/rails_3_0/app/helpers/admin/bookmarks_helper.rb +0 -2
  43. data/rails_3_0/app/helpers/admin/comments2_helper.rb +0 -2
  44. data/rails_3_0/app/helpers/admin/comments_helper.rb +0 -2
  45. data/rails_3_0/app/helpers/admin/images2_helper.rb +0 -8
  46. data/rails_3_0/app/helpers/admin/images_helper.rb +0 -2
  47. data/rails_3_0/app/helpers/admin/misconfigured1_helper.rb +0 -2
  48. data/rails_3_0/app/helpers/admin/not_migrated_yets_helper.rb +0 -2
  49. data/rails_3_0/app/helpers/admin/product_categories2_helper.rb +0 -2
  50. data/rails_3_0/app/helpers/admin/product_categories_helper.rb +0 -2
  51. data/rails_3_0/app/helpers/admin/television_airings_helper.rb +0 -2
  52. data/rails_3_0/app/helpers/admin/television_time_slots_helper.rb +0 -2
  53. data/rails_3_0/app/helpers/admin/users2_helper.rb +0 -2
  54. data/rails_3_0/app/helpers/admin/users_helper.rb +0 -13
  55. data/rails_3_0/app/helpers/application_helper.rb +0 -2
  56. data/rails_3_0/app/models/appointment.rb +0 -5
  57. data/rails_3_0/app/models/blog_post.rb +0 -14
  58. data/rails_3_0/app/models/blog_post_tag.rb +0 -6
  59. data/rails_3_0/app/models/bookmark.rb +0 -6
  60. data/rails_3_0/app/models/comment.rb +0 -4
  61. data/rails_3_0/app/models/image.rb +0 -3
  62. data/rails_3_0/app/models/not_migrated_yet.rb +0 -2
  63. data/rails_3_0/app/models/product.rb +0 -5
  64. data/rails_3_0/app/models/product_category.rb +0 -9
  65. data/rails_3_0/app/models/tag.rb +0 -4
  66. data/rails_3_0/app/models/television_airing.rb +0 -3
  67. data/rails_3_0/app/models/television_time_slot.rb +0 -11
  68. data/rails_3_0/app/models/user.rb +0 -11
  69. data/rails_3_0/app/views/admin/appointments/_subject_input.html.erb +0 -2
  70. data/rails_3_0/app/views/admin/appointments2/_time_input.html.erb +0 -31
  71. data/rails_3_0/app/views/admin/blog_posts2/_after_form.html.erb +0 -5
  72. data/rails_3_0/app/views/admin/blog_posts2/_after_index.html.erb +0 -1
  73. data/rails_3_0/app/views/admin/blog_posts2/_after_tags_input.html.erb +0 -16
  74. data/rails_3_0/app/views/admin/blog_posts2/_before_index.html.erb +0 -2
  75. data/rails_3_0/app/views/admin/blog_posts5/_after_index_header.html.erb +0 -8
  76. data/rails_3_0/app/views/admin/blog_posts_read_only/_body_for_show.html.erb +0 -1
  77. data/rails_3_0/app/views/layouts/admin.html.erb +0 -32
  78. data/rails_3_0/app/views/layouts/application.html.erb +0 -14
  79. data/rails_3_0/config.ru +0 -4
  80. data/rails_3_0/config/application.rb +0 -42
  81. data/rails_3_0/config/boot.rb +0 -6
  82. data/rails_3_0/config/database.yml +0 -22
  83. data/rails_3_0/config/environment.rb +0 -5
  84. data/rails_3_0/config/environments/development.rb +0 -25
  85. data/rails_3_0/config/environments/production.rb +0 -49
  86. data/rails_3_0/config/environments/test.rb +0 -35
  87. data/rails_3_0/config/initializers/backtrace_silencers.rb +0 -7
  88. data/rails_3_0/config/initializers/inflections.rb +0 -10
  89. data/rails_3_0/config/initializers/mime_types.rb +0 -5
  90. data/rails_3_0/config/initializers/secret_token.rb +0 -7
  91. data/rails_3_0/config/initializers/session_store.rb +0 -8
  92. data/rails_3_0/config/locales/en.yml +0 -5
  93. data/rails_3_0/config/routes.rb +0 -8
  94. data/rails_3_0/db/migrate/20090213215514_create_blog_posts.rb +0 -12
  95. data/rails_3_0/db/migrate/20090217225542_add_body_to_blog_posts.rb +0 -9
  96. data/rails_3_0/db/migrate/20090221220917_create_tags.rb +0 -13
  97. data/rails_3_0/db/migrate/20090221220947_create_blog_post_tags.rb +0 -14
  98. data/rails_3_0/db/migrate/20090222162204_add_textile_to_blog_posts.rb +0 -9
  99. data/rails_3_0/db/migrate/20090222163231_add_published_at_to_blog_posts.rb +0 -9
  100. data/rails_3_0/db/migrate/20090301191722_create_images.rb +0 -16
  101. data/rails_3_0/db/migrate/20090305165345_create_accounts.rb +0 -14
  102. data/rails_3_0/db/migrate/20090307225027_rename_accounts_to_users.rb +0 -9
  103. data/rails_3_0/db/migrate/20090307225750_add_user_id_to_blog_posts.rb +0 -9
  104. data/rails_3_0/db/migrate/20090309185114_change_blog_posts_textile.rb +0 -9
  105. data/rails_3_0/db/migrate/20090309193635_create_products.rb +0 -14
  106. data/rails_3_0/db/migrate/20090309203056_create_comments.rb +0 -15
  107. data/rails_3_0/db/migrate/20090323005947_create_file_column_images.rb +0 -12
  108. data/rails_3_0/db/migrate/20090326160049_add_birthday_to_users.rb +0 -9
  109. data/rails_3_0/db/migrate/20090326223606_add_state_to_users.rb +0 -9
  110. data/rails_3_0/db/migrate/20090503134004_add_file_column_image_to_products.rb +0 -9
  111. data/rails_3_0/db/migrate/20090617173651_create_bookmarks.rb +0 -15
  112. data/rails_3_0/db/migrate/20090624165355_add_tags_string_to_blog_post.rb +0 -9
  113. data/rails_3_0/db/migrate/20090625144313_add_avatar_fields_to_user.rb +0 -11
  114. data/rails_3_0/db/migrate/20090629202956_add_merged_into_to_blog_posts.rb +0 -9
  115. data/rails_3_0/db/migrate/20090701171857_add_force_textile_to_users.rb +0 -9
  116. data/rails_3_0/db/migrate/20090704163647_add_deleted_at_to_products.rb +0 -9
  117. data/rails_3_0/db/migrate/20090704173800_add_sale_fields_to_products.rb +0 -13
  118. data/rails_3_0/db/migrate/20090714024501_create_product_categories.rb +0 -15
  119. data/rails_3_0/db/migrate/20090819162835_add_admin_level_to_users.rb +0 -9
  120. data/rails_3_0/db/migrate/20091115134559_add_first_and_last_names_to_users.rb +0 -11
  121. data/rails_3_0/db/migrate/20091221011256_add_position_to_product_categories.rb +0 -9
  122. data/rails_3_0/db/migrate/20091222160814_create_appointments.rb +0 -14
  123. data/rails_3_0/db/migrate/20091227224547_add_user_id_to_appointments.rb +0 -9
  124. data/rails_3_0/db/migrate/20100214213359_create_television_time_slots.rb +0 -13
  125. data/rails_3_0/db/migrate/20100214213451_create_television_airings.rb +0 -15
  126. data/rails_3_0/db/migrate/20110426215702_remove_avatar_fields_from_users.rb +0 -11
  127. data/rails_3_0/db/seeds.rb +0 -7
  128. data/rails_3_0/doc/README_FOR_APP +0 -2
  129. data/rails_3_0/public/404.html +0 -26
  130. data/rails_3_0/public/422.html +0 -26
  131. data/rails_3_0/public/500.html +0 -26
  132. data/rails_3_0/public/favicon.ico +0 -0
  133. data/rails_3_0/public/images/rails.png +0 -0
  134. data/rails_3_0/public/index.html +0 -239
  135. data/rails_3_0/public/javascripts/application.js +0 -2
  136. data/rails_3_0/public/javascripts/jquery-1.4.4.min.js +0 -167
  137. data/rails_3_0/public/javascripts/rails.js +0 -191
  138. data/rails_3_0/public/robots.txt +0 -5
  139. data/rails_3_0/public/stylesheets/admin.css +0 -3
  140. data/rails_3_0/public/stylesheets/scaffold.css +0 -54
  141. data/rails_3_0/script/rails +0 -6
  142. data/rails_3_0/test/data/ruby_throated.jpg +0 -0
  143. data/rails_3_0/test/data/tweenbot.jpg +0 -0
  144. data/rails_3_0/test/fixtures/placeholder.txt +0 -0
  145. data/rails_3_0/test/integration/admin/appointments2_integration_test.rb +0 -79
  146. data/rails_3_0/test/integration/admin/appointments_integration_test.rb +0 -367
  147. data/rails_3_0/test/integration/admin/blog_posts2_integration_test.rb +0 -789
  148. data/rails_3_0/test/integration/admin/blog_posts3_integration_test.rb +0 -418
  149. data/rails_3_0/test/integration/admin/blog_posts4_integration_test.rb +0 -189
  150. data/rails_3_0/test/integration/admin/blog_posts5_integration_test.rb +0 -75
  151. data/rails_3_0/test/integration/admin/blog_posts6_integration_test.rb +0 -39
  152. data/rails_3_0/test/integration/admin/blog_posts_custom_new_and_edit_integration_test.rb +0 -89
  153. data/rails_3_0/test/integration/admin/blog_posts_integration_test.rb +0 -776
  154. data/rails_3_0/test/integration/admin/blog_posts_read_only_integration_test.rb +0 -69
  155. data/rails_3_0/test/integration/admin/bookmarks_integration_test.rb +0 -445
  156. data/rails_3_0/test/integration/admin/comments2_integration_test.rb +0 -52
  157. data/rails_3_0/test/integration/admin/comments_integration_test.rb +0 -50
  158. data/rails_3_0/test/integration/admin/images2_integration_test.rb +0 -33
  159. data/rails_3_0/test/integration/admin/images_integration_test.rb +0 -79
  160. data/rails_3_0/test/integration/admin/misconfigured1_integration_test.rb +0 -21
  161. data/rails_3_0/test/integration/admin/product_categories2_integration_test.rb +0 -179
  162. data/rails_3_0/test/integration/admin/product_categories_integration_test.rb +0 -12
  163. data/rails_3_0/test/integration/admin/television_airings_integration_test.rb +0 -25
  164. data/rails_3_0/test/integration/admin/users2_integration_test.rb +0 -48
  165. data/rails_3_0/test/integration/admin/users_integration_test.rb +0 -182
  166. data/rails_3_0/test/integration/blog_posts_integration_test.rb +0 -10
  167. data/rails_3_0/test/performance/browsing_test.rb +0 -9
  168. data/rails_3_0/test/test_helper.rb +0 -138
  169. data/rails_3_1/Gemfile +0 -12
  170. data/rails_3_1/Gemfile.lock +0 -116
  171. data/rails_3_1/README +0 -256
  172. data/rails_3_1/Rakefile +0 -7
  173. data/rails_3_1/config.ru +0 -4
@@ -1,191 +0,0 @@
1
- (function() {
2
- // Technique from Juriy Zaytsev
3
- // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
- function isEventSupported(eventName) {
5
- var el = document.createElement('div');
6
- eventName = 'on' + eventName;
7
- var isSupported = (eventName in el);
8
- if (!isSupported) {
9
- el.setAttribute(eventName, 'return;');
10
- isSupported = typeof el[eventName] == 'function';
11
- }
12
- el = null;
13
- return isSupported;
14
- }
15
-
16
- function isForm(element) {
17
- return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
- }
19
-
20
- function isInput(element) {
21
- if (Object.isElement(element)) {
22
- var name = element.nodeName.toUpperCase()
23
- return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
- }
25
- else return false
26
- }
27
-
28
- var submitBubbles = isEventSupported('submit'),
29
- changeBubbles = isEventSupported('change')
30
-
31
- if (!submitBubbles || !changeBubbles) {
32
- // augment the Event.Handler class to observe custom events when needed
33
- Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
- function(init, element, eventName, selector, callback) {
35
- init(element, eventName, selector, callback)
36
- // is the handler being attached to an element that doesn't support this event?
37
- if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
- (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
- // "submit" => "emulated:submit"
40
- this.eventName = 'emulated:' + this.eventName
41
- }
42
- }
43
- )
44
- }
45
-
46
- if (!submitBubbles) {
47
- // discover forms on the page by observing focus events which always bubble
48
- document.on('focusin', 'form', function(focusEvent, form) {
49
- // special handler for the real "submit" event (one-time operation)
50
- if (!form.retrieve('emulated:submit')) {
51
- form.on('submit', function(submitEvent) {
52
- var emulated = form.fire('emulated:submit', submitEvent, true)
53
- // if custom event received preventDefault, cancel the real one too
54
- if (emulated.returnValue === false) submitEvent.preventDefault()
55
- })
56
- form.store('emulated:submit', true)
57
- }
58
- })
59
- }
60
-
61
- if (!changeBubbles) {
62
- // discover form inputs on the page
63
- document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
- // special handler for real "change" events
65
- if (!input.retrieve('emulated:change')) {
66
- input.on('change', function(changeEvent) {
67
- input.fire('emulated:change', changeEvent, true)
68
- })
69
- input.store('emulated:change', true)
70
- }
71
- })
72
- }
73
-
74
- function handleRemote(element) {
75
- var method, url, params;
76
-
77
- var event = element.fire("ajax:before");
78
- if (event.stopped) return false;
79
-
80
- if (element.tagName.toLowerCase() === 'form') {
81
- method = element.readAttribute('method') || 'post';
82
- url = element.readAttribute('action');
83
- params = element.serialize();
84
- } else {
85
- method = element.readAttribute('data-method') || 'get';
86
- url = element.readAttribute('href');
87
- params = {};
88
- }
89
-
90
- new Ajax.Request(url, {
91
- method: method,
92
- parameters: params,
93
- evalScripts: true,
94
-
95
- onComplete: function(request) { element.fire("ajax:complete", request); },
96
- onSuccess: function(request) { element.fire("ajax:success", request); },
97
- onFailure: function(request) { element.fire("ajax:failure", request); }
98
- });
99
-
100
- element.fire("ajax:after");
101
- }
102
-
103
- function handleMethod(element) {
104
- var method = element.readAttribute('data-method'),
105
- url = element.readAttribute('href'),
106
- csrf_param = $$('meta[name=csrf-param]')[0],
107
- csrf_token = $$('meta[name=csrf-token]')[0];
108
-
109
- var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
- element.parentNode.insert(form);
111
-
112
- if (method !== 'post') {
113
- var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
- form.insert(field);
115
- }
116
-
117
- if (csrf_param) {
118
- var param = csrf_param.readAttribute('content'),
119
- token = csrf_token.readAttribute('content'),
120
- field = new Element('input', { type: 'hidden', name: param, value: token });
121
- form.insert(field);
122
- }
123
-
124
- form.submit();
125
- }
126
-
127
-
128
- document.on("click", "*[data-confirm]", function(event, element) {
129
- var message = element.readAttribute('data-confirm');
130
- if (!confirm(message)) event.stop();
131
- });
132
-
133
- document.on("click", "a[data-remote]", function(event, element) {
134
- if (event.stopped) return;
135
- handleRemote(element);
136
- event.stop();
137
- });
138
-
139
- document.on("click", "a[data-method]", function(event, element) {
140
- if (event.stopped) return;
141
- handleMethod(element);
142
- event.stop();
143
- });
144
-
145
- document.on("submit", function(event) {
146
- var element = event.findElement(),
147
- message = element.readAttribute('data-confirm');
148
- if (message && !confirm(message)) {
149
- event.stop();
150
- return false;
151
- }
152
-
153
- var inputs = element.select("input[type=submit][data-disable-with]");
154
- inputs.each(function(input) {
155
- input.disabled = true;
156
- input.writeAttribute('data-original-value', input.value);
157
- input.value = input.readAttribute('data-disable-with');
158
- });
159
-
160
- var element = event.findElement("form[data-remote]");
161
- if (element) {
162
- handleRemote(element);
163
- event.stop();
164
- }
165
- });
166
-
167
- document.on("ajax:after", "form", function(event, element) {
168
- var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
- inputs.each(function(input) {
170
- input.value = input.readAttribute('data-original-value');
171
- input.removeAttribute('data-original-value');
172
- input.disabled = false;
173
- });
174
- });
175
-
176
- Ajax.Responders.register({
177
- onCreate: function(request) {
178
- var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
-
180
- if (csrf_meta_tag) {
181
- var header = 'X-CSRF-Token',
182
- token = csrf_meta_tag.readAttribute('content');
183
-
184
- if (!request.options.requestHeaders) {
185
- request.options.requestHeaders = {};
186
- }
187
- request.options.requestHeaders[header] = token;
188
- }
189
- }
190
- });
191
- })();
@@ -1,5 +0,0 @@
1
- # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
- #
3
- # To ban all spiders from the entire site uncomment the next two lines:
4
- # User-Agent: *
5
- # Disallow: /
@@ -1,3 +0,0 @@
1
- #admin_assistant.admin_blog_posts.form #blog_post_body {
2
- height: 600px
3
- }
@@ -1,54 +0,0 @@
1
- body { background-color: #fff; color: #333; }
2
-
3
- body, p, ol, ul, td {
4
- font-family: verdana, arial, helvetica, sans-serif;
5
- font-size: 13px;
6
- line-height: 18px;
7
- }
8
-
9
- pre {
10
- background-color: #eee;
11
- padding: 10px;
12
- font-size: 11px;
13
- }
14
-
15
- a { color: #000; }
16
- a:visited { color: #666; }
17
- a:hover { color: #fff; background-color:#000; }
18
-
19
- .fieldWithErrors {
20
- padding: 2px;
21
- background-color: red;
22
- display: table;
23
- }
24
-
25
- #errorExplanation {
26
- width: 400px;
27
- border: 2px solid red;
28
- padding: 7px;
29
- padding-bottom: 12px;
30
- margin-bottom: 20px;
31
- background-color: #f0f0f0;
32
- }
33
-
34
- #errorExplanation h2 {
35
- text-align: left;
36
- font-weight: bold;
37
- padding: 5px 5px 5px 15px;
38
- font-size: 12px;
39
- margin: -7px;
40
- background-color: #c00;
41
- color: #fff;
42
- }
43
-
44
- #errorExplanation p {
45
- color: #333;
46
- margin-bottom: 0;
47
- padding: 5px;
48
- }
49
-
50
- #errorExplanation ul li {
51
- font-size: 12px;
52
- list-style: square;
53
- }
54
-
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
-
4
- APP_PATH = File.expand_path('../../config/application', __FILE__)
5
- require File.expand_path('../../config/boot', __FILE__)
6
- require 'rails/commands'
Binary file
Binary file
File without changes
@@ -1,79 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
-
3
- class Admin::Appointments2IntegrationTest < ActionController::IntegrationTest
4
- def test_create_with_2_new_appointments
5
- User.destroy_all
6
- @user1 = User.create! :username => random_word
7
- @user2 = User.create! :username => random_word
8
- Appointment.destroy_all
9
- post(
10
- "/admin/appointments2",
11
- :appointment => {
12
- 'a' => {
13
- 'subject' => 'Lunch with Dick', 'time(1-3i)' => '2010-01-04',
14
- 'time(4i)' => '12', 'time(5i)' => '00', 'user_id' => @user1.id
15
- },
16
- 'b' => {
17
- 'subject' => '', 'time(1-3i)' => '', 'time(4i)' => '',
18
- 'time(5i)' => ''
19
- },
20
- 'c' => {
21
- 'subject' => 'Dinner with Jane', 'time(1-3i)' => '2010-01-06',
22
- 'time(4i)' => '20', 'time(5i)' => '00', 'user_id' => @user2.id
23
- },
24
- 'd' => {
25
- 'subject' => '', 'time(1-3i)' => '', 'time(4i)' => '',
26
- 'time(5i)' => ''
27
- },
28
- 'e' => {
29
- 'subject' => '', 'time(1-3i)' => '', 'time(4i)' => '',
30
- 'time(5i)' => ''
31
- },
32
- 'f' => {
33
- 'subject' => '', 'time(1-3i)' => '', 'time(4i)' => '',
34
- 'time(5i)' => ''
35
- },
36
- 'g' => {
37
- 'subject' => '', 'time(1-3i)' => '', 'time(4i)' => '',
38
- 'time(5i)' => ''
39
- },
40
- 'h' => {
41
- 'subject' => '', 'time(1-3i)' => '', 'time(4i)' => '',
42
- 'time(5i)' => ''
43
- },
44
- 'i' => {
45
- 'subject' => '', 'time(1-3i)' => '', 'time(4i)' => '',
46
- 'time(5i)' => ''
47
- },
48
- 'j' => {
49
- 'subject' => '', 'time(1-3i)' => '', 'time(4i)' => '',
50
- 'time(5i)' => ''
51
- }
52
- }
53
- )
54
- # should save 2 new appointments with the correct times
55
- assert_equal(2, Appointment.count)
56
- assert(
57
- Appointment.all.any? { |appt|
58
- appt.subject == 'Lunch with Dick' and
59
- appt.time == Time.utc(2010, 1, 4, 12, 0) and appt.user == @user1
60
- }
61
- )
62
- assert(
63
- Appointment.all.any? { |appt|
64
- appt.subject == 'Dinner with Jane' and
65
- appt.time == Time.utc(2010, 1, 6, 20, 0) and appt.user == @user2
66
- }
67
- )
68
- end
69
-
70
- def test_new
71
- get "/admin/appointments2/new"
72
- # should use _time_input.html.erb to show a custom time widget
73
- assert_select('select[name=?]', 'appointment[a][time(1-3i)]') do
74
- assert_select(
75
- "option[value=?]", "2010-01-04", :text => 'Mon Jan 04 2010'
76
- )
77
- end
78
- end
79
- end
@@ -1,367 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
-
3
- class Admin::AppointmentsIntegrationTest < ActionController::IntegrationTest
4
- def test_create_with_2_new_appointments
5
- User.destroy_all
6
- @user1 = User.create! :username => random_word
7
- @user2 = User.create! :username => random_word
8
- Appointment.destroy_all
9
- post(
10
- "/admin/appointments",
11
- :appointment => {
12
- 'a' => {
13
- 'subject' => 'Lunch with Dick', 'time(1i)' => '2010',
14
- 'time(2i)' => '1', 'time(3i)' => '4', 'time(4i)' => '12',
15
- 'time(5i)' => '00', 'user_id' => @user1.id
16
- },
17
- 'b' => {
18
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
19
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
20
- },
21
- 'c' => {
22
- 'subject' => 'Dinner with Jane', 'time(1i)' => '2010',
23
- 'time(2i)' => '1', 'time(3i)' => '6', 'time(4i)' => '20',
24
- 'time(5i)' => '00', 'user_id' => @user2.id
25
- },
26
- 'd' => {
27
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
28
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
29
- },
30
- 'e' => {
31
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
32
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
33
- },
34
- 'f' => {
35
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
36
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
37
- },
38
- 'g' => {
39
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
40
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
41
- },
42
- 'h' => {
43
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
44
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
45
- },
46
- 'i' => {
47
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
48
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
49
- },
50
- 'j' => {
51
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
52
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
53
- }
54
- }
55
- )
56
- assert_response :redirect
57
- # should create those two new appointments
58
- assert_equal(2, Appointment.count)
59
- assert(
60
- Appointment.all.any? { |appt|
61
- appt.subject == 'Lunch with Dick' and
62
- appt.time == Time.utc(2010, 1, 4, 12, 0) and appt.user == @user1
63
- }
64
- )
65
- assert(
66
- Appointment.all.any? { |appt|
67
- appt.subject == 'Dinner with Jane' and
68
- appt.time == Time.utc(2010, 1, 6, 20, 0) and appt.user == @user2
69
- }
70
- )
71
- end
72
-
73
- def test_create_while_missing_a_user_id
74
- post(
75
- "/admin/appointments",
76
- :appointment => {
77
- 'a' => {
78
- 'subject' => 'Lunch with Dick', 'time(1i)' => '2010',
79
- 'time(2i)' => '1', 'time(3i)' => '4', 'time(4i)' => '12',
80
- 'time(5i)' => '00', 'user_id' => ''
81
- },
82
- 'b' => {
83
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
84
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
85
- },
86
- 'c' => {
87
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
88
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
89
- },
90
- 'd' => {
91
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
92
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
93
- },
94
- 'e' => {
95
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
96
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
97
- },
98
- 'f' => {
99
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
100
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
101
- },
102
- 'g' => {
103
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
104
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
105
- },
106
- 'h' => {
107
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
108
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
109
- },
110
- 'i' => {
111
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
112
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
113
- },
114
- 'j' => {
115
- 'subject' => '', 'time(1i)' => '', 'time(2i)' => '',
116
- 'time(3i)' => '', 'time(4i)' => '', 'time(5i)' => ''
117
- }
118
- }
119
- )
120
- # should show an error for user_id
121
- assert_response :success
122
- assert_match(/User can't be blank/, response.body)
123
- end
124
-
125
- def test_index
126
- user = User.first
127
- user ||= User.create!(:username => random_word)
128
- if Appointment.count == 0
129
- Appointment.create!(
130
- :subject => 'Lunch', :time => Time.utc(2010,2,18,13,0,0),
131
- :user => user
132
- )
133
- end
134
- get "/admin/appointments"
135
- # should show a search range widget
136
- assert_select('form#search_form') do
137
- %w(gt lt).each do |comparator|
138
- 1.upto(5) do |num|
139
- name = "search[time][#{comparator}(#{num}i)]"
140
- assert_select('select[name=?]', name) do
141
- assert_select "option[value='']"
142
- end
143
- end
144
- end
145
- end
146
- end
147
-
148
- def test_index_when_searching_for_an_appt_after_a_specific_time
149
- @user = User.first
150
- @user ||= User.create! :username => random_word
151
- @yesterday = 1.day.ago.to_date.to_time.utc
152
- @yesterdays_appt = Appointment.find_by_time @yesterday
153
- @yesterdays_appt ||= Appointment.create!(
154
- :subject => random_word, :user => @user, :time => @yesterday
155
- )
156
- @today = Time.now.to_date.to_time.utc
157
- @todays_appt = Appointment.find_by_time @today
158
- @todays_appt ||= Appointment.create!(
159
- :subject => random_word, :user => @user, :time => @today
160
- )
161
- @tomorrow = 1.day.from_now.to_date.to_time.utc
162
- @tomorrows_appt = Appointment.find_by_time @tomorrow
163
- @tomorrows_appt ||= Appointment.create!(
164
- :subject => random_word, :user => @user, :time => @tomorrow
165
- )
166
- get(
167
- "/admin/appointments",
168
- :search => {:time => {
169
- 'gt(1i)' => @today.year, 'gt(2i)' => @today.month,
170
- 'gt(3i)' => @today.day, 'gt(4i)' => @today.hour, 'gt(5i)' => '00',
171
- 'lt(1i)' => '', 'lt(2i)' => '', 'lt(3i)' => '', 'lt(4i)' => '',
172
- 'lt(5i)' => ''
173
- }}
174
- )
175
- assert_response :success
176
-
177
- # should prefill the search form fields
178
- assert_select('form#search_form') do
179
- assert_select('select[name=?]', 'search[time][gt(1i)]') do
180
- assert_select('option[value=?][selected=selected]', @today.year)
181
- end
182
- assert_select('select[name=?]', 'search[time][gt(2i)]') do
183
- assert_select('option[value=?][selected=selected]', @today.month)
184
- end
185
- assert_select('select[name=?]', 'search[time][gt(3i)]') do
186
- assert_select('option[value=?][selected=selected]', @today.day)
187
- end
188
- assert_select('select[name=?]', 'search[time][gt(4i)]') do
189
- assert_select(
190
- 'option[value=?][selected=selected]', sprintf('%02d', @today.hour)
191
- )
192
- end
193
- assert_select('select[name=?]', 'search[time][gt(5i)]') do
194
- assert_select('option[value=?][selected=selected]', '00')
195
- end
196
- end
197
-
198
- # should not show an appointment before that time
199
- assert_no_match(/#{@yesterdays_appt.subject}/, response.body)
200
-
201
- # should not show an appointment equal to that time
202
- assert_no_match(/#{@todays_appt.subject}/, response.body)
203
-
204
- # should show an appointment after that time
205
- assert_select('td', :text => @tomorrows_appt.subject)
206
- end
207
-
208
- def test_index_when_searching_for_an_appointment_before_a_specific_time
209
- Appointment.destroy_all if Appointment.count > 20
210
- @user = User.first
211
- @user ||= User.create! :username => random_word
212
- @yesterday = 1.day.ago.to_date.to_time.utc
213
- @yesterdays_appt = Appointment.find_by_time @yesterday
214
- @yesterdays_appt ||= Appointment.create!(
215
- :subject => random_word, :user => @user, :time => @yesterday
216
- )
217
- @today = 0.minutes.ago.to_date.to_time.utc
218
- @todays_appt = Appointment.find_by_time @today
219
- @todays_appt ||= Appointment.create!(
220
- :subject => random_word, :user => @user, :time => @today
221
- )
222
- @tomorrow = 1.day.from_now.to_date.to_time.utc
223
- @tomorrows_appt = Appointment.find_by_time @tomorrow
224
- @tomorrows_appt ||= Appointment.create!(
225
- :subject => random_word, :user => @user, :time => @tomorrow
226
- )
227
- get(
228
- "/admin/appointments",
229
- :search => {:time => {
230
- 'gt(1i)' => '', 'gt(2i)' => '', 'gt(3i)' => '', 'gt(4i)' => '',
231
- 'gt(5i)' => '', 'lt(1i)' => @today.year, 'lt(2i)' => @today.month,
232
- 'lt(3i)' => @today.day, 'lt(4i)' => @today.hour, 'lt(5i)' => '00'
233
- }}
234
- )
235
- assert_response :success
236
-
237
- # should prefill the search form fields
238
- assert_select('form#search_form') do
239
- assert_select('select[name=?]', 'search[time][lt(1i)]') do
240
- assert_select('option[value=?][selected=selected]', @today.year)
241
- end
242
- assert_select('select[name=?]', 'search[time][lt(2i)]') do
243
- assert_select('option[value=?][selected=selected]', @today.month)
244
- end
245
- assert_select('select[name=?]', 'search[time][lt(3i)]') do
246
- assert_select('option[value=?][selected=selected]', @today.day)
247
- end
248
- assert_select('select[name=?]', 'search[time][lt(4i)]') do
249
- assert_select(
250
- 'option[value=?][selected=selected]', sprintf('%02d', @today.hour)
251
- )
252
- end
253
- assert_select('select[name=?]', 'search[time][lt(5i)]') do
254
- assert_select('option[value=?][selected=selected]', '00')
255
- end
256
- end
257
-
258
- # should show an appointment before that time
259
- assert_select('td', :text => @yesterdays_appt.subject)
260
-
261
- # should not show an appointment equal to that time
262
- assert_no_match(/#{@todays_appt.subject}/, response.body)
263
-
264
- # should not show an appointment after that time
265
- assert_no_match(/#{@tomorrows_appt.subject}/, response.body)
266
- end
267
-
268
- def test_index_when_searching_for_an_appointment_within_a_time_range
269
- Appointment.destroy_all if Appointment.count > 20
270
- @user = User.first
271
- @user ||= User.create! :username => random_word
272
- @yesterday = 1.day.ago.to_date.to_time.utc
273
- @yesterdays_appt = Appointment.find_by_time @yesterday
274
- @yesterdays_appt ||= Appointment.create!(
275
- :subject => random_word, :user => @user, :time => @yesterday
276
- )
277
- @today = 0.minutes.ago.to_date.to_time.utc
278
- @todays_appt = Appointment.find_by_time @today
279
- @todays_appt ||= Appointment.create!(
280
- :subject => random_word, :user => @user, :time => @today
281
- )
282
- @tomorrow = 1.day.from_now.to_date.to_time.utc
283
- @tomorrows_appt = Appointment.find_by_time @tomorrow
284
- @tomorrows_appt ||= Appointment.create!(
285
- :subject => random_word, :user => @user, :time => @tomorrow
286
- )
287
- get(
288
- "/admin/appointments",
289
- :search => {:time => {
290
- 'gt(1i)' => @yesterday.year, 'gt(2i)' => @yesterday.month,
291
- 'gt(3i)' => @yesterday.day, 'gt(4i)' => @yesterday.hour,
292
- 'gt(5i)' => '', 'lt(1i)' => @tomorrow.year,
293
- 'lt(2i)' => @tomorrow.month, 'lt(3i)' => @tomorrow.day,
294
- 'lt(4i)' => @tomorrow.hour, 'lt(5i)' => '00'
295
- }}
296
- )
297
- assert_response :success
298
-
299
- # should prefill the search form fields
300
- assert_select('form#search_form') do
301
- assert_select('select[name=?]', 'search[time][gt(1i)]') do
302
- assert_select('option[value=?][selected=selected]', @yesterday.year)
303
- end
304
- assert_select('select[name=?]', 'search[time][gt(2i)]') do
305
- assert_select('option[value=?][selected=selected]', @yesterday.month)
306
- end
307
- assert_select('select[name=?]', 'search[time][gt(3i)]') do
308
- assert_select('option[value=?][selected=selected]', @yesterday.day)
309
- end
310
- assert_select('select[name=?]', 'search[time][gt(4i)]') do
311
- assert_select(
312
- 'option[value=?][selected=selected]',
313
- sprintf('%02d', @yesterday.hour)
314
- )
315
- end
316
- assert_select('select[name=?]', 'search[time][gt(5i)]') do
317
- assert_select('option[value=?][selected=selected]', '00')
318
- end
319
- assert_select('select[name=?]', 'search[time][lt(1i)]') do
320
- assert_select('option[value=?][selected=selected]', @tomorrow.year)
321
- end
322
- assert_select('select[name=?]', 'search[time][lt(2i)]') do
323
- assert_select('option[value=?][selected=selected]', @tomorrow.month)
324
- end
325
- assert_select('select[name=?]', 'search[time][lt(3i)]') do
326
- assert_select('option[value=?][selected=selected]', @tomorrow.day)
327
- end
328
- assert_select('select[name=?]', 'search[time][lt(4i)]') do
329
- assert_select(
330
- 'option[value=?][selected=selected]',
331
- sprintf('%02d', @tomorrow.hour)
332
- )
333
- end
334
- assert_select('select[name=?]', 'search[time][lt(5i)]') do
335
- assert_select('option[value=?][selected=selected]', '00')
336
- end
337
- end
338
-
339
- # should not show an appointment before that range
340
- assert_no_match(/#{@yesterdays_appt.subject}/, response.body)
341
-
342
- # should show an appointment in that range
343
- assert_select('td', :text => @todays_appt.subject)
344
-
345
- # should not show an appointment after that range
346
- assert_no_match(/#{@tomorrows_appt.subject}/, response.body)
347
- end
348
-
349
- def test_new
350
- User.destroy_all
351
- @user = User.create! :username => random_word
352
- get "/admin/appointments/new"
353
-
354
- # should show prefixes in the subject field
355
- assert_select('td', :text => /Prefix a/) do
356
- assert_select('input[name=?]', 'appointment[a][subject]')
357
- end
358
-
359
- # should sensibly prefix the datetime fields
360
- assert_select('select[name=?]', 'appointment[a][time(1i)]')
361
-
362
- # should include a user selector
363
- assert_select('select[name=?]', 'appointment[a][user_id]') do
364
- assert_select 'option[value=?]', @user.id, :text => /#{@user.username}/
365
- end
366
- end
367
- end