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,155 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class Ccls::AddressTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# TODO this should really be unique, only used during importing
|
|
7
|
+
# validates_uniqueness_of :external_address_id, :allow_blank => true
|
|
8
|
+
|
|
9
|
+
# external_address_id isn't required so don't use class level test
|
|
10
|
+
test "should require unique external_address_id" do
|
|
11
|
+
Factory(:address,:external_address_id => 123456789)
|
|
12
|
+
assert_difference('Address.count',0){
|
|
13
|
+
address = Factory.build(:address,:external_address_id => 123456789)
|
|
14
|
+
address.save
|
|
15
|
+
assert address.errors.on_attr_and_type?(:external_address_id,:taken)
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
assert_should_create_default_object
|
|
22
|
+
assert_should_require_attributes(
|
|
23
|
+
:line_1,
|
|
24
|
+
:city,
|
|
25
|
+
:state,
|
|
26
|
+
:zip )
|
|
27
|
+
assert_should_not_require_attributes(
|
|
28
|
+
:country,
|
|
29
|
+
:county,
|
|
30
|
+
:line_2,
|
|
31
|
+
:unit,
|
|
32
|
+
:external_address_id )
|
|
33
|
+
assert_should_require_attribute_length(
|
|
34
|
+
:zip,
|
|
35
|
+
:maximum => 10 )
|
|
36
|
+
assert_should_require_attribute_length(
|
|
37
|
+
:line_1,
|
|
38
|
+
:line_2,
|
|
39
|
+
:unit,
|
|
40
|
+
:city,
|
|
41
|
+
:state,
|
|
42
|
+
:maximum => 250 )
|
|
43
|
+
|
|
44
|
+
assert_should_have_one(:addressing)
|
|
45
|
+
assert_should_have_many(:interviews)
|
|
46
|
+
assert_should_initially_belong_to(:address_type)
|
|
47
|
+
|
|
48
|
+
test "explicit Factory address test" do
|
|
49
|
+
assert_difference('AddressType.count',1) {
|
|
50
|
+
assert_difference('Address.count',1) {
|
|
51
|
+
address = Factory(:address)
|
|
52
|
+
assert_not_nil address.address_type
|
|
53
|
+
assert_match /Box \d*/, address.line_1
|
|
54
|
+
assert_equal "Berkeley", address.city
|
|
55
|
+
assert_equal "CA", address.state
|
|
56
|
+
assert_equal "12345", address.zip
|
|
57
|
+
} }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
test "explicit Factory mailing_address test" do
|
|
61
|
+
assert_difference('AddressType.count',0) {
|
|
62
|
+
assert_difference('Address.count',1) {
|
|
63
|
+
address = Factory(:mailing_address)
|
|
64
|
+
assert_equal address.address_type, AddressType['mailing']
|
|
65
|
+
} }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
test "explicit Factory residence_address test" do
|
|
69
|
+
assert_difference('AddressType.count',0) {
|
|
70
|
+
assert_difference('Address.count',1) {
|
|
71
|
+
address = Factory(:residence_address)
|
|
72
|
+
assert_equal address.address_type, AddressType['residence']
|
|
73
|
+
} }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
test "should require address_type" do
|
|
77
|
+
assert_difference( "Address.count", 0 ) do
|
|
78
|
+
address = create_address( :address_type => nil)
|
|
79
|
+
assert !address.errors.on(:address_type)
|
|
80
|
+
assert address.errors.on_attr_and_type?(:address_type_id,:blank)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
test "should require valid address_type" do
|
|
85
|
+
assert_difference( "Address.count", 0 ) do
|
|
86
|
+
address = create_address( :address_type_id => 0)
|
|
87
|
+
assert !address.errors.on(:address_type_id)
|
|
88
|
+
assert address.errors.on_attr_and_type?(:address_type,:blank)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
test "should require 5 or 9 digit zip" do
|
|
93
|
+
%w( asdf 1234 123456 1234Q ).each do |bad_zip|
|
|
94
|
+
assert_difference( "Address.count", 0 ) do
|
|
95
|
+
address = create_address( :zip => bad_zip )
|
|
96
|
+
assert address.errors.on(:zip)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
%w( 12345 12345-6789 123456789 ).each do |good_zip|
|
|
100
|
+
assert_difference( "Address.count", 1 ) do
|
|
101
|
+
address = create_address( :zip => good_zip )
|
|
102
|
+
assert !address.errors.on(:zip)
|
|
103
|
+
assert address.zip =~ /\A\d{5}(-)?(\d{4})?\z/
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
test "should format 9 digit zip" do
|
|
109
|
+
assert_difference( "Address.count", 1 ) do
|
|
110
|
+
address = create_address( :zip => '123456789' )
|
|
111
|
+
assert !address.errors.on(:zip)
|
|
112
|
+
assert address.zip =~ /\A\d{5}(-)?(\d{4})?\z/
|
|
113
|
+
assert_equal '12345-6789', address.zip
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
test "should order address chronologically reversed" do
|
|
118
|
+
a1 = Factory(:address, :created_at => Date.jd(2440000) ).id
|
|
119
|
+
a2 = Factory(:address, :created_at => Date.jd(2450000) ).id
|
|
120
|
+
a3 = Factory(:address, :created_at => Date.jd(2445000) ).id
|
|
121
|
+
address_ids = Address.all.collect(&:id)
|
|
122
|
+
assert_equal address_ids, [a2,a3,a1]
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
test "should return city state and zip with csz" do
|
|
126
|
+
address = Factory(:address,
|
|
127
|
+
:city => 'City',
|
|
128
|
+
:state => 'CA',
|
|
129
|
+
:zip => '12345')
|
|
130
|
+
assert_equal "City, CA 12345", address.csz
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Note that there are probably legitimate address line 1's
|
|
134
|
+
# that will match the p.*o.*box regex.
|
|
135
|
+
test "should require non-residence address type with pobox in line" do
|
|
136
|
+
["P.O. Box 123","PO Box 123","P O Box 123","Post Office Box 123"].each do |pobox|
|
|
137
|
+
assert_difference( "Address.count", 0 ) do
|
|
138
|
+
address = create_address(
|
|
139
|
+
:line_1 => pobox,
|
|
140
|
+
:address_type => AddressType['residence']
|
|
141
|
+
)
|
|
142
|
+
assert address.errors.on(:address_type_id)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
#protected
|
|
148
|
+
#
|
|
149
|
+
# def create_address(options={})
|
|
150
|
+
# address = Factory.build(:address,options)
|
|
151
|
+
# address.save
|
|
152
|
+
# address
|
|
153
|
+
# end
|
|
154
|
+
|
|
155
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class Ccls::AddressTypeTest < 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(:addresses)
|
|
11
|
+
|
|
12
|
+
test "explicit Factory address_type test" do
|
|
13
|
+
assert_difference('AddressType.count',1) {
|
|
14
|
+
address_type = Factory(:address_type)
|
|
15
|
+
assert_match /Key\d*/, address_type.key
|
|
16
|
+
assert_match /Desc\d*/, address_type.description
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "should return key as to_s" do
|
|
21
|
+
address_type = Factory(:address_type)
|
|
22
|
+
assert_equal address_type.key, "#{address_type}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class Ccls::AddressingTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
assert_should_create_default_object
|
|
6
|
+
assert_should_protect(:study_subject_id, :study_subject)
|
|
7
|
+
assert_should_not_require_attributes(
|
|
8
|
+
:address_id,
|
|
9
|
+
:current_address,
|
|
10
|
+
:address_at_diagnosis,
|
|
11
|
+
:is_valid,
|
|
12
|
+
:why_invalid,
|
|
13
|
+
:is_verified,
|
|
14
|
+
:how_verified,
|
|
15
|
+
:valid_from,
|
|
16
|
+
:valid_to,
|
|
17
|
+
:verified_on,
|
|
18
|
+
:verified_by_uid )
|
|
19
|
+
# :data_source_id )
|
|
20
|
+
assert_should_initially_belong_to(
|
|
21
|
+
:study_subject,
|
|
22
|
+
:address )
|
|
23
|
+
assert_should_require_attribute_length(
|
|
24
|
+
:why_invalid,
|
|
25
|
+
:how_verified,
|
|
26
|
+
:maximum => 250 )
|
|
27
|
+
assert_requires_complete_date(
|
|
28
|
+
:valid_from,
|
|
29
|
+
:valid_to )
|
|
30
|
+
|
|
31
|
+
test "explicit Factory addressing test" do
|
|
32
|
+
assert_difference('StudySubject.count',1) {
|
|
33
|
+
assert_difference('Address.count',1) {
|
|
34
|
+
assert_difference('Addressing.count',1) {
|
|
35
|
+
addressing = Factory(:addressing)
|
|
36
|
+
assert_not_nil addressing.address
|
|
37
|
+
assert_not_nil addressing.study_subject
|
|
38
|
+
assert_equal 1, addressing.is_valid
|
|
39
|
+
# assert_equal 2, addressing.is_verified
|
|
40
|
+
assert !addressing.is_verified # noticed that this is NOT int for YNDK, but boolean
|
|
41
|
+
} } }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
test "explicity Factory mailing_addressing test" do
|
|
45
|
+
assert_difference('StudySubject.count',1) {
|
|
46
|
+
assert_difference('Address.count',1) {
|
|
47
|
+
assert_difference('Addressing.count',1) {
|
|
48
|
+
addressing = Factory(:mailing_addressing)
|
|
49
|
+
assert_equal addressing.address.address_type,
|
|
50
|
+
AddressType['mailing']
|
|
51
|
+
assert_equal addressing.current_address, YNDK[:no]
|
|
52
|
+
} } }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
test "explicity Factory current_mailing_addressing test" do
|
|
56
|
+
assert_difference('StudySubject.count',1) {
|
|
57
|
+
assert_difference('Address.count',1) {
|
|
58
|
+
assert_difference('Addressing.count',1) {
|
|
59
|
+
addressing = Factory(:current_mailing_addressing)
|
|
60
|
+
assert_equal addressing.address.address_type,
|
|
61
|
+
AddressType['mailing']
|
|
62
|
+
assert_equal addressing.current_address, YNDK[:yes]
|
|
63
|
+
} } }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
test "explicity Factory residence_addressing test" do
|
|
67
|
+
assert_difference('StudySubject.count',1) {
|
|
68
|
+
assert_difference('Address.count',1) {
|
|
69
|
+
assert_difference('Addressing.count',1) {
|
|
70
|
+
addressing = Factory(:residence_addressing)
|
|
71
|
+
assert_equal addressing.address.address_type,
|
|
72
|
+
AddressType['residence']
|
|
73
|
+
assert_equal addressing.current_address, YNDK[:no]
|
|
74
|
+
} } }
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
test "explicity Factory current_residence_addressing test" do
|
|
78
|
+
assert_difference('StudySubject.count',1) {
|
|
79
|
+
assert_difference('Address.count',1) {
|
|
80
|
+
assert_difference('Addressing.count',1) {
|
|
81
|
+
addressing = Factory(:current_residence_addressing)
|
|
82
|
+
assert_equal addressing.address.address_type,
|
|
83
|
+
AddressType['residence']
|
|
84
|
+
assert_equal addressing.current_address, YNDK[:yes]
|
|
85
|
+
} } }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
test "current_address should default to 1" do
|
|
89
|
+
addressing = Addressing.new
|
|
90
|
+
assert_equal 1, addressing.current_address
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#
|
|
94
|
+
# addressing uses accepts_attributes_for :address
|
|
95
|
+
# so the addressing can't require address_id on create
|
|
96
|
+
# or this test fails.
|
|
97
|
+
#
|
|
98
|
+
# test "should require address on update" do
|
|
99
|
+
# assert_difference("Addressing.count", 1 ) do
|
|
100
|
+
# addressing = create_addressing(:address_id => nil)
|
|
101
|
+
# addressing.reload.update_attributes(
|
|
102
|
+
# :created_at => Date.yesterday )
|
|
103
|
+
# assert addressing.errors.on(:address)
|
|
104
|
+
# end
|
|
105
|
+
# end
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
test "should require data_source_other if data_source is other" do
|
|
109
|
+
assert_difference( "Addressing.count", 0 ) {
|
|
110
|
+
# assert_difference( "Address.count", 0 ) {
|
|
111
|
+
# The factory will create the associations regardless
|
|
112
|
+
# so an Address and StudySubject gets created regardless
|
|
113
|
+
addressing = create_addressing( :data_source => DataSource['Other'] )
|
|
114
|
+
assert addressing.errors.on_attr_and_type?(:data_source_other,:blank)
|
|
115
|
+
} # }
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
test "should NOT require data_source_other if data_source is not other" do
|
|
119
|
+
assert_difference( "Address.count", 1 ) {
|
|
120
|
+
assert_difference( "Addressing.count", 1 ) {
|
|
121
|
+
addressing = create_addressing( :data_source => DataSource['raf'])
|
|
122
|
+
assert !addressing.errors.on_attr_and_type?(:data_source_other,:blank)
|
|
123
|
+
} }
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
test "should require a valid address with address_attributes" do
|
|
127
|
+
assert_difference("Address.count", 0 ) {
|
|
128
|
+
assert_difference("Addressing.count", 0 ) {
|
|
129
|
+
addressing = create_addressing(:address_id => nil,
|
|
130
|
+
:address_attributes => {} )
|
|
131
|
+
} }
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
[:yes,:nil].each do |yndk|
|
|
135
|
+
test "should NOT require why_invalid if is_valid is #{yndk}" do
|
|
136
|
+
assert_difference("Addressing.count", 1 ) do
|
|
137
|
+
addressing = create_addressing(:is_valid => YNDK[yndk])
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
[:no,:dk].each do |yndk|
|
|
142
|
+
test "should require why_invalid if is_valid is #{yndk}" do
|
|
143
|
+
assert_difference("Addressing.count", 0 ) do
|
|
144
|
+
addressing = create_addressing(:is_valid => YNDK[yndk])
|
|
145
|
+
assert addressing.errors.on(:why_invalid)
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
test "should NOT require how_verified if is_verified is false" do
|
|
151
|
+
assert_difference("Addressing.count", 1 ) do
|
|
152
|
+
addressing = create_addressing(:is_verified => false)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
test "should require how_verified if is_verified is true" do
|
|
156
|
+
assert_difference("Addressing.count", 0 ) do
|
|
157
|
+
addressing = create_addressing(:is_verified => true)
|
|
158
|
+
assert addressing.errors.on(:how_verified)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
test "should NOT set verified_on if is_verified NOT changed to true" do
|
|
164
|
+
addressing = create_addressing(:is_verified => false)
|
|
165
|
+
assert_nil addressing.verified_on
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
test "should set verified_on if is_verified changed to true" do
|
|
170
|
+
addressing = create_addressing(:is_verified => true,
|
|
171
|
+
:how_verified => "not a clue")
|
|
172
|
+
assert_not_nil addressing.verified_on
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
test "should set verified_on to NIL if is_verified changed to false" do
|
|
176
|
+
addressing = create_addressing(:is_verified => true,
|
|
177
|
+
:how_verified => "not a clue")
|
|
178
|
+
assert_not_nil addressing.verified_on
|
|
179
|
+
addressing.update_attributes(:is_verified => false)
|
|
180
|
+
assert_nil addressing.verified_on
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
test "should NOT set verified_by_uid if is_verified NOT changed to true" do
|
|
184
|
+
addressing = create_addressing(:is_verified => false)
|
|
185
|
+
assert_nil addressing.verified_by_uid
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
test "should set verified_by_uid to 0 if is_verified changed to true" do
|
|
189
|
+
addressing = create_addressing(:is_verified => true,
|
|
190
|
+
:how_verified => "not a clue")
|
|
191
|
+
assert_not_nil addressing.verified_by_uid
|
|
192
|
+
assert_equal addressing.verified_by_uid, ''
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
test "should set verified_by_uid to current_user.id if is_verified " <<
|
|
196
|
+
"changed to true if current_user passed" do
|
|
197
|
+
cu = admin_user
|
|
198
|
+
addressing = create_addressing(:is_verified => true,
|
|
199
|
+
:current_user => cu,
|
|
200
|
+
:how_verified => "not a clue")
|
|
201
|
+
assert_not_nil addressing.verified_by_uid
|
|
202
|
+
assert_equal addressing.verified_by_uid, cu.uid
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
test "should set verified_by_uid to NIL if is_verified changed to false" do
|
|
206
|
+
addressing = create_addressing(:is_verified => true,
|
|
207
|
+
:how_verified => "not a clue")
|
|
208
|
+
assert_not_nil addressing.verified_by_uid
|
|
209
|
+
addressing.update_attributes(:is_verified => false)
|
|
210
|
+
assert_nil addressing.verified_by_uid
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
test "should only return current addressings" do
|
|
215
|
+
create_addressing(:current_address => YNDK[:yes])
|
|
216
|
+
create_addressing(:current_address => YNDK[:no])
|
|
217
|
+
create_addressing(:current_address => YNDK[:dk])
|
|
218
|
+
addressing = Addressing.current
|
|
219
|
+
assert_equal 2, addressing.length
|
|
220
|
+
addressing.each do |addressing|
|
|
221
|
+
assert [1,999].include?(addressing.current_address)
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
test "should only return historic addressings" do
|
|
226
|
+
create_addressing(:current_address => YNDK[:yes])
|
|
227
|
+
create_addressing(:current_address => YNDK[:no])
|
|
228
|
+
create_addressing(:current_address => YNDK[:dk])
|
|
229
|
+
addressing = Addressing.historic
|
|
230
|
+
assert_equal 1, addressing.length
|
|
231
|
+
addressing.each do |addressing|
|
|
232
|
+
assert ![1,999].include?(addressing.current_address)
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
test "should make study_subject ineligible "<<
|
|
237
|
+
"on create if state NOT 'CA' and address is ONLY residence" do
|
|
238
|
+
study_subject = create_eligible_hx_study_subject
|
|
239
|
+
assert_difference('OperationalEvent.count',1) {
|
|
240
|
+
assert_difference('Addressing.count',1) {
|
|
241
|
+
assert_difference('Address.count',1) {
|
|
242
|
+
create_az_addressing(study_subject)
|
|
243
|
+
} } }
|
|
244
|
+
assert_study_subject_is_not_eligible(study_subject)
|
|
245
|
+
hxe = study_subject.enrollments.find_by_project_id(Project['HomeExposures'].id)
|
|
246
|
+
assert_equal hxe.ineligible_reason,
|
|
247
|
+
IneligibleReason['newnonCA']
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
test "should make study_subject ineligible "<<
|
|
251
|
+
"on create if state NOT 'CA' and address is ANOTHER residence" do
|
|
252
|
+
study_subject = create_eligible_hx_study_subject
|
|
253
|
+
assert_difference('OperationalEvent.count',1) {
|
|
254
|
+
assert_difference('Address.count',2) {
|
|
255
|
+
assert_difference("Addressing.count", 2 ) {
|
|
256
|
+
create_ca_addressing(study_subject)
|
|
257
|
+
create_az_addressing(study_subject)
|
|
258
|
+
} } }
|
|
259
|
+
assert_study_subject_is_not_eligible(study_subject)
|
|
260
|
+
hxe = study_subject.enrollments.find_by_project_id(Project['HomeExposures'].id)
|
|
261
|
+
assert_equal hxe.ineligible_reason,
|
|
262
|
+
IneligibleReason['moved']
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
test "should NOT make study_subject ineligible "<<
|
|
266
|
+
"on create if OET is missing" do
|
|
267
|
+
OperationalEventType['ineligible'].destroy
|
|
268
|
+
study_subject = create_eligible_hx_study_subject
|
|
269
|
+
assert_difference('OperationalEvent.count',0) {
|
|
270
|
+
assert_difference('Address.count',1) {
|
|
271
|
+
assert_difference("Addressing.count", 1 ) {
|
|
272
|
+
create_ca_addressing(study_subject)
|
|
273
|
+
assert_raise(ActiveRecord::RecordNotSaved){
|
|
274
|
+
create_az_addressing(study_subject)
|
|
275
|
+
} } } }
|
|
276
|
+
assert_study_subject_is_eligible(study_subject)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
test "should NOT make study_subject ineligible "<<
|
|
280
|
+
"on create if state NOT 'CA' and address is NOT residence" do
|
|
281
|
+
study_subject = create_eligible_hx_study_subject
|
|
282
|
+
assert_difference('OperationalEvent.count',0) {
|
|
283
|
+
assert_difference('Address.count',1) {
|
|
284
|
+
assert_difference("Addressing.count", 1 ) {
|
|
285
|
+
create_az_addressing(study_subject,
|
|
286
|
+
:address => { :address_type => AddressType['mailing'] })
|
|
287
|
+
} } }
|
|
288
|
+
assert_study_subject_is_eligible(study_subject)
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
test "should NOT make study_subject ineligible "<<
|
|
292
|
+
"on create if state 'CA' and address is residence" do
|
|
293
|
+
study_subject = create_eligible_hx_study_subject
|
|
294
|
+
assert_difference('OperationalEvent.count',0) {
|
|
295
|
+
assert_difference('Address.count',1) {
|
|
296
|
+
assert_difference("Addressing.count", 1 ) {
|
|
297
|
+
create_ca_addressing(study_subject)
|
|
298
|
+
} } }
|
|
299
|
+
assert_study_subject_is_eligible(study_subject)
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
%w( address_type address_type_id
|
|
303
|
+
line_1 line_2 unit city state zip csz county ).each do |method_name|
|
|
304
|
+
test "should respond to #{method_name}" do
|
|
305
|
+
addressing = create_addressing
|
|
306
|
+
assert addressing.respond_to?(method_name)
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
# '1' and '0' are the default values for a checkbox.
|
|
312
|
+
# I probably should add a condition to this event that
|
|
313
|
+
# the address_type be 'Residence', but I've left that to the view.
|
|
314
|
+
# addressing = Factory(:current_residence_addressing)
|
|
315
|
+
|
|
316
|
+
test "should NOT add 'subject_moved' event to subject if subject_moved is '1'" <<
|
|
317
|
+
" if not residence address" do
|
|
318
|
+
addressing = Factory(:current_mailing_addressing)
|
|
319
|
+
assert_difference('OperationalEvent.count',0) {
|
|
320
|
+
addressing.update_attributes(
|
|
321
|
+
:current_address => '2',
|
|
322
|
+
:subject_moved => '1')
|
|
323
|
+
}
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
test "should NOT add 'subject_moved' event to subject if subject_moved is '1'" <<
|
|
327
|
+
" if was not current address" do
|
|
328
|
+
addressing = Factory(:residence_addressing)
|
|
329
|
+
assert_difference('OperationalEvent.count',0) {
|
|
330
|
+
addressing.update_attributes(
|
|
331
|
+
:current_address => '2',
|
|
332
|
+
:subject_moved => '1')
|
|
333
|
+
}
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
test "should add 'subject_moved' event to subject if subject_moved is '1'" do
|
|
337
|
+
addressing = Factory(:current_residence_addressing)
|
|
338
|
+
assert_difference('OperationalEvent.count',1) {
|
|
339
|
+
addressing.update_attributes(
|
|
340
|
+
:current_address => '2',
|
|
341
|
+
:subject_moved => '1')
|
|
342
|
+
}
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
test "should not add 'subject_moved' event to subject if subject_moved is '0'" do
|
|
346
|
+
addressing = Factory(:current_residence_addressing)
|
|
347
|
+
assert_difference('OperationalEvent.count',0) {
|
|
348
|
+
addressing.update_attributes(
|
|
349
|
+
:current_address => '2',
|
|
350
|
+
:subject_moved => '0')
|
|
351
|
+
}
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
test "should add 'subject_moved' event to subject if subject_moved is 'true'" do
|
|
355
|
+
addressing = Factory(:current_residence_addressing)
|
|
356
|
+
assert_difference('OperationalEvent.count',1) {
|
|
357
|
+
addressing.update_attributes(
|
|
358
|
+
:current_address => '2',
|
|
359
|
+
:subject_moved => 'true')
|
|
360
|
+
}
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
test "should not add 'subject_moved' event to subject if subject_moved is 'false'" do
|
|
364
|
+
addressing = Factory(:current_residence_addressing)
|
|
365
|
+
assert_difference('OperationalEvent.count',0) {
|
|
366
|
+
addressing.update_attributes(
|
|
367
|
+
:current_address => '2',
|
|
368
|
+
:subject_moved => 'false')
|
|
369
|
+
}
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
test "should not add 'subject_moved' event to subject if subject_moved is nil" do
|
|
373
|
+
addressing = Factory(:current_residence_addressing)
|
|
374
|
+
assert_difference('OperationalEvent.count',0) {
|
|
375
|
+
addressing.update_attributes(
|
|
376
|
+
:current_address => '2',
|
|
377
|
+
:subject_moved => nil)
|
|
378
|
+
}
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
# current_address has a database default of 1
|
|
382
|
+
[ :current_address ].each do |field|
|
|
383
|
+
|
|
384
|
+
# Making assumption that 12345 will NEVER be a valid value.
|
|
385
|
+
test "should NOT allow 12345 for #{field}" do
|
|
386
|
+
addressing = Addressing.new(field => 12345)
|
|
387
|
+
addressing.valid?
|
|
388
|
+
assert addressing.errors.on_attr_and_type?(field,:inclusion)
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
# test "should allow nil for #{field}" do
|
|
392
|
+
# addressing = Addressing.new(field => nil)
|
|
393
|
+
# assert_nil addressing.send(field)
|
|
394
|
+
# addressing.valid?
|
|
395
|
+
# assert !addressing.errors.on(field)
|
|
396
|
+
# end
|
|
397
|
+
|
|
398
|
+
test "should allow all valid YNDK values for #{field}" do
|
|
399
|
+
addressing = Addressing.new
|
|
400
|
+
YNDK.valid_values.each do |value|
|
|
401
|
+
addressing.send("#{field}=", value)
|
|
402
|
+
addressing.valid?
|
|
403
|
+
assert !addressing.errors.on(field)
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
[ :is_valid, :address_at_diagnosis ].each do |field|
|
|
410
|
+
|
|
411
|
+
# Making assumption that 12345 will NEVER be a valid value.
|
|
412
|
+
test "should NOT allow 12345 for #{field}" do
|
|
413
|
+
addressing = Addressing.new(field => 12345)
|
|
414
|
+
addressing.valid?
|
|
415
|
+
assert addressing.errors.on_attr_and_type?(field,:inclusion)
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
test "should allow nil for #{field}" do
|
|
419
|
+
addressing = Addressing.new(field => nil)
|
|
420
|
+
assert_nil addressing.send(field)
|
|
421
|
+
addressing.valid?
|
|
422
|
+
assert !addressing.errors.on(field)
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
test "should allow all valid YNDK values for #{field}" do
|
|
426
|
+
addressing = Addressing.new
|
|
427
|
+
YNDK.valid_values.each do |value|
|
|
428
|
+
addressing.send("#{field}=", value)
|
|
429
|
+
addressing.valid?
|
|
430
|
+
assert !addressing.errors.on(field)
|
|
431
|
+
end
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
protected
|
|
437
|
+
|
|
438
|
+
# def create_addressing(options={})
|
|
439
|
+
# addressing = Factory.build(:addressing,options)
|
|
440
|
+
# addressing.save
|
|
441
|
+
# addressing
|
|
442
|
+
# end
|
|
443
|
+
|
|
444
|
+
def create_addressing_with_address(study_subject,options={})
|
|
445
|
+
create_addressing({
|
|
446
|
+
:study_subject => study_subject,
|
|
447
|
+
# doesn't work in rcov for some reason
|
|
448
|
+
# :address => nil, # block address_attributes
|
|
449
|
+
:address_id => nil, # block address_attributes
|
|
450
|
+
:address_attributes => Factory.attributes_for(:address,{
|
|
451
|
+
:address_type => AddressType['residence']
|
|
452
|
+
}.merge(options[:address]||{}))
|
|
453
|
+
}.merge(options[:addressing]||{}))
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
def create_ca_addressing(study_subject,options={})
|
|
457
|
+
create_addressing_with_address(study_subject,{
|
|
458
|
+
:address => {:state => 'CA'}}.merge(options))
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
def create_az_addressing(study_subject,options={})
|
|
462
|
+
create_addressing_with_address(study_subject,{
|
|
463
|
+
:address => {:state => 'AZ'}}.merge(options))
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
end
|