def test_storage_limits(self, limit): workflow = Workflow.create_and_init() wf_module = workflow.tabs.first().wf_modules.create(order=0, slug="step-1") with parquet_file({"A": [1], "B": ["x"]}) as parquet_path: self.run_with_async_db( save.create_result(workflow.id, wf_module, FetchResult(parquet_path), timezone.now())) limit.assert_called_with(wf_module)
def test_race_hard_deleted_wf_module(self): workflow = Workflow.create_and_init() wf_module = workflow.tabs.first().wf_modules.create(order=0, slug="step-1") WfModule.objects.filter(id=wf_module.id).delete() # Don't crash with parquet_file({"A": [1], "B": ["x"]}) as parquet_path: self.run_with_async_db( save.create_result(workflow.id, wf_module, FetchResult(parquet_path), timezone.now()))
def test_storage_limits(self, limit): workflow = Workflow.create_and_init() step = workflow.tabs.first().steps.create(order=0, slug="step-1") with parquet_file({"A": [1], "B": ["x"]}) as parquet_path: self.run_with_async_db( save.create_result( workflow.id, step, FetchResult(parquet_path), datetime.datetime.now(), )) limit.assert_called_with(step=step)
def test_race_soft_deleted_wf_module(self): workflow = Workflow.create_and_init() wf_module = workflow.tabs.first().wf_modules.create(order=0, slug="step-1", is_deleted=True) workflow_id = workflow.id workflow.delete() # Don't crash with parquet_file({"A": [1], "B": ["x"]}) as parquet_path: self.run_with_async_db( save.create_result(workflow_id, wf_module, FetchResult(parquet_path), timezone.now())) self.assertEqual(wf_module.stored_objects.count(), 0)
def test_race_hard_deleted_step(self): workflow = Workflow.create_and_init() step = workflow.tabs.first().steps.create(order=0, slug="step-1") Step.objects.filter(id=step.id).delete() # Don't crash with parquet_file({"A": [1], "B": ["x"]}) as parquet_path: self.run_with_async_db( save.create_result( workflow.id, step, FetchResult(parquet_path), datetime.datetime.now(), ))
def test_create_result(self, send_update): send_update.side_effect = async_noop workflow = Workflow.create_and_init() wf_module = workflow.tabs.first().wf_modules.create( order=0, slug="step-1", is_busy=True, fetch_errors=[RenderError(I18nMessage("foo", {}, "module"))], ) now = timezone.datetime(2019, 10, 22, 12, 22, tzinfo=timezone.utc) with parquet_file({"A": [1], "B": ["x"]}) as parquet_path: self.run_with_async_db( save.create_result( workflow.id, wf_module, FetchResult(parquet_path), now ) ) self.assertEqual(wf_module.stored_objects.count(), 1) self.assertEqual(wf_module.fetch_errors, []) self.assertEqual(wf_module.is_busy, False) self.assertEqual(wf_module.last_update_check, now) wf_module.refresh_from_db() self.assertEqual(wf_module.fetch_errors, []) self.assertEqual(wf_module.is_busy, False) self.assertEqual(wf_module.last_update_check, now) send_update.assert_called_with( workflow.id, clientside.Update( steps={ wf_module.id: clientside.StepUpdate( is_busy=False, last_fetched_at=now ) } ), ) workflow.refresh_from_db() self.assertIsInstance(workflow.last_delta, ChangeDataVersionCommand)
def test_create_result(self, send_delta): send_delta.side_effect = async_noop workflow = Workflow.create_and_init() wf_module = workflow.tabs.first().wf_modules.create( order=0, slug="step-1", is_busy=True, fetch_error="previous error") now = timezone.datetime(2019, 10, 22, 12, 22, tzinfo=timezone.utc) with parquet_file({"A": [1], "B": ["x"]}) as parquet_path: self.run_with_async_db( save.create_result(workflow.id, wf_module, FetchResult(parquet_path), now)) self.assertEqual(wf_module.stored_objects.count(), 1) self.assertEqual(wf_module.fetch_error, "") self.assertEqual(wf_module.is_busy, False) self.assertEqual(wf_module.last_update_check, now) wf_module.refresh_from_db() self.assertEqual(wf_module.fetch_error, "") self.assertEqual(wf_module.is_busy, False) self.assertEqual(wf_module.last_update_check, now) send_delta.assert_called_with( workflow.id, { "updateWfModules": { str(wf_module.id): { "is_busy": False, "fetch_error": "", "last_update_check": "2019-10-22T12:22:00Z", } } }, ) workflow.refresh_from_db() self.assertIsInstance(workflow.last_delta, ChangeDataVersionCommand)
def test_create_result(self, send_update): send_update.side_effect = async_noop workflow = Workflow.create_and_init() step = workflow.tabs.first().steps.create( order=0, slug="step-1", is_busy=True, fetch_errors=[RenderError(I18nMessage("foo", {}, "module"))], ) now = datetime.datetime(2019, 10, 22, 12, 22) with parquet_file({"A": [1], "B": ["x"]}) as parquet_path: self.run_with_async_db( save.create_result(workflow.id, step, FetchResult(parquet_path), now)) self.assertEqual(step.stored_objects.count(), 1) self.assertEqual(step.fetch_errors, []) self.assertEqual(step.is_busy, False) self.assertEqual(step.last_update_check, now) step.refresh_from_db() self.assertEqual(step.fetch_errors, []) self.assertEqual(step.is_busy, False) self.assertEqual(step.last_update_check, now) send_update.assert_called_with( workflow.id, clientside.Update(steps={ step.id: clientside.StepUpdate(is_busy=False, last_fetched_at=now) }), ) workflow.refresh_from_db() self.assertEqual(workflow.deltas.last().command_name, SetStepDataVersion.__name__)