def test_from_fhir_partOf(self):
        # prepopulate database with parent organization
        parent = Organization(id=101, name='fake parent reference')
        with SessionScope(db):
            db.session.add(parent)
            db.session.commit()
        parent = db.session.merge(parent)
        parent_id = parent.id

        with (open(
                os.path.join(os.path.dirname(__file__),
                             'organization-example-f002-burgers-card.json'),
                'r')) as fhir_data:
            data = json.load(fhir_data)

        # remove the id from the file - doesn't play well with ours
        data.pop('id')
        org = Organization.from_fhir(data)

        assert org.addresses[0].line1 == data['address'][0]['line'][0]
        assert org.name == data['name']
        assert org.phone == "022-655 2320"
        assert org.partOf_id == parent_id

        # confirm we can store
        with SessionScope(db):
            db.session.add(org)
            db.session.commit()
        org = db.session.merge(org)
        assert org.id
        assert org.partOf_id == parent_id
    def test_organization_get_by_identifier(self):
        org_id_system = "http://test/system"
        org_id_value = "testval"
        self.login()
        org = Organization(name='test', id=999)
        ident = Identifier(id=99, system=org_id_system, value=org_id_value)
        org_ident = OrganizationIdentifier(organization_id=999,
                                           identifier_id=99)
        with SessionScope(db):
            db.session.add(org)
            db.session.add(ident)
            db.session.commit()
            db.session.add(org_ident)
            db.session.commit()

        # use api to obtain FHIR
        response = self.client.get(
            '/api/organization?system={system}&value={value}'.format(
                system=quote_plus(org_id_system), value=org_id_value))
        assert response.status_code == 200
        assert response.json['total'] == 1
        assert response.json['entry'][0]['id'] == 999

        # use alternative API to obtain organization
        response = self.client.get(
            '/api/organization/{value}?system={system}'.format(
                system=quote_plus(org_id_system), value=org_id_value))
        assert response.status_code == 200
        fetched = Organization.from_fhir(response.json)
        org = db.session.merge(org)
        assert org.id == fetched.id
        assert org.name == fetched.name
    def test_from_fhir(self):
        with open(
                os.path.join(os.path.dirname(__file__),
                             'organization-example-f001-burgers.json'),
                'r') as fhir_data:
            data = json.load(fhir_data)

        #prepopuate database with matching locale
        Coding.from_fhir({
            'code': 'en_AU',
            'display': 'Australian English',
            'system': "urn:ietf:bcp:47"
        })
        org = Organization.from_fhir(data)
        self.assertEquals(org.addresses[0].line1,
                          data['address'][0]['line'][0])
        self.assertEquals(org.addresses[1].line1,
                          data['address'][1]['line'][0])
        self.assertEquals(org.name, data['name'])
        self.assertEquals(org.phone, "022-655 2300")
        self.assertTrue(org.use_specific_codings)
        self.assertTrue(org.race_codings)
        self.assertFalse(org.ethnicity_codings)
        self.assertEquals(org.locales.count(), 1)
        self.assertEquals(org.default_locale, "en_AU")
    def test_from_fhir_partOf(self):
        # prepopulate database with parent organization
        parent = Organization(id=101, name='fake parent reference')
        with SessionScope(db):
            db.session.add(parent)
            db.session.commit()
        parent = db.session.merge(parent)
        parent_id = parent.id

        with (open(
            os.path.join(
                os.path.dirname(__file__),
                'organization-example-f002-burgers-card.json'),
            'r')
        ) as fhir_data:
            data = json.load(fhir_data)

        # remove the id from the file - doesn't play well with ours
        data.pop('id')
        org = Organization.from_fhir(data)

        assert org.addresses[0].line1 == data['address'][0]['line'][0]
        assert org.name == data['name']
        assert org.phone == "022-655 2320"
        assert org.partOf_id == parent_id

        # confirm we can store
        with SessionScope(db):
            db.session.add(org)
            db.session.commit()
        org = db.session.merge(org)
        assert org.id
        assert org.partOf_id == parent_id
    def test_organization_get_by_identifier(self):
        org_id_system = "http://test/system"
        org_id_value = "testval"
        self.login()
        org = Organization(name='test', id=999)
        ident = Identifier(id=99, system=org_id_system, value=org_id_value)
        org_ident = OrganizationIdentifier(
            organization_id=999, identifier_id=99)
        with SessionScope(db):
            db.session.add(org)
            db.session.add(ident)
            db.session.commit()
            db.session.add(org_ident)
            db.session.commit()

        # use api to obtain FHIR
        response = self.client.get(
            '/api/organization?system={system}&value={value}'.format(
                system=quote_plus(org_id_system), value=org_id_value))
        assert response.status_code == 200
        assert response.json['total'] == 1
        assert response.json['entry'][0]['id'] == 999

        # use alternative API to obtain organization
        response = self.client.get(
            '/api/organization/{value}?system={system}'.format(
                system=quote_plus(org_id_system), value=org_id_value))
        assert response.status_code == 200
        fetched = Organization.from_fhir(response.json)
        org = db.session.merge(org)
        assert org.id == fetched.id
        assert org.name == fetched.name
    def test_org_rp_reference(self):
        rp = ResearchProtocol(name="test_rp")
        with SessionScope(db):
            db.session.add(rp)
            db.session.commit()
        rp = db.session.merge(rp)

        org_data = {"name": "test_org",
                    "extension": [
                    {"url": TRUENTH_RP_EXTENSION,
                     "research_protocols": [{'name': "test_rp"}]}
                    ]}

        org = Organization.from_fhir(org_data)
        self.assertEqual(1, len(org.research_protocols))
        self.assertEqual(org.research_protocols[0].id, rp.id)
    def test_org_rp_reference(self):
        rp = ResearchProtocol(name="test_rp")
        with SessionScope(db):
            db.session.add(rp)
            db.session.commit()
        rp = db.session.merge(rp)

        org_data = {"name": "test_org",
                    "extension": [
                        {"url": TRUENTH_RP_EXTENSION,
                         "research_protocols": [{'name': "test_rp"}]}
                    ]}

        org = Organization.from_fhir(org_data)
        assert len(org.research_protocols) == 1
        assert org.research_protocols[0].id == rp.id
    def test_from_fhir(self):
        with (open(
                os.path.join(os.path.dirname(__file__),
                             'organization-example-f001-burgers.json'),
                'r')) as fhir_data:
            data = json.load(fhir_data)

        # prepopulate database with matching locale
        Coding.from_fhir({
            'code': 'en_AU',
            'display': 'Australian English',
            'system': IETF_LANGUAGE_TAG
        })
        org = Organization.from_fhir(data)
        assert org.addresses[0].line1 == data['address'][0]['line'][0]
        assert org.addresses[1].line1 == data['address'][1]['line'][0]
        assert org.name == data['name']
        assert org.phone == "022-655 2300"
        assert org.use_specific_codings
        assert org.race_codings
        assert not org.ethnicity_codings
        assert org.locales.count() == 1
        assert org.default_locale == "en_AU"
        assert org._timezone == "US/Pacific"
    def test_from_fhir(self):
        with (open(
            os.path.join(
                os.path.dirname(__file__),
                'organization-example-f001-burgers.json'),
            'r')
        ) as fhir_data:
            data = json.load(fhir_data)

        # prepopulate database with matching locale
        Coding.from_fhir(
            {'code': 'en_AU', 'display': 'Australian English',
             'system': IETF_LANGUAGE_TAG})
        org = Organization.from_fhir(data)
        assert org.addresses[0].line1 == data['address'][0]['line'][0]
        assert org.addresses[1].line1 == data['address'][1]['line'][0]
        assert org.name == data['name']
        assert org.phone == "022-655 2300"
        assert org.use_specific_codings
        assert org.race_codings
        assert not org.ethnicity_codings
        assert org.locales.count() == 1
        assert org.default_locale == "en_AU"
        assert org._timezone == "US/Pacific"