using System;
using Soneta.Core;
using Soneta.CRM;
using Soneta.Test;
namespace Soneta.Skills.Test.CRM.Kontrahenci;
///
/// Wspólna baza testów kontrahenta. Dziedziczy z , dzięki czemu:
///
/// - udostępnia gotową sesję operacyjną (Session) powiązaną z testową bazą Demo,
/// - automatycznie wycofuje (rollback) wszystkie zmiany w bazie po zakończeniu testu,
/// - daje metody pomocnicze InTransaction/SaveDispose do pracy w transakcjach.
///
/// Baza dodaje skróty często powtarzane w testach kontrahenta (dostęp do modułu CRM,
/// generowanie unikalnego kodu, utworzenie minimalnego kontrahenta).
///
public abstract class KontrahentTestBase : TestBase
{
/// Moduł CRM bieżącej sesji operacyjnej.
protected CRMModule Crm => Session.GetCRM();
/// Generuje krótki, unikalny kod kontrahenta (na potrzeby testów).
protected static string UnikalnyKod() => Guid.NewGuid().ToString("N").Substring(0, 10);
///
/// Tworzy w bieżącej sesji nowego kontrahenta z minimalnym kompletem danych
/// (kod, nazwa, status i rodzaj podmiotu) wewnątrz transakcji edycyjnej.
/// Zwrócony obiekt żyje w bieżącej sesji — pozostaje ważny do czasu SaveDispose.
///
protected Kontrahent UtworzKontrahenta(
string kod,
string nazwa = null,
StatusPodmiotu status = StatusPodmiotu.PodmiotGospodarczy,
RodzajPodmiotu rodzaj = RodzajPodmiotu.Krajowy)
{
Kontrahent k = null;
InTransaction(() =>
{
// AddRow MUSI poprzedzać ustawianie pól — obiekt najpierw trafia do tabeli.
k = new Kontrahent();
Session.AddRow(k);
k.Kod = kod;
k.Nazwa = nazwa ?? kod;
k.StatusPodmiotu = status;
k.RodzajPodmiotu = rodzaj;
});
return k;
}
}