ccls-ccls_engine 3.11.0

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 (269) hide show
  1. data/README.rdoc +182 -0
  2. data/app/models/abstract.rb +181 -0
  3. data/app/models/abstract_search.rb +50 -0
  4. data/app/models/abstract_validations.rb +324 -0
  5. data/app/models/address.rb +70 -0
  6. data/app/models/address_type.rb +15 -0
  7. data/app/models/addressing.rb +147 -0
  8. data/app/models/aliquot.rb +44 -0
  9. data/app/models/aliquot_sample_format.rb +13 -0
  10. data/app/models/analysis.rb +14 -0
  11. data/app/models/bc_request.rb +20 -0
  12. data/app/models/candidate_control.rb +101 -0
  13. data/app/models/context.rb +23 -0
  14. data/app/models/context_data_source.rb +4 -0
  15. data/app/models/county.rb +16 -0
  16. data/app/models/data_source.rb +24 -0
  17. data/app/models/diagnosis.rb +23 -0
  18. data/app/models/document_type.rb +16 -0
  19. data/app/models/document_version.rb +27 -0
  20. data/app/models/enrollment.rb +78 -0
  21. data/app/models/enrollment_validations.rb +167 -0
  22. data/app/models/follow_up.rb +16 -0
  23. data/app/models/follow_up_type.rb +18 -0
  24. data/app/models/gift_card.rb +22 -0
  25. data/app/models/gift_card_search.rb +137 -0
  26. data/app/models/home_exposure_response.rb +24 -0
  27. data/app/models/homex_outcome.rb +75 -0
  28. data/app/models/hospital.rb +22 -0
  29. data/app/models/icf_master_id.rb +30 -0
  30. data/app/models/icf_master_tracker.rb +217 -0
  31. data/app/models/icf_master_tracker_change.rb +9 -0
  32. data/app/models/icf_master_tracker_update.rb +50 -0
  33. data/app/models/ineligible_reason.rb +26 -0
  34. data/app/models/instrument.rb +26 -0
  35. data/app/models/instrument_type.rb +17 -0
  36. data/app/models/instrument_version.rb +28 -0
  37. data/app/models/interview.rb +122 -0
  38. data/app/models/interview_method.rb +17 -0
  39. data/app/models/interview_outcome.rb +16 -0
  40. data/app/models/language.rb +28 -0
  41. data/app/models/live_birth_data_update.rb +142 -0
  42. data/app/models/operational_event.rb +99 -0
  43. data/app/models/operational_event_type.rb +31 -0
  44. data/app/models/organization.rb +28 -0
  45. data/app/models/patient.rb +63 -0
  46. data/app/models/patient_validations.rb +118 -0
  47. data/app/models/person.rb +28 -0
  48. data/app/models/phone_number.rb +105 -0
  49. data/app/models/phone_type.rb +15 -0
  50. data/app/models/project.rb +39 -0
  51. data/app/models/project_outcome.rb +19 -0
  52. data/app/models/race.rb +31 -0
  53. data/app/models/refusal_reason.rb +23 -0
  54. data/app/models/sample.rb +168 -0
  55. data/app/models/sample_kit.rb +14 -0
  56. data/app/models/sample_outcome.rb +16 -0
  57. data/app/models/sample_temperature.rb +14 -0
  58. data/app/models/sample_type.rb +37 -0
  59. data/app/models/search.rb +195 -0
  60. data/app/models/section.rb +18 -0
  61. data/app/models/state.rb +25 -0
  62. data/app/models/study_subject.rb +237 -0
  63. data/app/models/study_subject_abstracts.rb +47 -0
  64. data/app/models/study_subject_addresses.rb +34 -0
  65. data/app/models/study_subject_associations.rb +38 -0
  66. data/app/models/study_subject_duplicates.rb +111 -0
  67. data/app/models/study_subject_enrollments.rb +17 -0
  68. data/app/models/study_subject_homex_outcome.rb +22 -0
  69. data/app/models/study_subject_identifier.rb +153 -0
  70. data/app/models/study_subject_interviews.rb +25 -0
  71. data/app/models/study_subject_languages.rb +21 -0
  72. data/app/models/study_subject_operational_events.rb +66 -0
  73. data/app/models/study_subject_patient.rb +177 -0
  74. data/app/models/study_subject_pii.rb +74 -0
  75. data/app/models/study_subject_races.rb +25 -0
  76. data/app/models/study_subject_search.rb +260 -0
  77. data/app/models/study_subject_validations.rb +116 -0
  78. data/app/models/subject_language.rb +11 -0
  79. data/app/models/subject_race.rb +11 -0
  80. data/app/models/subject_relationship.rb +21 -0
  81. data/app/models/subject_type.rb +22 -0
  82. data/app/models/tracing_status.rb +20 -0
  83. data/app/models/transfer.rb +40 -0
  84. data/app/models/unit.rb +14 -0
  85. data/app/models/vital_status.rb +19 -0
  86. data/app/models/zip_code.rb +36 -0
  87. data/config/abstract_fields.yml +1038 -0
  88. data/config/abstract_sections.yml +77 -0
  89. data/config/home_exposure_response_fields.yml +583 -0
  90. data/config/icf_master_tracker_update.yml +56 -0
  91. data/config/live_birth_data_update.yml +56 -0
  92. data/config/shared_use_db.yml +4 -0
  93. data/generators/ccls_engine/USAGE +2 -0
  94. data/generators/ccls_engine/ccls_engine_generator.rb +123 -0
  95. data/generators/ccls_engine/templates/autotest_ccls_engine.rb +3 -0
  96. data/generators/ccls_engine/templates/ccls_engine.rake +12 -0
  97. data/generators/ccls_engine/templates/fixtures/address_types.yml +30 -0
  98. data/generators/ccls_engine/templates/fixtures/context_data_sources.yml +54 -0
  99. data/generators/ccls_engine/templates/fixtures/contexts.yml +19 -0
  100. data/generators/ccls_engine/templates/fixtures/data_sources.yml +40 -0
  101. data/generators/ccls_engine/templates/fixtures/diagnoses.yml +40 -0
  102. data/generators/ccls_engine/templates/fixtures/document_types.yml +65 -0
  103. data/generators/ccls_engine/templates/fixtures/document_versions.csv +155 -0
  104. data/generators/ccls_engine/templates/fixtures/follow_up_types.yml +16 -0
  105. data/generators/ccls_engine/templates/fixtures/hospitals.yml +114 -0
  106. data/generators/ccls_engine/templates/fixtures/ineligible_reasons.yml +35 -0
  107. data/generators/ccls_engine/templates/fixtures/instrument_types.yml +26 -0
  108. data/generators/ccls_engine/templates/fixtures/instrument_versions.yml +22 -0
  109. data/generators/ccls_engine/templates/fixtures/instruments.yml +22 -0
  110. data/generators/ccls_engine/templates/fixtures/interview_methods.yml +30 -0
  111. data/generators/ccls_engine/templates/fixtures/interview_outcomes.yml +31 -0
  112. data/generators/ccls_engine/templates/fixtures/languages.yml +34 -0
  113. data/generators/ccls_engine/templates/fixtures/operational_event_types.yml +141 -0
  114. data/generators/ccls_engine/templates/fixtures/organizations.yml +198 -0
  115. data/generators/ccls_engine/templates/fixtures/people.yml +130 -0
  116. data/generators/ccls_engine/templates/fixtures/phone_types.yml +30 -0
  117. data/generators/ccls_engine/templates/fixtures/project_outcomes.yml +25 -0
  118. data/generators/ccls_engine/templates/fixtures/projects.yml +59 -0
  119. data/generators/ccls_engine/templates/fixtures/races.yml +52 -0
  120. data/generators/ccls_engine/templates/fixtures/refusal_reasons.yml +55 -0
  121. data/generators/ccls_engine/templates/fixtures/sample_outcomes.yml +36 -0
  122. data/generators/ccls_engine/templates/fixtures/sample_temperatures.yml +16 -0
  123. data/generators/ccls_engine/templates/fixtures/sample_types.yml +147 -0
  124. data/generators/ccls_engine/templates/fixtures/sections.yml +31 -0
  125. data/generators/ccls_engine/templates/fixtures/states.yml +363 -0
  126. data/generators/ccls_engine/templates/fixtures/subject_relationships.yml +46 -0
  127. data/generators/ccls_engine/templates/fixtures/subject_types.yml +30 -0
  128. data/generators/ccls_engine/templates/fixtures/tracing_statuses.yml +30 -0
  129. data/generators/ccls_engine/templates/fixtures/units.yml +13 -0
  130. data/generators/ccls_engine/templates/fixtures/vital_statuses.yml +28 -0
  131. data/generators/ccls_engine/templates/functional/roles_controller_test.rb +142 -0
  132. data/generators/ccls_engine/templates/functional/sessions_controller_test.rb +19 -0
  133. data/generators/ccls_engine/templates/functional/users_controller_test.rb +94 -0
  134. data/generators/ccls_engine/templates/images/sort_down.png +0 -0
  135. data/generators/ccls_engine/templates/images/sort_up.png +0 -0
  136. data/generators/ccls_engine/templates/initializer.rb +28 -0
  137. data/generators/ccls_engine/templates/javascripts/ccls_engine.js +24 -0
  138. data/generators/ccls_engine/templates/javascripts/jquery-ui.js +763 -0
  139. data/generators/ccls_engine/templates/javascripts/jquery.js +154 -0
  140. data/generators/ccls_engine/templates/javascripts/jrails.js +1 -0
  141. data/generators/ccls_engine/templates/migrations/create_user_invitations.rb +18 -0
  142. data/generators/ccls_engine/templates/migrations/create_users.rb +33 -0
  143. data/generators/ccls_engine/templates/migrations/drop_user_invitations.rb +18 -0
  144. data/generators/ccls_engine/templates/stylesheets/ccls_engine.css +180 -0
  145. data/generators/ccls_engine/templates/stylesheets/user.css +35 -0
  146. data/generators/ccls_engine/templates/stylesheets/users.css +23 -0
  147. data/generators/ccls_engine/templates/unit/core_extension_test.rb +18 -0
  148. data/generators/ccls_engine/templates/unit/role_test.rb +30 -0
  149. data/generators/ccls_engine/templates/unit/user_test.rb +321 -0
  150. data/lib/ccls-ccls_engine.rb +1 -0
  151. data/lib/ccls_engine.rb +135 -0
  152. data/lib/ccls_engine/action_view_extension.rb +3 -0
  153. data/lib/ccls_engine/action_view_extension/base.rb +53 -0
  154. data/lib/ccls_engine/action_view_extension/form_builder.rb +39 -0
  155. data/lib/ccls_engine/active_record_extension.rb +2 -0
  156. data/lib/ccls_engine/active_record_extension/base.rb +70 -0
  157. data/lib/ccls_engine/active_record_shared.rb +8 -0
  158. data/lib/ccls_engine/assertions.rb +69 -0
  159. data/lib/ccls_engine/autotest.rb +54 -0
  160. data/lib/ccls_engine/ccls_user.rb +117 -0
  161. data/lib/ccls_engine/core_extension.rb +14 -0
  162. data/lib/ccls_engine/date_and_time_formats.rb +30 -0
  163. data/lib/ccls_engine/factories.rb +880 -0
  164. data/lib/ccls_engine/factory_test_helper.rb +276 -0
  165. data/lib/ccls_engine/helper.rb +112 -0
  166. data/lib/ccls_engine/icf_master_tracker_update_test_helper.rb +121 -0
  167. data/lib/ccls_engine/live_birth_data_update_test_helper.rb +110 -0
  168. data/lib/ccls_engine/package_test_helper.rb +49 -0
  169. data/lib/ccls_engine/shared_database.rb +20 -0
  170. data/lib/ccls_engine/tasks.rb +1 -0
  171. data/lib/ccls_engine/test_tasks.rb +52 -0
  172. data/lib/ccls_engine/translation_table.rb +86 -0
  173. data/lib/shared_migration.rb +5 -0
  174. data/lib/surveyor/survey_extensions.rb +125 -0
  175. data/lib/tasks/application.rake +286 -0
  176. data/lib/tasks/calnet_authenticated.rake +6 -0
  177. data/lib/tasks/common_lib.rake +7 -0
  178. data/lib/tasks/database.rake +288 -0
  179. data/lib/tasks/documentation.rake +71 -0
  180. data/lib/tasks/homex_import.rake +723 -0
  181. data/lib/tasks/odms_import.rake +1116 -0
  182. data/lib/tasks/simply_authorized.rake +6 -0
  183. data/lib/tasks/ucb_ccls_engine_tasks.rake +4 -0
  184. data/lib/tasks/use_db.rake +4 -0
  185. data/rails/init.rb +4 -0
  186. data/test/unit/ccls/abstract_search_test.rb +150 -0
  187. data/test/unit/ccls/abstract_test.rb +674 -0
  188. data/test/unit/ccls/address_test.rb +155 -0
  189. data/test/unit/ccls/address_type_test.rb +25 -0
  190. data/test/unit/ccls/addressing_test.rb +466 -0
  191. data/test/unit/ccls/aliquot_sample_format_test.rb +20 -0
  192. data/test/unit/ccls/aliquot_test.rb +156 -0
  193. data/test/unit/ccls/analysis_test.rb +31 -0
  194. data/test/unit/ccls/bc_request_test.rb +43 -0
  195. data/test/unit/ccls/candidate_control_test.rb +712 -0
  196. data/test/unit/ccls/context_data_source_test.rb +26 -0
  197. data/test/unit/ccls/context_test.rb +40 -0
  198. data/test/unit/ccls/core_extension_test.rb +17 -0
  199. data/test/unit/ccls/county_test.rb +34 -0
  200. data/test/unit/ccls/data_source_test.rb +41 -0
  201. data/test/unit/ccls/diagnosis_test.rb +51 -0
  202. data/test/unit/ccls/document_type_test.rb +35 -0
  203. data/test/unit/ccls/document_version_test.rb +68 -0
  204. data/test/unit/ccls/enrollment_test.rb +575 -0
  205. data/test/unit/ccls/follow_up_test.rb +23 -0
  206. data/test/unit/ccls/follow_up_type_test.rb +34 -0
  207. data/test/unit/ccls/gift_card_search_test.rb +153 -0
  208. data/test/unit/ccls/gift_card_test.rb +40 -0
  209. data/test/unit/ccls/home_exposure_response_test.rb +83 -0
  210. data/test/unit/ccls/homex_outcome_test.rb +199 -0
  211. data/test/unit/ccls/hospital_test.rb +102 -0
  212. data/test/unit/ccls/icf_master_id_test.rb +30 -0
  213. data/test/unit/ccls/icf_master_tracker_change_test.rb +14 -0
  214. data/test/unit/ccls/icf_master_tracker_test.rb +132 -0
  215. data/test/unit/ccls/icf_master_tracker_update_test.rb +176 -0
  216. data/test/unit/ccls/ineligible_reason_test.rb +48 -0
  217. data/test/unit/ccls/instrument_test.rb +62 -0
  218. data/test/unit/ccls/instrument_type_test.rb +39 -0
  219. data/test/unit/ccls/instrument_version_test.rb +71 -0
  220. data/test/unit/ccls/interview_method_test.rb +44 -0
  221. data/test/unit/ccls/interview_outcome_test.rb +34 -0
  222. data/test/unit/ccls/interview_test.rb +298 -0
  223. data/test/unit/ccls/language_test.rb +47 -0
  224. data/test/unit/ccls/live_birth_data_update_test.rb +358 -0
  225. data/test/unit/ccls/operational_event_test.rb +187 -0
  226. data/test/unit/ccls/operational_event_type_test.rb +51 -0
  227. data/test/unit/ccls/organization_test.rb +64 -0
  228. data/test/unit/ccls/patient_test.rb +538 -0
  229. data/test/unit/ccls/person_test.rb +55 -0
  230. data/test/unit/ccls/phone_number_test.rb +244 -0
  231. data/test/unit/ccls/phone_type_test.rb +32 -0
  232. data/test/unit/ccls/project_outcome_test.rb +34 -0
  233. data/test/unit/ccls/project_test.rb +60 -0
  234. data/test/unit/ccls/race_test.rb +37 -0
  235. data/test/unit/ccls/refusal_reason_test.rb +52 -0
  236. data/test/unit/ccls/role_test.rb +26 -0
  237. data/test/unit/ccls/sample_kit_test.rb +35 -0
  238. data/test/unit/ccls/sample_outcome_test.rb +34 -0
  239. data/test/unit/ccls/sample_temperature_test.rb +25 -0
  240. data/test/unit/ccls/sample_test.rb +363 -0
  241. data/test/unit/ccls/sample_type_test.rb +58 -0
  242. data/test/unit/ccls/section_test.rb +34 -0
  243. data/test/unit/ccls/state_test.rb +31 -0
  244. data/test/unit/ccls/study_subject_abstracts_test.rb +115 -0
  245. data/test/unit/ccls/study_subject_addresses_test.rb +93 -0
  246. data/test/unit/ccls/study_subject_duplicates_test.rb +407 -0
  247. data/test/unit/ccls/study_subject_enrollments_test.rb +65 -0
  248. data/test/unit/ccls/study_subject_homex_outcome_test.rb +64 -0
  249. data/test/unit/ccls/study_subject_identifier_test.rb +439 -0
  250. data/test/unit/ccls/study_subject_interviews_test.rb +26 -0
  251. data/test/unit/ccls/study_subject_languages_test.rb +142 -0
  252. data/test/unit/ccls/study_subject_operational_events_test.rb +53 -0
  253. data/test/unit/ccls/study_subject_patient_test.rb +249 -0
  254. data/test/unit/ccls/study_subject_pii_test.rb +278 -0
  255. data/test/unit/ccls/study_subject_races_test.rb +203 -0
  256. data/test/unit/ccls/study_subject_search_test.rb +704 -0
  257. data/test/unit/ccls/study_subject_test.rb +770 -0
  258. data/test/unit/ccls/subject_language_test.rb +43 -0
  259. data/test/unit/ccls/subject_race_test.rb +35 -0
  260. data/test/unit/ccls/subject_relationship_test.rb +43 -0
  261. data/test/unit/ccls/subject_type_test.rb +40 -0
  262. data/test/unit/ccls/tracing_status_test.rb +32 -0
  263. data/test/unit/ccls/transfer_test.rb +81 -0
  264. data/test/unit/ccls/translation_table_test.rb +40 -0
  265. data/test/unit/ccls/unit_test.rb +21 -0
  266. data/test/unit/ccls/user_test.rb +156 -0
  267. data/test/unit/ccls/vital_status_test.rb +36 -0
  268. data/test/unit/ccls/zip_code_test.rb +55 -0
  269. metadata +633 -0
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::PersonTest < ActiveSupport::TestCase
4
+
5
+ assert_should_create_default_object
6
+ assert_should_require_attribute( :last_name )
7
+ assert_should_not_require_attributes(
8
+ :position,
9
+ :first_name,
10
+ :honorific,
11
+ :organization_id,
12
+ :person_type_id )
13
+ assert_should_act_as_list
14
+ assert_should_have_many( :organizations )
15
+
16
+ # TODO assert_should_have_many( :interviews, :foreign_key => :interviewer_id )
17
+
18
+ assert_should_require_attribute_length(
19
+ :first_name,
20
+ :last_name,
21
+ :honorific,
22
+ :maximum => 250 )
23
+
24
+ test "explicit Factory person test" do
25
+ assert_difference('Person.count',1) {
26
+ person = Factory(:person)
27
+ assert_match /LastName\d*/, person.last_name
28
+ }
29
+ end
30
+
31
+ test "should return full_name as to_s" do
32
+ person = create_person
33
+ assert_equal person.full_name, "#{person}"
34
+ end
35
+
36
+ test "should find random" do
37
+ person = Person.random()
38
+ assert person.is_a?(Person)
39
+ end
40
+
41
+ test "should return nil on random when no records" do
42
+ Person.stubs(:count).returns(0)
43
+ person = Person.random()
44
+ assert_nil person
45
+ end
46
+
47
+ #protected
48
+ #
49
+ # def create_person(options={})
50
+ # person = Factory.build(:person,options)
51
+ # person.save
52
+ # person
53
+ # end
54
+
55
+ end
@@ -0,0 +1,244 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::PhoneNumberTest < ActiveSupport::TestCase
4
+
5
+ [ :current_phone, :is_valid ].each do |field|
6
+
7
+ # Making assumption that 12345 will NEVER be a valid value.
8
+ test "should NOT allow 12345 for #{field}" do
9
+ phone_number = PhoneNumber.new(field => 12345)
10
+ phone_number.valid?
11
+ assert phone_number.errors.on_attr_and_type?(field,:inclusion)
12
+ end
13
+
14
+ test "should allow nil for #{field}" do
15
+ phone_number = PhoneNumber.new(field => nil)
16
+ assert_nil phone_number.send(field)
17
+ phone_number.valid?
18
+ assert !phone_number.errors.on(field)
19
+ end
20
+
21
+ test "should allow all valid YNDK values for #{field}" do
22
+ phone_number = PhoneNumber.new
23
+ YNDK.valid_values.each do |value|
24
+ phone_number.send("#{field}=", value)
25
+ phone_number.valid?
26
+ assert !phone_number.errors.on(field)
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+ assert_should_create_default_object
33
+ assert_should_protect(:study_subject_id, :study_subject)
34
+ assert_should_act_as_list( :scope => :study_subject_id )
35
+
36
+ assert_should_initially_belong_to( :study_subject, :phone_type )
37
+ assert_should_require_attribute(:phone_number )
38
+ assert_should_not_require_attributes( :position, :study_subject_id,
39
+ # :data_source_id, :is_primary, :is_valid,
40
+ :is_primary, :is_valid,
41
+ :why_invalid, :is_verified, :how_verified,
42
+ :verified_on, :verified_by_uid, :current_phone )
43
+ assert_should_require_attribute_length( :how_verified, :why_invalid,
44
+ :maximum => 250 )
45
+
46
+ test "explicit Factory phone_number test" do
47
+ assert_difference('StudySubject.count',1) {
48
+ assert_difference('PhoneType.count',1) {
49
+ assert_difference('PhoneNumber.count',1) {
50
+ phone_number = Factory(:phone_number)
51
+ assert_not_nil phone_number.study_subject
52
+ assert_not_nil phone_number.phone_type
53
+ assert_match /\(\d{3}\) \d{3}-\d{4}/, phone_number.phone_number
54
+ assert_equal 1, phone_number.is_valid
55
+ assert !phone_number.is_verified
56
+ } } }
57
+ end
58
+
59
+ test "should return phone number as to_s" do
60
+ phone_number = create_phone_number
61
+ assert_equal phone_number.phone_number, "#{phone_number}"
62
+ end
63
+
64
+ test "should require data_source_other if data_source is other" do
65
+ assert_difference( "PhoneNumber.count", 0 ) do
66
+ phone_number = create_phone_number( :data_source => DataSource['Other'])
67
+ assert phone_number.errors.on_attr_and_type?(:data_source_other,:blank)
68
+ end
69
+ end
70
+
71
+ test "should NOT require data_source_other if data_source is not other" do
72
+ assert_difference( "PhoneNumber.count", 1 ) do
73
+ phone_number = create_phone_number( :data_source => DataSource['raf'])
74
+ assert !phone_number.errors.on_attr_and_type?(:data_source_other,:blank)
75
+ end
76
+ end
77
+
78
+ test "should require phone_type" do
79
+ assert_difference( "PhoneNumber.count", 0 ) do
80
+ phone_number = create_phone_number( :phone_type => nil)
81
+ assert !phone_number.errors.on(:phone_type)
82
+ assert phone_number.errors.on_attr_and_type?(:phone_type_id, :blank)
83
+ end
84
+ end
85
+
86
+ test "should require valid phone_type" do
87
+ assert_difference( "PhoneNumber.count", 0 ) do
88
+ phone_number = create_phone_number( :phone_type_id => 0)
89
+ assert !phone_number.errors.on(:phone_type_id)
90
+ assert phone_number.errors.on_attr_and_type?(:phone_type,:blank)
91
+ end
92
+ end
93
+
94
+ test "current_phone should default to 1" do
95
+ phone_number = PhoneNumber.new
96
+ assert_equal 1, phone_number.current_phone
97
+ end
98
+
99
+ test "should only return current phone_numbers" do
100
+ create_phone_number(:current_phone => YNDK[:yes])
101
+ create_phone_number(:current_phone => YNDK[:no])
102
+ create_phone_number(:current_phone => YNDK[:dk])
103
+ phone_numbers = PhoneNumber.current
104
+ assert_equal 2, phone_numbers.length
105
+ phone_numbers.each do |phone_number|
106
+ assert [1,999].include?(phone_number.current_phone)
107
+ end
108
+ end
109
+
110
+ test "should only return historic phone_numbers" do
111
+ create_phone_number(:current_phone => YNDK[:yes])
112
+ create_phone_number(:current_phone => YNDK[:no])
113
+ create_phone_number(:current_phone => YNDK[:dk])
114
+ phone_numbers = PhoneNumber.historic
115
+ assert_equal 1, phone_numbers.length
116
+ phone_numbers.each do |phone_number|
117
+ assert ![1,999].include?(phone_number.current_phone)
118
+ end
119
+ end
120
+
121
+ test "should not have multiple errors for blank phone number" do
122
+ assert_difference( "PhoneNumber.count", 0 ) do
123
+ phone_number = create_phone_number(:phone_number => '')
124
+ assert !phone_number.errors.on_attr_and_type?(:phone_number,:invalid)
125
+ assert phone_number.errors.on_attr_and_type?(:phone_number,:blank)
126
+ end
127
+ end
128
+
129
+ test "should require properly formated phone number" do
130
+ [ 'asdf', 'me@some@where.com','12345678','12345678901'
131
+ ].each do |bad_phone|
132
+ assert_difference( "PhoneNumber.count", 0 ) do
133
+ phone_number = create_phone_number(:phone_number => bad_phone)
134
+ assert phone_number.errors.on_attr_and_type?(:phone_number,:invalid)
135
+ end
136
+ end
137
+ [ "(123)456-7890", "1234567890",
138
+ " 1 asdf23,4()5\+67 8 9 0asdf" ].each do |good_phone|
139
+ assert_difference( "PhoneNumber.count", 1 ) do
140
+ phone_number = create_phone_number(:phone_number => good_phone)
141
+ assert !phone_number.errors.on_attr_and_type?(:phone_number,:invalid)
142
+ assert phone_number.reload.phone_number =~ /\A\(\d{3}\)\s+\d{3}-\d{4}\z/
143
+ assert_equal '(123) 456-7890', phone_number.phone_number
144
+ end
145
+ end
146
+ end
147
+
148
+ test "should format phone number" do
149
+ assert_difference( "PhoneNumber.count", 1 ) do
150
+ phone_number = create_phone_number( :phone_number => '1234567890' )
151
+ assert !phone_number.errors.on(:phone_number)
152
+ assert phone_number.phone_number =~ /\A\(\d{3}\)\s+\d{3}-\d{4}\z/
153
+ assert_equal '(123) 456-7890', phone_number.phone_number
154
+ end
155
+ end
156
+
157
+
158
+ [:yes,:nil].each do |yndk|
159
+ test "should NOT require why_invalid if is_valid is #{yndk}" do
160
+ assert_difference( "PhoneNumber.count", 1 ) do
161
+ phone_number = create_phone_number(:is_valid => YNDK[yndk])
162
+ end
163
+ end
164
+ end
165
+ [:no,:dk].each do |yndk|
166
+ test "should require why_invalid if is_valid is #{yndk}" do
167
+ assert_difference( "PhoneNumber.count", 0 ) do
168
+ phone_number = create_phone_number(:is_valid => YNDK[yndk])
169
+ assert phone_number.errors.on(:why_invalid)
170
+ end
171
+ end
172
+ end
173
+
174
+ test "should NOT require how_verified if is_verified is false" do
175
+ assert_difference( "PhoneNumber.count", 1 ) do
176
+ phone_number = create_phone_number(:is_verified => false)
177
+ end
178
+ end
179
+
180
+ test "should require how_verified if is_verified is true" do
181
+ assert_difference( "PhoneNumber.count", 0 ) do
182
+ phone_number = create_phone_number(:is_verified => true)
183
+ assert phone_number.errors.on(:how_verified)
184
+ end
185
+ end
186
+
187
+ test "should NOT set verified_on if is_verified NOT changed to true" do
188
+ phone_number = create_phone_number(:is_verified => false)
189
+ assert_nil phone_number.verified_on
190
+ end
191
+
192
+ test "should set verified_on if is_verified changed to true" do
193
+ phone_number = create_phone_number(:is_verified => true,
194
+ :how_verified => "not a clue")
195
+ assert_not_nil phone_number.verified_on
196
+ end
197
+
198
+ test "should set verified_on to NIL if is_verified changed to false" do
199
+ phone_number = create_phone_number(:is_verified => true,
200
+ :how_verified => "not a clue")
201
+ assert_not_nil phone_number.verified_on
202
+ phone_number.update_attributes(:is_verified => false)
203
+ assert_nil phone_number.verified_on
204
+ end
205
+
206
+ test "should NOT set verified_by_uid if is_verified NOT changed to true" do
207
+ phone_number = create_phone_number(:is_verified => false)
208
+ assert_nil phone_number.verified_by_uid
209
+ end
210
+
211
+ test "should set verified_by_uid to 0 if is_verified changed to true" do
212
+ phone_number = create_phone_number(:is_verified => true,
213
+ :how_verified => "not a clue")
214
+ assert_not_nil phone_number.verified_by_uid
215
+ assert_equal phone_number.verified_by_uid, ''
216
+ end
217
+
218
+ test "should set verified_by_uid to current_user.id if is_verified " <<
219
+ "changed to true if current_user passed" do
220
+ cu = admin_user
221
+ phone_number = create_phone_number(:is_verified => true,
222
+ :current_user => cu,
223
+ :how_verified => "not a clue")
224
+ assert_not_nil phone_number.verified_by_uid
225
+ assert_equal phone_number.verified_by_uid, cu.uid
226
+ end
227
+
228
+ test "should set verified_by_uid to NIL if is_verified changed to false" do
229
+ phone_number = create_phone_number(:is_verified => true,
230
+ :how_verified => "not a clue")
231
+ assert_not_nil phone_number.verified_by_uid
232
+ phone_number.update_attributes(:is_verified => false)
233
+ assert_nil phone_number.verified_by_uid
234
+ end
235
+
236
+ #protected
237
+ #
238
+ # def create_phone_number(options={})
239
+ # phone_number = Factory.build(:phone_number,options)
240
+ # phone_number.save
241
+ # phone_number
242
+ # end
243
+
244
+ end
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::PhoneTypeTest < ActiveSupport::TestCase
4
+
5
+ assert_should_behave_like_a_hash
6
+
7
+ assert_should_create_default_object
8
+ assert_should_act_as_list
9
+ assert_should_have_many(:phone_numbers)
10
+ assert_should_not_require_attributes( :position )
11
+
12
+ test "explicit Factory phone_type test" do
13
+ assert_difference('PhoneType.count',1) {
14
+ phone_type = Factory(:phone_type)
15
+ assert_match /Key\d*/, phone_type.key
16
+ }
17
+ end
18
+
19
+ test "should return key as to_s" do
20
+ phone_type = create_phone_type
21
+ assert_equal phone_type.key, "#{phone_type}"
22
+ end
23
+
24
+ #protected
25
+ #
26
+ # def create_phone_type(options={})
27
+ # phone_type = Factory.build(:phone_type,options)
28
+ # phone_type.save
29
+ # phone_type
30
+ # end
31
+
32
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::ProjectOutcomeTest < ActiveSupport::TestCase
4
+
5
+ assert_should_behave_like_a_hash
6
+
7
+ assert_should_create_default_object
8
+ assert_should_act_as_list
9
+ assert_should_not_require_attributes( :position, :project_id )
10
+ assert_should_have_many( :enrollments )
11
+
12
+ test "explicit Factory project_outcome test" do
13
+ assert_difference('ProjectOutcome.count',1) {
14
+ project_outcome = Factory(:project_outcome)
15
+ assert_match /Key\d*/, project_outcome.key
16
+ assert_match /Desc\d*/, project_outcome.description
17
+ }
18
+ end
19
+
20
+ test "should return description as to_s" do
21
+ project_outcome = create_project_outcome
22
+ assert_equal project_outcome.description,
23
+ "#{project_outcome}"
24
+ end
25
+
26
+ #protected
27
+ #
28
+ # def create_project_outcome(options={})
29
+ # project_outcome = Factory.build(:project_outcome,options)
30
+ # project_outcome.save
31
+ # project_outcome
32
+ # end
33
+
34
+ end
@@ -0,0 +1,60 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::ProjectTest < ActiveSupport::TestCase
4
+
5
+ assert_should_behave_like_a_hash
6
+
7
+ assert_should_create_default_object
8
+
9
+ assert_should_have_many( :instrument_types, :enrollments, :instruments,
10
+ :samples, :gift_cards )
11
+ assert_should_not_require_attributes( :position, :began_on, :ended_on,
12
+ :eligibility_criteria )
13
+ assert_should_require_attribute_length( :eligibility_criteria, :maximum => 65000 )
14
+ assert_should_act_as_list
15
+
16
+ assert_requires_complete_date( :began_on, :ended_on )
17
+
18
+ test "explicit Factory project test" do
19
+ assert_difference('Project.count',1) {
20
+ project = Factory(:project)
21
+ assert_match /Key\d*/, project.key
22
+ assert_match /Desc\d*/, project.description
23
+ }
24
+ end
25
+
26
+ test "should return description as to_s" do
27
+ project = create_project
28
+ assert_equal project.description, "#{project}"
29
+ end
30
+
31
+ test "should have many study_subjects through enrollments" do
32
+ project = create_project
33
+ assert_equal 0, project.study_subjects.length
34
+ Factory(:enrollment, :project_id => project.id)
35
+ assert_equal 1, project.reload.study_subjects.length
36
+ Factory(:enrollment, :project_id => project.id)
37
+ assert_equal 2, project.reload.study_subjects.length
38
+ end
39
+
40
+ # this method seems like it would be better suited to
41
+ # be in the StudySubject model rather than Project
42
+ test "should return projects not enrolled by given study_subject" do
43
+ study_subject = create_study_subject
44
+ unenrolled = Project.unenrolled_projects(study_subject)
45
+ assert_not_nil unenrolled
46
+ assert unenrolled.is_a?(Array)
47
+ assert_equal 10, Project.count
48
+ # due to the auto-enrollment in ccls, there are only 9 now
49
+ assert_equal 9, unenrolled.length
50
+ end
51
+
52
+ #protected
53
+ #
54
+ # def create_project(options={})
55
+ # project = Factory.build(:project,options)
56
+ # project.save
57
+ # project
58
+ # end
59
+
60
+ end
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::RaceTest < ActiveSupport::TestCase
4
+
5
+ assert_should_behave_like_a_hash
6
+
7
+ assert_should_create_default_object
8
+ assert_should_act_as_list
9
+ # assert_should_have_many( :study_subjects )
10
+ assert_should_require_attributes( :code )
11
+ assert_should_require_unique_attributes( :code )
12
+ assert_should_not_require_attributes( :position )
13
+ assert_should_require_attribute_length( :code, :maximum => 250 )
14
+
15
+ test "explicit Factory race test" do
16
+ assert_difference('Race.count',1) {
17
+ race = Factory(:race)
18
+ assert_match /key\d*/, race.key
19
+ assert_match /Race\d*/, race.code
20
+ assert_match /Desc\d*/, race.description
21
+ }
22
+ end
23
+
24
+ test "should return name as to_s" do
25
+ race = create_race
26
+ assert_equal race.name, "#{race}"
27
+ end
28
+
29
+ #protected
30
+ #
31
+ # def create_race(options={})
32
+ # race = Factory.build(:race,options)
33
+ # race.save
34
+ # race
35
+ # end
36
+
37
+ end