PC06-L03 · samostatné riešenie

Triedenie servisnej požiadavky

Zoradíte štyri úrovne priority tak, aby sa silnejšie pravidlo vyhodnotilo skôr.

Praktický CEL4 testovacie prípadyZdokumentované
Čo si precvičím?

Viete vytvoriť viacúrovňové rozhodnutie a otestovať prekrytie podmienok.

Ako sa riešenie overí?

Jeden výraz musí vrátiť očakávaný výsledok pre všetky štyri vstupy JSON.

Kedy som hotový?

Keď prejdú všetky testy a viete vysvetliť každú podmienku vo výraze.

Slovná úloha

Servisnú požiadavku označte ako kritickú pri bezpečnostnom dopade, vysokú pri aspoň 10 blokovaných používateľoch, strednú pri aspoň jednom používateľovi a nízku v ostatných prípadoch.

Presné požiadavky

  1. Bezpečnostný dopad má vždy prednosť.
  2. Presne 10 používateľov patrí do vysokej priority.
  3. Kladné počty pod 10 sú stredná priorita.
  4. Nula je nízka priorita.

Požadovaný výsledok

Napíšte jeden výraz CEL. Musí vrátiť očakávanú hodnotu aj typ pre všetky štyri pripravené vstupy JSON. Vstupy nemeňte tak, aby prešiel neúplný výraz.

Odporúčaný postup

  1. Každú očíslovanú požiadavku preložte na jednu malú logickú podmienku.
  2. Spustite počiatočný výraz a zistite, ktoré prípady neprešli.
  3. Pridávajte vždy jednu podmienku a znova spustite celú testovaciu sadu.
  4. Úlohu označte za dokončenú až vtedy, keď viete vysvetliť každý operátor a každú hranicu.

Vyriešte úlohu · testovacia sada v prehliadači

Napíšte jeden výraz, ktorý prejde všetkými prípadmi

Upravte výraz CEL a potom ho spustite nad všetkými pripravenými vstupmi JSON. Riešenie je hotové až vtedy, keď prejdú všetky prípady.

4 testovacie prípady

Pomôcka: Bezpečnostný dopad má prednosť pred počtom používateľov; potom testujte hranicu 10 a napokon hodnoty nad nulou.

Tip: všetky testy spustíte aj klávesmi Ctrl/⌘ + Enter.
Bezpečnostný dopadZatiaľ nespustený
Očakávané: "critical" · string
Zobraziť vstup JSON
{
  "request": {
    "securityImpact": true,
    "blockingUsers": 0
  }
}
Desať používateľovZatiaľ nespustený
Očakávané: "high" · string
Zobraziť vstup JSON
{
  "request": {
    "securityImpact": false,
    "blockingUsers": 10
  }
}
Jeden používateľZatiaľ nespustený
Očakávané: "medium" · string
Zobraziť vstup JSON
{
  "request": {
    "securityImpact": false,
    "blockingUsers": 1
  }
}
Nikto nie je blokovanýZatiaľ nespustený
Očakávané: "low" · string
Zobraziť vstup JSON
{
  "request": {
    "securityImpact": false,
    "blockingUsers": 0
  }
}
Výsledok testov

Zatiaľ nespustený

Rovnaký výraz sa spustí nad každým prípadom. Testovacie údaje sú pevné, takže nemožno vynechať hranice ani chybové situácie.

Vysvetlené riešenie

Zobraziť celý výraz
request.securityImpact ? 'critical' : request.blockingUsers >= 10.0 ? 'high' : request.blockingUsers > 0.0 ? 'medium' : 'low'

Prečo riešenie funguje

  1. Vonkajšia podmienka rieši najsilnejšiu prioritu.
  2. Ďalšia podmienka používa >= 10.0 pre vysokú hranicu.
  3. Tretia podmienka používa > 0.0 pre strednú prioritu.
  4. Posledná vetva rieši jediný zostávajúci rozsah hodnôt.

Čo dokazujú testovacie prípady

  • Bezpečnostný dopad: očakáva sa "critical" (string).
  • Desať používateľov: očakáva sa "high" (string).
  • Jeden používateľ: očakáva sa "medium" (string).
  • Nikto nie je blokovaný: očakáva sa "low" (string).

Prípady sú zámerne rozdielne. Riešenie, ktoré prejde iba prvým prípadom, ešte nezapracovalo celé pravidlo.

Častá chyba

Výraz neprispôsobujte iba prvému úspešnému vstupu. Požiadavka je zapracovaná až vtedy, keď kladný, záporný aj hraničný prípad vytvoria určený výsledok.

Kontrolná otázka

Viete ukázať presnú časť riešenia, ktorá spôsobí zlyhanie každého nepravdivého testu? Ak dve rozdielne zlyhania závisia od rovnakej podmienky, vysvetlite prečo.

Hlavná myšlienka

Viete vytvoriť viacúrovňové rozhodnutie a otestovať prekrytie podmienok.

Zdroje

  • CEL-DEV — oficiálny prehľad CEL.
  • CEL-LANG — oficiálna definícia jazyka CEL pre operátory, typy, makrá, prítomnosť, reťazce a časové hodnoty použité v tejto úlohe.