Backend smoke tests — Ororo Markets on altradyg_school_practical Database ok schema is installed ok demo users exist Helpers ok randomString honours the length and alphabet ok reference is prefixed and dated ok slug strips punctuation ok amount drops trailing zeros Sanitizer ok tags and whitespace removed ok names keep letters and apostrophes ok names drop digits ok emails are lowercased ok keys drop quotes, semicolons and spaces ok keys keep hyphens and dots for usernames ok phones keep a leading plus Validator ok reports missing fields by label ok rejects a malformed email ok collects more than one error ok accepts valid input ok a password under eight characters is too weak ok a password without an upper case letter is too weak ok a password without a lower case letter is too weak ok a password without a number is too weak ok a password without a symbol is too weak ok a password meeting every rule passes Account and session ok demo admin can sign in ok sign-in never returns the stored password ok wrong password is rejected ok attempts are recorded for the security panel ok session keeps the user id ok session user is resolved from the database ok logout clears the session Permissions ok admin holds an admin-only permission ok user does not hold it ok user holds a shared permission ok anonymous holds nothing Price feed ok a crypto quote is used as it arrives ok stock symbols match regardless of case ok a fiat price is the inverse of its rate ok the dollar always prices at one ok a missing or zero quote leaves the asset alone ok commodities have no feed yet ok the daily move is a percentage of the stored price Ledger ok credit returns the new balance ok credit is visible through balance() ok credit writes a ledger row ok debit subtracts ok reference is generated when omitted ok overdrawing is refused ok refused movement left no row ok balances() covers every wallet Activity log ok admin action is recorded with its name Mailer FAIL mail is written to the local log Cleanup ok test user removed (cascades wallets and ledger rows) ok no orphan transactions left HTTP admin catalogue FAIL administrator signed in for the catalogue FAIL demo user signed in for the catalogue FAIL the catalogue refuses an anonymous caller FAIL a member cannot read a catalogue FAIL a member cannot create a plan FAIL every catalogue is listed ([]) ok the administrator may write to all of them ok a member may write to none of them FAIL an unknown catalogue is refused FAIL options refuse an anonymous caller FAIL the pool forms are offered the crypto assets ([])