def test_badshape_figure_saving(self, tmp_path): p = utilities.yaml_from_dict(tmp_path, 'input.yaml') _model = DeltaModel(input_file=p, defer_output=True) # add request to plot attribute w/ invalid shape _model._save_fig_list['inlet'] = ['inlet'] # try to finish init _model.init_output_file() with pytest.raises(AttributeError): _model.output_data()
def test_finalize_updated(self, tmp_path): p = utilities.yaml_from_dict(tmp_path, 'input.yaml') _delta = DeltaModel(input_file=p) # mock the top-level _delta.log_info = mock.MagicMock() _delta.output_data = mock.MagicMock() _delta.output_checkpoint = mock.MagicMock() # modify the save interval _t = 5 _delta._save_dt = _t * _delta._dt _delta._checkpoint_dt = _t * _delta._dt # run a mock update / save _delta._time = _t * _delta._dt _delta._save_iter += int(1) _delta._save_time_since_data = 0 _delta._save_time_since_checkpoint = 0 # run finalize _delta.finalize() # assert calls # should only hit top-levels assert _delta.log_info.call_count == 2 assert _delta.output_data.call_count == 0 assert _delta.output_checkpoint.call_count == 0 assert _delta._is_finalized is True
def test_update(self, tmp_path): # create a delta with default settings p = utilities.yaml_from_dict(tmp_path, 'input.yaml') _delta = DeltaModel(input_file=p) # mock top-level methods, verify call was made to each _delta.solve_water_and_sediment_timestep = mock.MagicMock() _delta.apply_subsidence = mock.MagicMock() _delta.finalize_timestep = mock.MagicMock() _delta.log_model_time = mock.MagicMock() _delta.output_data = mock.MagicMock() _delta.output_checkpoint = mock.MagicMock() # run the timestep: t=0 # * should call all methods _delta.update() # assert calls assert _delta.solve_water_and_sediment_timestep.call_count == 1 assert _delta.apply_subsidence.call_count == 1 assert _delta.finalize_timestep.call_count == 1 assert _delta.log_model_time.call_count == 1 assert _delta.output_data.call_count == 1 assert _delta.output_checkpoint.call_count == 1 # assert times / counters assert _delta.time_iter == int(1) assert _delta.time == _delta.dt # run another step # * should call all steps again _delta.update() # assert calls assert _delta.solve_water_and_sediment_timestep.call_count == 2 assert _delta.apply_subsidence.call_count == 2 assert _delta.finalize_timestep.call_count == 2 assert _delta.log_model_time.call_count == 2 assert _delta.output_data.call_count == 2 assert _delta.output_checkpoint.call_count == 2 # assert times / counters assert _delta.time_iter == int(2) assert _delta.time == 2 * _delta.dt
def test_finalize_not_updated(self, tmp_path): p = utilities.yaml_from_dict(tmp_path, 'input.yaml') _delta = DeltaModel(input_file=p) _delta.log_info = mock.MagicMock() _delta.output_data = mock.MagicMock() _delta.output_checkpoint = mock.MagicMock() # run finalize _delta.finalize() # assert calls # should hit all options since no saves assert _delta.log_info.call_count == 2 # these were originally included in `finalize`, but no longer. # the checks for no call are here to ensure we don't revert assert _delta.output_data.call_count == 0 assert _delta.output_checkpoint.call_count == 0 assert _delta._is_finalized is True