#lang racket (module+ test (require rackunit rackunit/text-ui "../../db/conn.rkt" "../../db/migrations.rkt" "../../models/nutrient.rkt") (run-tests (test-suite "Nutrient model" #:before (λ () (connect! #:path 'memory) (migrate-all!)) #:after (λ () (disconnect!)) (test-case "Create nutrients" (create-nutrient! "Examplium" "Ex") (check-equal? (length (get-nutrients)) 1) (create-nutrient! "Ignorium" "Ig") (check-equal? (length (get-nutrients)) 2)) (test-case "Read nutrient" (define examplium (get-nutrient #:id 1)) (check-true (nutrient? examplium)) (check-equal? (nutrient-id examplium) 1)) (test-case "Read nutrient by name" (define examplium (get-nutrient #:name "Examplium")) (check-true (nutrient? examplium)) (check-equal? (nutrient-name examplium) "Examplium")) (test-case "Read nutrient by formula" (define examplium (get-nutrient #:formula "Ex")) (check-true (nutrient? examplium)) (check-equal? (nutrient-formula examplium) "Ex")) (test-case "Read inexisting nutrient" (check-false (get-nutrient #:name "Inexistium"))) (test-case "Update nutrient name" (define examplium (get-nutrient #:name "Examplium")) (define examplium-nitrate (update-nutrient! examplium #:name "Examplium Nitrate")) (check-equal? (length (get-nutrients)) 2) (check-equal? (nutrient-name examplium-nitrate) "Examplium Nitrate") (check-equal? (nutrient-formula examplium-nitrate) "Ex")) (test-case "Update nutrient formula" (define examplium-nitrate (get-nutrient #:name "Examplium Nitrate")) (define examplium-sulfate (update-nutrient! examplium-nitrate #:formula "ExSO4")) (check-equal? (length (get-nutrients)) 2) (check-equal? (nutrient-name examplium-sulfate) "Examplium Nitrate") (check-equal? (nutrient-formula examplium-sulfate) "ExSO4")) (test-case "Update nutrient name and formula" (define examplium-nitrate (get-nutrient #:name "Examplium Nitrate")) (define examplium-sulfate (update-nutrient! examplium-nitrate #:name "Examplium Sulfate" #:formula "ExNO3")) (check-equal? (length (get-nutrients)) 2) (check-equal? (nutrient-name examplium-sulfate) "Examplium Sulfate") (check-equal? (nutrient-formula examplium-sulfate) "ExNO3")) (test-case "Delete nutrient" (define examplium-sulfate (get-nutrient #:name "Examplium Sulfate")) (delete-nutrient! examplium-sulfate) (check-equal? (length (get-nutrients)) 1) (define ignorium (get-nutrient #:name "Ignorium")) (delete-nutrient! ignorium) (check-equal? (length (get-nutrients)) 0)))))