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.
- data/README.rdoc +182 -0
- data/app/models/abstract.rb +181 -0
- data/app/models/abstract_search.rb +50 -0
- data/app/models/abstract_validations.rb +324 -0
- data/app/models/address.rb +70 -0
- data/app/models/address_type.rb +15 -0
- data/app/models/addressing.rb +147 -0
- data/app/models/aliquot.rb +44 -0
- data/app/models/aliquot_sample_format.rb +13 -0
- data/app/models/analysis.rb +14 -0
- data/app/models/bc_request.rb +20 -0
- data/app/models/candidate_control.rb +101 -0
- data/app/models/context.rb +23 -0
- data/app/models/context_data_source.rb +4 -0
- data/app/models/county.rb +16 -0
- data/app/models/data_source.rb +24 -0
- data/app/models/diagnosis.rb +23 -0
- data/app/models/document_type.rb +16 -0
- data/app/models/document_version.rb +27 -0
- data/app/models/enrollment.rb +78 -0
- data/app/models/enrollment_validations.rb +167 -0
- data/app/models/follow_up.rb +16 -0
- data/app/models/follow_up_type.rb +18 -0
- data/app/models/gift_card.rb +22 -0
- data/app/models/gift_card_search.rb +137 -0
- data/app/models/home_exposure_response.rb +24 -0
- data/app/models/homex_outcome.rb +75 -0
- data/app/models/hospital.rb +22 -0
- data/app/models/icf_master_id.rb +30 -0
- data/app/models/icf_master_tracker.rb +217 -0
- data/app/models/icf_master_tracker_change.rb +9 -0
- data/app/models/icf_master_tracker_update.rb +50 -0
- data/app/models/ineligible_reason.rb +26 -0
- data/app/models/instrument.rb +26 -0
- data/app/models/instrument_type.rb +17 -0
- data/app/models/instrument_version.rb +28 -0
- data/app/models/interview.rb +122 -0
- data/app/models/interview_method.rb +17 -0
- data/app/models/interview_outcome.rb +16 -0
- data/app/models/language.rb +28 -0
- data/app/models/live_birth_data_update.rb +142 -0
- data/app/models/operational_event.rb +99 -0
- data/app/models/operational_event_type.rb +31 -0
- data/app/models/organization.rb +28 -0
- data/app/models/patient.rb +63 -0
- data/app/models/patient_validations.rb +118 -0
- data/app/models/person.rb +28 -0
- data/app/models/phone_number.rb +105 -0
- data/app/models/phone_type.rb +15 -0
- data/app/models/project.rb +39 -0
- data/app/models/project_outcome.rb +19 -0
- data/app/models/race.rb +31 -0
- data/app/models/refusal_reason.rb +23 -0
- data/app/models/sample.rb +168 -0
- data/app/models/sample_kit.rb +14 -0
- data/app/models/sample_outcome.rb +16 -0
- data/app/models/sample_temperature.rb +14 -0
- data/app/models/sample_type.rb +37 -0
- data/app/models/search.rb +195 -0
- data/app/models/section.rb +18 -0
- data/app/models/state.rb +25 -0
- data/app/models/study_subject.rb +237 -0
- data/app/models/study_subject_abstracts.rb +47 -0
- data/app/models/study_subject_addresses.rb +34 -0
- data/app/models/study_subject_associations.rb +38 -0
- data/app/models/study_subject_duplicates.rb +111 -0
- data/app/models/study_subject_enrollments.rb +17 -0
- data/app/models/study_subject_homex_outcome.rb +22 -0
- data/app/models/study_subject_identifier.rb +153 -0
- data/app/models/study_subject_interviews.rb +25 -0
- data/app/models/study_subject_languages.rb +21 -0
- data/app/models/study_subject_operational_events.rb +66 -0
- data/app/models/study_subject_patient.rb +177 -0
- data/app/models/study_subject_pii.rb +74 -0
- data/app/models/study_subject_races.rb +25 -0
- data/app/models/study_subject_search.rb +260 -0
- data/app/models/study_subject_validations.rb +116 -0
- data/app/models/subject_language.rb +11 -0
- data/app/models/subject_race.rb +11 -0
- data/app/models/subject_relationship.rb +21 -0
- data/app/models/subject_type.rb +22 -0
- data/app/models/tracing_status.rb +20 -0
- data/app/models/transfer.rb +40 -0
- data/app/models/unit.rb +14 -0
- data/app/models/vital_status.rb +19 -0
- data/app/models/zip_code.rb +36 -0
- data/config/abstract_fields.yml +1038 -0
- data/config/abstract_sections.yml +77 -0
- data/config/home_exposure_response_fields.yml +583 -0
- data/config/icf_master_tracker_update.yml +56 -0
- data/config/live_birth_data_update.yml +56 -0
- data/config/shared_use_db.yml +4 -0
- data/generators/ccls_engine/USAGE +2 -0
- data/generators/ccls_engine/ccls_engine_generator.rb +123 -0
- data/generators/ccls_engine/templates/autotest_ccls_engine.rb +3 -0
- data/generators/ccls_engine/templates/ccls_engine.rake +12 -0
- data/generators/ccls_engine/templates/fixtures/address_types.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/context_data_sources.yml +54 -0
- data/generators/ccls_engine/templates/fixtures/contexts.yml +19 -0
- data/generators/ccls_engine/templates/fixtures/data_sources.yml +40 -0
- data/generators/ccls_engine/templates/fixtures/diagnoses.yml +40 -0
- data/generators/ccls_engine/templates/fixtures/document_types.yml +65 -0
- data/generators/ccls_engine/templates/fixtures/document_versions.csv +155 -0
- data/generators/ccls_engine/templates/fixtures/follow_up_types.yml +16 -0
- data/generators/ccls_engine/templates/fixtures/hospitals.yml +114 -0
- data/generators/ccls_engine/templates/fixtures/ineligible_reasons.yml +35 -0
- data/generators/ccls_engine/templates/fixtures/instrument_types.yml +26 -0
- data/generators/ccls_engine/templates/fixtures/instrument_versions.yml +22 -0
- data/generators/ccls_engine/templates/fixtures/instruments.yml +22 -0
- data/generators/ccls_engine/templates/fixtures/interview_methods.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/interview_outcomes.yml +31 -0
- data/generators/ccls_engine/templates/fixtures/languages.yml +34 -0
- data/generators/ccls_engine/templates/fixtures/operational_event_types.yml +141 -0
- data/generators/ccls_engine/templates/fixtures/organizations.yml +198 -0
- data/generators/ccls_engine/templates/fixtures/people.yml +130 -0
- data/generators/ccls_engine/templates/fixtures/phone_types.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/project_outcomes.yml +25 -0
- data/generators/ccls_engine/templates/fixtures/projects.yml +59 -0
- data/generators/ccls_engine/templates/fixtures/races.yml +52 -0
- data/generators/ccls_engine/templates/fixtures/refusal_reasons.yml +55 -0
- data/generators/ccls_engine/templates/fixtures/sample_outcomes.yml +36 -0
- data/generators/ccls_engine/templates/fixtures/sample_temperatures.yml +16 -0
- data/generators/ccls_engine/templates/fixtures/sample_types.yml +147 -0
- data/generators/ccls_engine/templates/fixtures/sections.yml +31 -0
- data/generators/ccls_engine/templates/fixtures/states.yml +363 -0
- data/generators/ccls_engine/templates/fixtures/subject_relationships.yml +46 -0
- data/generators/ccls_engine/templates/fixtures/subject_types.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/tracing_statuses.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/units.yml +13 -0
- data/generators/ccls_engine/templates/fixtures/vital_statuses.yml +28 -0
- data/generators/ccls_engine/templates/functional/roles_controller_test.rb +142 -0
- data/generators/ccls_engine/templates/functional/sessions_controller_test.rb +19 -0
- data/generators/ccls_engine/templates/functional/users_controller_test.rb +94 -0
- data/generators/ccls_engine/templates/images/sort_down.png +0 -0
- data/generators/ccls_engine/templates/images/sort_up.png +0 -0
- data/generators/ccls_engine/templates/initializer.rb +28 -0
- data/generators/ccls_engine/templates/javascripts/ccls_engine.js +24 -0
- data/generators/ccls_engine/templates/javascripts/jquery-ui.js +763 -0
- data/generators/ccls_engine/templates/javascripts/jquery.js +154 -0
- data/generators/ccls_engine/templates/javascripts/jrails.js +1 -0
- data/generators/ccls_engine/templates/migrations/create_user_invitations.rb +18 -0
- data/generators/ccls_engine/templates/migrations/create_users.rb +33 -0
- data/generators/ccls_engine/templates/migrations/drop_user_invitations.rb +18 -0
- data/generators/ccls_engine/templates/stylesheets/ccls_engine.css +180 -0
- data/generators/ccls_engine/templates/stylesheets/user.css +35 -0
- data/generators/ccls_engine/templates/stylesheets/users.css +23 -0
- data/generators/ccls_engine/templates/unit/core_extension_test.rb +18 -0
- data/generators/ccls_engine/templates/unit/role_test.rb +30 -0
- data/generators/ccls_engine/templates/unit/user_test.rb +321 -0
- data/lib/ccls-ccls_engine.rb +1 -0
- data/lib/ccls_engine.rb +135 -0
- data/lib/ccls_engine/action_view_extension.rb +3 -0
- data/lib/ccls_engine/action_view_extension/base.rb +53 -0
- data/lib/ccls_engine/action_view_extension/form_builder.rb +39 -0
- data/lib/ccls_engine/active_record_extension.rb +2 -0
- data/lib/ccls_engine/active_record_extension/base.rb +70 -0
- data/lib/ccls_engine/active_record_shared.rb +8 -0
- data/lib/ccls_engine/assertions.rb +69 -0
- data/lib/ccls_engine/autotest.rb +54 -0
- data/lib/ccls_engine/ccls_user.rb +117 -0
- data/lib/ccls_engine/core_extension.rb +14 -0
- data/lib/ccls_engine/date_and_time_formats.rb +30 -0
- data/lib/ccls_engine/factories.rb +880 -0
- data/lib/ccls_engine/factory_test_helper.rb +276 -0
- data/lib/ccls_engine/helper.rb +112 -0
- data/lib/ccls_engine/icf_master_tracker_update_test_helper.rb +121 -0
- data/lib/ccls_engine/live_birth_data_update_test_helper.rb +110 -0
- data/lib/ccls_engine/package_test_helper.rb +49 -0
- data/lib/ccls_engine/shared_database.rb +20 -0
- data/lib/ccls_engine/tasks.rb +1 -0
- data/lib/ccls_engine/test_tasks.rb +52 -0
- data/lib/ccls_engine/translation_table.rb +86 -0
- data/lib/shared_migration.rb +5 -0
- data/lib/surveyor/survey_extensions.rb +125 -0
- data/lib/tasks/application.rake +286 -0
- data/lib/tasks/calnet_authenticated.rake +6 -0
- data/lib/tasks/common_lib.rake +7 -0
- data/lib/tasks/database.rake +288 -0
- data/lib/tasks/documentation.rake +71 -0
- data/lib/tasks/homex_import.rake +723 -0
- data/lib/tasks/odms_import.rake +1116 -0
- data/lib/tasks/simply_authorized.rake +6 -0
- data/lib/tasks/ucb_ccls_engine_tasks.rake +4 -0
- data/lib/tasks/use_db.rake +4 -0
- data/rails/init.rb +4 -0
- data/test/unit/ccls/abstract_search_test.rb +150 -0
- data/test/unit/ccls/abstract_test.rb +674 -0
- data/test/unit/ccls/address_test.rb +155 -0
- data/test/unit/ccls/address_type_test.rb +25 -0
- data/test/unit/ccls/addressing_test.rb +466 -0
- data/test/unit/ccls/aliquot_sample_format_test.rb +20 -0
- data/test/unit/ccls/aliquot_test.rb +156 -0
- data/test/unit/ccls/analysis_test.rb +31 -0
- data/test/unit/ccls/bc_request_test.rb +43 -0
- data/test/unit/ccls/candidate_control_test.rb +712 -0
- data/test/unit/ccls/context_data_source_test.rb +26 -0
- data/test/unit/ccls/context_test.rb +40 -0
- data/test/unit/ccls/core_extension_test.rb +17 -0
- data/test/unit/ccls/county_test.rb +34 -0
- data/test/unit/ccls/data_source_test.rb +41 -0
- data/test/unit/ccls/diagnosis_test.rb +51 -0
- data/test/unit/ccls/document_type_test.rb +35 -0
- data/test/unit/ccls/document_version_test.rb +68 -0
- data/test/unit/ccls/enrollment_test.rb +575 -0
- data/test/unit/ccls/follow_up_test.rb +23 -0
- data/test/unit/ccls/follow_up_type_test.rb +34 -0
- data/test/unit/ccls/gift_card_search_test.rb +153 -0
- data/test/unit/ccls/gift_card_test.rb +40 -0
- data/test/unit/ccls/home_exposure_response_test.rb +83 -0
- data/test/unit/ccls/homex_outcome_test.rb +199 -0
- data/test/unit/ccls/hospital_test.rb +102 -0
- data/test/unit/ccls/icf_master_id_test.rb +30 -0
- data/test/unit/ccls/icf_master_tracker_change_test.rb +14 -0
- data/test/unit/ccls/icf_master_tracker_test.rb +132 -0
- data/test/unit/ccls/icf_master_tracker_update_test.rb +176 -0
- data/test/unit/ccls/ineligible_reason_test.rb +48 -0
- data/test/unit/ccls/instrument_test.rb +62 -0
- data/test/unit/ccls/instrument_type_test.rb +39 -0
- data/test/unit/ccls/instrument_version_test.rb +71 -0
- data/test/unit/ccls/interview_method_test.rb +44 -0
- data/test/unit/ccls/interview_outcome_test.rb +34 -0
- data/test/unit/ccls/interview_test.rb +298 -0
- data/test/unit/ccls/language_test.rb +47 -0
- data/test/unit/ccls/live_birth_data_update_test.rb +358 -0
- data/test/unit/ccls/operational_event_test.rb +187 -0
- data/test/unit/ccls/operational_event_type_test.rb +51 -0
- data/test/unit/ccls/organization_test.rb +64 -0
- data/test/unit/ccls/patient_test.rb +538 -0
- data/test/unit/ccls/person_test.rb +55 -0
- data/test/unit/ccls/phone_number_test.rb +244 -0
- data/test/unit/ccls/phone_type_test.rb +32 -0
- data/test/unit/ccls/project_outcome_test.rb +34 -0
- data/test/unit/ccls/project_test.rb +60 -0
- data/test/unit/ccls/race_test.rb +37 -0
- data/test/unit/ccls/refusal_reason_test.rb +52 -0
- data/test/unit/ccls/role_test.rb +26 -0
- data/test/unit/ccls/sample_kit_test.rb +35 -0
- data/test/unit/ccls/sample_outcome_test.rb +34 -0
- data/test/unit/ccls/sample_temperature_test.rb +25 -0
- data/test/unit/ccls/sample_test.rb +363 -0
- data/test/unit/ccls/sample_type_test.rb +58 -0
- data/test/unit/ccls/section_test.rb +34 -0
- data/test/unit/ccls/state_test.rb +31 -0
- data/test/unit/ccls/study_subject_abstracts_test.rb +115 -0
- data/test/unit/ccls/study_subject_addresses_test.rb +93 -0
- data/test/unit/ccls/study_subject_duplicates_test.rb +407 -0
- data/test/unit/ccls/study_subject_enrollments_test.rb +65 -0
- data/test/unit/ccls/study_subject_homex_outcome_test.rb +64 -0
- data/test/unit/ccls/study_subject_identifier_test.rb +439 -0
- data/test/unit/ccls/study_subject_interviews_test.rb +26 -0
- data/test/unit/ccls/study_subject_languages_test.rb +142 -0
- data/test/unit/ccls/study_subject_operational_events_test.rb +53 -0
- data/test/unit/ccls/study_subject_patient_test.rb +249 -0
- data/test/unit/ccls/study_subject_pii_test.rb +278 -0
- data/test/unit/ccls/study_subject_races_test.rb +203 -0
- data/test/unit/ccls/study_subject_search_test.rb +704 -0
- data/test/unit/ccls/study_subject_test.rb +770 -0
- data/test/unit/ccls/subject_language_test.rb +43 -0
- data/test/unit/ccls/subject_race_test.rb +35 -0
- data/test/unit/ccls/subject_relationship_test.rb +43 -0
- data/test/unit/ccls/subject_type_test.rb +40 -0
- data/test/unit/ccls/tracing_status_test.rb +32 -0
- data/test/unit/ccls/transfer_test.rb +81 -0
- data/test/unit/ccls/translation_table_test.rb +40 -0
- data/test/unit/ccls/unit_test.rb +21 -0
- data/test/unit/ccls/user_test.rb +156 -0
- data/test/unit/ccls/vital_status_test.rb +36 -0
- data/test/unit/ccls/zip_code_test.rb +55 -0
- metadata +633 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
# This is just a collection of pii related tests
|
|
4
|
+
# for StudySubject separated only for clarity due
|
|
5
|
+
# to the size of the StudySubjectTest class.
|
|
6
|
+
class Ccls::StudySubjectPiiTest < ActiveSupport::TestCase
|
|
7
|
+
|
|
8
|
+
test "should return 'name not available' for study_subject without names" do
|
|
9
|
+
study_subject = create_study_subject
|
|
10
|
+
assert_nil study_subject.first_name
|
|
11
|
+
assert_nil study_subject.middle_name
|
|
12
|
+
assert_nil study_subject.last_name
|
|
13
|
+
assert_equal '[name not available]', study_subject.full_name
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "should not require dob on creation for mother" do
|
|
17
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
18
|
+
@study_subject = create_study_subject(
|
|
19
|
+
:subject_type => SubjectType['Mother'],
|
|
20
|
+
:dob => nil )
|
|
21
|
+
}
|
|
22
|
+
assert_nil @study_subject.reload.dob
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test "should not require dob on update for mother" do
|
|
26
|
+
# flag not necessary as study_subject.subject_type exists
|
|
27
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
28
|
+
@study_subject = create_study_subject(:subject_type => SubjectType['Mother'] )
|
|
29
|
+
}
|
|
30
|
+
assert_not_nil @study_subject.reload.dob
|
|
31
|
+
@study_subject.update_attributes(:dob => nil)
|
|
32
|
+
assert_nil @study_subject.reload.dob
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test "should nullify blank email" do
|
|
36
|
+
assert_difference("StudySubject.count",1) do
|
|
37
|
+
study_subject = create_study_subject(:email => ' ')
|
|
38
|
+
assert_nil study_subject.reload.email
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "should allow multiple blank email" do
|
|
43
|
+
create_study_subject(:email => ' ')
|
|
44
|
+
assert_difference( "StudySubject.count", 1 ) do
|
|
45
|
+
study_subject = create_study_subject(:email => ' ')
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
test "should require properly formated email address" do
|
|
50
|
+
assert_difference( "StudySubject.count", 0 ) do
|
|
51
|
+
%w( asdf me@some@where.com me@somewhere ).each do |bad_email|
|
|
52
|
+
study_subject = create_study_subject(:email => bad_email)
|
|
53
|
+
assert study_subject.errors.on_attr_and_type?(:email,:invalid)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
assert_difference( "StudySubject.count", 1 ) do
|
|
57
|
+
%w( me@some.where.com ).each do |good_email|
|
|
58
|
+
study_subject = create_study_subject(:email => good_email)
|
|
59
|
+
assert !study_subject.errors.on_attr_and_type?(:email,:invalid)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
test "should return dob as a date NOT time" do
|
|
65
|
+
study_subject = create_study_subject(:dob => (Time.now - 5.days) )
|
|
66
|
+
assert_not_nil study_subject.dob
|
|
67
|
+
assert_changes("StudySubject.find(#{study_subject.id}).dob") {
|
|
68
|
+
study_subject.update_attributes(:dob => (Time.now - 4.days) )
|
|
69
|
+
}
|
|
70
|
+
assert !study_subject.new_record?
|
|
71
|
+
assert_not_nil study_subject.dob
|
|
72
|
+
assert study_subject.dob.is_a?(Date)
|
|
73
|
+
assert_equal study_subject.dob, study_subject.dob.to_date
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
test "should parse a properly formatted date" do
|
|
77
|
+
assert_difference( "StudySubject.count", 1 ) do
|
|
78
|
+
study_subject = create_study_subject(
|
|
79
|
+
:dob => Date.parse("January 1 2001") )
|
|
80
|
+
assert !study_subject.new_record?,
|
|
81
|
+
"#{study_subject.errors.full_messages.to_sentence}"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
test "should return join of study_subject's initials" do
|
|
86
|
+
study_subject = create_study_subject(
|
|
87
|
+
:first_name => "John",
|
|
88
|
+
:middle_name => "X",
|
|
89
|
+
:last_name => "Smith" )
|
|
90
|
+
assert_equal 'JXS', study_subject.initials
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
test "should return join of study_subject's initials without middle name" do
|
|
94
|
+
study_subject = create_study_subject(
|
|
95
|
+
:first_name => "John",
|
|
96
|
+
:last_name => "Smith" )
|
|
97
|
+
assert_equal 'JS', study_subject.initials
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
test "should return join of study_subject's initials with blank middle name" do
|
|
101
|
+
study_subject = create_study_subject(
|
|
102
|
+
:first_name => "John",
|
|
103
|
+
:middle_name => "",
|
|
104
|
+
:last_name => "Smith" )
|
|
105
|
+
assert_equal 'JS', study_subject.initials
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
test "should return join of study_subject's name" do
|
|
109
|
+
study_subject = create_study_subject(
|
|
110
|
+
:first_name => "John",
|
|
111
|
+
:middle_name => "Xavier",
|
|
112
|
+
:last_name => "Smith" )
|
|
113
|
+
assert_equal 'John Xavier Smith', study_subject.full_name
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
test "should return join of study_subject's name without middle name" do
|
|
117
|
+
study_subject = create_study_subject(
|
|
118
|
+
:first_name => "John",
|
|
119
|
+
:last_name => "Smith" )
|
|
120
|
+
assert_equal 'John Smith', study_subject.full_name
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
test "should return join of study_subject's name with blank middle name" do
|
|
124
|
+
study_subject = create_study_subject(
|
|
125
|
+
:first_name => "John",
|
|
126
|
+
:middle_name => "",
|
|
127
|
+
:last_name => "Smith" )
|
|
128
|
+
assert_equal 'John Smith', study_subject.full_name
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
test "should return 'name not available' if study_subject's names are blank" do
|
|
132
|
+
study_subject = create_study_subject
|
|
133
|
+
assert_equal '[name not available]', study_subject.full_name
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
test "should return 'name not available' if study_subject's father's names are blank" do
|
|
137
|
+
study_subject = create_study_subject
|
|
138
|
+
assert_equal '[name not available]', study_subject.fathers_name
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
test "should return 'name not available' if study_subject's mother's names are blank" do
|
|
142
|
+
study_subject = create_study_subject
|
|
143
|
+
assert_equal '[name not available]', study_subject.mothers_name
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
test "should return 'name not available' if study_subject's guardian's names are blank" do
|
|
147
|
+
study_subject = create_study_subject
|
|
148
|
+
assert_equal '[name not available]', study_subject.guardians_name
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
test "should return join of father's name" do
|
|
152
|
+
study_subject = create_study_subject(
|
|
153
|
+
:father_first_name => "Santa",
|
|
154
|
+
:father_middle_name => "X.",
|
|
155
|
+
:father_last_name => "Claus" )
|
|
156
|
+
assert_equal 'Santa X. Claus', study_subject.fathers_name
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
test "should return join of father's name without middle name" do
|
|
160
|
+
study_subject = create_study_subject(
|
|
161
|
+
:father_first_name => "Santa",
|
|
162
|
+
:father_last_name => "Claus" )
|
|
163
|
+
assert_equal 'Santa Claus', study_subject.fathers_name
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
test "should return join of father's name with blank middle name" do
|
|
167
|
+
study_subject = create_study_subject(
|
|
168
|
+
:father_first_name => "Santa",
|
|
169
|
+
:father_middle_name => "",
|
|
170
|
+
:father_last_name => "Claus" )
|
|
171
|
+
assert_equal 'Santa Claus', study_subject.fathers_name
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
test "should return join of mother's name" do
|
|
175
|
+
study_subject = create_study_subject(
|
|
176
|
+
:mother_first_name => "Ms",
|
|
177
|
+
:mother_middle_name => "X.",
|
|
178
|
+
:mother_last_name => "Claus" )
|
|
179
|
+
assert_equal 'Ms X. Claus', study_subject.mothers_name
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
test "should return join of mother's name without middle name" do
|
|
183
|
+
study_subject = create_study_subject(
|
|
184
|
+
:mother_first_name => "Ms",
|
|
185
|
+
:mother_last_name => "Claus" )
|
|
186
|
+
assert_equal 'Ms Claus', study_subject.mothers_name
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
test "should return join of mother's name with blank middle name" do
|
|
190
|
+
study_subject = create_study_subject(
|
|
191
|
+
:mother_first_name => "Ms",
|
|
192
|
+
:mother_middle_name => "",
|
|
193
|
+
:mother_last_name => "Claus" )
|
|
194
|
+
assert_equal 'Ms Claus', study_subject.mothers_name
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
test "should return join of guardian's name" do
|
|
198
|
+
study_subject = create_study_subject(
|
|
199
|
+
:guardian_first_name => "Jack",
|
|
200
|
+
:guardian_middle_name => "X.",
|
|
201
|
+
:guardian_last_name => "Frost" )
|
|
202
|
+
assert_equal 'Jack X. Frost', study_subject.guardians_name
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
test "should return join of guardian's name without middle name" do
|
|
206
|
+
study_subject = create_study_subject(
|
|
207
|
+
:guardian_first_name => "Jack",
|
|
208
|
+
:guardian_last_name => "Frost" )
|
|
209
|
+
assert_equal 'Jack Frost', study_subject.guardians_name
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
test "should return join of guardian's name with blank middle name" do
|
|
213
|
+
study_subject = create_study_subject(
|
|
214
|
+
:guardian_first_name => "Jack",
|
|
215
|
+
:guardian_middle_name => "",
|
|
216
|
+
:guardian_last_name => "Frost" )
|
|
217
|
+
assert_equal 'Jack Frost', study_subject.guardians_name
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
test "should require guardian_relationship_other if " <<
|
|
221
|
+
"guardian_relationship == other" do
|
|
222
|
+
assert_difference( "StudySubject.count", 0 ) do
|
|
223
|
+
study_subject = create_study_subject(
|
|
224
|
+
:guardian_relationship => SubjectRelationship['other'] )
|
|
225
|
+
assert study_subject.errors.on_attr_and_type?(:guardian_relationship_other,:blank)
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
test "should require guardian_relationship_other with custom message" do
|
|
230
|
+
assert_difference( "StudySubject.count", 0 ) do
|
|
231
|
+
study_subject = create_study_subject(
|
|
232
|
+
:guardian_relationship => SubjectRelationship['other'] )
|
|
233
|
+
assert study_subject.errors.on_attr_and_type?(:guardian_relationship_other,:blank)
|
|
234
|
+
assert_match /You must specify a relationship with 'other relationship' is selected/,
|
|
235
|
+
study_subject.errors.full_messages.to_sentence
|
|
236
|
+
assert_no_match /Guardian relationship other/,
|
|
237
|
+
study_subject.errors.full_messages.to_sentence
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
test "should require dob with custom message" do
|
|
242
|
+
assert_difference( "StudySubject.count", 0 ) do
|
|
243
|
+
study_subject = create_study_subject( :dob => nil )
|
|
244
|
+
assert study_subject.errors.on_attr_and_type?(:dob,:blank)
|
|
245
|
+
assert_match /Date of birth can't be blank/,
|
|
246
|
+
study_subject.errors.full_messages.to_sentence
|
|
247
|
+
assert_no_match /DOB/i,
|
|
248
|
+
study_subject.errors.full_messages.to_sentence
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
test "should not require dob if subject is mother" do
|
|
253
|
+
assert_difference('StudySubject.count',1) do
|
|
254
|
+
study_subject = create_mother_study_subject( :dob => nil )
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
test "should require dob if subject is not mother" do
|
|
259
|
+
assert_difference('StudySubject.count',0) do
|
|
260
|
+
study_subject = create_study_subject( :dob => nil )
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
test "should require birth_city if birth_country is 'United States'" do
|
|
265
|
+
assert_difference( "StudySubject.count", 0 ) do
|
|
266
|
+
study_subject = create_study_subject( :birth_country => 'United States' )
|
|
267
|
+
assert study_subject.errors.on_attr_and_type?(:birth_city,:blank)
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
test "should require birth_state if birth_country is 'United States'" do
|
|
272
|
+
assert_difference( "StudySubject.count", 0 ) do
|
|
273
|
+
study_subject = create_study_subject( :birth_country => 'United States' )
|
|
274
|
+
assert study_subject.errors.on_attr_and_type?(:birth_state,:blank)
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
end
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
# This is just a collection of race related tests
|
|
4
|
+
# for StudySubject separated only for clarity due
|
|
5
|
+
# to the size of the StudySubjectTest class.
|
|
6
|
+
class Ccls::StudySubjectRacesTest < ActiveSupport::TestCase
|
|
7
|
+
|
|
8
|
+
test "should create study_subject with race" do
|
|
9
|
+
assert_difference( 'Race.count', 1 ){
|
|
10
|
+
assert_difference( 'SubjectRace.count', 1 ){
|
|
11
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
12
|
+
study_subject = create_study_subject
|
|
13
|
+
study_subject.races << Factory(:race)
|
|
14
|
+
assert !study_subject.new_record?,
|
|
15
|
+
"#{study_subject.errors.full_messages.to_sentence}"
|
|
16
|
+
} } }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test "should NOT destroy races with study_subject" do
|
|
20
|
+
assert_difference('StudySubject.count',1) {
|
|
21
|
+
assert_difference('Race.count',1) {
|
|
22
|
+
@study_subject = Factory(:subject_race).study_subject
|
|
23
|
+
} }
|
|
24
|
+
assert_difference('StudySubject.count',-1) {
|
|
25
|
+
assert_difference('Race.count',0) {
|
|
26
|
+
@study_subject.destroy
|
|
27
|
+
} }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test "should NOT destroy subject_races with study_subject" do
|
|
31
|
+
assert_difference('StudySubject.count',1) {
|
|
32
|
+
assert_difference('SubjectRace.count',1) {
|
|
33
|
+
@study_subject = Factory(:subject_race).study_subject
|
|
34
|
+
} }
|
|
35
|
+
assert_difference('StudySubject.count',-1) {
|
|
36
|
+
assert_difference('SubjectRace.count',0) {
|
|
37
|
+
@study_subject.destroy
|
|
38
|
+
} }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test "should return race name for string" do
|
|
42
|
+
study_subject = create_study_subject
|
|
43
|
+
assert_equal study_subject.race_names,
|
|
44
|
+
"#{study_subject.races.first}"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
test "should create study_subject with empty subject_races_attributes" do
|
|
48
|
+
assert_difference( 'SubjectRace.count', 0 ){
|
|
49
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
50
|
+
@study_subject = create_study_subject(:subject_races_attributes => { })
|
|
51
|
+
assert !@study_subject.new_record?,
|
|
52
|
+
"#{@study_subject.errors.full_messages.to_sentence}"
|
|
53
|
+
} }
|
|
54
|
+
assert @study_subject.races.empty?
|
|
55
|
+
assert @study_subject.subject_races.empty?
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
test "should create study_subject with blank race_id" do
|
|
59
|
+
assert_difference( 'SubjectRace.count', 0 ){
|
|
60
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
61
|
+
@study_subject = create_study_subject(:subject_races_attributes => {
|
|
62
|
+
'0' => { :race_id => '' }
|
|
63
|
+
})
|
|
64
|
+
assert !@study_subject.new_record?,
|
|
65
|
+
"#{@study_subject.errors.full_messages.to_sentence}"
|
|
66
|
+
} }
|
|
67
|
+
assert @study_subject.races.empty?
|
|
68
|
+
assert @study_subject.subject_races.empty?
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
test "should create study_subject with subject_races_attributes race_id" do
|
|
72
|
+
assert Race.count > 0
|
|
73
|
+
assert_difference( 'SubjectRace.count', 1 ){
|
|
74
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
75
|
+
@study_subject = create_study_subject(:subject_races_attributes => {
|
|
76
|
+
'0' => { :race_id => Race.first.id }
|
|
77
|
+
})
|
|
78
|
+
assert !@study_subject.new_record?,
|
|
79
|
+
"#{@study_subject.errors.full_messages.to_sentence}"
|
|
80
|
+
} }
|
|
81
|
+
assert !@study_subject.races.empty?
|
|
82
|
+
assert !@study_subject.subject_races.empty?
|
|
83
|
+
assert !@study_subject.subject_races.first.is_primary
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
test "should create study_subject with subject_races_attributes race_id and is_primary" do
|
|
87
|
+
assert Race.count > 0
|
|
88
|
+
assert_difference( 'SubjectRace.count', 1 ){
|
|
89
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
90
|
+
@study_subject = create_study_subject(:subject_races_attributes => {
|
|
91
|
+
'0' => { :race_id => Race.first.id, :is_primary => 'true' }
|
|
92
|
+
})
|
|
93
|
+
assert !@study_subject.new_record?,
|
|
94
|
+
"#{@study_subject.errors.full_messages.to_sentence}"
|
|
95
|
+
} }
|
|
96
|
+
assert !@study_subject.races.empty?
|
|
97
|
+
assert !@study_subject.subject_races.empty?
|
|
98
|
+
assert @study_subject.subject_races.first.is_primary
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
test "should create study_subject with subject_races_attributes multiple races" do
|
|
102
|
+
assert Race.count > 2
|
|
103
|
+
races = Race.all
|
|
104
|
+
assert_difference( 'SubjectRace.count', 3 ){
|
|
105
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
106
|
+
@study_subject = create_study_subject(:subject_races_attributes => {
|
|
107
|
+
'0' => { :race_id => races[1].id },
|
|
108
|
+
'1' => { :race_id => races[2].id },
|
|
109
|
+
'2' => { :race_id => races[3].id }
|
|
110
|
+
})
|
|
111
|
+
assert !@study_subject.new_record?,
|
|
112
|
+
"#{@study_subject.errors.full_messages.to_sentence}"
|
|
113
|
+
} }
|
|
114
|
+
assert !@study_subject.races.empty?
|
|
115
|
+
assert_equal 3, @study_subject.races.length
|
|
116
|
+
assert !@study_subject.subject_races.empty?
|
|
117
|
+
assert_equal 3, @study_subject.subject_races.length
|
|
118
|
+
assert !@study_subject.subject_races.collect(&:is_primary).any?
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
test "should create study_subject with subject_races_attributes multiple races and is_primaries" do
|
|
122
|
+
assert Race.count > 2
|
|
123
|
+
races = Race.all
|
|
124
|
+
assert_difference( 'SubjectRace.count', 3 ){
|
|
125
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
126
|
+
@study_subject = create_study_subject(:subject_races_attributes => {
|
|
127
|
+
'0' => { :race_id => races[1].id, :is_primary => 'true' },
|
|
128
|
+
'1' => { :race_id => races[2].id, :is_primary => 'true' },
|
|
129
|
+
'2' => { :race_id => races[3].id, :is_primary => 'true' }
|
|
130
|
+
})
|
|
131
|
+
assert !@study_subject.new_record?,
|
|
132
|
+
"#{@study_subject.errors.full_messages.to_sentence}"
|
|
133
|
+
} }
|
|
134
|
+
assert !@study_subject.races.empty?
|
|
135
|
+
assert_equal 3, @study_subject.races.length
|
|
136
|
+
assert !@study_subject.subject_races.empty?
|
|
137
|
+
assert_equal 3, @study_subject.subject_races.length
|
|
138
|
+
assert @study_subject.subject_races.collect(&:is_primary).all?
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
test "should create study_subject with subject_races_attributes with is_primary and no race_id" do
|
|
142
|
+
assert Race.count > 0
|
|
143
|
+
assert_difference( 'SubjectRace.count', 0 ){
|
|
144
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
145
|
+
@study_subject = create_study_subject(:subject_races_attributes => {
|
|
146
|
+
'0' => { :is_primary => 'true' }
|
|
147
|
+
})
|
|
148
|
+
assert !@study_subject.new_record?,
|
|
149
|
+
"#{@study_subject.errors.full_messages.to_sentence}"
|
|
150
|
+
} }
|
|
151
|
+
assert @study_subject.races.empty?
|
|
152
|
+
assert @study_subject.subject_races.empty?
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
test "should NOT create study_subject with subject_races_attributes " <<
|
|
156
|
+
"if race is other and no other given" do
|
|
157
|
+
assert Race.count > 0
|
|
158
|
+
assert_difference( 'SubjectRace.count', 0 ){
|
|
159
|
+
assert_difference( "StudySubject.count", 0 ) {
|
|
160
|
+
@study_subject = create_study_subject(:subject_races_attributes => {
|
|
161
|
+
'0' => { :race_id => Race['other'].id }
|
|
162
|
+
})
|
|
163
|
+
assert @study_subject.errors.on_attr_and_type?("subject_races.other",:blank)
|
|
164
|
+
} }
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
test "should update study_subject with subject_races_attributes" do
|
|
168
|
+
assert Race.count > 0
|
|
169
|
+
assert_difference( 'SubjectRace.count', 0 ){
|
|
170
|
+
assert_difference( "StudySubject.count", 1 ) {
|
|
171
|
+
@study_subject = create_study_subject
|
|
172
|
+
assert !@study_subject.new_record?,
|
|
173
|
+
"#{@study_subject.errors.full_messages.to_sentence}"
|
|
174
|
+
} }
|
|
175
|
+
assert @study_subject.races.empty?
|
|
176
|
+
assert @study_subject.subject_races.empty?
|
|
177
|
+
assert_difference( 'SubjectRace.count', 1 ){
|
|
178
|
+
assert_difference( "StudySubject.count", 0 ) {
|
|
179
|
+
@study_subject.update_attributes(:subject_races_attributes => {
|
|
180
|
+
'0' => { :race_id => Race.first.id, :is_primary => 'true' }
|
|
181
|
+
})
|
|
182
|
+
} }
|
|
183
|
+
assert !@study_subject.races.empty?
|
|
184
|
+
assert !@study_subject.subject_races.empty?
|
|
185
|
+
assert @study_subject.subject_races.first.is_primary
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
test "should destroy subject_race on update with _destroy" do
|
|
189
|
+
study_subject = create_study_subject
|
|
190
|
+
assert_difference( 'SubjectRace.count', 1 ){
|
|
191
|
+
study_subject.update_attributes(:subject_races_attributes => {
|
|
192
|
+
'0' => { :race_id => Race.first.id, :is_primary => 'true' }
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
subject_race = study_subject.subject_races.first
|
|
196
|
+
assert_difference( 'SubjectRace.count', -1 ){
|
|
197
|
+
study_subject.update_attributes(:subject_races_attributes => {
|
|
198
|
+
'0' => { :id => subject_race.id, :_destroy => 1 }
|
|
199
|
+
})
|
|
200
|
+
}
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
end
|