[Racket] Ferti hydroponic nutrient solver, redux.
Test directory should mirror top-level hierarchy.
Changed files
tests/models/nutrient-measurement.rkt
@@ -0,0 +1,69 @@
1
Added:
#lang racket
2
Added:
3
Added:
(module+ test
4
Added:
(require rackunit
5
Added:
rackunit/text-ui
6
Added:
"../db/conn.rkt"
7
Added:
"../db/migrations.rkt"
8
Added:
"../models/nutrient.rkt"
9
Added:
"../models/nutrient-measurement.rkt")
10
Added:
11
Added:
(define measurement-date "2025-09-01")
12
Added:
13
Added:
(run-tests
14
Added:
(test-suite
15
Added:
"Nutrient measurement model"
16
Added:
#:before (λ ()
17
Added:
(connect! #:path 'memory)
18
Added:
;; (connect! #:path "test.sqlite3")
19
Added:
(migrate-all!)
20
Added:
(create-nutrient! "Nitrogen" "N")
21
Added:
(create-nutrient! "Phosphorus" "P")
22
Added:
(create-nutrient! "Potassium" "K"))
23
Added:
#:after (λ ()
24
Added:
(disconnect!))
25
Added:
26
Added:
(test-case "Create measurement with date and values"
27
Added:
(define nitrogen (get-nutrient #:name "Nitrogen"))
28
Added:
(define phosphorus (get-nutrient #:name "Phosphorus"))
29
Added:
(create-nutrient-measurement! measurement-date
30
Added:
`((,nitrogen . 12.3)
31
Added:
(,phosphorus . 4.5)))
32
Added:
(check-equal? (length (get-nutrient-measurements)) 1)
33
Added:
(define nm (get-nutrient-measurement #:measured-on measurement-date))
34
Added:
(check-true (nutrient-measurement? nm))
35
Added:
(check-equal? (nutrient-measurement-date nm) measurement-date))
36
Added:
37
Added:
(test-case "Check all measurement values"
38
Added:
(define nitrogen (get-nutrient #:name "Nitrogen"))
39
Added:
(define phosphorus (get-nutrient #:name "Phosphorus"))
40
Added:
41
Added:
(define nm (get-nutrient-measurement #:measured-on measurement-date))
42
Added:
(check-equal? (get-nutrient-measurement-value nm nitrogen) 12.3)
43
Added:
(check-equal? (get-nutrient-measurement-value nm phosphorus) 4.5)
44
Added:
45
Added:
(define nmv (nutrient-measurement-values nm))
46
Added:
(check-equal? (get-nutrient-measurement-values nm) nmv
47
Added:
"return value of get-nutrient-measurement-values ≠ nutrient-measurement-values struct accessor")
48
Added:
(check-equal? (length nmv) 2)
49
Added:
(check-equal? (cdr (assoc nitrogen nmv)) 12.3)
50
Added:
(check-equal? (cdr (assoc phosphorus nmv)) 4.5))
51
Added:
52
Added:
(test-case "Retrieve latest measurement values"
53
Added:
(define nitrogen (get-nutrient #:name "Nitrogen"))
54
Added:
(define phosphorus (get-nutrient #:name "Phosphorus"))
55
Added:
(define second-measurement-date "2025-09-02")
56
Added:
(create-nutrient-measurement! second-measurement-date
57
Added:
`((,nitrogen . 6.7)
58
Added:
(,phosphorus . 8.9)))
59
Added:
60
Added:
(check-equal? (get-latest-nutrient-measurement-value nitrogen) 6.7)
61
Added:
(check-equal? (get-latest-nutrient-measurement-value phosphorus) 8.9))
62
Added:
63
Added:
(test-case "Delete measurement and cascade to measurement values"
64
Added:
(define nm (get-nutrient-measurement #:measured-on measurement-date))
65
Added:
(delete-nutrient-measurement! nm)
66
Added:
(check-false (get-nutrient-measurement #:id (nutrient-measurement-id nm)))
67
Added:
(check-equal? (length (get-nutrient-measurements)) 1
68
Added:
"wrong number of nutrient measurements were deleted")
69
Added:
(check-true (null? (get-nutrient-measurement-values nm)))))))
tests/models/nutrient.rkt
@@ -0,0 +1,76 @@
1
Added:
#lang racket
2
Added:
3
Added:
(module+ test
4
Added:
(require rackunit
5
Added:
rackunit/text-ui
6
Added:
"../db/conn.rkt"
7
Added:
"../db/migrations.rkt"
8
Added:
"../models/nutrient.rkt")
9
Added:
10
Added:
(run-tests
11
Added:
(test-suite
12
Added:
"Nutrient model"
13
Added:
#:before (λ ()
14
Added:
(connect! #:path 'memory)
15
Added:
(migrate-all!))
16
Added:
#:after (λ ()
17
Added:
(disconnect!))
18
Added:
19
Added:
(test-case "Create nutrients"
20
Added:
(create-nutrient! "Examplium" "Ex")
21
Added:
(check-equal? (length (get-nutrients)) 1)
22
Added:
(create-nutrient! "Ignorium" "Ig")
23
Added:
(check-equal? (length (get-nutrients)) 2))
24
Added:
25
Added:
(test-case "Read nutrient"
26
Added:
(define examplium (get-nutrient #:id 1))
27
Added:
(check-true (nutrient? examplium))
28
Added:
(check-equal? (nutrient-id examplium) 1))
29
Added:
30
Added:
(test-case "Read nutrient by name"
31
Added:
(define examplium (get-nutrient #:name "Examplium"))
32
Added:
(check-true (nutrient? examplium))
33
Added:
(check-equal? (nutrient-name examplium) "Examplium"))
34
Added:
35
Added:
(test-case "Read nutrient by formula"
36
Added:
(define examplium (get-nutrient #:formula "Ex"))
37
Added:
(check-true (nutrient? examplium))
38
Added:
(check-equal? (nutrient-formula examplium) "Ex"))
39
Added:
40
Added:
(test-case "Read inexisting nutrient"
41
Added:
(check-false (get-nutrient #:name "Inexistium")))
42
Added:
43
Added:
(test-case "Update nutrient name"
44
Added:
(define examplium (get-nutrient #:name "Examplium"))
45
Added:
(define examplium-nitrate
46
Added:
(update-nutrient! examplium #:name "Examplium Nitrate"))
47
Added:
(check-equal? (length (get-nutrients)) 2)
48
Added:
(check-equal? (nutrient-name examplium-nitrate) "Examplium Nitrate")
49
Added:
(check-equal? (nutrient-formula examplium-nitrate) "Ex"))
50
Added:
51
Added:
(test-case "Update nutrient formula"
52
Added:
(define examplium-nitrate (get-nutrient #:name "Examplium Nitrate"))
53
Added:
(define examplium-sulfate
54
Added:
(update-nutrient! examplium-nitrate #:formula "ExSO4"))
55
Added:
(check-equal? (length (get-nutrients)) 2)
56
Added:
(check-equal? (nutrient-name examplium-sulfate) "Examplium Nitrate")
57
Added:
(check-equal? (nutrient-formula examplium-sulfate) "ExSO4"))
58
Added:
59
Added:
(test-case "Update nutrient name and formula"
60
Added:
(define examplium-nitrate
61
Added:
(get-nutrient #:name "Examplium Nitrate"))
62
Added:
(define examplium-sulfate
63
Added:
(update-nutrient! examplium-nitrate
64
Added:
#:name "Examplium Sulfate"
65
Added:
#:formula "ExNO3"))
66
Added:
(check-equal? (length (get-nutrients)) 2)
67
Added:
(check-equal? (nutrient-name examplium-sulfate) "Examplium Sulfate")
68
Added:
(check-equal? (nutrient-formula examplium-sulfate) "ExNO3"))
69
Added:
70
Added:
(test-case "Delete nutrient"
71
Added:
(define examplium-sulfate (get-nutrient #:name "Examplium Sulfate"))
72
Added:
(delete-nutrient! examplium-sulfate)
73
Added:
(check-equal? (length (get-nutrients)) 1)
74
Added:
(define ignorium (get-nutrient #:name "Ignorium"))
75
Added:
(delete-nutrient! ignorium)
76
Added:
(check-equal? (length (get-nutrients)) 0)))))
tests/nutrient-measurement-model.rkt
@@ -1,69 +0,0 @@
1
Removed:
#lang racket
2
Removed:
3
Removed:
(module+ test
4
Removed:
(require rackunit
5
Removed:
rackunit/text-ui
6
Removed:
"../db/conn.rkt"
7
Removed:
"../db/migrations.rkt"
8
Removed:
"../models/nutrient.rkt"
9
Removed:
"../models/nutrient-measurement.rkt")
10
Removed:
11
Removed:
(define measurement-date "2025-09-01")
12
Removed:
13
Removed:
(run-tests
14
Removed:
(test-suite
15
Removed:
"Nutrient measurement model"
16
Removed:
#:before (λ ()
17
Removed:
(connect! #:path 'memory)
18
Removed:
;; (connect! #:path "test.sqlite3")
19
Removed:
(migrate-all!)
20
Removed:
(create-nutrient! "Nitrogen" "N")
21
Removed:
(create-nutrient! "Phosphorus" "P")
22
Removed:
(create-nutrient! "Potassium" "K"))
23
Removed:
#:after (λ ()
24
Removed:
(disconnect!))
25
Removed:
26
Removed:
(test-case "Create measurement with date and values"
27
Removed:
(define nitrogen (get-nutrient #:name "Nitrogen"))
28
Removed:
(define phosphorus (get-nutrient #:name "Phosphorus"))
29
Removed:
(create-nutrient-measurement! measurement-date
30
Removed:
`((,nitrogen . 12.3)
31
Removed:
(,phosphorus . 4.5)))
32
Removed:
(check-equal? (length (get-nutrient-measurements)) 1)
33
Removed:
(define nm (get-nutrient-measurement #:measured-on measurement-date))
34
Removed:
(check-true (nutrient-measurement? nm))
35
Removed:
(check-equal? (nutrient-measurement-date nm) measurement-date))
36
Removed:
37
Removed:
(test-case "Check all measurement values"
38
Removed:
(define nitrogen (get-nutrient #:name "Nitrogen"))
39
Removed:
(define phosphorus (get-nutrient #:name "Phosphorus"))
40
Removed:
41
Removed:
(define nm (get-nutrient-measurement #:measured-on measurement-date))
42
Removed:
(check-equal? (get-nutrient-measurement-value nm nitrogen) 12.3)
43
Removed:
(check-equal? (get-nutrient-measurement-value nm phosphorus) 4.5)
44
Removed:
45
Removed:
(define nmv (nutrient-measurement-values nm))
46
Removed:
(check-equal? (get-nutrient-measurement-values nm) nmv
47
Removed:
"return value of get-nutrient-measurement-values ≠ nutrient-measurement-values struct accessor")
48
Removed:
(check-equal? (length nmv) 2)
49
Removed:
(check-equal? (cdr (assoc nitrogen nmv)) 12.3)
50
Removed:
(check-equal? (cdr (assoc phosphorus nmv)) 4.5))
51
Removed:
52
Removed:
(test-case "Retrieve latest measurement values"
53
Removed:
(define nitrogen (get-nutrient #:name "Nitrogen"))
54
Removed:
(define phosphorus (get-nutrient #:name "Phosphorus"))
55
Removed:
(define second-measurement-date "2025-09-02")
56
Removed:
(create-nutrient-measurement! second-measurement-date
57
Removed:
`((,nitrogen . 6.7)
58
Removed:
(,phosphorus . 8.9)))
59
Removed:
60
Removed:
(check-equal? (get-latest-nutrient-measurement-value nitrogen) 6.7)
61
Removed:
(check-equal? (get-latest-nutrient-measurement-value phosphorus) 8.9))
62
Removed:
63
Removed:
(test-case "Delete measurement and cascade to measurement values"
64
Removed:
(define nm (get-nutrient-measurement #:measured-on measurement-date))
65
Removed:
(delete-nutrient-measurement! nm)
66
Removed:
(check-false (get-nutrient-measurement #:id (nutrient-measurement-id nm)))
67
Removed:
(check-equal? (length (get-nutrient-measurements)) 1
68
Removed:
"wrong number of nutrient measurements were deleted")
69
Removed:
(check-true (null? (get-nutrient-measurement-values nm)))))))
tests/nutrient-model.rkt
@@ -1,76 +0,0 @@
1
Removed:
#lang racket
2
Removed:
3
Removed:
(module+ test
4
Removed:
(require rackunit
5
Removed:
rackunit/text-ui
6
Removed:
"../db/conn.rkt"
7
Removed:
"../db/migrations.rkt"
8
Removed:
"../models/nutrient.rkt")
9
Removed:
10
Removed:
(run-tests
11
Removed:
(test-suite
12
Removed:
"Nutrient model"
13
Removed:
#:before (λ ()
14
Removed:
(connect! #:path 'memory)
15
Removed:
(migrate-all!))
16
Removed:
#:after (λ ()
17
Removed:
(disconnect!))
18
Removed:
19
Removed:
(test-case "Create nutrients"
20
Removed:
(create-nutrient! "Examplium" "Ex")
21
Removed:
(check-equal? (length (get-nutrients)) 1)
22
Removed:
(create-nutrient! "Ignorium" "Ig")
23
Removed:
(check-equal? (length (get-nutrients)) 2))
24
Removed:
25
Removed:
(test-case "Read nutrient"
26
Removed:
(define examplium (get-nutrient #:id 1))
27
Removed:
(check-true (nutrient? examplium))
28
Removed:
(check-equal? (nutrient-id examplium) 1))
29
Removed:
30
Removed:
(test-case "Read nutrient by name"
31
Removed:
(define examplium (get-nutrient #:name "Examplium"))
32
Removed:
(check-true (nutrient? examplium))
33
Removed:
(check-equal? (nutrient-name examplium) "Examplium"))
34
Removed:
35
Removed:
(test-case "Read nutrient by formula"
36
Removed:
(define examplium (get-nutrient #:formula "Ex"))
37
Removed:
(check-true (nutrient? examplium))
38
Removed:
(check-equal? (nutrient-formula examplium) "Ex"))
39
Removed:
40
Removed:
(test-case "Read inexisting nutrient"
41
Removed:
(check-false (get-nutrient #:name "Inexistium")))
42
Removed:
43
Removed:
(test-case "Update nutrient name"
44
Removed:
(define examplium (get-nutrient #:name "Examplium"))
45
Removed:
(define examplium-nitrate
46
Removed:
(update-nutrient! examplium #:name "Examplium Nitrate"))
47
Removed:
(check-equal? (length (get-nutrients)) 2)
48
Removed:
(check-equal? (nutrient-name examplium-nitrate) "Examplium Nitrate")
49
Removed:
(check-equal? (nutrient-formula examplium-nitrate) "Ex"))
50
Removed:
51
Removed:
(test-case "Update nutrient formula"
52
Removed:
(define examplium-nitrate (get-nutrient #:name "Examplium Nitrate"))
53
Removed:
(define examplium-sulfate
54
Removed:
(update-nutrient! examplium-nitrate #:formula "ExSO4"))
55
Removed:
(check-equal? (length (get-nutrients)) 2)
56
Removed:
(check-equal? (nutrient-name examplium-sulfate) "Examplium Nitrate")
57
Removed:
(check-equal? (nutrient-formula examplium-sulfate) "ExSO4"))
58
Removed:
59
Removed:
(test-case "Update nutrient name and formula"
60
Removed:
(define examplium-nitrate
61
Removed:
(get-nutrient #:name "Examplium Nitrate"))
62
Removed:
(define examplium-sulfate
63
Removed:
(update-nutrient! examplium-nitrate
64
Removed:
#:name "Examplium Sulfate"
65
Removed:
#:formula "ExNO3"))
66
Removed:
(check-equal? (length (get-nutrients)) 2)
67
Removed:
(check-equal? (nutrient-name examplium-sulfate) "Examplium Sulfate")
68
Removed:
(check-equal? (nutrient-formula examplium-sulfate) "ExNO3"))
69
Removed:
70
Removed:
(test-case "Delete nutrient"
71
Removed:
(define examplium-sulfate (get-nutrient #:name "Examplium Sulfate"))
72
Removed:
(delete-nutrient! examplium-sulfate)
73
Removed:
(check-equal? (length (get-nutrients)) 1)
74
Removed:
(define ignorium (get-nutrient #:name "Ignorium"))
75
Removed:
(delete-nutrient! ignorium)
76
Removed:
(check-equal? (length (get-nutrients)) 0)))))