Files
odoo_source/addons/product/tests/test_barcode.py
T
boan-odoo 4a48d48364 [IMP] stock: show related products on duplicated barcode
Previously, product barcodes uniqueness was enforced
by a SQL constraint, resulting in a generic error message.

The SQL constraint has been replaced by a Python check,
which allows the listing of conflicting barcodes in the
error message, including those resulting from batch edits.

Task: 2654703-7
Part-of: odoo/odoo#84056
2022-03-21 11:12:00 +01:00

56 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import exceptions
from odoo.tests.common import TransactionCase
class TestProductBarcode(TransactionCase):
def setUp(self):
super().setUp()
self.env['product.product'].create({'name': 'BC1', 'barcode': '1'})
self.env['product.product'].create({'name': 'BC2', 'barcode': '2'})
def test_blank_barcodes_allowed(self):
"""Makes sure duplicated blank barcodes are allowed."""
for i in range(2):
self.env['product.product'].create({'name': f'BC_{i}'})
def test_false_barcodes_allowed(self):
"""Makes sure duplicated False barcodes are allowed."""
for i in range(2):
self.env['product.product'].create({'name': f'BC_{i}', 'barcode': False})
def test_duplicated_barcode(self):
"""Tests for simple duplication."""
with self.assertRaises(exceptions.ValidationError):
self.env['product.product'].create({'name': 'BC3', 'barcode': '1'})
def test_duplicated_barcode_in_batch_edit(self):
"""Tests for duplication in batch edits."""
batch = [
{'name': 'BC3', 'barcode': '3'},
{'name': 'BC4', 'barcode': '4'},
]
self.env['product.product'].create(batch)
batch.append({'name': 'BC5', 'barcode': '1'})
with self.assertRaises(exceptions.ValidationError):
self.env['product.product'].create(batch)
def test_test_duplicated_barcode_error_msg_content(self):
"""Validates the error message shown when duplicated barcodes are found."""
batch = [
{'name': 'BC3', 'barcode': '3'},
{'name': 'BC4', 'barcode': '3'},
{'name': 'BC5', 'barcode': '4'},
{'name': 'BC6', 'barcode': '4'},
{'name': 'BC7', 'barcode': '1'},
]
try:
self.env['product.product'].create(batch)
except exceptions.ValidationError as exc:
assert 'Barcode "3" already assigned to product(s): BC3, BC4' in exc.args[0]
assert 'Barcode "4" already assigned to product(s): BC5, BC6' in exc.args[0]
assert 'Barcode "1" already assigned to product(s): BC1' in exc.args[0]