ccls-ccls_engine 3.11.0

Sign up to get free protection for your applications and to get access to all the features.
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,20 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::AliquotSampleFormatTest < ActiveSupport::TestCase
4
+
5
+ assert_should_behave_like_a_hash
6
+
7
+ assert_should_create_default_object
8
+ assert_should_not_require_attributes(:position)
9
+ assert_should_act_as_list
10
+ assert_should_have_many( :aliquots, :samples )
11
+
12
+ test "explicit Factory aliquot_sample_format test" do
13
+ assert_difference('AliquotSampleFormat.count',1) {
14
+ aliquot_sample_format = Factory(:aliquot_sample_format)
15
+ assert_match /Key\d*/, aliquot_sample_format.key
16
+ assert_match /Desc\d*/, aliquot_sample_format.description
17
+ }
18
+ end
19
+
20
+ end
@@ -0,0 +1,156 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::AliquotTest < ActiveSupport::TestCase
4
+
5
+ assert_should_create_default_object
6
+ assert_should_not_require_attributes(
7
+ :position,
8
+ :aliquot_sample_format_id,
9
+ :location,
10
+ :mass,
11
+ :external_aliquot_id,
12
+ :external_aliquot_id_source )
13
+ assert_should_require_attribute_length(
14
+ :location,
15
+ :mass,
16
+ :maximum => 250 )
17
+ assert_should_have_many(:transfers)
18
+ assert_should_belong_to( :aliquot_sample_format )
19
+ assert_should_initially_belong_to( :sample, :unit )
20
+ assert_should_initially_belong_to( :owner, :class_name => 'Organization' )
21
+
22
+ test "explicit Factory aliquot test" do
23
+ assert_difference('Sample.count',1) {
24
+ assert_difference('Unit.count',1) {
25
+ assert_difference('Organization.count',1) {
26
+ assert_difference('Aliquot.count',1) {
27
+ aliquot = Factory(:aliquot)
28
+ assert_not_nil aliquot.sample
29
+ assert_not_nil aliquot.unit
30
+ assert_not_nil aliquot.owner
31
+ } } } }
32
+ end
33
+
34
+ test "should require owner" do
35
+ assert_difference( "Aliquot.count", 0 ) do
36
+ aliquot = create_aliquot( :owner => nil)
37
+ assert aliquot.errors.on(:owner)
38
+ end
39
+ end
40
+
41
+ test "should require valid owner" do
42
+ assert_difference( "Aliquot.count", 0 ) do
43
+ aliquot = create_aliquot( :owner_id => 0)
44
+ assert aliquot.errors.on(:owner)
45
+ end
46
+ end
47
+
48
+ test "should require unit" do
49
+ assert_difference( "Aliquot.count", 0 ) do
50
+ aliquot = create_aliquot( :unit => nil)
51
+ assert aliquot.errors.on(:unit)
52
+ end
53
+ end
54
+
55
+ test "should require valid unit" do
56
+ assert_difference( "Aliquot.count", 0 ) do
57
+ aliquot = create_aliquot( :unit_id => 0)
58
+ assert aliquot.errors.on(:unit)
59
+ end
60
+ end
61
+
62
+ test "should require sample" do
63
+ assert_difference( "Aliquot.count", 0 ) do
64
+ aliquot = create_aliquot( :sample => nil)
65
+ assert aliquot.errors.on(:sample)
66
+ end
67
+ end
68
+
69
+ test "should require valid sample" do
70
+ assert_difference( "Aliquot.count", 0 ) do
71
+ aliquot = create_aliquot( :sample_id => 0)
72
+ assert aliquot.errors.on(:sample)
73
+ end
74
+ end
75
+
76
+
77
+ test "should transfer to another organization" do
78
+ aliquot = create_aliquot
79
+ initial_owner = aliquot.owner
80
+ assert_not_nil initial_owner
81
+ new_owner = Factory(:organization)
82
+ assert_difference('aliquot.reload.owner_id') {
83
+ assert_difference('aliquot.transfers.count', 1) {
84
+ # assert_difference('initial_owner.reload.aliquots_count', -1) {
85
+ assert_difference('initial_owner.aliquots.count', -1) {
86
+ # assert_difference('new_owner.reload.aliquots_count', 1) {
87
+ assert_difference('new_owner.aliquots.count', 1) {
88
+ assert_difference('Transfer.count',1) {
89
+ aliquot.transfer_to(new_owner)
90
+ } } } } } #} }
91
+ assert_not_nil aliquot.reload.owner
92
+ end
93
+
94
+ test "should NOT transfer if aliquot owner update fails" do
95
+ aliquot = create_aliquot
96
+ initial_owner = aliquot.owner
97
+ assert_not_nil initial_owner
98
+ new_owner = Factory(:organization)
99
+ Aliquot.any_instance.stubs(:update_attribute).returns(false)
100
+ assert_no_difference('aliquot.reload.owner_id') {
101
+ assert_no_difference('aliquot.transfers.count') {
102
+ assert_no_difference('initial_owner.aliquots.count') {
103
+ # assert_no_difference('initial_owner.aliquots_count') {
104
+ assert_no_difference('new_owner.aliquots.count') {
105
+ # assert_no_difference('new_owner.aliquots_count') {
106
+ assert_no_difference('Transfer.count') {
107
+ assert_raise(ActiveRecord::RecordNotSaved){
108
+ aliquot.transfer_to(new_owner)
109
+ } } } } } } #} }
110
+ assert_not_nil aliquot.reload.owner
111
+ end
112
+
113
+ test "should NOT transfer if transfer creation fails" do
114
+ aliquot = create_aliquot
115
+ initial_owner = aliquot.owner
116
+ assert_not_nil initial_owner
117
+ new_owner = Factory(:organization)
118
+ Transfer.any_instance.stubs(:save!).raises(
119
+ ActiveRecord::RecordInvalid.new(Transfer.new))
120
+ assert_no_difference('aliquot.reload.owner_id') {
121
+ assert_no_difference('aliquot.transfers.count') {
122
+ assert_no_difference('initial_owner.aliquots.count') {
123
+ # assert_no_difference('initial_owner.aliquots_count') {
124
+ assert_no_difference('new_owner.aliquots.count') {
125
+ # assert_no_difference('new_owner.aliquots_count') {
126
+ assert_no_difference('Transfer.count') {
127
+ assert_raise(ActiveRecord::RecordInvalid){
128
+ aliquot.transfer_to(new_owner)
129
+ } } } } } } #} }
130
+ assert_not_nil aliquot.reload.owner
131
+ end
132
+
133
+ test "should NOT transfer to invalid organization" do
134
+ aliquot = create_aliquot
135
+ initial_owner = aliquot.owner
136
+ assert_not_nil initial_owner
137
+ assert_no_difference('aliquot.reload.owner_id') {
138
+ assert_no_difference('aliquot.transfers.count') {
139
+ # assert_no_difference('initial_owner.aliquots_count') {
140
+ assert_no_difference('initial_owner.aliquots.count') {
141
+ assert_no_difference('Transfer.count') {
142
+ assert_raise(ActiveRecord::RecordNotFound){
143
+ aliquot.transfer_to(0)
144
+ } } } } } #}
145
+ assert_not_nil aliquot.reload.owner
146
+ end
147
+
148
+ protected
149
+
150
+ def create_aliquot(options={})
151
+ aliquot = Factory.build(:aliquot,options)
152
+ aliquot.save
153
+ aliquot
154
+ end
155
+
156
+ end
@@ -0,0 +1,31 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::AnalysisTest < ActiveSupport::TestCase
4
+
5
+ assert_should_behave_like_a_hash
6
+
7
+ assert_should_create_default_object
8
+ assert_should_not_require_attributes(
9
+ :analyst_id,
10
+ :project_id,
11
+ :analytic_file_creator_id,
12
+ :analytic_file_created_date,
13
+ :analytic_file_last_pulled_date,
14
+ :analytic_file_location,
15
+ :analytic_file_filename )
16
+ assert_should_belong_to(
17
+ :analytic_file_creator,
18
+ :analyst,
19
+ :class_name => 'Person' )
20
+ assert_should_belong_to( :project )
21
+ assert_should_habtm( :study_subjects )
22
+
23
+ test "explicit Factory analysis test" do
24
+ assert_difference('Analysis.count',1) {
25
+ analysis = Factory(:analysis)
26
+ assert_match /Key\d*/, analysis.key
27
+ assert_match /Desc\d*/, analysis.description
28
+ }
29
+ end
30
+
31
+ end
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::BcRequestTest < ActiveSupport::TestCase
4
+
5
+ assert_should_create_default_object
6
+ assert_should_belong_to( :study_subject )
7
+ assert_should_protect( :study_subject_id, :study_subject )
8
+ assert_should_not_require(:request_type, :status)
9
+ assert_should_require_attribute_length( :request_type, :status, :maximum => 250 )
10
+ assert_should_require_attribute_length( :notes, :maximum => 65000 )
11
+
12
+ test "statuses should return an array of strings" do
13
+ statuses = BcRequest.statuses
14
+ assert statuses.is_a?(Array)
15
+ assert_equal 4, statuses.length
16
+ statuses.each { |s| assert s.is_a?(String) }
17
+ end
18
+
19
+ test "explicit Factory bc_request test" do
20
+ assert_difference('BcRequest.count',1) {
21
+ bc_request = Factory(:bc_request)
22
+ assert_match /Notes\d*/, bc_request.notes
23
+ }
24
+ end
25
+
26
+ test "should return self for to_s if no study subject" do
27
+ assert_difference('BcRequest.count',1) {
28
+ bc_request = Factory(:bc_request)
29
+ assert_match /^#<BcRequest:0x.+>$/, "#{bc_request}"
30
+ }
31
+ end
32
+
33
+ test "should return study subject's studyid for to_s if study subject" do
34
+ assert_difference('StudySubject.count',1) {
35
+ assert_difference('BcRequest.count',1) {
36
+ study_subject = Factory(:complete_case_study_subject)
37
+ bc_request = Factory(:bc_request)
38
+ study_subject.bc_requests << bc_request
39
+ assert_equal study_subject.studyid, "#{bc_request}"
40
+ } }
41
+ end
42
+
43
+ end
@@ -0,0 +1,712 @@
1
+ require 'test_helper'
2
+
3
+ class Ccls::CandidateControlTest < ActiveSupport::TestCase
4
+
5
+ [ :mother_hispanicity_id, :father_hispanicity_id ].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
+ candidate_control = CandidateControl.new(field => 12345)
10
+ candidate_control.valid?
11
+ assert candidate_control.errors.on_attr_and_type?(field,:inclusion)
12
+ end
13
+
14
+ test "should allow nil for #{field}" do
15
+ candidate_control = CandidateControl.new(field => nil)
16
+ assert_nil candidate_control.send(field)
17
+ candidate_control.valid?
18
+ assert !candidate_control.errors.on(field)
19
+ end
20
+
21
+ test "should allow all valid YNODK values for #{field}" do
22
+ candidate_control = CandidateControl.new
23
+ YNODK.valid_values.each do |value|
24
+ candidate_control.send("#{field}=", value)
25
+ candidate_control.valid?
26
+ assert !candidate_control.errors.on(field)
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+ [ :mom_is_biomom, :dad_is_biodad ].each do |field|
33
+
34
+ # Making assumption that 12345 will NEVER be a valid value.
35
+ test "should NOT allow 12345 for #{field}" do
36
+ candidate_control = CandidateControl.new(field => 12345)
37
+ candidate_control.valid?
38
+ assert candidate_control.errors.on_attr_and_type?(field,:inclusion)
39
+ end
40
+
41
+ test "should allow nil for #{field}" do
42
+ candidate_control = CandidateControl.new(field => nil)
43
+ assert_nil candidate_control.send(field)
44
+ candidate_control.valid?
45
+ assert !candidate_control.errors.on(field)
46
+ end
47
+
48
+ test "should allow all valid YNDK values for #{field}" do
49
+ candidate_control = CandidateControl.new
50
+ YNDK.valid_values.each do |value|
51
+ candidate_control.send("#{field}=", value)
52
+ candidate_control.valid?
53
+ assert !candidate_control.errors.on(field)
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+
60
+ assert_should_create_default_object
61
+ assert_should_belong_to( :study_subject )
62
+ assert_should_protect( :study_subject_id, :study_subject )
63
+ assert_should_require_attributes(
64
+ :first_name,
65
+ :last_name,
66
+ :dob )
67
+ assert_should_not_require_attributes(
68
+ :dad_is_biodad,
69
+ :mom_is_biomom,
70
+ :mother_first_name,
71
+ :mother_middle_name,
72
+ :mother_last_name,
73
+ :mother_dob,
74
+ :icf_master_id,
75
+ :related_patid,
76
+ :middle_name,
77
+ :state_registrar_no,
78
+ :local_registrar_no,
79
+ :birth_county,
80
+ :assigned_on,
81
+ :mother_race_id,
82
+ :mother_hispanicity_id,
83
+ :father_race_id,
84
+ :father_hispanicity_id,
85
+ :birth_type,
86
+ :mother_maiden_name,
87
+ :mother_yrs_educ,
88
+ :father_yrs_educ,
89
+ :rejection_reason )
90
+ assert_should_require_attribute_length( :related_patid, :is => 4 )
91
+ assert_should_require_attribute_length( :state_registrar_no, :maximum => 25 )
92
+ assert_should_require_attribute_length( :local_registrar_no, :maximum => 25 )
93
+ assert_should_require_attribute_length(
94
+ :first_name,
95
+ :middle_name,
96
+ :last_name,
97
+ :birth_county,
98
+ :birth_type,
99
+ :mother_maiden_name,
100
+ :rejection_reason,
101
+ :maximum => 250 )
102
+ assert_should_require_attributes_not_nil( :sex )
103
+
104
+ test "explicit Factory candidate_control test" do
105
+ assert_difference('CandidateControl.count',1) {
106
+ candidate_control = Factory(:candidate_control)
107
+ assert_equal 'First', candidate_control.first_name
108
+ assert_equal 'Last', candidate_control.last_name
109
+ assert_not_nil candidate_control.dob
110
+ assert_not_nil candidate_control.reject_candidate
111
+ assert !candidate_control.reject_candidate
112
+ assert_not_nil candidate_control.sex
113
+ }
114
+ end
115
+
116
+ test "should require sex be either M, F or DK" do
117
+ assert_difference("CandidateControl.count",0) {
118
+ candidate_control = Factory.build(:candidate_control, :sex => 'X')
119
+ candidate_control.save
120
+ assert candidate_control.errors.on_attr_and_type?(:sex,:inclusion)
121
+ }
122
+ end
123
+
124
+ test "should require rejection_reason if reject_candidate is true" do
125
+ assert_difference("CandidateControl.count",0) {
126
+ candidate_control = Factory.build(:candidate_control,
127
+ :reject_candidate => true,
128
+ :rejection_reason => nil)
129
+ candidate_control.save
130
+ assert candidate_control.errors.on_attr_and_type?(:rejection_reason,:blank)
131
+ }
132
+ end
133
+
134
+ test "should not require rejection_reason if reject_candidate is false" do
135
+ assert_difference("CandidateControl.count",1) {
136
+ candidate_control = Factory(:candidate_control,
137
+ :reject_candidate => false,
138
+ :rejection_reason => nil)
139
+ }
140
+ end
141
+
142
+ test "should require reject_candidate is not nil" do
143
+ assert_difference("CandidateControl.count",0) {
144
+ candidate_control = Factory.build(:candidate_control, :reject_candidate => nil)
145
+ candidate_control.save
146
+ assert candidate_control.errors.on_attr_and_type?(:reject_candidate,:inclusion)
147
+ }
148
+ end
149
+
150
+ test "should return join of candidate's name" do
151
+ candidate_control = Factory(:candidate_control,
152
+ :first_name => "John",
153
+ :middle_name => "Michael",
154
+ :last_name => "Smith" )
155
+ assert_equal 'John Michael Smith', candidate_control.full_name
156
+ end
157
+
158
+ test "should return join of candidate's name with blank middle name" do
159
+ candidate_control = Factory(:candidate_control,
160
+ :first_name => "John",
161
+ :middle_name => "",
162
+ :last_name => "Smith" )
163
+ assert_equal 'John Smith', candidate_control.full_name
164
+ end
165
+
166
+ test "should return join of candidate's mother's name" do
167
+ candidate_control = Factory(:candidate_control,
168
+ :mother_first_name => "Jane",
169
+ :mother_middle_name => "Anne",
170
+ :mother_last_name => "Smith" )
171
+ assert_equal 'Jane Anne Smith', candidate_control.mother_full_name
172
+ end
173
+
174
+ test "should return join of candidate's mother's name with blank mother's middle name" do
175
+ candidate_control = Factory(:candidate_control,
176
+ :mother_first_name => "Jane",
177
+ :mother_middle_name => "",
178
+ :mother_last_name => "Smith" )
179
+ assert_equal 'Jane Smith', candidate_control.mother_full_name
180
+ end
181
+
182
+ ################################################################################
183
+ #
184
+ # BEGIN: MANY subject creation tests
185
+ #
186
+
187
+ test "should create study_subjects from attributes" do
188
+ case_study_subject = Factory(:complete_case_study_subject)
189
+ candidate_control = Factory(:candidate_control)
190
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
191
+ candidate_control.reload # ensure that it is saved in the db!
192
+ assert_not_nil candidate_control.assigned_on
193
+ assert_not_nil candidate_control.study_subject_id
194
+ end
195
+
196
+ test "should create study_subjects and set is_matched" do
197
+ case_study_subject = Factory(:complete_case_study_subject)
198
+ assert_nil case_study_subject.is_matched
199
+ candidate_control = Factory(:candidate_control)
200
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
201
+ candidate_control.reload # ensure that it is saved in the db!
202
+ assert_not_nil candidate_control.study_subject_id
203
+ assert_not_nil candidate_control.study_subject.is_matched
204
+ assert candidate_control.study_subject.is_matched
205
+ assert_not_nil case_study_subject.is_matched
206
+ assert case_study_subject.is_matched
207
+ end
208
+
209
+ # this enrollment is actually a callback in study_subject
210
+ # now and is not explictly called.
211
+ test "should create control with enrollment in ccls" do
212
+ case_study_subject = Factory(:complete_case_study_subject)
213
+ candidate_control = Factory(:candidate_control)
214
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
215
+ assert !candidate_control.study_subject.enrollments.empty?
216
+ assert_equal [Project['ccls']],
217
+ candidate_control.study_subject.enrollments.collect(&:project)
218
+ end
219
+
220
+ test "should create control from attributes without patient" do
221
+ case_study_subject = create_case_study_subject
222
+ assert_nil case_study_subject.patient
223
+ candidate_control = Factory(:candidate_control)
224
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
225
+ assert_nil candidate_control.study_subject.reference_date
226
+ end
227
+
228
+ test "should create control from attributes and copy case patid" do
229
+ case_study_subject = Factory(:complete_case_study_subject)
230
+ candidate_control = Factory(:candidate_control)
231
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
232
+ control_subject = candidate_control.study_subject
233
+ assert_not_nil control_subject.patid
234
+ assert_equal control_subject.patid, case_study_subject.patid
235
+ end
236
+
237
+ test "should create control from attributes and set hispanicity_id nil" do
238
+ case_study_subject = Factory(:complete_case_study_subject)
239
+ candidate_control = Factory(:candidate_control)
240
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
241
+ control_subject = candidate_control.study_subject
242
+ assert_nil control_subject.hispanicity_id
243
+ end
244
+
245
+ test "should create control from attributes and set hispanicity_id if father_hispanicity" do
246
+ case_study_subject = Factory(:complete_case_study_subject)
247
+ candidate_control = Factory(:candidate_control, :father_hispanicity_id => 1 )
248
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
249
+ control_subject = candidate_control.study_subject
250
+ assert_not_nil control_subject.hispanicity_id
251
+ assert_equal control_subject.hispanicity_id, 1
252
+ end
253
+
254
+ test "should create control from attributes and set hispanicity_id if mother_hispanicity" do
255
+ case_study_subject = Factory(:complete_case_study_subject)
256
+ candidate_control = Factory(:candidate_control, :mother_hispanicity_id => 1 )
257
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
258
+ control_subject = candidate_control.study_subject
259
+ assert_not_nil control_subject.hispanicity_id
260
+ assert_equal control_subject.hispanicity_id, 1
261
+ end
262
+
263
+ test "should create control from attributes and copy state_registrar_no" do
264
+ attribute = 'fake number'
265
+ case_study_subject = Factory(:complete_case_study_subject)
266
+ candidate_control = Factory(:candidate_control, :state_registrar_no => attribute )
267
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
268
+ control_subject = candidate_control.study_subject
269
+ assert_equal attribute, candidate_control.state_registrar_no
270
+ assert_equal attribute, control_subject.state_registrar_no
271
+ end
272
+
273
+ test "should create control from attributes and copy local_registrar_no" do
274
+ attribute = 'fake number'
275
+ case_study_subject = Factory(:complete_case_study_subject)
276
+ candidate_control = Factory(:candidate_control, :local_registrar_no => attribute )
277
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
278
+ control_subject = candidate_control.study_subject
279
+ assert_equal attribute, candidate_control.local_registrar_no
280
+ assert_equal attribute, control_subject.local_registrar_no
281
+ end
282
+
283
+ test "should create control from attributes and copy sex" do
284
+ attribute = 'DK'
285
+ case_study_subject = Factory(:complete_case_study_subject)
286
+ candidate_control = Factory(:candidate_control, :sex => attribute)
287
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
288
+ control_subject = candidate_control.study_subject
289
+ assert_equal attribute, candidate_control.sex
290
+ assert_equal attribute, control_subject.sex
291
+ end
292
+
293
+ test "should create control from attributes and copy mother_hispanicity_id" do
294
+ attribute = 999
295
+ case_study_subject = Factory(:complete_case_study_subject)
296
+ candidate_control = Factory(:candidate_control, :mother_hispanicity_id => attribute )
297
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
298
+ control_subject = candidate_control.study_subject
299
+ assert_equal attribute, candidate_control.mother_hispanicity_id
300
+ assert_equal attribute, control_subject.mother_hispanicity_id
301
+ end
302
+
303
+ test "should create control from attributes and copy father_hispanicity_id" do
304
+ attribute = 999
305
+ case_study_subject = Factory(:complete_case_study_subject)
306
+ candidate_control = Factory(:candidate_control, :father_hispanicity_id => attribute )
307
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
308
+ control_subject = candidate_control.study_subject
309
+ assert_equal attribute, candidate_control.father_hispanicity_id
310
+ assert_equal attribute, control_subject.father_hispanicity_id
311
+ end
312
+
313
+ test "should create control from attributes and copy birth_type" do
314
+ attribute = 'xyz'
315
+ case_study_subject = Factory(:complete_case_study_subject)
316
+ candidate_control = Factory(:candidate_control, :birth_type => attribute )
317
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
318
+ control_subject = candidate_control.study_subject
319
+ assert_equal attribute, candidate_control.birth_type
320
+ assert_equal attribute, control_subject.birth_type
321
+ end
322
+
323
+ test "should create control from attributes and copy mother_yrs_educ" do
324
+ attribute = 7
325
+ case_study_subject = Factory(:complete_case_study_subject)
326
+ candidate_control = Factory(:candidate_control, :mother_yrs_educ => attribute )
327
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
328
+ control_subject = candidate_control.study_subject
329
+ assert_equal attribute, candidate_control.mother_yrs_educ
330
+ assert_equal attribute, control_subject.mother_yrs_educ
331
+ end
332
+
333
+ test "should create control from attributes and copy father_yrs_educ" do
334
+ attribute = 7
335
+ case_study_subject = Factory(:complete_case_study_subject)
336
+ candidate_control = Factory(:candidate_control, :father_yrs_educ => attribute )
337
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
338
+ control_subject = candidate_control.study_subject
339
+ assert_equal attribute, candidate_control.father_yrs_educ
340
+ assert_equal attribute, control_subject.father_yrs_educ
341
+ end
342
+
343
+ test "should create control from attributes and copy birth_county" do
344
+ attribute = 'Somewhere'
345
+ case_study_subject = Factory(:complete_case_study_subject)
346
+ candidate_control = Factory(:candidate_control, :birth_county => attribute )
347
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
348
+ control_subject = candidate_control.study_subject
349
+ assert_equal attribute, candidate_control.birth_county
350
+ assert_equal attribute, control_subject.birth_county
351
+ end
352
+
353
+ test "should create control from attributes and copy first_name" do
354
+ attribute = 'SomeName'
355
+ case_study_subject = Factory(:complete_case_study_subject)
356
+ candidate_control = Factory(:candidate_control, :first_name => attribute )
357
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
358
+ control_subject = candidate_control.study_subject
359
+ assert_equal attribute, candidate_control.first_name
360
+ assert_equal attribute, control_subject.first_name
361
+ end
362
+
363
+ test "should create control from attributes and copy middle_name" do
364
+ attribute = 'SomeName'
365
+ case_study_subject = Factory(:complete_case_study_subject)
366
+ candidate_control = Factory(:candidate_control, :middle_name => attribute )
367
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
368
+ control_subject = candidate_control.study_subject
369
+ assert_equal attribute, candidate_control.middle_name
370
+ assert_equal attribute, control_subject.middle_name
371
+ end
372
+
373
+ test "should create control from attributes and copy last_name" do
374
+ attribute = 'SomeName'
375
+ case_study_subject = Factory(:complete_case_study_subject)
376
+ candidate_control = Factory(:candidate_control, :last_name => attribute )
377
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
378
+ control_subject = candidate_control.study_subject
379
+ assert_equal attribute, candidate_control.last_name
380
+ assert_equal attribute, control_subject.last_name
381
+ end
382
+
383
+ test "should create control from attributes and copy dob" do
384
+ attribute = Date.parse('Dec 5, 1971')
385
+ case_study_subject = Factory(:complete_case_study_subject)
386
+ candidate_control = Factory(:candidate_control, :dob => attribute )
387
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
388
+ control_subject = candidate_control.study_subject
389
+ assert_equal attribute, candidate_control.dob
390
+ assert_equal attribute, control_subject.dob
391
+ end
392
+
393
+ test "should create control from attributes and copy mother_first_name" do
394
+ attribute = 'SomeName'
395
+ case_study_subject = Factory(:complete_case_study_subject)
396
+ candidate_control = Factory(:candidate_control, :mother_first_name => attribute )
397
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
398
+ control_subject = candidate_control.study_subject
399
+ assert_equal attribute, candidate_control.mother_first_name
400
+ assert_equal attribute, control_subject.mother_first_name
401
+ end
402
+
403
+ test "should create control from attributes and copy mother_middle_name" do
404
+ attribute = 'SomeName'
405
+ case_study_subject = Factory(:complete_case_study_subject)
406
+ candidate_control = Factory(:candidate_control, :mother_middle_name => attribute )
407
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
408
+ control_subject = candidate_control.study_subject
409
+ assert_equal attribute, candidate_control.mother_middle_name
410
+ assert_equal attribute, control_subject.mother_middle_name
411
+ end
412
+
413
+ test "should create control from attributes and copy mother_last_name" do
414
+ attribute = 'SomeName'
415
+ case_study_subject = Factory(:complete_case_study_subject)
416
+ candidate_control = Factory(:candidate_control, :mother_last_name => attribute )
417
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
418
+ control_subject = candidate_control.study_subject
419
+ assert_equal attribute, candidate_control.mother_last_name
420
+ assert_equal attribute, control_subject.mother_last_name
421
+ end
422
+
423
+ test "should create control from attributes and copy mother_maiden_name" do
424
+ attribute = 'SomeName'
425
+ case_study_subject = Factory(:complete_case_study_subject)
426
+ candidate_control = Factory(:candidate_control, :mother_maiden_name => attribute )
427
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
428
+ control_subject = candidate_control.study_subject
429
+ assert_equal attribute, candidate_control.mother_maiden_name
430
+ assert_equal attribute, control_subject.mother_maiden_name
431
+ end
432
+
433
+ test "should create control from attributes and copy mother_race_id" do
434
+ attribute = 123
435
+ case_study_subject = Factory(:complete_case_study_subject)
436
+ candidate_control = Factory(:candidate_control, :mother_race_id => attribute )
437
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
438
+ control_subject = candidate_control.study_subject
439
+ assert_equal attribute, candidate_control.mother_race_id
440
+ assert_equal attribute, control_subject.mother_race_id
441
+ end
442
+
443
+ test "should create control from attributes and copy father_race_id" do
444
+ attribute = 123
445
+ case_study_subject = Factory(:complete_case_study_subject)
446
+ candidate_control = Factory(:candidate_control, :father_race_id => attribute )
447
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
448
+ control_subject = candidate_control.study_subject
449
+ assert_equal attribute, candidate_control.father_race_id
450
+ assert_equal attribute, control_subject.father_race_id
451
+ end
452
+
453
+ test "should create control from attributes and copy mom_is_biomom" do
454
+ attribute = 999
455
+ case_study_subject = Factory(:complete_case_study_subject)
456
+ candidate_control = Factory(:candidate_control, :mom_is_biomom => attribute )
457
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
458
+ control_subject = candidate_control.study_subject
459
+ assert_equal attribute, candidate_control.mom_is_biomom
460
+ assert_equal attribute, control_subject.mom_is_biomom
461
+ end
462
+
463
+ test "should create control from attributes and copy dad_is_biodad" do
464
+ attribute = 999
465
+ case_study_subject = Factory(:complete_case_study_subject)
466
+ candidate_control = Factory(:candidate_control, :dad_is_biodad => attribute )
467
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
468
+ control_subject = candidate_control.study_subject
469
+ assert_equal attribute, candidate_control.dad_is_biodad
470
+ assert_equal attribute, control_subject.dad_is_biodad
471
+ end
472
+
473
+ # test "should create control from attributes with patient" do
474
+ # case_study_subject = Factory(:complete_case_study_subject)
475
+ ## unnecessary with complete case factory
476
+ ## create_patient_for_subject(case_study_subject)
477
+ # candidate_control = Factory(:candidate_control)
478
+ # create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
479
+ # assert_equal candidate_control.study_subject.reference_date,
480
+ # case_study_subject.admit_date
481
+ # end
482
+
483
+ test "should create control from attributes with patient and copy case admit_date" do
484
+ case_study_subject = Factory(:complete_case_study_subject)
485
+ assert_not_nil case_study_subject.patient
486
+ candidate_control = Factory(:candidate_control)
487
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
488
+ control_subject = candidate_control.study_subject
489
+ assert_not_nil control_subject.reference_date
490
+ assert_equal control_subject.reference_date, case_study_subject.patient.admit_date
491
+ end
492
+
493
+ test "should create control from attributes and add subjectid" do
494
+ case_study_subject = Factory(:complete_case_study_subject)
495
+ candidate_control = Factory(:candidate_control)
496
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
497
+ assert_not_nil candidate_control.study_subject.subjectid
498
+ assert_equal candidate_control.study_subject.subjectid.length, 6
499
+ end
500
+
501
+ test "should create control from attributes and add familyid" do
502
+ case_study_subject = Factory(:complete_case_study_subject)
503
+ candidate_control = Factory(:candidate_control)
504
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
505
+ assert_not_nil candidate_control.study_subject.familyid
506
+ assert_equal candidate_control.study_subject.familyid.length, 6
507
+ end
508
+
509
+ test "should create control from attributes and subjectid should equal familyid" do
510
+ case_study_subject = Factory(:complete_case_study_subject)
511
+ candidate_control = Factory(:candidate_control)
512
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
513
+ assert_equal candidate_control.study_subject.familyid,
514
+ candidate_control.study_subject.subjectid
515
+ end
516
+
517
+ test "should create control from attributes and copy case matchingid" do
518
+ case_study_subject = Factory(:complete_case_study_subject)
519
+ candidate_control = Factory(:candidate_control)
520
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
521
+ assert_not_nil candidate_control.study_subject.matchingid
522
+ assert_equal candidate_control.study_subject.matchingid,
523
+ case_study_subject.matchingid
524
+ end
525
+
526
+ test "should create control from attributes and add orderno = 1" do
527
+ case_study_subject = Factory(:complete_case_study_subject)
528
+ candidate_control = Factory(:candidate_control)
529
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
530
+ assert_not_nil candidate_control.study_subject.orderno
531
+ # As this will be the first control here ...
532
+ assert_equal candidate_control.study_subject.orderno, 1
533
+ end
534
+
535
+ test "should create second control from attributes and add orderno = 2" do
536
+ case_study_subject = Factory(:complete_case_study_subject)
537
+ candidate_control_1 = Factory(:candidate_control)
538
+ create_study_subjects_for_candidate_control(candidate_control_1,case_study_subject)
539
+ candidate_control_2 = Factory(:candidate_control)
540
+ create_study_subjects_for_candidate_control(candidate_control_2,case_study_subject)
541
+ assert_not_nil candidate_control_2.study_subject.orderno
542
+ # As this will be the second control here ...
543
+ assert_equal candidate_control_2.study_subject.orderno, 2
544
+ end
545
+
546
+ test "should create control from attributes and add studyid" do
547
+ case_study_subject = Factory(:complete_case_study_subject)
548
+ candidate_control = Factory(:candidate_control)
549
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
550
+ assert_not_nil candidate_control.study_subject.studyid
551
+ assert_match /\d{4}-\d-\d/, candidate_control.study_subject.studyid
552
+ end
553
+
554
+ # icf_master_id isn't required as may not have any
555
+ test "should create control from attributes and add icf_master_id if any" do
556
+ imi = Factory(:icf_master_id,:icf_master_id => '123456789')
557
+ case_study_subject = Factory(:complete_case_study_subject)
558
+ candidate_control = Factory(:candidate_control)
559
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
560
+ assert_not_nil candidate_control.study_subject.icf_master_id
561
+ assert_equal candidate_control.study_subject.icf_master_id, '123456789'
562
+ assert_not_nil imi.reload.study_subject
563
+ assert_equal imi.study_subject, candidate_control.study_subject
564
+ assert_not_nil imi.assigned_on
565
+ assert_equal imi.assigned_on, Date.today
566
+ end
567
+
568
+ test "should create mother from attributes" do
569
+ case_study_subject = Factory(:complete_case_study_subject)
570
+ candidate_control = Factory(:candidate_control)
571
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
572
+ assert_not_nil candidate_control.study_subject.mother
573
+ mother = candidate_control.study_subject.mother
574
+ assert_nil mother.case_control_type
575
+ assert_nil mother.orderno
576
+ end
577
+
578
+ test "should create mother from attributes and NOT copy case patid" do
579
+ case_study_subject = Factory(:complete_case_study_subject)
580
+ candidate_control = Factory(:candidate_control)
581
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
582
+ mother = candidate_control.study_subject.mother
583
+ assert_nil mother.patid
584
+ end
585
+
586
+ test "should create mother from attributes with patient and copy case admit_date" do
587
+ case_study_subject = Factory(:complete_case_study_subject)
588
+ case_study_subject.reload
589
+ candidate_control = Factory(:candidate_control)
590
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
591
+ mother = candidate_control.study_subject.reload.mother
592
+ assert_not_nil mother.reference_date
593
+ assert_equal mother.reference_date, case_study_subject.patient.admit_date
594
+ end
595
+
596
+ test "should create mother from attributes and copy case matchingid" do
597
+ case_study_subject = Factory(:complete_case_study_subject)
598
+ candidate_control = Factory(:candidate_control)
599
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
600
+ mother = candidate_control.study_subject.mother
601
+ assert_not_nil mother.matchingid
602
+ assert_equal mother.matchingid,
603
+ case_study_subject.matchingid
604
+ end
605
+
606
+ test "should create mother from attributes and copy child familyid" do
607
+ case_study_subject = Factory(:complete_case_study_subject)
608
+ candidate_control = Factory(:candidate_control)
609
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
610
+ mother = candidate_control.study_subject.mother
611
+ assert_not_nil mother.familyid
612
+ assert_equal candidate_control.study_subject.familyid,
613
+ mother.familyid
614
+ end
615
+
616
+ # icf_master_id isn't required as may not have any
617
+ test "should create mother from attributes and add icf_master_id if any" do
618
+ child_imi = Factory(:icf_master_id,:icf_master_id => 'child')
619
+ mother_imi = Factory(:icf_master_id,:icf_master_id => 'mother')
620
+ case_study_subject = Factory(:complete_case_study_subject)
621
+ candidate_control = Factory(:candidate_control)
622
+ create_study_subjects_for_candidate_control(candidate_control,case_study_subject)
623
+ assert_not_nil candidate_control.study_subject.icf_master_id
624
+ assert_equal candidate_control.study_subject.icf_master_id, 'child'
625
+ assert_not_nil candidate_control.study_subject.mother.icf_master_id
626
+ assert_equal candidate_control.study_subject.mother.icf_master_id, 'mother'
627
+ assert_not_nil child_imi.reload.study_subject
628
+ assert_equal child_imi.study_subject, candidate_control.study_subject
629
+ assert_not_nil child_imi.assigned_on
630
+ assert_equal child_imi.assigned_on, Date.today
631
+ assert_not_nil mother_imi.reload.study_subject
632
+ assert_equal mother_imi.study_subject, candidate_control.study_subject.mother
633
+ assert_not_nil mother_imi.assigned_on
634
+ assert_equal mother_imi.assigned_on, Date.today
635
+ end
636
+
637
+ test "should rollback study subject creation of icf_master_id save fails" do
638
+ Factory(:icf_master_id,:icf_master_id => '123456789')
639
+ case_study_subject = Factory(:complete_case_study_subject)
640
+ candidate_control = Factory(:candidate_control)
641
+ assert_not_nil IcfMasterId.next_unused
642
+ IcfMasterId.any_instance.stubs(:save!
643
+ ).raises(ActiveRecord::RecordNotSaved)
644
+ assert_difference('Enrollment.count',0) {
645
+ assert_difference('StudySubject.count',0) {
646
+ assert_raises(ActiveRecord::RecordNotSaved){
647
+ candidate_control.create_study_subjects(case_study_subject)
648
+ } } }
649
+ end
650
+
651
+ test "should rollback if create_mother raises error" do
652
+ case_study_subject = Factory(:complete_case_study_subject)
653
+ candidate_control = Factory(:candidate_control)
654
+ StudySubject.any_instance.stubs(:create_mother
655
+ ).raises(ActiveRecord::RecordNotSaved)
656
+ assert_difference('Enrollment.count',0) {
657
+ assert_difference('StudySubject.count',0) {
658
+ assert_raises(ActiveRecord::RecordNotSaved){
659
+ candidate_control.create_study_subjects(case_study_subject)
660
+ } } }
661
+ end
662
+
663
+ test "should rollback if assign_icf_master_id raises error" do
664
+ case_study_subject = Factory(:complete_case_study_subject)
665
+ candidate_control = Factory(:candidate_control)
666
+ StudySubject.any_instance.stubs(:assign_icf_master_id
667
+ ).raises(ActiveRecord::RecordNotSaved)
668
+ assert_difference('Enrollment.count',0) {
669
+ assert_difference('StudySubject.count',0) {
670
+ assert_raises(ActiveRecord::RecordNotSaved){
671
+ candidate_control.create_study_subjects(case_study_subject)
672
+ } } }
673
+ end
674
+
675
+ test "should rollback if create_study_subject raises error" do
676
+ case_study_subject = Factory(:complete_case_study_subject)
677
+ candidate_control = Factory(:candidate_control)
678
+ StudySubject.any_instance.stubs(:create_or_update).returns(false)
679
+ assert_difference('Enrollment.count',0) {
680
+ assert_difference('StudySubject.count',0) {
681
+ assert_raises(ActiveRecord::RecordNotSaved){
682
+ candidate_control.create_study_subjects(case_study_subject)
683
+ } } }
684
+ end
685
+
686
+ #
687
+ # END: MANY subject creation tests
688
+ #
689
+ ################################################################################
690
+
691
+ protected
692
+
693
+ def create_study_subjects_for_candidate_control(candidate,case_subject)
694
+ assert_difference('Enrollment.count',2) { # both get auto-created ccls enrollment
695
+ assert_difference('StudySubject.count',2) {
696
+ candidate.create_study_subjects(case_subject)
697
+ } }
698
+ end
699
+
700
+ # def create_patient_for_subject(subject)
701
+ # patient = Factory(:patient, :study_subject => subject,
702
+ # :admit_date => 5.years.ago )
703
+ # assert_not_nil patient.admit_date
704
+ # end
705
+
706
+ # def create_candidate_control(options={})
707
+ # candidate_control = Factory.build(:candidate_control,options)
708
+ # candidate_control.save
709
+ # candidate_control
710
+ # end
711
+
712
+ end