Реальный сценарий владельца: весов с печатью этикеток нет, штрихкоды весовых —
обычные коды «27xxxxx» в карточке. Исправлены два бага:
- поиск по ШК матчил весовой PLU по АРТИКУЛУ (вода арт.12345 → 1,5 кг) — убрано,
поиск по штрихкоду больше нигде не матчит по артикулу;
- разбор весовых этикеток был дефолт-ON (WeightedBarcodeSettings.Enabled,
Organization.WeightBarcodeEnabled) и ловил обычные коды — теперь дефолт OFF.
- ByBarcode: сначала точное совпадение штрихкода (вкл. короткие «27xxxxx»),
разбор этикетки — только если включён в орг И точного ШК нет.
- Phase40: WeightBarcodeEnabled DEFAULT false + выключение у существующих орг;
WeightedCodeFormat('short'|'ean13')/WeightedCodePrefix(27)/WeightedCodeDigits(5).
- Генератор ШК нового весового товара: короткий «<prefix>+N цифр» (27xxxxx, next-free)
или EAN-13 по настройке; уникальность.
- Настройки орг отдают/принимают формат кода весовых.
- Sync отдаёт unitShort («шт»/«кг»/«л») рядом с unitCode (ОКЕИ) — shared UnitShort.
- Тесты: MobileApi (exact-only по умолчанию; не матчит артикул; PLU как ШК при вкл) 9/9;
unit WeightedBarcode/UnitShort 16/16.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
25 lines
687 B
C#
25 lines
687 B
C#
using FluentAssertions;
|
||
using foodmarket.Shared.Units;
|
||
using Xunit;
|
||
|
||
namespace foodmarket.UnitTests;
|
||
|
||
public class UnitShortTests
|
||
{
|
||
[Theory]
|
||
[InlineData("796", "шт")]
|
||
[InlineData("166", "кг")]
|
||
[InlineData("112", "л")]
|
||
[InlineData("163", "г")]
|
||
public void Known_okei_codes_map_to_short(string code, string expected)
|
||
=> UnitShort.From(code).Should().Be(expected);
|
||
|
||
[Fact]
|
||
public void Unknown_code_falls_back_to_name_first_word()
|
||
=> UnitShort.From("999", "погонный метр").Should().Be("погонн");
|
||
|
||
[Fact]
|
||
public void No_code_no_name_defaults_to_sht()
|
||
=> UnitShort.From(null, null).Should().Be("шт");
|
||
}
|