#lang racket (module+ test (require rackunit rackunit/text-ui "../db/conn.rkt" "../db/migrations.rkt" "../models/nutrient.rkt" "../models/nutrient-measurement.rkt") (define measurement-date "2025-09-01") (run-tests (test-suite "Nutrient measurement model" #:before (λ () (connect! #:path 'memory) ;; (connect! #:path "test.sqlite3") (migrate-all!) (create-nutrient! "Nitrogen" "N") (create-nutrient! "Phosphorus" "P") (create-nutrient! "Potassium" "K")) #:after (λ () (disconnect!)) (test-case "Create measurement with values" (define nitrogen (get-nutrient #:name "Nitrogen")) (define phosphorus (get-nutrient #:name "Phosphorus")) (create-nutrient-measurement! measurement-date `((,nitrogen . 12.3) (,phosphorus . 4.5))) (check-equal? (length (get-nutrient-measurements)) 1) (define nm (get-nutrient-measurement #:measured-on measurement-date)) (check-true (nutrient-measurement? nm)) (check-equal? (nutrient-measurement-date nm) measurement-date) (define nmv (nutrient-measurement-values nm)) (check-equal? (length nmv) 2) (check-equal? (cdr (assoc nitrogen nmv)) 12.3) (check-equal? (cdr (assoc phosphorus nmv)) 4.5)) (test-case "Delete measurement cascades its values" (define nm (get-nutrient-measurement #:measured-on measurement-date)) (delete-nutrient-measurement! nm) (check-false (get-nutrient-measurement #:id (nutrient-measurement-id nm))) (check-equal? (length (get-nutrient-measurements)) 0) (check-true (null? (get-nutrient-measurement-values nm)))))))