def test_copy_data_with_blank_reference_unit(self):
        self.person_form_event_tree = """<person_form_event><person><study_id>123</study_id><all_form_events><form>
        <name>cbc</name>
        <event>
            <name>1_arm_1</name>
            <field><name>hemo_lborres</name><value/></field>
            <field><name>hemo_lborresu</name><value/></field>
            <field><name>cbc_complete</name><value/></field>
            <field><name>cbc_nximport</name><value/></field></event>
        </form>
        </all_form_events></person></person_form_event>
        """
        self.data_person_form_event_tree = etree.ElementTree(etree.fromstring(self.person_form_event_tree))

        self.one_subject = """<?xml version='1.0' encoding='US-ASCII'?>
            <study>
            <subject>
            <NAME>TestSubject</NAME>
            <RESULT>987</RESULT>
            <REFERENCE_UNIT/>
            <STUDY_ID>123</STUDY_ID>
            <timestamp>1906-12-25</timestamp>
            <redcapFormName>cbc</redcapFormName>
            <eventName>1_arm_1</eventName>
            <formDateField>cbc_lbdtc</formDateField>
            <formCompletedFieldName>cbc_complete</formCompletedFieldName>
            <formImportedFieldName>cbc_nximport</formImportedFieldName>
            <redcapFieldNameValue>hemo_lborres</redcapFieldNameValue>
            <redcapFieldNameUnits>hemo_lborresu</redcapFieldNameUnits>
            <redcapFieldNameStatus>hemo_lbstat</redcapFieldNameStatus></subject>
        </study>
            """
        self.data_one_subject = etree.ElementTree(etree.fromstring(self.one_subject))
        self.result = etree.tostring(
            redi.copy_data_to_person_form_event_tree(self.data_one_subject, self.data_person_form_event_tree,
                                                     self.data_form_event_tree))

        self.output = """<person_form_event><person><study_id>123</study_id><all_form_events><form>
        <name>cbc</name>
        <event>
            <name>1_arm_1</name>
            <field><name>hemo_lborres</name><value>987</value></field>
            <field><name>hemo_lborresu</name><value/></field>
            <field><name>cbc_complete</name><value>2</value></field>
            <field><name>cbc_nximport</name><value>Y</value></field></event>
        </form>
        </all_form_events></person></person_form_event>"""

        self.expect = etree.tostring(etree.fromstring(self.output))
        self.assertEqual(self.expect, self.result)
    def test_form_imported_is_really_optional(self):
        """This test ensures formImportedFieldName is optional"""
        person_form_event_tree = """
            <person_form_event>
                <person>
                    <study_id>007</study_id>
                    <all_form_events>
                        <form>
                            <name>espionage</name>
                            <event>
                                <name>1_arm_1</name>
                                <field><name>interrogation</name><value /></field>
                                <field><name>interrogation_units</name><value /></field>
                                <field><name>espionage_complete</name><value/></field>
                            </event>
                        </form>
                    </all_form_events>
                </person>
            </person_form_event>
        """

        data_person_form_event_tree = etree.ElementTree(etree.fromstring(person_form_event_tree))

        study_data = """<?xml version="1.0" encoding="UTF-8"?>
            <study>
                <subject>
                    <NAME>Bond, James</NAME>
                    <RESULT>Passed</RESULT>
                    <REFERENCE_UNIT/>
                    <STUDY_ID>007</STUDY_ID>
                    <timestamp>1953-04-13</timestamp>
                    <redcapFormName>espionage</redcapFormName>
                    <eventName>1_arm_1</eventName>
                    <formDateField>date_taken</formDateField>
                    <formCompletedFieldName>espionage_complete</formCompletedFieldName>
                    <redcapFieldNameValue>interrogation</redcapFieldNameValue>
                    <redcapFieldNameUnits>interrogation_units</redcapFieldNameUnits>
                    <formImportedFieldName></formImportedFieldName>
                </subject>
            </study>"""

        data_one_subject = etree.ElementTree(etree.fromstring(study_data))

        form_event_tree = """<?xml version="1.0" encoding="UTF-8"?>
        <redcapProject>
            <name>Project</name>
            <form>
                <name>espionage</name>
                <formDateField>date_taken</formDateField>
                <formCompletedFieldName>espionage_complete</formCompletedFieldName>
                <formCompletedFieldValue>Completed</formCompletedFieldValue>
                <!-- THESE ARE SUPPOSED TO BE OPTIONAL:
                    <formImportedFieldValue>Y</formImportedFieldValue>
                    <formImportedFieldName>espionage_nximport</formImportedFieldName>
                -->
                <event>
                    <name>1_arm_1</name>
                </event>
            </form>
        </redcapProject>
        """
        data_form_event_tree = etree.ElementTree(etree.fromstring(form_event_tree))

        result = redi.copy_data_to_person_form_event_tree(data_one_subject,
                                                          data_person_form_event_tree,
                                                          data_form_event_tree)

        output = """
            <person_form_event>
                <person>
                    <study_id>007</study_id>
                    <all_form_events>
                        <form>
                            <name>espionage</name>
                            <event>
                                <name>1_arm_1</name>
                                <field><name>interrogation</name><value>Passed</value></field>
                                <field><name>interrogation_units</name><value /></field>
                                <field><name>espionage_complete</name><value>Completed</value></field>
                            </event>
                        </form>
                    </all_form_events>
                </person>
            </person_form_event>
        """

        expect = etree.tostring(etree.fromstring(output))
        self.assertEqual(expect, etree.tostring(result))
    def test_copy_data_to_person_form_event_tree_two_events(self):
        self.person_form_event_tree = """<person_form_event><person><study_id>456</study_id><all_form_events>
        <form>
            <name>inr</name>
            <event>
            <name>1_arm_1</name>
            <field><name>inr_lbdtc</name><value/></field>
            <field><name>inr_complete</name><value/></field>
            <field><name>inr_nximport</name><value/></field>
            </event>
            <event>
            <name>2_arm_1</name>
            <field><name>inr_lbdtc</name><value/></field>
            <field><name>inr_complete</name><value/></field>
            <field><name>inr_nximport</name><value/></field>
            </event>
           </form>
        </all_form_events></person></person_form_event>
        """
        self.data_person_form_event_tree = etree.ElementTree(etree.fromstring(self.person_form_event_tree))
        self.two_subjects = """<?xml version='1.0' encoding='US-ASCII'?>
            <study>
            <subject>
            <NAME>TestSubject_2</NAME>
            <RESULT>987</RESULT>
            <REFERENCE_UNIT>g/dL</REFERENCE_UNIT>
            <STUDY_ID>456</STUDY_ID>
        <timestamp>1906-12-26</timestamp><redcapFormName>inr</redcapFormName><eventName>1_arm_1</eventName><formDateField>inr_lbdtc</formDateField><formCompletedFieldName>inr_complete</formCompletedFieldName><formImportedFieldName>inr_nximport</formImportedFieldName><redcapFieldNameValue>hemo_lborres</redcapFieldNameValue><redcapFieldNameUnits>hemo_lborresu</redcapFieldNameUnits><redcapFieldNameStatus>hemo_lbstat</redcapFieldNameStatus></subject>
            <subject>
            <NAME>TestSubject_2</NAME>
            <RESULT>123</RESULT>
            <REFERENCE_UNIT>g/dL</REFERENCE_UNIT>
            <STUDY_ID>456</STUDY_ID>
        <timestamp>1906-12-25</timestamp><redcapFormName>inr</redcapFormName><eventName>2_arm_1</eventName><formDateField>inr_lbdtc</formDateField><formCompletedFieldName>inr_complete</formCompletedFieldName><formImportedFieldName>inr_nximport</formImportedFieldName><redcapFieldNameValue>hemo_lborres</redcapFieldNameValue><redcapFieldNameUnits>hemo_lborresu</redcapFieldNameUnits><redcapFieldNameStatus>hemo_lbstat</redcapFieldNameStatus></subject>

        </study>
            """
        self.data_two_subjects = etree.ElementTree(etree.fromstring(self.two_subjects))
        # print "Testing Test case"
        self.result = etree.tostring(
            redi.copy_data_to_person_form_event_tree(self.data_two_subjects, self.data_person_form_event_tree,
                                                     self.data_form_event_tree))
        self.output = """<person_form_event><person><study_id>456</study_id><all_form_events>
        <form>
            <name>inr</name>
            <event>
            <name>1_arm_1</name>
            <field><name>inr_lbdtc</name><value>1906-12-26</value></field>
            <field><name>inr_complete</name><value>2</value></field>
            <field><name>inr_nximport</name><value>Y</value></field>
            </event>
            <event>
            <name>2_arm_1</name>
            <field><name>inr_lbdtc</name><value>1906-12-25</value></field>
            <field><name>inr_complete</name><value>2</value></field>
            <field><name>inr_nximport</name><value>Y</value></field>
            </event>
           </form>
        </all_form_events></person></person_form_event>"""

        self.expect = etree.tostring(etree.fromstring(self.output))
        self.assertEqual(self.expect, self.result)