How to use _gather method in Playwright Python

Best Python code snippet using playwright-python

test_inventory.py

Source:test_inventory.py Github

copy

Full Screen

...26 as expected.27 """28 # make some stock29 self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 100)30 self.assertEqual(len(self.env['stock.quant']._gather(self.product1, self.stock_location)), 1.0)31 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.stock_location), 100.0)32 # remove them with an inventory adjustment33 inventory = self.env['stock.inventory'].create({34 'name': 'remove product1',35 'filter': 'product',36 'location_id': self.stock_location.id,37 'product_id': self.product1.id,38 })39 inventory.action_start()40 self.assertEqual(len(inventory.line_ids), 1)41 self.assertEqual(inventory.line_ids.theoretical_qty, 100)42 inventory.line_ids.product_qty = 0 # Put the quantity back to 043 inventory.action_validate()44 # check45 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.stock_location), 0.0)46 self.assertEqual(sum(self.env['stock.quant']._gather(self.product1, self.stock_location).mapped('quantity')), 0.0)47 def test_inventory_2(self):48 """ Check that adding a tracked product through an inventory adjustment work as expected.49 """50 inventory = self.env['stock.inventory'].create({51 'name': 'remove product1',52 'filter': 'product',53 'location_id': self.stock_location.id,54 'product_id': self.product2.id,55 'exhausted': True, # should be set by an onchange56 })57 inventory.action_start()58 self.assertEqual(len(inventory.line_ids), 1)59 self.assertEqual(inventory.line_ids.theoretical_qty, 0)60 lot1 = self.env['stock.production.lot'].create({61 'name': 'sn2',62 'product_id': self.product2.id,63 })64 inventory.line_ids.prod_lot_id = lot165 inventory.line_ids.product_qty = 166 inventory.action_validate()67 # check68 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product2, self.stock_location, lot_id=lot1), 1.0)69 self.assertEqual(len(self.env['stock.quant']._gather(self.product2, self.stock_location, lot_id=lot1)), 1.0)70 self.assertEqual(lot1.product_qty, 1.0)71 def test_inventory_3(self):72 """ Check that it's not posisble to have multiple products with a serial number through an73 inventory adjustment74 """75 inventory = self.env['stock.inventory'].create({76 'name': 'remove product1',77 'filter': 'product',78 'location_id': self.stock_location.id,79 'product_id': self.product2.id,80 'exhausted': True, # should be set by an onchange81 })82 inventory.action_start()83 self.assertEqual(len(inventory.line_ids), 1)84 self.assertEqual(inventory.line_ids.theoretical_qty, 0)85 lot1 = self.env['stock.production.lot'].create({86 'name': 'sn2',87 'product_id': self.product2.id,88 })89 inventory.line_ids.prod_lot_id = lot190 inventory.line_ids.product_qty = 291 with self.assertRaises(ValidationError):92 inventory.action_validate()93 def test_inventory_4(self):94 """ Check that even if a product is tracked by serial number, it's possible to add95 untracked one in an inventory adjustment.96 """97 inventory = self.env['stock.inventory'].create({98 'name': 'remove product1',99 'filter': 'product',100 'location_id': self.stock_location.id,101 'product_id': self.product2.id,102 'exhausted': True, # should be set by an onchange103 })104 inventory.action_start()105 self.assertEqual(len(inventory.line_ids), 1)106 self.assertEqual(inventory.line_ids.theoretical_qty, 0)107 lot1 = self.env['stock.production.lot'].create({108 'name': 'sn2',109 'product_id': self.product2.id,110 })111 inventory.line_ids.prod_lot_id = lot1112 inventory.line_ids.product_qty = 1113 self.env['stock.inventory.line'].create({114 'inventory_id': inventory.id,115 'product_id': self.product2.id,116 'product_uom_id': self.uom_unit.id,117 'product_qty': 10,118 'location_id': self.stock_location.id,119 })120 res_dict_for_warning_lot = inventory.action_validate()121 wizard_warning_lot = self.env[(res_dict_for_warning_lot.get('res_model'))].browse(res_dict_for_warning_lot.get('res_id'))122 wizard_warning_lot.action_confirm()123 # check124 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product2, self.stock_location, lot_id=lot1, strict=True), 1.0)125 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product2, self.stock_location, strict=True), 10.0)126 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product2, self.stock_location), 11.0)127 self.assertEqual(len(self.env['stock.quant']._gather(self.product2, self.stock_location, lot_id=lot1, strict=True)), 1.0)128 self.assertEqual(len(self.env['stock.quant']._gather(self.product2, self.stock_location, strict=True)), 1.0)129 self.assertEqual(len(self.env['stock.quant']._gather(self.product2, self.stock_location)), 2.0)130 def test_inventory_5(self):131 """ Check that assigning an owner does work.132 """133 owner1 = self.env['res.partner'].create({'name': 'test_inventory_5'})134 inventory = self.env['stock.inventory'].create({135 'name': 'remove product1',136 'filter': 'product',137 'location_id': self.stock_location.id,138 'product_id': self.product1.id,139 'exhausted': True,140 })141 inventory.action_start()142 self.assertEqual(len(inventory.line_ids), 1)143 self.assertEqual(inventory.line_ids.theoretical_qty, 0)144 inventory.line_ids.partner_id = owner1145 inventory.line_ids.product_qty = 5146 inventory.action_validate()147 quant = self.env['stock.quant']._gather(self.product1, self.stock_location)148 self.assertEqual(len(quant), 1)149 self.assertEqual(quant.quantity, 5)150 self.assertEqual(quant.owner_id.id, owner1.id)151 def test_inventory_6(self):152 """ Test that for chained moves, making an inventory adjustment to reduce a quantity that153 has been reserved correctly free the reservation. After that, add products in stock and check154 that they're used if the user encodes more than what's available through the chain155 """156 # add 10 products in stock157 inventory = self.env['stock.inventory'].create({158 'name': 'add 10 products 1',159 'filter': 'product',160 'location_id': self.stock_location.id,161 'product_id': self.product1.id,162 'exhausted': True, # should be set by an onchange163 })164 inventory.action_start()165 inventory.line_ids.product_qty = 10166 inventory.action_validate()167 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.stock_location), 10.0)168 # Make a chain of two moves, validate the first and check that 10 products are reserved169 # in the second one.170 move_stock_pack = self.env['stock.move'].create({171 'name': 'test_link_2_1',172 'location_id': self.stock_location.id,173 'location_dest_id': self.pack_location.id,174 'product_id': self.product1.id,175 'product_uom': self.uom_unit.id,176 'product_uom_qty': 10.0,177 })178 move_pack_cust = self.env['stock.move'].create({179 'name': 'test_link_2_2',180 'location_id': self.pack_location.id,181 'location_dest_id': self.customer_location.id,182 'product_id': self.product1.id,183 'product_uom': self.uom_unit.id,184 'product_uom_qty': 10.0,185 })186 move_stock_pack.write({'move_dest_ids': [(4, move_pack_cust.id, 0)]})187 move_pack_cust.write({'move_orig_ids': [(4, move_stock_pack.id, 0)]})188 (move_stock_pack + move_pack_cust)._action_confirm()189 move_stock_pack._action_assign()190 self.assertEqual(move_stock_pack.state, 'assigned')191 move_stock_pack.move_line_ids.qty_done = 10192 move_stock_pack._action_done()193 self.assertEqual(move_stock_pack.state, 'done')194 self.assertEqual(move_pack_cust.state, 'assigned')195 self.assertEqual(self.env['stock.quant']._gather(self.product1, self.pack_location).quantity, 10.0)196 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.pack_location), 0.0)197 # Make and inventory adjustment and remove two products from the pack location. This should198 # free the reservation of the second move.199 inventory = self.env['stock.inventory'].create({200 'name': 'remove 2 products 1',201 'filter': 'product',202 'location_id': self.pack_location.id,203 'product_id': self.product1.id,204 })205 inventory.action_start()206 inventory.line_ids.product_qty = 8207 inventory.action_validate()208 self.assertEqual(self.env['stock.quant']._gather(self.product1, self.pack_location).quantity, 8.0)209 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.pack_location), 0)210 self.assertEqual(move_pack_cust.state, 'partially_available')211 self.assertEqual(move_pack_cust.reserved_availability, 8)212 # If the user tries to assign again, only 8 products are available and thus the reservation213 # state should not change.214 move_pack_cust._action_assign()215 self.assertEqual(move_pack_cust.state, 'partially_available')216 self.assertEqual(move_pack_cust.reserved_availability, 8)217 # Make a new inventory adjustment and bring two now products.218 inventory = self.env['stock.inventory'].create({219 'name': 'remove 2 products 1',220 'filter': 'product',221 'location_id': self.pack_location.id,222 'product_id': self.product1.id,223 })224 inventory.action_start()225 inventory.line_ids.product_qty = 10226 inventory.action_validate()227 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.pack_location), 2)228 # Nothing should have changed for our pack move229 self.assertEqual(move_pack_cust.state, 'partially_available')230 self.assertEqual(move_pack_cust.reserved_availability, 8)231 # Running _action_assign will now find the new available quantity. Indeed, as the products232 # are not discernabl (not lot/pack/owner), even if the new available quantity is not directly233 # brought by the chain, the system fill take them into account.234 move_pack_cust._action_assign()235 self.assertEqual(move_pack_cust.state, 'assigned')236 # move all the things237 move_pack_cust.move_line_ids.qty_done = 10238 move_stock_pack._action_done()239 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.pack_location), 0)240 def test_inventory_7(self):241 """ Check that duplicated quants create a single inventory line.242 """243 owner1 = self.env['res.partner'].create({'name': 'test_inventory_7'})244 vals = {245 'product_id': self.product1.id,246 'product_uom_id': self.uom_unit.id,247 'owner_id': owner1.id,248 'location_id': self.stock_location.id,249 'quantity': 1,250 'reserved_quantity': 0,251 }252 self.env['stock.quant'].create(vals)253 self.env['stock.quant'].create(vals)254 self.assertEqual(len(self.env['stock.quant']._gather(self.product1, self.stock_location)), 2.0)255 self.assertEqual(self.env['stock.quant']._get_available_quantity(self.product1, self.stock_location), 2.0)256 257 inventory = self.env['stock.inventory'].create({258 'name': 'product1',259 'filter': 'product',260 'location_id': self.stock_location.id,261 'product_id': self.product1.id,262 })263 inventory.action_start()264 self.assertEqual(len(inventory.line_ids), 1)...

Full Screen

Full Screen

test_batch_picking.py

Source:test_batch_picking.py Github

copy

Full Screen

...65 self.picking_client_2.move_lines.quantity_done = 1066 self.batch.done()67 self.assertEqual(self.picking_client_1.state, 'done', 'Picking 1 should be done')68 self.assertEqual(self.picking_client_2.state, 'done', 'Picking 2 should be done')69 quant_A = self.env['stock.quant']._gather(self.productA, self.stock_location)70 quant_B = self.env['stock.quant']._gather(self.productB, self.stock_location)71 # ensure that quantity for picking has been moved72 self.assertFalse(sum(quant_A.mapped('quantity')))73 self.assertFalse(sum(quant_B.mapped('quantity')))74 def test_simple_batch_with_wizard(self):75 """ Test a simple batch picking with all quantity for picking available.76 The user use the wizard in order to complete automatically the quantity_done to77 the initial demand (or reserved quantity in this test).78 """79 self.env['stock.quant']._update_available_quantity(self.productA, self.stock_location, 10.0)80 self.env['stock.quant']._update_available_quantity(self.productB, self.stock_location, 10.0)81 # confirm batch, picking should be assigned82 self.batch.confirm_picking()83 self.assertEqual(self.picking_client_1.state, 'assigned', 'Picking 1 should be reserved')84 self.assertEqual(self.picking_client_2.state, 'assigned', 'Picking 2 should be reserved')85 # There should be a wizard asking to process picking without quantity done86 immediate_transfer_wizard_dict = self.batch.done()87 self.assertTrue(immediate_transfer_wizard_dict)88 immediate_transfer_wizard = self.env[(immediate_transfer_wizard_dict.get('res_model'))].browse(immediate_transfer_wizard_dict.get('res_id'))89 self.assertEqual(len(immediate_transfer_wizard.pick_ids), 2)90 immediate_transfer_wizard.process()91 self.assertEqual(self.picking_client_1.state, 'done', 'Picking 1 should be done')92 self.assertEqual(self.picking_client_2.state, 'done', 'Picking 2 should be done')93 quant_A = self.env['stock.quant']._gather(self.productA, self.stock_location)94 quant_B = self.env['stock.quant']._gather(self.productB, self.stock_location)95 # ensure that quantity for picking has been moved96 self.assertFalse(sum(quant_A.mapped('quantity')))97 self.assertFalse(sum(quant_B.mapped('quantity')))98 def test_batch_with_backorder_wizard(self):99 """ Test a simple batch picking with only one quantity fully available.100 The user will set by himself the quantity reserved for each picking and101 run the picking batch. There should be a wizard asking for a backorder.102 """103 self.env['stock.quant']._update_available_quantity(self.productA, self.stock_location, 5.0)104 self.env['stock.quant']._update_available_quantity(self.productB, self.stock_location, 10.0)105 # confirm batch, picking should be assigned106 self.batch.confirm_picking()107 self.assertEqual(self.picking_client_1.state, 'assigned', 'Picking 1 should be ready')108 self.assertEqual(self.picking_client_2.state, 'assigned', 'Picking 2 should be ready')109 self.picking_client_1.move_lines.quantity_done = 5110 self.picking_client_2.move_lines.quantity_done = 10111 # There should be a wizard asking to process picking without quantity done112 back_order_wizard_dict = self.batch.done()113 self.assertTrue(back_order_wizard_dict)114 back_order_wizard = self.env[(back_order_wizard_dict.get('res_model'))].browse(back_order_wizard_dict.get('res_id'))115 self.assertEqual(len(back_order_wizard.pick_ids), 1)116 self.assertEqual(self.picking_client_2.state, 'done', 'Picking 2 should be done')117 back_order_wizard.process()118 self.assertEqual(self.picking_client_1.state, 'done', 'Picking 1 should be done')119 self.assertEqual(self.picking_client_1.move_lines.product_uom_qty, 5, 'initial demand should be 5 after picking split')120 self.assertTrue(self.env['stock.picking'].search([('backorder_id', '=', self.picking_client_1.id)]), 'no back order created')121 quant_A = self.env['stock.quant']._gather(self.productA, self.stock_location)122 quant_B = self.env['stock.quant']._gather(self.productB, self.stock_location)123 # ensure that quantity for picking has been moved124 self.assertFalse(sum(quant_A.mapped('quantity')))125 self.assertFalse(sum(quant_B.mapped('quantity')))126 def test_batch_with_immediate_transfer_and_backorder_wizard(self):127 """ Test a simple batch picking with only one product fully available.128 Everything should be automatically. First one backorder in order to set quantity_done129 to reserved quantity. After a second wizard asking for a backorder for the quantity that130 has not been fully transfered.131 """132 self.env['stock.quant']._update_available_quantity(self.productA, self.stock_location, 5.0)133 self.env['stock.quant']._update_available_quantity(self.productB, self.stock_location, 10.0)134 # confirm batch, picking should be assigned135 self.batch.confirm_picking()136 self.assertEqual(self.picking_client_1.state, 'assigned', 'Picking 1 should be ready')137 self.assertEqual(self.picking_client_2.state, 'assigned', 'Picking 2 should be ready')138 # There should be a wizard asking to process picking without quantity done139 immediate_transfer_wizard_dict = self.batch.done()140 self.assertTrue(immediate_transfer_wizard_dict)141 immediate_transfer_wizard = self.env[(immediate_transfer_wizard_dict.get('res_model'))].browse(immediate_transfer_wizard_dict.get('res_id'))142 self.assertEqual(len(immediate_transfer_wizard.pick_ids), 2)143 back_order_wizard_dict = immediate_transfer_wizard.process()144 self.assertTrue(back_order_wizard_dict)145 back_order_wizard = self.env[(back_order_wizard_dict.get('res_model'))].browse(back_order_wizard_dict.get('res_id'))146 self.assertEqual(len(back_order_wizard.pick_ids), 1)147 back_order_wizard.process()148 self.assertEqual(self.picking_client_1.state, 'done', 'Picking 1 should be done')149 self.assertEqual(self.picking_client_1.move_lines.product_uom_qty, 5, 'initial demand should be 5 after picking split')150 self.assertTrue(self.env['stock.picking'].search([('backorder_id', '=', self.picking_client_1.id)]), 'no back order created')151 quant_A = self.env['stock.quant']._gather(self.productA, self.stock_location)152 quant_B = self.env['stock.quant']._gather(self.productB, self.stock_location)153 # ensure that quantity for picking has been moved154 self.assertFalse(sum(quant_A.mapped('quantity')))155 self.assertFalse(sum(quant_B.mapped('quantity')))156 def test_batch_with_immediate_transfer_and_backorder_wizard_with_manual_operations(self):157 """ Test a simple batch picking with only one quantity fully available.158 The user set the quantity done only for the partially available picking.159 The test should run the immediate transfer for the first picking and then160 the backorder wizard for the second picking.161 """162 self.env['stock.quant']._update_available_quantity(self.productA, self.stock_location, 5.0)163 self.env['stock.quant']._update_available_quantity(self.productB, self.stock_location, 10.0)164 # confirm batch, picking should be assigned165 self.batch.confirm_picking()166 self.assertEqual(self.picking_client_1.state, 'assigned', 'Picking 1 should be ready')167 self.assertEqual(self.picking_client_2.state, 'assigned', 'Picking 2 should be ready')168 self.picking_client_1.move_lines.quantity_done = 5169 # There should be a wizard asking to process picking without quantity done170 immediate_transfer_wizard_dict = self.batch.done()171 self.assertTrue(immediate_transfer_wizard_dict)172 immediate_transfer_wizard = self.env[(immediate_transfer_wizard_dict.get('res_model'))].browse(immediate_transfer_wizard_dict.get('res_id'))173 self.assertEqual(len(immediate_transfer_wizard.pick_ids), 1)174 back_order_wizard_dict = immediate_transfer_wizard.process()175 self.assertTrue(back_order_wizard_dict)176 back_order_wizard = self.env[(back_order_wizard_dict.get('res_model'))].browse(back_order_wizard_dict.get('res_id'))177 self.assertEqual(len(back_order_wizard.pick_ids), 1)178 back_order_wizard.process()179 self.assertEqual(self.picking_client_1.state, 'done', 'Picking 1 should be done')180 self.assertEqual(self.picking_client_1.move_lines.product_uom_qty, 5, 'initial demand should be 5 after picking split')181 self.assertTrue(self.env['stock.picking'].search([('backorder_id', '=', self.picking_client_1.id)]), 'no back order created')182 quant_A = self.env['stock.quant']._gather(self.productA, self.stock_location)183 quant_B = self.env['stock.quant']._gather(self.productB, self.stock_location)184 # ensure that quantity for picking has been moved185 self.assertFalse(sum(quant_A.mapped('quantity')))...

Full Screen

Full Screen

mappings.py

Source:mappings.py Github

copy

Full Screen

...39 # Note: torch.split does not create contiguous tensors by default.40 rank = get_model_parallel_rank()41 output = input_list[rank].contiguous()42 return output43def _gather(input_):44 """Gather tensors and concatinate along the last dimension."""45 world_size = get_model_parallel_world_size()46 # Bypass the function if we are using only 1 GPU.47 if world_size==1:48 return input_49 # Size and dimension.50 last_dim = input_.dim() - 151 rank = get_model_parallel_rank()52 tensor_list = [torch.empty_like(input_) for _ in range(world_size)]53 tensor_list[rank] = input_54 timers = get_timers()55 timers('_gather inside').start()56 torch.distributed.all_gather(tensor_list, input_, group=get_model_parallel_group())57 timers('_gather inside').stop()58 # Note: torch.cat already creates a contiguous tensor.59 output = torch.cat(tensor_list, dim=last_dim).contiguous()60 return output61class _CopyToModelParallelRegion(torch.autograd.Function):62 """Pass the input to the model parallel region."""63 @staticmethod64 def symbolic(graph, input_):65 return input_66 67 @staticmethod68 def forward(ctx, input_):69 return input_70 @staticmethod71 def backward(ctx, grad_output):72 timers = get_timers()73 timers('CopyToModelParallelRegion BACKWARD _reduce').start()74 x = _reduce(grad_output)75 timers('CopyToModelParallelRegion BACKWARD _reduce').stop()76 return x77 #return _reduce(grad_output)78class _ReduceFromModelParallelRegion(torch.autograd.Function):79 """All-redcue the input from the model parallel region."""80 @staticmethod81 def symbolic(graph, input_):82 timers = get_timers()83 timers('ReduceFromModelParallelRegion SYMBOLIC _reduce').start()84 x = _reduce(input_)85 timers('ReduceFromModelParallelRegion SYMBOLIC _reduce').stop()86 return x87 #return _reduce(input_)88 89 @staticmethod90 def forward(ctx, input_):91 timers = get_timers()92 timers('ReduceFromModelParallelRegion FORWARD _reduce').start()93 x=_reduce(input_)94 timers('ReduceFromModelParallelRegion FORWARD _reduce').stop()95 return x96 #return _reduce(input_)97 @staticmethod98 def backward(ctx, grad_output):99 return grad_output100class _ScatterToModelParallelRegion(torch.autograd.Function):101 """Split the input and keep only the corresponding chuck to the rank."""102 @staticmethod103 def symbolic(graph, input_):104 return _split(input_)105 @staticmethod106 def forward(ctx, input_):107 return _split(input_)108 @staticmethod109 def backward(ctx, grad_output):110 timers = get_timers()111 timers('ScatterToModelParallelRegion BACKWARD _gather').start()112 x = _gather(grad_output)113 timers('ScatterToModelParallelRegion BACKWARD _gather').stop()114 return x115# return _gather(grad_output)116class _GatherFromModelParallelRegion(torch.autograd.Function):117 """Gather the input from model parallel region and concatinate."""118 @staticmethod119 def symbolic(graph, input_):120 timers = get_timers()121 timers('GatherFromModelParallelRegion SYMBOLIC _gather').start()122 x = _gather(input_)123 timers('GatherFromModelParallelRegion SYMBOLIC _gather').stop()124 return x125 126 @staticmethod127 def forward(ctx, input_):128 timers = get_timers()129 timers('GatherFromModelParallelRegion FORWARD _gather').start()130 x = _gather(input_)131 timers('GatherFromModelParallelRegion FORWARD _gather').stop()132 return x133 @staticmethod134 def backward(ctx, grad_output):135# timers = get_timers()136# timers('GatherFromModelParallelRegion BACKWARD _gather').start()137 x = _split(grad_output)138# timers('GatherFromModelParallelRegion BACKWARD _gather').stop()139 return x140# return _split(grad_output)141# -----------------142# Helper functions.143# -----------------144def copy_to_model_parallel_region(input_):...

Full Screen

Full Screen

test_robustness.py

Source:test_robustness.py Github

copy

Full Screen

...36 })37 move1._action_confirm()38 move1._action_assign()39 self.assertEqual(move1.state, 'assigned')40 quant = self.env['stock.quant']._gather(41 self.product1,42 self.stock_location,43 )44 # assert the reservation45 self.assertEqual(quant.reserved_quantity, 12)46 self.assertEqual(move1.product_qty, 12)47 # change the factor48 with self.assertRaises(UserError):49 with self.cr.savepoint():50 move1.product_uom.factor = 0.0551 # assert the reservation52 self.assertEqual(quant.reserved_quantity, 12)53 self.assertEqual(move1.state, 'assigned')54 self.assertEqual(move1.product_qty, 12)55 # unreserve56 move1._do_unreserve()57 def test_location_usage(self):58 """ Changing the usage of a location shouldn't be allowed while59 quantities are reserved, else the existing move lines won't be60 consistent with the `reserved_quantity` on the quants.61 """62 # change stock usage63 self.stock_location.scrap_location = True64 # make some stock65 self.env['stock.quant']._update_available_quantity(66 self.product1,67 self.stock_location,68 1,69 )70 # reserve a unit71 move1 = self.env['stock.move'].create({72 'name': 'test_location_archive',73 'location_id': self.stock_location.id,74 'location_dest_id': self.customer_location.id,75 'product_id': self.product1.id,76 'product_uom': self.uom_unit.id,77 'product_uom_qty': 1,78 })79 move1._action_confirm()80 move1._action_assign()81 self.assertEqual(move1.state, 'assigned')82 quant = self.env['stock.quant']._gather(83 self.product1,84 self.stock_location,85 )86 # assert the reservation87 self.assertEqual(quant.reserved_quantity, 0) # reservation is bypassed in scrap location88 self.assertEqual(move1.product_qty, 1)89 # change the stock usage90 with self.assertRaises(UserError):91 with self.cr.savepoint():92 self.stock_location.scrap_location = False93 # unreserve94 move1._do_unreserve()95 def test_package_unpack(self):96 """ Unpack a package that contains quants with a reservation97 should also remove the package on the reserved move lines.98 """99 package = self.env['stock.quant.package'].create({100 'name': 'Shell Helix HX7 10W30',101 })102 self.env['stock.quant']._update_available_quantity(103 self.product1,104 self.stock_location,105 10,106 package_id=package107 )108 # reserve a dozen109 move1 = self.env['stock.move'].create({110 'name': 'test_uom_rounding',111 'location_id': self.stock_location.id,112 'location_dest_id': self.customer_location.id,113 'product_id': self.product1.id,114 'product_uom': self.uom_unit.id,115 'product_uom_qty': 10,116 })117 move1._action_confirm()118 move1._action_assign()119 move1.result_package_id = False120 package.unpack()121 # unreserve122 move1._do_unreserve()123 self.assertEqual(len(self.env['stock.quant']._gather(self.product1, self.stock_location)), 1)124 self.assertEqual(len(self.env['stock.quant']._gather(self.product1, self.stock_location, package_id=package)), 0)...

Full Screen

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright Python automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful