def test_sale_done(self): workflow = self.create_full_automatic() self.sale = self.create_sale_order(workflow) self.sale.action_confirm() # don't care about transfers in this test self.sale.picking_ids.state = "done" self.sale._create_invoices() # disable invoice validation for we don't care # in this test self.sale.workflow_process_id.validate_invoice = False # activate the 'sale done' workflow self.sale.workflow_process_id.sale_done = True with mock_with_delay() as (delayable_cls, delayable): self.run_job() # run automatic workflow cron args = ( self.sale, [ ("state", "=", "sale"), ("invoice_status", "=", "invoiced"), ("workflow_process_id", "=", self.sale.workflow_process_id.id), ], ) self.assert_job_delayed(delayable_cls, delayable, "_do_sale_done", args)
def test_create_invoice(self): self.sale.action_confirm() # don't care about transfers in this test self.sale.picking_ids.state = "done" with mock_with_delay() as (delayable_cls, delayable): self.progress() # run automatic workflow cron self.assert_job_delayed(delayable_cls, delayable, "_do_create_invoice", (self.sale, ))
def test_validate_picking(self): self.sale.action_confirm() picking = self.sale.picking_ids # disable invoice creation in this test self.sale.workflow_process_id.create_invoice = False with mock_with_delay() as (delayable_cls, delayable): self.progress() # run automatic workflow cron self.assert_job_delayed(delayable_cls, delayable, "_do_validate_picking", (picking, ))
def test_move_done_service_no_job(self): """Service products do not enqueue job""" self.product.type = "service" move = self._create_move(self.product, self.in_type, qty=1) move._action_assign() move.move_line_ids.qty_done = 1 move.move_line_ids.location_dest_id = self.shelf1_loc.id with mock_with_delay() as (delayable_cls, delayable): move._action_done() # .with_delay() has not been called self.assertEqual(delayable_cls.call_count, 0)
def test_move_done_customer_no_job(self): """A move with other destination than internal does not enqueue job""" move = self._create_move(self.product, self.out_type, qty=1) self._update_qty_in_location(self.shelf1_loc, self.product, 1) move._action_assign() move.move_line_ids.qty_done = 1 move.move_line_ids.location_dest_id = self.customer_loc with mock_with_delay() as (delayable_cls, delayable): move._action_done() # .with_delay() has not been called self.assertEqual(delayable_cls.call_count, 0)
def test_validate_sale_order(self): workflow = self.create_full_automatic() self.sale = self.create_sale_order(workflow) with mock_with_delay() as (delayable_cls, delayable): self.run_job() # run automatic workflow cron args = ( self.sale, [ ("state", "=", "draft"), ("workflow_process_id", "=", self.sale.workflow_process_id.id), ], ) self.assert_job_delayed(delayable_cls, delayable, "_do_validate_sale_order", args)
def test_delay_job(self): with mock_with_delay() as (delayable_cls, delayable): self.schedule.action_export() # check 'with_delay()' part: self.assertEqual(delayable_cls.call_count, 1) # arguments passed in 'with_delay()' delay_args, __ = delayable_cls.call_args self.assertEqual((self.env["delay.export"], ), delay_args) # check what's passed to the job method 'export' self.assertEqual(delayable.export.call_count, 1) delay_args, delay_kwargs = delayable.export.call_args expected_params = ({ "context": { "lang": "en_US" }, "domain": [("is_company", "=", True)], "fields": [ { "label": "display_name", "name": "display_name" }, { "label": "email", "name": "email" }, { "label": "phone", "name": "phone" }, { "label": "title/shortcut", "name": "title/shortcut" }, ], "format": "csv", "ids": False, "import_compat": True, "model": "res.partner", "user_ids": [2], }, ) self.assertEqual(delay_args, expected_params)
def test_sale_done(self): self.sale.action_confirm() # don't care about transfers in this test self.sale.picking_ids.state = "done" self.sale.action_invoice_create() # disable invoice validation for we don't care # in this test self.sale.workflow_process_id.validate_invoice = False # activate the 'sale done' workflow self.sale.workflow_process_id.sale_done = True with mock_with_delay() as (delayable_cls, delayable): self.progress() # run automatic workflow cron self.assert_job_delayed(delayable_cls, delayable, "_do_sale_done", (self.sale, ))
def test_move_done_chained_no_job(self): """A move chained to another does not enqueue job""" move_out = self._create_move(self.product, self.out_type, qty=1, state="waiting") move = self._create_move(self.product, self.in_type, qty=1, move_dest=move_out) move._action_assign() move.move_line_ids.qty_done = 1 move.move_line_ids.location_dest_id = self.shelf1_loc.id with mock_with_delay() as (delayable_cls, delayable): move._action_done() # .with_delay() has not been called self.assertEqual(delayable_cls.call_count, 0)
def test_validate_picking(self): workflow = self.create_full_automatic() self.sale = self.create_sale_order(workflow) self.sale.action_confirm() picking = self.sale.picking_ids # disable invoice creation in this test self.sale.workflow_process_id.create_invoice = False with mock_with_delay() as (delayable_cls, delayable): self.run_job() # run automatic workflow cron args = ( picking, [ ("state", "in", ["draft", "confirmed", "assigned"]), ("workflow_process_id", "=", self.sale.workflow_process_id.id), ], ) self.assert_job_delayed(delayable_cls, delayable, "_do_validate_picking", args)
def test_create_invoice(self): workflow = self.create_full_automatic() self.sale = self.create_sale_order(workflow) self.sale.action_confirm() # don't care about transfers in this test self.sale.picking_ids.state = "done" with mock_with_delay() as (delayable_cls, delayable): self.run_job() # run automatic workflow cron args = ( self.sale, [ ("state", "in", ["sale", "done"]), ("invoice_status", "=", "to invoice"), ("workflow_process_id", "=", self.sale.workflow_process_id.id), ], ) self.assert_job_delayed(delayable_cls, delayable, "_do_create_invoice", args)
def test_validate_invoice(self): workflow = self.create_full_automatic() self.sale = self.create_sale_order(workflow) self.sale.action_confirm() # don't care about transfers in this test self.sale.picking_ids.state = "done" self.sale._create_invoices() invoice = self.sale.invoice_ids with mock_with_delay() as (delayable_cls, delayable): self.run_job() # run automatic workflow cron args = ( invoice, [ ("state", "=", "draft"), ("posted_before", "=", False), ("workflow_process_id", "=", self.sale.workflow_process_id.id), ], ) self.assert_job_delayed(delayable_cls, delayable, "_do_validate_invoice", args)
def test_calc_adu_delay_job(self): context = dict(self.env.context, auto_delay_ddmrp_calc_adu=True) del context["test_queue_job_no_delay"] buffer_a = self.buffer_a.with_context(context) with mock_with_delay() as (delayable_cls, delayable): buffer_a._calc_adu() # check 'with_delay()' part: self.assertEqual(delayable_cls.call_count, 1) # arguments passed in 'with_delay()' delay_args, delay_kwargs = delayable_cls.call_args self.assertEqual(delay_args, (self.buffer_a, )) self.assertEqual(delay_kwargs.get("priority"), 15) self.assertEqual(delay_kwargs.get("identity_key"), identity_exact) # check what's passed to the job method '_calc_adu' self.assertEqual(delayable._calc_adu.call_count, 1) delay_args, delay_kwargs = delayable._calc_adu.call_args self.assertEqual(delay_args, ()) self.assertDictEqual(delay_kwargs, {})
def test_move_done_enqueue_job(self): """A move done enqueue a new job to assign other moves""" move = self._create_move(self.product, self.in_type, qty=100) move._action_assign() move.move_line_ids.qty_done = 50 move.move_line_ids.location_dest_id = self.shelf1_loc.id move.move_line_ids.copy(default={ "qty_done": 50, "location_dest_id": self.shelf2_loc.id }) with mock_with_delay() as (delayable_cls, delayable): move._action_done() # .with_delay() has been called once self.assertEqual(delayable_cls.call_count, 1) delay_args, delay_kwargs = delayable_cls.call_args # .with_delay() is called on self.product self.assertEqual(delay_args, (self.product, )) # .with_delay() with the following options self.assertEqual(delay_kwargs.get("identity_key"), identity_exact) # check what's passed to the job method 'moves_auto_assign' self.assertEqual(delayable.moves_auto_assign.call_count, 1) delay_args, delay_kwargs = delayable.moves_auto_assign.call_args self.assertEqual(delay_args, (self.shelf1_loc | self.shelf2_loc, )) self.assertDictEqual(delay_kwargs, {})
def test_validate_sale_order(self): with mock_with_delay() as (delayable_cls, delayable): self.progress() # run automatic workflow cron self.assert_job_delayed(delayable_cls, delayable, "_do_validate_sale_order", (self.sale, ))