Skip to content

fix(DemoWebApp): FA(3), istniejący szablon faktury i klucz szyfrowania per sesja - #235

Open
vysogot wants to merge 2 commits into
CIRFMF:mainfrom
vysogot:fix/demowebapp-fa3-session-encryption
Open

fix(DemoWebApp): FA(3), istniejący szablon faktury i klucz szyfrowania per sesja#235
vysogot wants to merge 2 commits into
CIRFMF:mainfrom
vysogot:fix/demowebapp-fa3-session-encryption

Conversation

@vysogot

@vysogot vysogot commented Aug 31, 2026

Copy link
Copy Markdown

Opis

Poprawia trzy zgłoszone błędy w KSeF.DemoWebApp — sesja interaktywna po świeżym git clone nie działała w ogóle. Wszystkie trzy zostały potwierdzone przez zespół, stąd jeden PR zamiast trzech: dotyczą tego samego kontrolera i rozdzielone nakładałyby się na siebie.

Zamyka #232, #233, #234.

Co się zmienia

#232 — nieistniejący plik faktury. send-invoice i send-technical-correction czytały faktura-online-fa(3).xml, którego nie ma w repozytorium. Zamiast dodawać brakujący plik, kontroler czyta Templates/invoice-template-fa-3.xml — szablon, który już jest w repozytorium, jest kopiowany do katalogu wyjściowego i którego BackgroundKsefOptions.InvoiceTemplateRelativePath już używa jako ścieżki domyślnej. Placeholdery #nip# i #invoice_number# podstawiane są tak samo jak w BatchSessionController i KsefInvoiceUpoBackgroundJob.

#233 — FA (2) vs FA(3). WithFormCode(systemCode: "FA (2)", ...)"FA (3)" w obu kontrolerach.

#234 — statyczne encryptionData. Materiał kryptograficzny wiązany jest z numerem referencyjnym sesji w ConcurrentDictionary, zamiast jednego pola static współdzielonego przez wszystkie żądania. close-session zwalnia wpis, a wysyłka bez otwartej sesji zwraca 400 z czytelnym komunikatem zamiast NullReferenceException.

DodatkowoBatchSessionController:25 czytał faktura-template-fa(3).xml, kolejny plik nieobecny w repozytorium. To ten sam błąd co #232, tylko w ścieżce wsadowej; nie było osobnego zgłoszenia, więc sygnalizuję tutaj. Usunięty też martwy wpis None Update dla faktura2.xml.

Testy

Pięć testów w istniejącym projekcie KSeF.DemoWebApp.Tests — bez sieci, bez poświadczeń KSeF, ~16 ms.

Kluczowy jest SendInvoice_WithTwoInterleavedSessions_UsesKeyOfItsOwnSession, który odtwarza przeplot z #234 deterministycznie, bez wątków. Na kodzie sprzed poprawki:

Expected: [("session-1", "encrypted-with-key-1"), ("session-2", "encrypted-with-key-2")]
Actual:   [("session-1", "encrypted-with-key-2"), ("session-2", "encrypted-with-key-2")]

Czyli dokładnie scenariusz ze zgłoszenia: faktura pierwszej sesji zaszyfrowana kluczem drugiej. Trzy z pięciu testów nie przechodzą na kodzie sprzed poprawki.

Dwie uwagi do przeglądu:

  • FakeOnlineSessionKsefClient.Unsupported.cs to 62 wygenerowane zaślepki. IKSeFClient agreguje 14 interfejsów, więc atrapa potrzebuje ~61 składowych, aby zaimplementować 3. W repozytorium nie ma biblioteki mockującej, a istniejące testy używają ręcznych atrap (TestOptionsMonitor), więc nie dodawałem Moq — to zmiana konwencji testowej, która nie należy do poprawki błędu. Zaślepki są w osobnym pliku partial, żeby nie zaciemniać właściwej atrapy. Jeśli wolicie tu Moq, chętnie przepiszę.
  • OnlineSessionController przyjmuje teraz IConfiguration (odczyt Tools:contextIdentifier do podstawienia #nip#), dokładnie tak jak BatchSessionController. DI rozwiązuje to automatycznie, ale jest to zmiana sygnatury konstruktora.

Są to pierwsze testy kontrolerów w tym projekcie. Sygnatury endpointów bez zmian — zmiana jest zgodna wstecznie.

Weryfikacja

  • dotnet build KSeF.DemoWebApp — 0 błędów (net10.0)
  • dotnet test KSeF.DemoWebApp.Tests — 10/10 przechodzi (5 nowych + 5 istniejących)

Jakub Godawa added 2 commits August 31, 2026 16:38
- czyta Templates/invoice-template-fa-3.xml zamiast nieistniejących
  faktura-online-fa(3).xml i faktura-template-fa(3).xml (CIRFMF#232)
- open-session deklaruje FA (3) zgodnie z wysyłaną treścią, w obu
  kontrolerach (CIRFMF#233)
- materiał kryptograficzny wiązany z numerem referencyjnym sesji
  w ConcurrentDictionary zamiast pola static; brak sesji to BadRequest,
  nie NullReferenceException (CIRFMF#234)
- usuwa martwy wpis None Update dla faktura2.xml
- SendInvoice_WithTwoInterleavedSessions_UsesKeyOfItsOwnSession odtwarza
  przeplot z CIRFMF#234: bez poprawki faktura sesji 1 szyfrowana jest kluczem sesji 2
- wysyłka i korekta bez otwartej sesji oraz po jej zamknięciu zwracają 400,
  a szablon jest sprawdzany pod kątem FA (3) i placeholdera #nip#
- atrapy IKSeFClient i ICryptographyService bez zależności sieciowych;
  nieużywane operacje w osobnym pliku, aby nie zaciemniać właściwej atrapy
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant