Sitelet https://github.com/msgwing/ZeroSMTP/issues/293
Skip to content

Add a real test suite for zerosmtp-check (no network needed) #293

Description

@msgwing

@Mohitingale13 poprosił wprost o zadanie programistyczne wychodzące poza dane
o urządzeniach. To jest to zadanie, i nie jest wymyślone na tę okazję — to
prawdziwa luka, przez którą już raz przeszła cicha usterka.

Stan faktyczny

packages/zerosmtp-check nie ma żadnych testów. W package.json pole
scripts jest puste. CI wykonuje trzy sprawdzenia dymne wpisane wprost
w lint.yml: --help, nieistniejący host i --json. To sprawdza, że program
się uruchamia — nie sprawdza, czy odpowiada poprawnie.

Dlaczego to ma znaczenie akurat tutaj

Logika dopasowania błędów już raz zepsuła się po cichu. W wyrażeniu regularnym
szukającym kodu panelu drukarki \b zamieniło się w prawdziwy znak backspace.
Kod wyglądał poprawnie, nic się nie wysypało, a wyszukiwanie przestało cokolwiek
znajdować. Test na jednym znanym kodzie panelu wywaliłby się natychmiast.

Zakres

Cała testowana logika jest czysta — nie potrzeba sieci ani serwera SMTP:

  • errors.js (166 linii) eksportuje ERRORS i DEVICE_CODES
  • index.js ma tryb --explain, który dopasowuje wklejony tekst błędu do wpisu

Co zrobić

  1. Dodaj packages/zerosmtp-check/test/ z testami na wbudowanym
    node:test — bez nowych zależności, CI ma Node 22, który to ma.
  2. Pokryj co najmniej:
    • każdy wpis w ERRORS jest dopasowywany przez własny ciąg wzorcowy
    • kod panelu z DEVICE_CODES jest znajdowany w tekście, który go zawiera,
      i nie jest znajdowany w tekście, który zawiera tylko podobne cyfry
    • --explain na nieznanym tekście kończy się sensownie, a nie wyjątkiem
  3. Dodaj "test": "node --test test/" do scripts w package.json.
  4. Dopisz krok do zadania zerosmtp-check w .github/workflows/lint.yml,
    który to uruchamia.

Gotowe, gdy

node --test packages/zerosmtp-check/test/ przechodzi lokalnie i w CI, a test
kodów paneli wywala się, jeśli celowo zepsujesz wyrażenie regularne
w index.js. Sprawdź to — bramka, której nie widziałeś jak się wywala, nie
jest sprawdzona.

Uwaga

files w package.json wymienia, co trafia do paczki npm. Katalog testów
nie powinien tam wejść
— użytkownik pobiera narzędzie, nie nasze testy.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions