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
56 lines
2.2 KiB
Python
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]
|