admin_assistant 2.1.0 → 2.1.1

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