fix(DemoWebApp): FA(3), istniejący szablon faktury i klucz szyfrowania per sesja - #235
Open
vysogot wants to merge 2 commits into
Open
fix(DemoWebApp): FA(3), istniejący szablon faktury i klucz szyfrowania per sesja#235vysogot wants to merge 2 commits into
vysogot wants to merge 2 commits into
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Opis
Poprawia trzy zgłoszone błędy w
KSeF.DemoWebApp— sesja interaktywna po świeżymgit clonenie 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-invoiceisend-technical-correctionczytałyfaktura-online-fa(3).xml, którego nie ma w repozytorium. Zamiast dodawać brakujący plik, kontroler czytaTemplates/invoice-template-fa-3.xml— szablon, który już jest w repozytorium, jest kopiowany do katalogu wyjściowego i któregoBackgroundKsefOptions.InvoiceTemplateRelativePathjuż używa jako ścieżki domyślnej. Placeholdery#nip#i#invoice_number#podstawiane są tak samo jak wBatchSessionControlleriKsefInvoiceUpoBackgroundJob.#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 wConcurrentDictionary, zamiast jednego polastaticwspółdzielonego przez wszystkie żądania.close-sessionzwalnia wpis, a wysyłka bez otwartej sesji zwraca400z czytelnym komunikatem zamiastNullReferenceException.Dodatkowo —
BatchSessionController:25czytał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 wpisNone Updatedlafaktura2.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: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.csto 62 wygenerowane zaślepki.IKSeFClientagreguje 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łemMoq— to zmiana konwencji testowej, która nie należy do poprawki błędu. Zaślepki są w osobnym plikupartial, żeby nie zaciemniać właściwej atrapy. Jeśli wolicie tuMoq, chętnie przepiszę.OnlineSessionControllerprzyjmuje terazIConfiguration(odczytTools:contextIdentifierdo podstawienia#nip#), dokładnie tak jakBatchSessionController. 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)