def test_dive_setter_metadata(): dive = divelog.Dive() dive.metadata = {'a': 1} assert 'a' in dive.metadata assert dive.metadata['a'] == 1 with pytest.raises(ValueError): dive.metadata = ()
def test_dive_setter_errors(): dive = divelog.Dive() with pytest.raises(ValueError): dive.sequence_number = 'A' assert dive.sequence_number == 0 with pytest.raises(ValueError): dive.air_temperature = 'cold' assert dive.air_temperature == 0.0 with pytest.raises(ValueError): dive.min_water_temperature = 'cold' assert dive.min_water_temperature == 0.0 with pytest.raises(ValueError): dive.max_depth = 'deep' assert dive.max_depth == 0.0 with pytest.raises(ValueError): dive.O2_mode = 'unknown' assert dive.O2_mode == '' time = dive.leave_surface_time with pytest.raises(ValueError): dive.leave_surface_time = 20160420 assert dive.leave_surface_time == time with pytest.raises(ValueError): dive.leave_surface_time = '20160499' assert dive.leave_surface_time == time with pytest.raises(ValueError): dive.leave_surface_time = {'msg': 'this is not a date'} assert dive.leave_surface_time == time
def test_dive_setter_interval(): dive = divelog.Dive() for ri in ['C', 'V', 'Q1S', 'Q1M', 'Q1W', 'Q1L', 'D1f', 'D1m', 'D1b']: dive.recording_interval = ri assert dive.recording_interval == ri dive.recording_interval = 'C' for ri in ['Z', 'QS', 'QZM', 'Q1', 'Q1Z', 'Df', 'DZm', 'D1Z']: print('***' + ri) with pytest.raises(ValueError): dive.recording_interval = ri assert dive.recording_interval == 'C'
def test_dive_slots(): slots = ['metadata', 'sequence_number', 'recording_interval', 'leave_surface_time', 'reach_surface_time', 'air_temperature', 'min_water_temperature', 'max_depth', 'pressure_drop', 'altitude', 'number_of_tanks', 'tank_volume', 'tank_start_pressure', 'O2_mode', 'rebreather_diluent_gas', 'record'] dive = divelog.Dive() for slot in slots: assert slot in dir(dive) for slot in dir(dive): if not slot[0:2] == '__': assert slot in slots
def create_dive(add_record=True, sequence_number=0, records=10): dive = divelog.Dive() dive.sequence_number = sequence_number dive.recording_interval = 'Q1M' dive.leave_surface_time = datetime.datetime(2016, 3, 5+sequence_number, 11, 0, tzinfo=datetime.timezone.utc) dive.reach_surface_time = datetime.datetime(2016, 3, 5+sequence_number, 11, records, tzinfo=datetime.timezone.utc) dive.air_temperature = 29.0 dive.min_water_temperature = 26.0 dive.max_depth = (records / 2) * 10 if add_record: dive.record = create_record(records) return dive
def parse(file): """ Parse this file object and return either a new top-level Log object, or None. """ def copy_obj(src, tgt, ignore): for key in src: if not key == ignore: setattr(tgt, key, src[key]) log = divelog.Log() jobj = json.load(file) copy_obj(jobj, log, 'dives') for jdive in jobj['dives']: dive = divelog.Dive() log.dives.append(dive) copy_obj(jdive, dive, 'record') for jdet in jdive['record']: detail = divelog.DiveDetail() dive.record.append(detail) copy_obj(jdet, detail, None) return log
def test_log_setter_dives(): log = divelog.Log() log.dives = [divelog.Dive()] assert len(log.dives) == 1 with pytest.raises(ValueError): log.dives = {}
def test_dive_setter_unknown(): dive = divelog.Dive() assert ('location' not in dir(dive)) with pytest.raises(AttributeError): dive.location = 'red' assert ('location' not in dir(dive))
def test_dive_setter_dives(): dive = divelog.Dive() dive.record = [divelog.DiveDetail()] assert len(dive.record) == 1 with pytest.raises(ValueError): dive.record = {}