Files
soneta-erp-skills/Soneta.Skills.Test/CRM/Kontrahenci/WyszukiwanieKontrahentaTest.cs
T
Marcin Wojas 01de89b7b5 kontrahent.md
2026-06-05 15:48:46 +02:00

70 lines
2.6 KiB
C#

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();
}
}