Beispiel #1
0
    def test_slugify(self, label, expected):
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == '2234'
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])

        assert parser.slugify(label) == expected
Beispiel #2
0
    def test_deep_get(self, rec, attr, default, expected):
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records() if str(r[0][0]['ests']) == rec
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])

        assert np.isclose(
            parser.deep_get(parser.oil_obj, attr, default=default), expected)
Beispiel #3
0
    def test_ccme(self, oil_id, index, expected):
        """
        CCME object is a struct.
        """
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == oil_id
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])
        mapper = EnvCanadaCsvRecordMapper(parser)

        ccme = mapper.deep_get(mapper.record, f'sub_samples.{index}.CCME')

        assert type(ccme) == dict

        for attr, fraction in zip(('F1', 'F2', 'F3', 'F4'),
                                  expected['fractions']):
            assert attr in ccme

            for measurement_attr in ('value', 'unit', 'unit_type'):
                assert measurement_attr in ccme[attr]

            assert ccme[attr]['value'] == fraction
Beispiel #4
0
    def test_compound_list(self, oil_id, index, attr, expected):
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == oil_id
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])
        mapper = EnvCanadaCsvRecordMapper(parser)

        compounds = mapper.deep_get(mapper.record,
                                    f'sub_samples.{index}.{attr}')

        # We won't be checking every single compound since there are typically
        # over one hundred to check.  We will verify general properties of our
        # compound list though
        assert type(compounds) == list
        assert len(compounds) == expected['list_size']

        for c in compounds:
            for attr in expected['compound_attrs']:
                assert attr in c

            for attr in ('unit', 'unit_type'):
                assert attr in c['measurement']

            assert ('value' in c['measurement']
                    or ('min_value' in c['measurement']
                        and 'max_value' in c['measurement']))

        if expected['total_groups'] is not None:
            total_groups = set([sub for c in compounds for sub in c['groups']])
            assert total_groups == expected['total_groups']
Beispiel #5
0
    def test_save_to_json(self):
        """
        Save an example .json file.  This is not so much a test, but a job
        to provide sample data that people can look at.
        """
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == '2234'
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])
        mapper = EnvCanadaCsvRecordMapper(parser)
        py_json = mapper.py_json()

        py_json['status'] = []

        filename = 'EC-Example-Record.json'
        file_path = os.path.sep.join(
            adios_db.__file__.split(os.path.sep)[:-3] + ['examples', filename])

        print(f'saving to: {file_path}')
        with open(file_path, 'w', encoding="utf-8") as fd:
            json.dump(py_json, fd, indent=4, sort_keys=True)
Beispiel #6
0
    def test_ests_fractions(self, oil_id, index, expected):
        """
        ESTS_hydrocarbon_fractions object is a struct consisting of
        attributes that are compound lists.
        """
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == oil_id
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])
        mapper = EnvCanadaCsvRecordMapper(parser)

        ests_fractions = mapper.deep_get(
            mapper.record, f'sub_samples.{index}'
            '.ESTS_hydrocarbon_fractions')

        assert type(ests_fractions) == dict

        assert expected['list_sizes'] == [
            len(ests_fractions[attr])
            for attr in ('saturates', 'aromatics', 'GC_TPH')
        ]
Beispiel #7
0
    def test_attribute(self, oil_id, index, attr, expected):
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == oil_id
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])
        mapper = EnvCanadaCsvRecordMapper(parser)

        res = mapper.deep_get(mapper.record, f'sub_samples.{index}.{attr}')

        assert res == expected
Beispiel #8
0
    def test_init_valid_data_only(self, oil_id, attr, expected):
        """
        We are being fairly light on the parameter checking in our
        constructor.  So if None values are passed in for conditions and
        file_props, we can still construct the parser, but accessing
        certain sample properties could raise an exception.
        """
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == oil_id
        ]
        assert len(data) == 1

        # should construct fine
        parser = EnvCanadaCsvRecordParser(*data[0])

        assert getattr(parser, attr) == expected
Beispiel #9
0
    def test_physical_properties(self, oil_id, index, attrs):
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == oil_id
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])
        mapper = EnvCanadaCsvRecordMapper(parser)

        phys = mapper.deep_get(mapper.record,
                               f'sub_samples.{index}.physical_properties')

        assert type(phys) == dict

        # env canada has no kinematic viscosities
        for attr in attrs:
            assert attr in phys
Beispiel #10
0
    def test_environmental_behavior(self, oil_id, index, attrs):
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == oil_id
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])
        mapper = EnvCanadaCsvRecordMapper(parser)

        env = mapper.deep_get(mapper.record,
                              f'sub_samples.{index}.environmental_behavior')

        pprint(env)

        assert type(env) == dict

        # env canada has no kinematic viscosities
        for attr in attrs:
            assert attr in env
Beispiel #11
0
    def test_init_valid(self, oil_id, expected):
        """
        We are being fairly light on the parameter checking in our
        constructor.  So if no file props are passed in, we can still
        construct the parser, but accessing reference_date could raise
        a TypeError.
        This is because the reference_date will sometimes need the
        file props if the reference field contains no date information.
        """
        self.reader.rewind()
        data = [
            r for r in self.reader.get_records()
            if str(r[0][0]['ests']) == oil_id
        ]
        assert len(data) == 1

        parser = EnvCanadaCsvRecordParser(*data[0])
        mapper = EnvCanadaCsvRecordMapper(parser)
        py_json = mapper.py_json()

        for k, v in expected.items():
            if v is not None:
                assert self.deep_get(py_json, k) == v
Beispiel #12
0
 def test_init(self):
     with pytest.raises(TypeError):
         _parser = EnvCanadaCsvRecordParser()
Beispiel #13
0
 def test_init_invalid(self):
     with pytest.raises(TypeError):
         _parser = EnvCanadaCsvRecordParser(None, None)