summaryrefslogtreecommitdiff
path: root/models/nutrient-target.rkt
diff options
context:
space:
mode:
authorMarius Peter <dev@marius-peter.com>2025-11-29 18:12:24 +0100
committerMarius Peter <dev@marius-peter.com>2025-11-29 18:12:24 +0100
commitb5b9637c35436f1f4ec70207c519eb1e13da555c (patch)
tree542034622184d9f44f4a405821bd9a391508c097 /models/nutrient-target.rkt
parenta3e00cb41614056b898d74bafe0f86afb2590c56 (diff)
Add unit tests to model modules.
Diffstat (limited to 'models/nutrient-target.rkt')
-rw-r--r--models/nutrient-target.rkt64
1 files changed, 63 insertions, 1 deletions
diff --git a/models/nutrient-target.rkt b/models/nutrient-target.rkt
index 10c0c42..0a117b5 100644
--- a/models/nutrient-target.rkt
+++ b/models/nutrient-target.rkt
@@ -177,5 +177,67 @@
;; DELETE
(define (delete-nutrient-target! nt-or-id)
- (define id (nutrient-target-id nutrient-target))
(query-exec (current-conn) (delete #:from nutrient_targets #:where (= id ,(->nt-id nt-or-id)))))
+
+(module+ test
+ (require rackunit
+ rackunit/text-ui
+ "../db/conn.rkt"
+ "../db/migrations.rkt"
+ "../models/nutrient.rkt")
+
+ (define target-date "2025-09-01")
+
+ (run-tests
+ (test-suite "Nutrient target model"
+ #:before (λ ()
+ (connect! #:path 'memory)
+ (migrate-all!)
+ (create-nutrient! "Nitrogen" "" "N")
+ (create-nutrient! "Phosphorus" "" "P")
+ (create-nutrient! "Potassium" "" "K"))
+ #:after (λ () (disconnect!))
+
+ (test-case "Create target with date and values"
+ (define nitrogen (get-nutrient #:name "Nitrogen"))
+ (define phosphorus (get-nutrient #:name "Phosphorus"))
+ (create-nutrient-target! target-date (hash nitrogen 12.3 phosphorus 4.5))
+ (check-equal? (length (get-nutrient-targets)) 1)
+ (define nt (get-nutrient-target #:effective-on target-date))
+ (check-true (nutrient-target? nt))
+ (check-equal? (nutrient-target-effective-on nt) target-date))
+
+ (test-case "Check all target values"
+ (define nitrogen (get-nutrient #:name "Nitrogen"))
+ (define phosphorus (get-nutrient #:name "Phosphorus"))
+
+ (define nt (get-nutrient-target #:effective-on target-date))
+ (check-equal? (get-nutrient-target-value nt nitrogen) 12.3)
+ (check-equal? (get-nutrient-target-value nt phosphorus) 4.5)
+
+ (define ntv (nutrient-target-nutrient-values nt))
+ (check-equal?
+ (get-nutrient-target-values nt)
+ ntv
+ "return value of get-nutrient-target-values ≠ nutrient-target-values struct accessor")
+ (check-equal? (hash-count ntv) 2)
+ (check-equal? (hash-ref ntv nitrogen) 12.3)
+ (check-equal? (hash-ref ntv phosphorus) 4.5))
+
+ (test-case "Retrieve latest target values"
+ (define nitrogen (get-nutrient #:name "Nitrogen"))
+ (define phosphorus (get-nutrient #:name "Phosphorus"))
+ (define second-target-date "2025-09-02")
+ (create-nutrient-target! second-target-date (hash nitrogen 6.7 phosphorus 8.9))
+
+ (check-equal? (get-latest-nutrient-target-value nitrogen) 6.7)
+ (check-equal? (get-latest-nutrient-target-value phosphorus) 8.9))
+
+ (test-case "Delete target and cascade to target values"
+ (define nt (get-nutrient-target #:effective-on target-date))
+ (delete-nutrient-target! nt)
+ (check-false (get-nutrient-target #:id (nutrient-target-id nt)))
+ (check-equal? (length (get-nutrient-targets))
+ 1
+ "wrong number of nutrient targets were deleted")
+ (check-true (hash-empty? (get-nutrient-target-values nt)))))))
Copyright 2019--2026 Marius PETER