kontrahent.md

This commit is contained in:
Marcin Wojas
2026-06-05 15:48:46 +02:00
parent 67fcc9e996
commit 01de89b7b5
15 changed files with 1596 additions and 0 deletions
@@ -0,0 +1,70 @@
using System.Linq;
using AwesomeAssertions;
using NUnit.Framework;
using Soneta.Core;
using Soneta.CRM;
namespace Soneta.Skills.Test.CRM.Kontrahenci;
/// <summary>
/// W1 — Wyszukiwanie i identyfikacja kontrahenta.
/// Testy pokazują trzy podstawowe sposoby odnajdywania kontrahenta używane w kodzie dodatków:
/// po kodzie (klucz unikalny), po nazwie (klucz nieunikalny) oraz po NIP (filtr serwerowy
/// <c>SubTable[condition]</c>, zamiast iteracji całej tabeli w pamięci).
/// </summary>
[TestFixture]
public class WyszukiwanieKontrahentaTest : KontrahentTestBase
{
[Test]
[Description("Wyszukanie po kodzie (indeks WgKodu) zwraca dokładnie utworzony rekord.")]
public void WyszukiwaniePoKodzie_ZwracaUtworzonyRekord()
{
var kod = UnikalnyKod();
UtworzKontrahenta(kod, "Firma Po Kodzie");
SaveDispose();
// WgKodu to klucz unikalny — indeksator zwraca pojedynczy rekord lub null.
var znaleziony = Crm.Kontrahenci.WgKodu[kod];
znaleziony.Should().NotBeNull();
znaleziony.Nazwa.Should().Be("Firma Po Kodzie");
}
[Test]
[Description("Wyszukanie po nazwie (indeks WgNazwy, nieunikalny) zwraca zbiór z rekordem.")]
public void WyszukiwaniePoNazwie_ZwracaRekordWZbiorze()
{
var kod = UnikalnyKod();
var nazwa = "Wyszukiwarka " + kod;
UtworzKontrahenta(kod, nazwa);
SaveDispose();
// WgNazwy jest kluczem nieunikalnym — zwraca zbiór, z którego bierzemy pierwszy.
var znaleziony = Crm.Kontrahenci.WgNazwy[nazwa].FirstOrDefault();
znaleziony.Should().NotBeNull();
znaleziony.Kod.Should().Be(kod);
}
[Test]
[Description("Wyszukanie po NIP filtrem serwerowym SubTable[condition] zwraca rekord; " +
"dedup wykrywa istniejący podmiot.")]
public void WyszukiwaniePoNip_FiltrSerwerowy_ZnajdujeISygnalizujeDuplikat()
{
var kod = UnikalnyKod();
var nip = "1234563218"; // poprawny NIP (suma kontrolna)
var k = UtworzKontrahenta(kod, "Firma Z NIP");
InTransaction(() => k.NIP = nip);
SaveDispose();
// Filtr po stronie serwera (klauzula WHERE w SQL), nie iteracja w pamięci.
// Warunek aplikujemy na indeksie tabeli (WgNIP); porównania tekstowe są case-insensitive.
var znaleziony = Crm.Kontrahenci.WgNIP[(Kontrahent x) => x.NIP == nip].FirstOrDefault();
znaleziony.Should().NotBeNull();
znaleziony.Kod.Should().Be(kod);
// Typowy dedup przed dodaniem nowego kontrahenta:
bool juzIstnieje = Crm.Kontrahenci.WgNIP[(Kontrahent x) => x.NIP == nip].Any();
juzIstnieje.Should().BeTrue();
}
}