From dacd04162e1811d63c65a246750daf51bda6f55a Mon Sep 17 00:00:00 2001 From: Bruno do Nascimento Maciel Date: Tue, 3 Dec 2024 15:56:55 -0300 Subject: [PATCH] bump --- project.clj | 6 +- resources/config.example.edn | 7 +- src/rango_graalvm/adapters/menu.clj | 11 +-- src/rango_graalvm/adapters/reservation.clj | 20 ++--- src/rango_graalvm/adapters/student.clj | 13 ++- src/rango_graalvm/components.clj | 10 +-- src/rango_graalvm/controllers/menu.clj | 2 +- src/rango_graalvm/controllers/reservation.clj | 8 +- src/rango_graalvm/controllers/student.clj | 2 +- src/rango_graalvm/db/postgresql/menu.clj | 1 - .../db/postgresql/reservation.clj | 55 ++++++++++++ src/rango_graalvm/db/postgresql/student.clj | 57 ++++++++++++ src/rango_graalvm/db/sqlite/menu.clj | 33 ------- src/rango_graalvm/db/sqlite/reservation.clj | 52 ----------- src/rango_graalvm/db/sqlite/student.clj | 42 --------- .../diplomat/http_server/menu.clj | 22 ++--- .../diplomat/http_server/reservation.clj | 22 ++--- .../diplomat/http_server/student.clj | 16 ++-- src/rango_graalvm/interceptors/menu.clj | 6 +- .../interceptors/reservation.clj | 6 +- src/rango_graalvm/interceptors/student.clj | 10 +-- .../wire/postgresql/reservation.clj | 11 +++ src/rango_graalvm/wire/postgresql/student.clj | 12 +++ src/rango_graalvm/wire/sqlite/menu.clj | 11 --- src/rango_graalvm/wire/sqlite/reservation.clj | 11 --- src/rango_graalvm/wire/sqlite/student.clj | 12 --- test/helpers/fixtures/menu.clj | 6 -- test/helpers/fixtures/reservation.clj | 8 +- test/helpers/fixtures/student.clj | 6 -- test/integration/aux/components.clj | 21 +++-- .../unit/rango_graalvm/adapters/menu_test.clj | 8 -- .../adapters/reservation_test.clj | 12 +-- .../rango_graalvm/adapters/student_test.clj | 9 -- .../rango_graalvm/db/postgresql/menu_test.clj | 10 +-- .../db/postgresql/reservation_test.clj | 72 +++++++++++++++ .../{sqlite => postgresql}/student_test.clj | 52 +++++------ .../rango_graalvm/db/sqlite/menu_test.clj | 61 ------------- .../db/sqlite/reservation_test.clj | 90 ------------------- 38 files changed, 332 insertions(+), 481 deletions(-) create mode 100644 src/rango_graalvm/db/postgresql/reservation.clj create mode 100644 src/rango_graalvm/db/postgresql/student.clj delete mode 100644 src/rango_graalvm/db/sqlite/menu.clj delete mode 100644 src/rango_graalvm/db/sqlite/reservation.clj delete mode 100644 src/rango_graalvm/db/sqlite/student.clj create mode 100644 src/rango_graalvm/wire/postgresql/reservation.clj create mode 100644 src/rango_graalvm/wire/postgresql/student.clj delete mode 100644 src/rango_graalvm/wire/sqlite/menu.clj delete mode 100644 src/rango_graalvm/wire/sqlite/reservation.clj delete mode 100644 src/rango_graalvm/wire/sqlite/student.clj create mode 100644 test/unit/rango_graalvm/db/postgresql/reservation_test.clj rename test/unit/rango_graalvm/db/{sqlite => postgresql}/student_test.clj (58%) delete mode 100644 test/unit/rango_graalvm/db/sqlite/menu_test.clj delete mode 100644 test/unit/rango_graalvm/db/sqlite/reservation_test.clj diff --git a/project.clj b/project.clj index b430c73..2c25bb2 100644 --- a/project.clj +++ b/project.clj @@ -10,7 +10,7 @@ :exclusions [amazonica] :dependencies [[org.clojure/clojure "1.12.0"] - [net.clojars.macielti/common-clj "41.74.73"] + [net.clojars.macielti/common-clj "41.74.74"] [net.clojars.macielti/http-client-component "0.1.0"] [io.pedestal/pedestal.service "0.7.2"] [io.pedestal/pedestal.jetty "0.7.2"] @@ -19,7 +19,7 @@ [net.clojars.macielti/porteiro-component "0.5.2"] [com.github.clj-easy/graal-build-time "1.0.5"] [net.clojars.macielti/new-relic-component "0.2.0"] - [net.clojars.macielti/sqlite-component "2.1.1"] + [net.clojars.macielti/postgresql-component "2.2.2"] [com.taoensso/timbre "6.6.1"]] :profiles {:dev {:plugins [[com.github.clojure-lsp/lein-clojure-lsp "1.4.15"] @@ -31,7 +31,7 @@ :test-paths ["test/unit" "test/integration" "test/helpers"] - :dependencies [[net.clojars.macielti/common-test-clj "4.2.3-1"] + :dependencies [[net.clojars.macielti/common-test-clj "5.2.3"] [danlentz/clj-uuid "0.2.0"] [hashp "0.2.2"] [nubank/matcher-combinators "3.9.1"] diff --git a/resources/config.example.edn b/resources/config.example.edn index 1005a5c..b8deda5 100644 --- a/resources/config.example.edn +++ b/resources/config.example.edn @@ -1,8 +1,11 @@ {:test {:service-name "rango" :jwt-secret "da3bf409-6b8e-448b-b7a7-025df2e2fa1a" :new-relic-api-key "random-access-key" - :sqlite {:dbtype "sqlite" - :dbname "resources/rango-ceti-fausto-lustosa.db"} + :postgresql {:host "127.0.0.1" + :port 10150 + :user "test" + :password "random-password" + :database "test"} :service {:host "0.0.0.0" :port 8080} :admin-customer-seed {:customer {:username "admin" diff --git a/src/rango_graalvm/adapters/menu.clj b/src/rango_graalvm/adapters/menu.clj index 6a1fc4f..92e09cd 100644 --- a/src/rango_graalvm/adapters/menu.clj +++ b/src/rango_graalvm/adapters/menu.clj @@ -3,10 +3,8 @@ [rango-graalvm.models.menu :as models.menu] [rango-graalvm.wire.in.menu :as wire.in.menu] [rango-graalvm.wire.out.menu :as wire.out.menu] - [rango-graalvm.wire.sqlite.menu :as wire.sqlite.menu] [rango-graalvm.wire.postgresql.menu :as wire.postgresql.menu] - [schema.core :as s]) - (:import (java.util UUID))) + [schema.core :as s])) (s/defn wire->internal :- models.menu/Menu [{:keys [reference-date description]} :- wire.in.menu/Menu] @@ -22,13 +20,6 @@ :description description :created-at (str created-at)}) -(s/defn sqlite->internal :- models.menu/Menu - [{:menus/keys [id reference_date description created_at]} :- wire.sqlite.menu/Menu] - {:menu/id (UUID/fromString id) - :menu/reference-date (jt/local-date reference_date) - :menu/description description - :menu/created-at (jt/local-date-time created_at)}) - (s/defn postgresql->internal :- models.menu/Menu [menu :- wire.postgresql.menu/Menu] {:menu/id (:id menu) diff --git a/src/rango_graalvm/adapters/reservation.clj b/src/rango_graalvm/adapters/reservation.clj index 4761e79..1a8d25e 100644 --- a/src/rango_graalvm/adapters/reservation.clj +++ b/src/rango_graalvm/adapters/reservation.clj @@ -1,10 +1,8 @@ (ns rango-graalvm.adapters.reservation - (:require [java-time.api :as jt] - [rango-graalvm.models.reservation :as models.reservation] + (:require [rango-graalvm.models.reservation :as models.reservation] [rango-graalvm.wire.out.reservation :as wire.out.reservation] - [rango-graalvm.wire.sqlite.reservation :as wire.sqlite.reservation] - [schema.core :as s]) - (:import (java.util UUID))) + [rango-graalvm.wire.postgresql.reservation :as wire.postgresql.reservation] + [schema.core :as s])) (s/defn internal->wire :- wire.out.reservation/Reservation [{:reservation/keys [id student-id menu-id created-at]} :- models.reservation/Reservation] @@ -13,9 +11,9 @@ :menu-id (str menu-id) :created-at (str created-at)}) -(s/defn sqlite->internal :- models.reservation/Reservation - [{:reservations/keys [id student_id menu_id created_at]} :- wire.sqlite.reservation/Reservation] - {:reservation/id (UUID/fromString id) - :reservation/student-id (UUID/fromString student_id) - :reservation/menu-id (UUID/fromString menu_id) - :reservation/created-at (jt/local-date-time created_at)}) +(s/defn postgresql->internal :- models.reservation/Reservation + [{:keys [id student_id menu_id created_at]} :- wire.postgresql.reservation/Reservation] + {:reservation/id id + :reservation/student-id student_id + :reservation/menu-id menu_id + :reservation/created-at created_at}) diff --git a/src/rango_graalvm/adapters/student.clj b/src/rango_graalvm/adapters/student.clj index f3faecf..0da8da9 100644 --- a/src/rango_graalvm/adapters/student.clj +++ b/src/rango_graalvm/adapters/student.clj @@ -4,9 +4,8 @@ [rango-graalvm.models.sudent :as models.student] [rango-graalvm.wire.in.student :as wire.in.student] [rango-graalvm.wire.out.student :as wire.out.student] - [rango-graalvm.wire.sqlite.student :as wire.sqlite.student] - [schema.core :as s]) - (:import (java.util UUID))) + [rango-graalvm.wire.postgresql.student :as wire.postgresql.student] + [schema.core :as s])) (s/defn wire->internal :- models.student/Student [{:keys [code name class]} :- wire.in.student/Student] @@ -24,10 +23,10 @@ :class (clojure.core/name class) :created-at (str created-at)}) -(s/defn sqlite->internal :- models.student/Student - [{:students/keys [id code name class created_at]} :- wire.sqlite.student/Student] - {:student/id (UUID/fromString id) +(s/defn postgresql->internal :- models.student/Student + [{:keys [id code name class created_at]} :- wire.postgresql.student/Student] + {:student/id id :student/code code :student/name name :student/class (csk/->kebab-case-keyword class) - :student/created-at (jt/local-date-time created_at)}) + :student/created-at created_at}) diff --git a/src/rango_graalvm/components.clj b/src/rango_graalvm/components.clj index 84d3633..8fea144 100644 --- a/src/rango_graalvm/components.clj +++ b/src/rango_graalvm/components.clj @@ -8,9 +8,9 @@ [new-relic-component.core :as component.new-relic] [porteiro-component.admin-component :as porteiro.admin] [porteiro-component.diplomat.http-server :as porteiro.diplomat.http-server] + [postgresql-component.core :as component.postgresql] [rango-graalvm.diplomat.http-server :as diplomat.http-server] [service-component.core :as component.service] - [sqlite-component.core :as component.sqlite] [taoensso.timbre.tools.logging]) (:gen-class)) @@ -24,14 +24,14 @@ :prometheus (ig/ref ::component.prometheus/prometheus)}} ::component.new-relic/new-relic {:components {:config (ig/ref ::component.config/config) :http-client (ig/ref ::component.http-client/http-client)}} - ::component.sqlite/sqlite {:components {:config (ig/ref ::component.config/config)}} - ::porteiro.admin/admin {:components {:config (ig/ref ::component.config/config) - :sqlite (ig/ref ::component.sqlite/sqlite)}} + ::component.postgresql/postgresql {:components {:config (ig/ref ::component.config/config)}} + ::porteiro.admin/admin {:components {:config (ig/ref ::component.config/config) + :postgresql (ig/ref ::component.postgresql/postgresql)}} ::component.routes/routes {:routes (concat diplomat.http-server/routes porteiro.diplomat.http-server/routes)} ::component.service/service {:components {:config (ig/ref ::component.config/config) :routes (ig/ref ::component.routes/routes) :prometheus (ig/ref ::component.prometheus/prometheus) - :sqlite (ig/ref ::component.sqlite/sqlite)}}}) + :postgresql (ig/ref ::component.postgresql/postgresql)}}}) (defn start-system! [] (ig/init config)) diff --git a/src/rango_graalvm/controllers/menu.clj b/src/rango_graalvm/controllers/menu.clj index abb94a8..223c94a 100644 --- a/src/rango_graalvm/controllers/menu.clj +++ b/src/rango_graalvm/controllers/menu.clj @@ -1,5 +1,5 @@ (ns rango-graalvm.controllers.menu - (:require [rango-graalvm.db.sqlite.menu :as database.menu] + (:require [rango-graalvm.db.postgresql.menu :as database.menu] [rango-graalvm.models.menu :as models.menu] [schema.core :as s])) diff --git a/src/rango_graalvm/controllers/reservation.clj b/src/rango_graalvm/controllers/reservation.clj index 12698bd..383bb06 100644 --- a/src/rango_graalvm/controllers/reservation.clj +++ b/src/rango_graalvm/controllers/reservation.clj @@ -1,7 +1,7 @@ (ns rango-graalvm.controllers.reservation - (:require [rango-graalvm.db.sqlite.menu :as database.menu] - [rango-graalvm.db.sqlite.reservation :as database.reservation] - [rango-graalvm.db.sqlite.student :as database.student] + (:require [rango-graalvm.db.postgresql.menu :as database.menu] + [rango-graalvm.db.postgresql.reservation :as database.reservation] + [rango-graalvm.db.postgresql.student :as database.student] [rango-graalvm.logic.reservation :as logic.reservation] [rango-graalvm.models.reservation :as models.reservation] [schema.core :as s])) @@ -37,4 +37,4 @@ database] (-> (database.student/lookup-by-code student-code database) :student/id - (database.reservation/fetch-student-reservation-by-menu menu-id database))) + (database.reservation/lookup-by-student-and-menu menu-id database))) diff --git a/src/rango_graalvm/controllers/student.clj b/src/rango_graalvm/controllers/student.clj index 1f814d6..cf651ba 100644 --- a/src/rango_graalvm/controllers/student.clj +++ b/src/rango_graalvm/controllers/student.clj @@ -1,5 +1,5 @@ (ns rango-graalvm.controllers.student - (:require [rango-graalvm.db.sqlite.student :as database.student] + (:require [rango-graalvm.db.postgresql.student :as database.student] [rango-graalvm.models.sudent :as models.student] [schema.core :as s])) diff --git a/src/rango_graalvm/db/postgresql/menu.clj b/src/rango_graalvm/db/postgresql/menu.clj index 132959a..f32c50b 100644 --- a/src/rango_graalvm/db/postgresql/menu.clj +++ b/src/rango_graalvm/db/postgresql/menu.clj @@ -16,7 +16,6 @@ first adapters.menu/postgresql->internal))) - (s/defn lookup :- (s/maybe models.menu/Menu) [menu-id :- s/Uuid postgresql-pool] diff --git a/src/rango_graalvm/db/postgresql/reservation.clj b/src/rango_graalvm/db/postgresql/reservation.clj new file mode 100644 index 0000000..7a4b988 --- /dev/null +++ b/src/rango_graalvm/db/postgresql/reservation.clj @@ -0,0 +1,55 @@ +(ns rango-graalvm.db.postgresql.reservation + (:require [pg.core :as pg] + [pg.pool :as pool] + [rango-graalvm.adapters.reservation :as adapters.reservation] + [rango-graalvm.models.reservation :as models.reservation] + [schema.core :as s])) + +(s/defn insert! :- models.reservation/Reservation + [{:reservation/keys [id student-id menu-id created-at]} :- models.reservation/Reservation + postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (-> (pg/execute database-conn + "INSERT INTO reservations (id, student_id, menu_id, created_at) VALUES ($1, $2, $3, $4) + returning *" + {:params [id student-id menu-id created-at]}) + first + adapters.reservation/postgresql->internal))) + +(s/defn by-menu :- [models.reservation/Reservation] + [menu-id :- s/Uuid + postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (some-> (pg/execute database-conn + "SELECT * FROM reservations WHERE menu_id = $1" + {:params [menu-id]}) + (->> (map adapters.reservation/postgresql->internal))))) + +(s/defn lookup :- (s/maybe models.reservation/Reservation) + [reservation-id :- s/Uuid + postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (some-> (pg/execute database-conn + "SELECT * FROM reservations WHERE id = $1" + {:params [reservation-id]}) + first + adapters.reservation/postgresql->internal))) + +(s/defn lookup-by-student-and-menu :- (s/maybe models.reservation/Reservation) + [student-id :- s/Uuid + menu-id :- s/Uuid + postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (some-> (pg/execute database-conn + "SELECT * FROM reservations WHERE menu_id = $1 AND student_id = $2" + {:params [menu-id student-id]}) + first + adapters.reservation/postgresql->internal))) + +(s/defn retract! + [reservation-id :- s/Uuid + postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (pg/execute database-conn + "DELETE FROM reservations WHERE id = $1" + {:params [reservation-id]}))) diff --git a/src/rango_graalvm/db/postgresql/student.clj b/src/rango_graalvm/db/postgresql/student.clj new file mode 100644 index 0000000..8d015db --- /dev/null +++ b/src/rango_graalvm/db/postgresql/student.clj @@ -0,0 +1,57 @@ +(ns rango-graalvm.db.postgresql.student + (:require [camel-snake-kebab.core :as csk] + [pg.core :as pg] + [pg.pool :as pool] + [rango-graalvm.adapters.student :as adapters.student] + [rango-graalvm.models.sudent :as models.student] + [schema.core :as s])) + +(s/defn insert! :- models.student/Student + [{:student/keys [id code name class created-at]} :- models.student/Student + postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (-> (pg/execute database-conn + "INSERT INTO students (id, code, name, class, created_at) VALUES ($1, $2, $3, $4, $5) + returning *" + {:params [id code name (csk/->snake_case_string class) created-at]}) + first + adapters.student/postgresql->internal))) + +(s/defn lookup-by-code :- (s/maybe models.student/Student) + [code :- s/Str + postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (some-> (pg/execute database-conn + "SELECT * FROM students WHERE code = $1" + {:params [code]}) + first + adapters.student/postgresql->internal))) + +(s/defn all :- [models.student/Student] + [postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (some-> (pg/execute database-conn + "SELECT * FROM students") + (->> (map adapters.student/postgresql->internal))))) + +(s/defn by-menu-reservation :- [models.student/Student] + [menu-id :- s/Uuid + postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (some-> (pg/execute database-conn + "SELECT students.* + FROM students + JOIN reservations ON students.id = reservations.student_id + WHERE + reservations.menu_id = $1 + ORDER BY students.class" + {:params [menu-id]}) + (->> (map adapters.student/postgresql->internal))))) + +(s/defn retract! + [student-id :- s/Uuid + postgresql-pool] + (pool/with-connection [database-conn postgresql-pool] + (pg/execute database-conn + "DELETE FROM students WHERE id = $1" + {:params [student-id]}))) diff --git a/src/rango_graalvm/db/sqlite/menu.clj b/src/rango_graalvm/db/sqlite/menu.clj deleted file mode 100644 index ad4bff0..0000000 --- a/src/rango_graalvm/db/sqlite/menu.clj +++ /dev/null @@ -1,33 +0,0 @@ -(ns rango-graalvm.db.sqlite.menu - (:require [next.jdbc :as jdbc] - [rango-graalvm.adapters.menu :as adapters.menu] - [rango-graalvm.models.menu :as models.menu] - [schema.core :as s])) - -(s/defn insert! :- models.menu/Menu - [{:menu/keys [id reference-date description created-at]} :- models.menu/Menu - database-conn] - (-> (jdbc/execute! database-conn ["INSERT INTO menus (id, reference_date, description, created_at) VALUES (?, ?, ?, ?) - returning *" - (str id) reference-date description created-at]) - first - adapters.menu/sqlite->internal)) - -(s/defn lookup :- (s/maybe models.menu/Menu) - [menu-id :- s/Uuid - database-conn] - (some-> (jdbc/execute! database-conn ["SELECT * FROM menus WHERE id = $1" (str menu-id)]) - first - adapters.menu/sqlite->internal)) - -(s/defn all :- [models.menu/Menu] - [database-conn] - (some-> (jdbc/execute! database-conn ["SELECT * FROM menus"]) - (->> (map adapters.menu/sqlite->internal)))) - -(s/defn retract! - [menu-id :- s/Uuid - database-conn] - (jdbc/execute! database-conn ["DELETE FROM menus WHERE id = $1" (str menu-id)])) - - diff --git a/src/rango_graalvm/db/sqlite/reservation.clj b/src/rango_graalvm/db/sqlite/reservation.clj deleted file mode 100644 index 95d4076..0000000 --- a/src/rango_graalvm/db/sqlite/reservation.clj +++ /dev/null @@ -1,52 +0,0 @@ -(ns rango-graalvm.db.sqlite.reservation - (:require [next.jdbc :as jdbc] - [rango-graalvm.adapters.reservation :as adapters.reservation] - [rango-graalvm.models.reservation :as models.reservation] - [schema.core :as s])) - -(s/defn insert! :- models.reservation/Reservation - [{:reservation/keys [id student-id menu-id created-at]} :- models.reservation/Reservation - database-conn] - (-> (jdbc/execute! database-conn ["INSERT INTO reservations (id, student_id, menu_id, created_at) VALUES (?, ?, ?, ?) returning *" - (str id) (str student-id) (str menu-id) created-at]) - first - adapters.reservation/sqlite->internal)) - -(s/defn by-menu :- [models.reservation/Reservation] - [menu-id :- s/Uuid - database-conn] - (some->> (jdbc/execute! database-conn ["SELECT * FROM reservations WHERE menu_id = ?" (str menu-id)]) - (map adapters.reservation/sqlite->internal))) - -(s/defn lookup :- (s/maybe models.reservation/Reservation) - [reservation-id :- s/Uuid - database-conn] - (some-> (jdbc/execute! database-conn ["SELECT * FROM reservations WHERE id = ?" (str reservation-id)]) - first - adapters.reservation/sqlite->internal)) - -(s/defn lookup-by-student-and-menu :- (s/maybe models.reservation/Reservation) - [student-id :- s/Uuid - menu-id :- s/Uuid - database-conn] - (some-> (jdbc/execute! database-conn ["SELECT * FROM reservations WHERE menu_id = ? AND student_id = ?" - (str menu-id) (str student-id)]) - first - adapters.reservation/sqlite->internal)) - -(s/defn retract! - [reservation-id :- s/Uuid - database-conn] - (jdbc/execute! database-conn ["DELETE FROM reservations WHERE id = ?" (str reservation-id)])) - -(s/defn fetch-student-reservation-by-menu :- (s/maybe models.reservation/Reservation) - [student-id :- s/Uuid - menu-id :- s/Uuid - database-conn] - (some-> (jdbc/execute! database-conn ["SELECT * - FROM reservations - WHERE - menu_id = ? AND student_id = ?" - (str menu-id) (str student-id)]) - first - adapters.reservation/sqlite->internal)) diff --git a/src/rango_graalvm/db/sqlite/student.clj b/src/rango_graalvm/db/sqlite/student.clj deleted file mode 100644 index 2b8ff0c..0000000 --- a/src/rango_graalvm/db/sqlite/student.clj +++ /dev/null @@ -1,42 +0,0 @@ -(ns rango-graalvm.db.sqlite.student - (:require [camel-snake-kebab.core :as csk] - [next.jdbc :as jdbc] - [rango-graalvm.adapters.student :as adapters.student] - [rango-graalvm.models.sudent :as models.student] - [schema.core :as s])) - -(s/defn insert! :- models.student/Student - [{:student/keys [id code name class created-at]} :- models.student/Student - database-conn] - (-> (jdbc/execute! database-conn ["INSERT INTO students (id, code, name, class, created_at) VALUES (?, ?, ?, ?, ?) returning *" - (str id) code name (csk/->snake_case_string class) created-at]) - first - adapters.student/sqlite->internal)) - -(s/defn lookup-by-code :- (s/maybe models.student/Student) - [code :- s/Str - database-conn] - (some-> (jdbc/execute! database-conn ["SELECT * FROM students WHERE code = ?" code]) - first - adapters.student/sqlite->internal)) - -(s/defn all :- [models.student/Student] - [database-conn] - (some->> (jdbc/execute! database-conn ["SELECT * FROM students"]) - (map adapters.student/sqlite->internal))) - -(s/defn by-menu-reservation :- [models.student/Student] - [menu-id :- s/Uuid - database-conn] - (some->> (jdbc/execute! database-conn ["SELECT students.* - FROM students - JOIN reservations ON students.id = reservations.student_id - WHERE - reservations.menu_id = ? - ORDER BY students.class" (str menu-id)]) - (map adapters.student/sqlite->internal))) - -(s/defn retract! - [student-id :- s/Uuid - database-conn] - (jdbc/execute! database-conn ["DELETE FROM students WHERE id = ?" (str student-id)])) diff --git a/src/rango_graalvm/diplomat/http_server/menu.clj b/src/rango_graalvm/diplomat/http_server/menu.clj index 5e6f5d2..df4e4f4 100644 --- a/src/rango_graalvm/diplomat/http_server/menu.clj +++ b/src/rango_graalvm/diplomat/http_server/menu.clj @@ -5,29 +5,29 @@ (:import (java.util UUID))) (s/defn create-menu! - [{{:keys [menu]} :json-params - {:keys [sqlite]} :components}] + [{{:keys [menu]} :json-params + {:keys [postgresql]} :components}] {:status 200 :body {:menu (-> (adapters.menu/wire->internal menu) - (controllers.menu/create! sqlite) + (controllers.menu/create! postgresql) adapters.menu/internal->wire)}}) (s/defn fetch-one - [{{:keys [menu-id]} :path-params - {:keys [sqlite]} :components}] + [{{:keys [menu-id]} :path-params + {:keys [postgresql]} :components}] {:status 200 - :body {:menu (->> (controllers.menu/fetch-one (UUID/fromString menu-id) sqlite) + :body {:menu (->> (controllers.menu/fetch-one (UUID/fromString menu-id) postgresql) adapters.menu/internal->wire)}}) (s/defn fetch-all - [{{:keys [sqlite]} :components}] + [{{:keys [postgresql]} :components}] {:status 200 - :body {:menus (->> (controllers.menu/fetch-all sqlite) + :body {:menus (->> (controllers.menu/fetch-all postgresql) (map adapters.menu/internal->wire))}}) (s/defn retract-menu! - [{{:keys [menu-id]} :path-params - {:keys [sqlite]} :components}] - (controllers.menu/retract! (UUID/fromString menu-id) sqlite) + [{{:keys [menu-id]} :path-params + {:keys [postgresql]} :components}] + (controllers.menu/retract! (UUID/fromString menu-id) postgresql) {:status 200 :body {}}) diff --git a/src/rango_graalvm/diplomat/http_server/reservation.clj b/src/rango_graalvm/diplomat/http_server/reservation.clj index 2f0c125..aecbc32 100644 --- a/src/rango_graalvm/diplomat/http_server/reservation.clj +++ b/src/rango_graalvm/diplomat/http_server/reservation.clj @@ -6,38 +6,38 @@ (s/defn create-reservation! [{{:keys [reservation]} :json-params - {:keys [sqlite]} :components}] + {:keys [postgresql]} :components}] {:status 200 :body {:reservation (-> (controllers.reservation/create! (:student-code reservation) - (UUID/fromString (:menu-id reservation)) sqlite) + (UUID/fromString (:menu-id reservation)) postgresql) adapters.reservation/internal->wire)}}) (s/defn fetch-reservations-by-menu - [{{:keys [menu-id]} :path-params - {:keys [sqlite]} :components}] + [{{:keys [menu-id]} :path-params + {:keys [postgresql]} :components}] {:status 200 - :body {:reservations (->> (controllers.reservation/fetch-by-menu (UUID/fromString menu-id) sqlite) + :body {:reservations (->> (controllers.reservation/fetch-by-menu (UUID/fromString menu-id) postgresql) (map adapters.reservation/internal->wire))}}) (s/defn fetch-reservation [{{:keys [reservation-id]} :path-params - {:keys [sqlite]} :components}] + {:keys [postgresql]} :components}] {:status 200 - :body {:reservation (->> (controllers.reservation/fetch-reservation (UUID/fromString reservation-id) sqlite) + :body {:reservation (->> (controllers.reservation/fetch-reservation (UUID/fromString reservation-id) postgresql) adapters.reservation/internal->wire)}}) (s/defn retract-reservation! [{{:keys [reservation-id]} :path-params - {:keys [sqlite]} :components}] - (controllers.reservation/retract! (UUID/fromString reservation-id) sqlite) + {:keys [postgresql]} :components}] + (controllers.reservation/retract! (UUID/fromString reservation-id) postgresql) {:status 200 :body {}}) (s/defn fetch-student-reservation-by-menu [{{:keys [student-code menu-id]} :query-params - {:keys [sqlite]} :components}] + {:keys [postgresql]} :components}] {:status 200 :body {:reservation (-> (controllers.reservation/fetch-student-reservation-by-menu student-code (UUID/fromString menu-id) - sqlite) + postgresql) adapters.reservation/internal->wire)}}) diff --git a/src/rango_graalvm/diplomat/http_server/student.clj b/src/rango_graalvm/diplomat/http_server/student.clj index ccc605c..2ab12fb 100644 --- a/src/rango_graalvm/diplomat/http_server/student.clj +++ b/src/rango_graalvm/diplomat/http_server/student.clj @@ -6,28 +6,28 @@ (s/defn create-student! [{{:keys [student]} :json-params - {:keys [sqlite]} :components}] + {:keys [postgresql]} :components}] {:status 200 :body {:student (-> (adapters.student/wire->internal student) - (controllers.student/create! sqlite) + (controllers.student/create! postgresql) adapters.student/internal->wire)}}) (s/defn fetch-all - [{{:keys [sqlite]} :components}] + [{{:keys [postgresql]} :components}] {:status 200 - :body {:students (->> (controllers.student/fetch-all sqlite) + :body {:students (->> (controllers.student/fetch-all postgresql) (map adapters.student/internal->wire))}}) (s/defn fetch-students-by-reservations-menu [{{:keys [menu-id]} :path-params - {:keys [sqlite]} :components}] + {:keys [postgresql]} :components}] {:status 200 - :body {:students (->> (controllers.student/fetch-students-by-menu-reservations (UUID/fromString menu-id) sqlite) + :body {:students (->> (controllers.student/fetch-students-by-menu-reservations (UUID/fromString menu-id) postgresql) (map adapters.student/internal->wire))}}) (s/defn retract-student! [{{:keys [student-id]} :path-params - {:keys [sqlite]} :components}] - (controllers.student/retract! (UUID/fromString student-id) sqlite) + {:keys [postgresql]} :components}] + (controllers.student/retract! (UUID/fromString student-id) postgresql) {:status 200 :body {}}) diff --git a/src/rango_graalvm/interceptors/menu.clj b/src/rango_graalvm/interceptors/menu.clj index 5203ab9..09eaede 100644 --- a/src/rango_graalvm/interceptors/menu.clj +++ b/src/rango_graalvm/interceptors/menu.clj @@ -1,5 +1,5 @@ (ns rango-graalvm.interceptors.menu - (:require [sqlite-component.interceptors :as interceptors.sqlite]) + (:require [postgresql-component.interceptors :as interceptors.postgresql]) (:import (java.util UUID))) (defn menu-resource-identifier-fn @@ -7,5 +7,5 @@ (-> path-params :menu-id UUID/fromString)) (def menu-resource-existence-interceptor-check - (interceptors.sqlite/resource-existence-check-interceptor menu-resource-identifier-fn - "SELECT * FROM menus WHERE id = ?")) + (interceptors.postgresql/resource-existence-check-interceptor menu-resource-identifier-fn + "SELECT * FROM menus WHERE id = $1")) diff --git a/src/rango_graalvm/interceptors/reservation.clj b/src/rango_graalvm/interceptors/reservation.clj index 56989b4..6bc00be 100644 --- a/src/rango_graalvm/interceptors/reservation.clj +++ b/src/rango_graalvm/interceptors/reservation.clj @@ -1,5 +1,5 @@ (ns rango-graalvm.interceptors.reservation - (:require [sqlite-component.interceptors :as interceptors.sqlite]) + (:require [postgresql-component.interceptors :as interceptors.postgresql]) (:import (java.util UUID))) (defn reservation-resource-identifier-fn @@ -7,5 +7,5 @@ (-> path-params :reservation-id UUID/fromString)) (def reservation-resource-existence-interceptor-check - (interceptors.sqlite/resource-existence-check-interceptor reservation-resource-identifier-fn - "SELECT * FROM reservations WHERE id = ?")) + (interceptors.postgresql/resource-existence-check-interceptor reservation-resource-identifier-fn + "SELECT * FROM reservations WHERE id = $1")) diff --git a/src/rango_graalvm/interceptors/student.clj b/src/rango_graalvm/interceptors/student.clj index 4021384..3bb4d73 100644 --- a/src/rango_graalvm/interceptors/student.clj +++ b/src/rango_graalvm/interceptors/student.clj @@ -1,5 +1,5 @@ (ns rango-graalvm.interceptors.student - (:require [sqlite-component.interceptors :as interceptors.sqlite]) + (:require [postgresql-component.interceptors :as interceptors.postgresql]) (:import (java.util UUID))) (defn student-resource-identifier-fn @@ -7,13 +7,13 @@ (-> path-params :student-id UUID/fromString)) (def student-resource-existence-interceptor-check - (interceptors.sqlite/resource-existence-check-interceptor student-resource-identifier-fn - "SELECT * FROM students WHERE id = ?")) + (interceptors.postgresql/resource-existence-check-interceptor student-resource-identifier-fn + "SELECT * FROM students WHERE id = $1")) (defn student-resource-identifier-fn-for-reservation-creation [{{:keys [json-params]} :request}] (-> json-params :reservation :student-code)) (def student-resource-existence-interceptor-check-for-reservation-creation - (interceptors.sqlite/resource-existence-check-interceptor student-resource-identifier-fn-for-reservation-creation - "SELECT * FROM students WHERE code = ?")) + (interceptors.postgresql/resource-existence-check-interceptor student-resource-identifier-fn-for-reservation-creation + "SELECT * FROM students WHERE code = $1")) diff --git a/src/rango_graalvm/wire/postgresql/reservation.clj b/src/rango_graalvm/wire/postgresql/reservation.clj new file mode 100644 index 0000000..e69ca27 --- /dev/null +++ b/src/rango_graalvm/wire/postgresql/reservation.clj @@ -0,0 +1,11 @@ +(ns rango-graalvm.wire.postgresql.reservation + (:require [schema.core :as s]) + (:import (java.time LocalDateTime))) + +(def reservation + {:id s/Uuid + :student_id s/Uuid + :menu_id s/Uuid + :created_at LocalDateTime}) + +(s/defschema Reservation reservation) diff --git a/src/rango_graalvm/wire/postgresql/student.clj b/src/rango_graalvm/wire/postgresql/student.clj new file mode 100644 index 0000000..c465565 --- /dev/null +++ b/src/rango_graalvm/wire/postgresql/student.clj @@ -0,0 +1,12 @@ +(ns rango-graalvm.wire.postgresql.student + (:require [schema.core :as s]) + (:import (java.time LocalDateTime))) + +(def student + {:id s/Uuid + :code s/Str + :name s/Str + :class s/Str + :created_at LocalDateTime}) + +(s/defschema Student student) diff --git a/src/rango_graalvm/wire/sqlite/menu.clj b/src/rango_graalvm/wire/sqlite/menu.clj deleted file mode 100644 index 3e1bf56..0000000 --- a/src/rango_graalvm/wire/sqlite/menu.clj +++ /dev/null @@ -1,11 +0,0 @@ -(ns rango-graalvm.wire.sqlite.menu - (:require [common-clj.schema.extensions :as schema.extensions] - [schema.core :as s])) - -(def menu - {:menus/id schema.extensions/UuidWire - :menus/reference_date schema.extensions/LocalDateWire - :menus/description s/Str - :menus/created_at schema.extensions/LocalDateTimeWire}) - -(s/defschema Menu menu) diff --git a/src/rango_graalvm/wire/sqlite/reservation.clj b/src/rango_graalvm/wire/sqlite/reservation.clj deleted file mode 100644 index 831a9a2..0000000 --- a/src/rango_graalvm/wire/sqlite/reservation.clj +++ /dev/null @@ -1,11 +0,0 @@ -(ns rango-graalvm.wire.sqlite.reservation - (:require [common-clj.schema.extensions :as schema.extensions] - [schema.core :as s])) - -(def reservation - {:reservations/id schema.extensions/UuidWire - :reservations/student_id schema.extensions/UuidWire - :reservations/menu_id schema.extensions/UuidWire - :reservations/created_at schema.extensions/LocalDateTimeWire}) - -(s/defschema Reservation reservation) diff --git a/src/rango_graalvm/wire/sqlite/student.clj b/src/rango_graalvm/wire/sqlite/student.clj deleted file mode 100644 index cef78b0..0000000 --- a/src/rango_graalvm/wire/sqlite/student.clj +++ /dev/null @@ -1,12 +0,0 @@ -(ns rango-graalvm.wire.sqlite.student - (:require [common-clj.schema.extensions :as schema.extensions] - [schema.core :as s])) - -(def student - {:students/id schema.extensions/UuidWire - :students/code s/Str - :students/name s/Str - :students/class s/Str - :students/created_at schema.extensions/LocalDateTimeWire}) - -(s/defschema Student student) diff --git a/test/helpers/fixtures/menu.clj b/test/helpers/fixtures/menu.clj index 5c38b0b..e2010cb 100644 --- a/test/helpers/fixtures/menu.clj +++ b/test/helpers/fixtures/menu.clj @@ -3,7 +3,6 @@ [rango-graalvm.models.menu :as models.menu] [rango-graalvm.wire.in.menu :as wire.in.menu] [rango-graalvm.wire.postgresql.menu :as wire.postgresql.menu] - [rango-graalvm.wire.sqlite.menu :as wire.sqlite.menu] [schema.core :as s])) (def menu-id (random-uuid)) (def raw-menu-reference-date "2024-01-01") @@ -18,10 +17,5 @@ (helpers.schema/generate models.menu/Menu {:menu/id menu-id :menu/description menu-description})) -(s/def sqlite-menu :- wire.sqlite.menu/Menu - (helpers.schema/generate wire.sqlite.menu/Menu {:menus/id (str menu-id) - :menus/reference_date raw-menu-reference-date - :menus/description menu-description})) - (s/def postgresql-menu :- wire.postgresql.menu/Menu (helpers.schema/generate wire.postgresql.menu/Menu {})) diff --git a/test/helpers/fixtures/reservation.clj b/test/helpers/fixtures/reservation.clj index 88771c7..0013aef 100644 --- a/test/helpers/fixtures/reservation.clj +++ b/test/helpers/fixtures/reservation.clj @@ -3,7 +3,7 @@ [fixtures.menu] [fixtures.student] [rango-graalvm.models.reservation :as models.reservation] - [rango-graalvm.wire.sqlite.reservation :as wire.sqlite.reservation] + [rango-graalvm.wire.postgresql.reservation :as wire.postgresql.reservation] [schema.core :as s])) (def reservation-id (random-uuid)) @@ -13,7 +13,5 @@ :reservation/menu-id fixtures.menu/menu-id :reservation/student-id fixtures.student/student-id})) -(s/def sqlite-reservation :- wire.sqlite.reservation/Reservation - (helpers.schema/generate wire.sqlite.reservation/Reservation {:reservations/id (str reservation-id) - :reservations/menu_id (str fixtures.menu/menu-id) - :reservations/student_id (str fixtures.student/student-id)})) +(s/def postgresql-reservation :- wire.postgresql.reservation/Reservation + (helpers.schema/generate wire.postgresql.reservation/Reservation {})) diff --git a/test/helpers/fixtures/student.clj b/test/helpers/fixtures/student.clj index 430d701..9b805a8 100644 --- a/test/helpers/fixtures/student.clj +++ b/test/helpers/fixtures/student.clj @@ -2,7 +2,6 @@ (:require [common-test-clj.helpers.schema :as helpers.schema] [rango-graalvm.models.sudent :as models.student] [rango-graalvm.wire.in.student :as wire.in.student] - [rango-graalvm.wire.sqlite.student :as wire.sqlite.student] [schema.core :as s])) (def student-id (random-uuid)) @@ -16,8 +15,3 @@ (s/def student :- models.student/Student (helpers.schema/generate models.student/Student {:student/id student-id :student/code student-code})) - -(s/def sqlite-student :- wire.sqlite.student/Student - (helpers.schema/generate wire.sqlite.student/Student {:students/id (str student-id) - :students/code student-code - :students/name student-name})) diff --git a/test/integration/aux/components.clj b/test/integration/aux/components.clj index 572fb10..b3ae541 100644 --- a/test/integration/aux/components.clj +++ b/test/integration/aux/components.clj @@ -1,23 +1,22 @@ (ns aux.components (:require [common-clj.integrant-components.config :as component.config] - [common-test-clj.component.sqlite-mock :as component.sqlite-mock] + [common-test-clj.component.postgresql-mock :as component.postgresql-mock] [integrant.core :as ig] [porteiro-component.admin-component :as porteiro.admin] + [postgresql-component.core :as component.postgresql] [rango-graalvm.components :as components] - [service-component.core :as component.service] - [sqlite-component.core :as component.sqlite])) + [service-component.core :as component.service])) -(def schemas ["CREATE TABLE customers (id TEXT PRIMARY KEY, username TEXT NOT NULL, name TEXT, hashed_password TEXT NOT NULL)" - "CREATE TABLE roles (id TEXT PRIMARY KEY, customer_id TEXT NOT NULL, role TEXT NOT NULL)" +(def schemas ["CREATE TABLE customers (id UUID PRIMARY KEY, username VARCHAR(255) NOT NULL, name VARCHAR(255), roles TEXT[], hashed_password VARCHAR(255) NOT NULL);" "CREATE TABLE menus (id UUID PRIMARY KEY, reference_date DATE NOT NULL, description TEXT NOT NULL, created_at TIMESTAMP NOT NULL)" "CREATE TABLE reservations (id UUID PRIMARY KEY, student_id UUID NOT NULL, menu_id UUID NOT NULL, created_at TIMESTAMP NOT NULL)" "CREATE TABLE students (id UUID PRIMARY KEY, code VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, class VARCHAR(255) NOT NULL, created_at TIMESTAMP NOT NULL)"]) (def config-test (-> components/config - (dissoc ::component.sqlite/sqlite) - (merge {::component.config/config {:path "resources/config.example.edn" - :env :test} - ::component.sqlite-mock/sqlite-mock {:schemas schemas}}) - (assoc-in [::component.service/service :components :sqlite] (ig/ref ::component.sqlite-mock/sqlite-mock)) - (assoc-in [::porteiro.admin/admin :components :sqlite] (ig/ref ::component.sqlite-mock/sqlite-mock)))) + (dissoc ::component.postgresql/postgresql) + (merge {::component.config/config {:path "resources/config.example.edn" + :env :test} + ::component.postgresql-mock/postgresql-mock {:schemas schemas}}) + (assoc-in [::component.service/service :components :postgresql] (ig/ref ::component.postgresql-mock/postgresql-mock)) + (assoc-in [::porteiro.admin/admin :components :postgresql] (ig/ref ::component.postgresql-mock/postgresql-mock)))) diff --git a/test/unit/rango_graalvm/adapters/menu_test.clj b/test/unit/rango_graalvm/adapters/menu_test.clj index 39a8b54..d84f9e4 100644 --- a/test/unit/rango_graalvm/adapters/menu_test.clj +++ b/test/unit/rango_graalvm/adapters/menu_test.clj @@ -23,14 +23,6 @@ :created-at string?} (adapters.menu/internal->wire fixtures.menu/menu))))) -(s/deftest sqlite-to-internal-test - (testing "Sqlite Menu to internal Menu" - (is (match? {:menu/created-at jt/local-date-time? - :menu/description fixtures.menu/menu-description - :menu/id fixtures.menu/menu-id - :menu/reference-date jt/local-date?} - (adapters.menu/sqlite->internal fixtures.menu/sqlite-menu))))) - (s/deftest postgresql->internal-test (testing "That we can internalize a postgresql Menu" (is (match? {:menu/id uuid? diff --git a/test/unit/rango_graalvm/adapters/reservation_test.clj b/test/unit/rango_graalvm/adapters/reservation_test.clj index e3e225a..0ad9309 100644 --- a/test/unit/rango_graalvm/adapters/reservation_test.clj +++ b/test/unit/rango_graalvm/adapters/reservation_test.clj @@ -17,10 +17,10 @@ :created-at string?} (adapters.reservation/internal->wire fixtures.reservation/reservation))))) -(s/deftest sqlite-to-internal-test - (testing "That we can convert a sqlite Reservation to a internal Reservation" - (is (match? {:reservation/id fixtures.reservation/reservation-id - :reservation/student-id fixtures.student/student-id - :reservation/menu-id fixtures.menu/menu-id +(s/deftest postgresql->internal-test + (testing "That we can internalize a postgresql Reservation" + (is (match? {:reservation/id uuid? + :reservation/student-id uuid? + :reservation/menu-id uuid? :reservation/created-at jt/local-date-time?} - (adapters.reservation/sqlite->internal fixtures.reservation/sqlite-reservation))))) + (adapters.reservation/postgresql->internal fixtures.reservation/postgresql-reservation))))) diff --git a/test/unit/rango_graalvm/adapters/student_test.clj b/test/unit/rango_graalvm/adapters/student_test.clj index c847bff..cb80d36 100644 --- a/test/unit/rango_graalvm/adapters/student_test.clj +++ b/test/unit/rango_graalvm/adapters/student_test.clj @@ -24,12 +24,3 @@ :class string? :created-at string?} (adapters.student/internal->wire fixtures.student/student))))) - -(s/deftest sqlite-to-internal-test - (testing "That we can convert a sqlite Student to a internal Student" - (is (match? {:student/id fixtures.student/student-id - :student/code fixtures.student/student-code - :student/name fixtures.student/student-name - :student/class keyword? - :student/created-at jt/local-date-time?} - (adapters.student/sqlite->internal fixtures.student/sqlite-student))))) diff --git a/test/unit/rango_graalvm/db/postgresql/menu_test.clj b/test/unit/rango_graalvm/db/postgresql/menu_test.clj index 96a0520..ceed9d3 100644 --- a/test/unit/rango_graalvm/db/postgresql/menu_test.clj +++ b/test/unit/rango_graalvm/db/postgresql/menu_test.clj @@ -1,16 +1,15 @@ (ns rango-graalvm.db.postgresql.menu-test - (:require [clojure.test :refer :all] + (:require [aux.components] + [clojure.test :refer [is testing]] [common-test-clj.component.postgresql-mock :as component.postgresql-mock] [common-test-clj.helpers.schema :as test.helper.schema] - [java-time.api :as jt] [fixtures.menu] - [aux.components] - [rango-graalvm.db.postgresql.menu :as database.menu] + [java-time.api :as jt] [matcher-combinators.test :refer [match?]] + [rango-graalvm.db.postgresql.menu :as database.menu] [rango-graalvm.models.menu :as models.menu] [schema.test :as s])) - (s/deftest insert-test (testing "Should insert a menu" (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] @@ -39,7 +38,6 @@ {:menu/id uuid?}] (database.menu/all conn)))))) - (s/deftest retract-test (testing "Should be able to retract a menu" (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] diff --git a/test/unit/rango_graalvm/db/postgresql/reservation_test.clj b/test/unit/rango_graalvm/db/postgresql/reservation_test.clj new file mode 100644 index 0000000..0226455 --- /dev/null +++ b/test/unit/rango_graalvm/db/postgresql/reservation_test.clj @@ -0,0 +1,72 @@ +(ns rango-graalvm.db.postgresql.reservation-test + (:require [aux.components] + [clojure.test :refer [is testing]] + [common-test-clj.component.postgresql-mock :as component.postgresql-mock] + [common-test-clj.helpers.schema :as test.helper.schema] + [fixtures.menu] + [fixtures.reservation] + [fixtures.student] + [java-time.api :as jt] + [matcher-combinators.test :refer [match?]] + [rango-graalvm.db.postgresql.reservation :as database.reservation] + [rango-graalvm.models.reservation :as models.reservation] + [schema.test :as s])) + +(s/deftest insert-test + (testing "Should insert a reservation" + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] + (is (match? {:reservation/id uuid? + :reservation/student-id uuid? + :reservation/menu-id uuid? + :reservation/created-at jt/local-date-time?} + (database.reservation/insert! fixtures.reservation/reservation conn)))))) + +(s/deftest by-menu-test + (testing "Should be able to lookup reservations by menu" + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] + (database.reservation/insert! fixtures.reservation/reservation conn) + (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) conn) + (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) conn) + + (is (match? [{:reservation/menu-id fixtures.menu/menu-id}] + (database.reservation/by-menu fixtures.menu/menu-id conn))) + + (is (= [] + (database.reservation/by-menu (random-uuid) conn)))))) + +(s/deftest lookup-test + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] + (database.reservation/insert! fixtures.reservation/reservation conn) + + (is (match? {:reservation/id fixtures.reservation/reservation-id} + (database.reservation/lookup fixtures.reservation/reservation-id conn))) + + (is (nil? (database.reservation/lookup (random-uuid) conn))))) + +(s/deftest lookup-by-student-and-menu-test + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] + (database.reservation/insert! fixtures.reservation/reservation conn) + (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) conn) + (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) conn) + + (is (match? {:reservation/menu-id fixtures.menu/menu-id + :reservation/student-id fixtures.student/student-id} + (database.reservation/lookup-by-student-and-menu fixtures.student/student-id fixtures.menu/menu-id conn))) + + (is (nil? (database.reservation/lookup-by-student-and-menu fixtures.student/student-id (random-uuid) conn))) + + (is (nil? (database.reservation/lookup-by-student-and-menu (random-uuid) fixtures.menu/menu-id conn))) + + (is (nil? (database.reservation/lookup-by-student-and-menu (random-uuid) (random-uuid) conn))))) + +(s/deftest retract-test + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] + + (is (match? {:reservation/id fixtures.reservation/reservation-id + :reservation/student-id fixtures.student/student-id + :reservation/menu-id fixtures.menu/menu-id + :reservation/created-at jt/local-date-time?} + (database.reservation/insert! fixtures.reservation/reservation conn))) + + (is (match? {:deleted 1} + (database.reservation/retract! fixtures.reservation/reservation-id conn))))) diff --git a/test/unit/rango_graalvm/db/sqlite/student_test.clj b/test/unit/rango_graalvm/db/postgresql/student_test.clj similarity index 58% rename from test/unit/rango_graalvm/db/sqlite/student_test.clj rename to test/unit/rango_graalvm/db/postgresql/student_test.clj index 8f00941..e9cdc21 100644 --- a/test/unit/rango_graalvm/db/sqlite/student_test.clj +++ b/test/unit/rango_graalvm/db/postgresql/student_test.clj @@ -1,69 +1,69 @@ -(ns rango-graalvm.db.sqlite.student-test +(ns rango-graalvm.db.postgresql.student-test (:require [aux.components] [clojure.test :refer [is testing]] - [common-test-clj.component.sqlite-mock :as component.sqlite-mock] + [common-test-clj.component.postgresql-mock :as component.postgresql-mock] [common-test-clj.helpers.schema :as test.helper.schema] [fixtures.menu] [fixtures.reservation] [fixtures.student] [java-time.api :as jt] [matcher-combinators.test :refer [match?]] - [rango-graalvm.db.sqlite.reservation :as database.reservation] - [rango-graalvm.db.sqlite.student :as database.student] + [rango-graalvm.db.postgresql.reservation :as database.reservation] + [rango-graalvm.db.postgresql.student :as database.student] [rango-graalvm.models.reservation :as models.reservation] [rango-graalvm.models.sudent :as models.student] [schema.test :as s])) (s/deftest insert-test (testing "Should insert a Student entity to database" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] (is (match? {:student/id fixtures.student/student-id :student/code fixtures.student/student-code :student/name string? :student/class keyword? :student/created-at jt/local-date-time?} - (database.student/insert! fixtures.student/student database-conn)))))) + (database.student/insert! fixtures.student/student conn)))))) (s/deftest lookup-by-code-test (testing "Should be able to query a student by code" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.student/insert! fixtures.student/student database-conn) + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] + (database.student/insert! fixtures.student/student conn) (is (match? {:student/code fixtures.student/student-code} - (database.student/lookup-by-code fixtures.student/student-code database-conn))) + (database.student/lookup-by-code fixtures.student/student-code conn))) - (is (nil? (database.student/lookup-by-code "8c045cae" database-conn)))))) + (is (nil? (database.student/lookup-by-code "8c045cae" conn)))))) (s/deftest all-test (testing "Should be able to query all students" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.student/insert! fixtures.student/student database-conn) - (database.student/insert! (test.helper.schema/generate models.student/Student {}) database-conn) - (database.student/insert! (test.helper.schema/generate models.student/Student {}) database-conn) + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] + (database.student/insert! fixtures.student/student conn) + (database.student/insert! (test.helper.schema/generate models.student/Student {}) conn) + (database.student/insert! (test.helper.schema/generate models.student/Student {}) conn) (is (match? [{:student/code fixtures.student/student-code} {:student/code string?} {:student/code string?}] - (database.student/all database-conn)))))) + (database.student/all conn)))))) (s/deftest by-menu-reservation-test (testing "Should be able to query students by menu reservation" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.student/insert! fixtures.student/student database-conn) - (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation fixtures.reservation/reservation) database-conn) - (database.student/insert! (test.helper.schema/generate models.student/Student {}) database-conn) - (database.student/insert! (test.helper.schema/generate models.student/Student {}) database-conn) + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] + (database.student/insert! fixtures.student/student conn) + (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation fixtures.reservation/reservation) conn) + (database.student/insert! (test.helper.schema/generate models.student/Student {}) conn) + (database.student/insert! (test.helper.schema/generate models.student/Student {}) conn) (is (match? [{:student/code fixtures.student/student-code}] - (database.student/by-menu-reservation fixtures.menu/menu-id database-conn)))))) + (database.student/by-menu-reservation fixtures.menu/menu-id conn)))))) (s/deftest retract-test (testing "Should be able to retract a student" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.student/insert! fixtures.student/student database-conn) + (let [conn (component.postgresql-mock/postgresql-pool-mock aux.components/schemas)] + (database.student/insert! fixtures.student/student conn) - (is (match? [{:next.jdbc/update-count 1}] - (database.student/retract! fixtures.student/student-id database-conn))) + (is (match? {:deleted 1} + (database.student/retract! fixtures.student/student-id conn))) (is (match? [] - (database.student/all database-conn)))))) + (database.student/all conn)))))) diff --git a/test/unit/rango_graalvm/db/sqlite/menu_test.clj b/test/unit/rango_graalvm/db/sqlite/menu_test.clj deleted file mode 100644 index 2aacfd8..0000000 --- a/test/unit/rango_graalvm/db/sqlite/menu_test.clj +++ /dev/null @@ -1,61 +0,0 @@ -(ns rango-graalvm.db.sqlite.menu-test - (:require [aux.components] - [clojure.test :refer [is testing]] - [common-test-clj.component.sqlite-mock :as component.sqlite-mock] - [common-test-clj.helpers.schema :as test.helper.schema] - [fixtures.menu] - [java-time.api :as jt] - [matcher-combinators.test :refer [match?]] - [rango-graalvm.db.sqlite.menu :as database.menu] - [rango-graalvm.models.menu :as models.menu] - [schema.test :as s])) - -(s/deftest insert-test - (testing "That we are able to insert a menu into the database" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (is (match? {:menu/id fixtures.menu/menu-id - :menu/created-at jt/local-date-time? - :menu/description fixtures.menu/menu-description - :menu/reference-date jt/local-date?} - (database.menu/insert! fixtures.menu/menu database-conn)))))) - -(s/deftest lookup-test - (testing "Should be able to query a menu by its id" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.menu/insert! fixtures.menu/menu database-conn) - (is (match? {:menu/id fixtures.menu/menu-id - :menu/created-at jt/local-date-time? - :menu/description fixtures.menu/menu-description - :menu/reference-date jt/local-date?} - (database.menu/lookup fixtures.menu/menu-id database-conn))) - - (is (nil? (database.menu/lookup (random-uuid) database-conn)))))) - -(s/deftest all-test - (testing "Should return all menus" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.menu/insert! (test.helper.schema/generate models.menu/Menu {}) database-conn) - (database.menu/insert! (test.helper.schema/generate models.menu/Menu {}) database-conn) - (database.menu/insert! (test.helper.schema/generate models.menu/Menu {}) database-conn) - - (is (match? [{:menu/id uuid?} - {:menu/id uuid?} - {:menu/id uuid?}] - (database.menu/all database-conn)))))) - -(s/deftest retract-test - (testing "Should return all menus" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.menu/insert! fixtures.menu/menu database-conn) - (database.menu/insert! (test.helper.schema/generate models.menu/Menu {}) database-conn) - (database.menu/insert! (test.helper.schema/generate models.menu/Menu {}) database-conn) - - (is (= [{:next.jdbc/update-count 1}] - (database.menu/retract! fixtures.menu/menu-id database-conn))) - - (is (match? [{:menu/id uuid?} - {:menu/id uuid?}] - (database.menu/all database-conn))) - - (is (= [{:next.jdbc/update-count 0}] - (database.menu/retract! (random-uuid) database-conn)))))) diff --git a/test/unit/rango_graalvm/db/sqlite/reservation_test.clj b/test/unit/rango_graalvm/db/sqlite/reservation_test.clj deleted file mode 100644 index 35ea467..0000000 --- a/test/unit/rango_graalvm/db/sqlite/reservation_test.clj +++ /dev/null @@ -1,90 +0,0 @@ -(ns rango-graalvm.db.sqlite.reservation-test - (:require [aux.components] - [clojure.test :refer [is testing]] - [common-test-clj.component.sqlite-mock :as component.sqlite-mock] - [common-test-clj.helpers.schema :as test.helper.schema] - [fixtures.menu] - [fixtures.reservation] - [fixtures.student] - [java-time.api :as jt] - [matcher-combinators.test :refer [match?]] - [rango-graalvm.db.sqlite.reservation :as database.reservation] - [rango-graalvm.models.reservation :as models.reservation] - [schema.test :as s])) - -(s/deftest insert-test - (testing "Should insert a reservation" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (is (match? {:reservation/id fixtures.reservation/reservation-id - :reservation/student-id fixtures.student/student-id - :reservation/menu-id fixtures.menu/menu-id - :reservation/created-at jt/local-date-time?} - (database.reservation/insert! fixtures.reservation/reservation database-conn)))))) - -(s/deftest by-menu-test - (testing "Should insert a reservation" - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.reservation/insert! fixtures.reservation/reservation database-conn) - (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) database-conn) - (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) database-conn) - - (is (match? [{:reservation/menu-id fixtures.menu/menu-id}] - (database.reservation/by-menu fixtures.menu/menu-id database-conn))) - - (is (= [] - (database.reservation/by-menu (random-uuid) database-conn)))))) - -(s/deftest lookup-test - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.reservation/insert! fixtures.reservation/reservation database-conn) - - (is (match? {:reservation/id fixtures.reservation/reservation-id} - (database.reservation/lookup fixtures.reservation/reservation-id database-conn))) - - (is (nil? (database.reservation/lookup (random-uuid) database-conn))))) - -(s/deftest lookup-by-student-and-menu-test - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.reservation/insert! fixtures.reservation/reservation database-conn) - (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) database-conn) - (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) database-conn) - - (is (match? {:reservation/menu-id fixtures.menu/menu-id - :reservation/student-id fixtures.student/student-id} - (database.reservation/lookup-by-student-and-menu fixtures.student/student-id fixtures.menu/menu-id database-conn))) - - (is (nil? (database.reservation/lookup-by-student-and-menu fixtures.student/student-id (random-uuid) database-conn))) - - (is (nil? (database.reservation/lookup-by-student-and-menu (random-uuid) fixtures.menu/menu-id database-conn))) - - (is (nil? (database.reservation/lookup-by-student-and-menu (random-uuid) (random-uuid) database-conn))))) - -(s/deftest retract-test - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - - (is (match? {:reservation/id fixtures.reservation/reservation-id - :reservation/student-id fixtures.student/student-id - :reservation/menu-id fixtures.menu/menu-id - :reservation/created-at jt/local-date-time?} - (database.reservation/insert! fixtures.reservation/reservation database-conn))) - - (is (match? [{:next.jdbc/update-count 1}] - (database.reservation/retract! fixtures.reservation/reservation-id database-conn))))) - -(s/deftest fetch-student-reservation-by-menu-test - (let [database-conn (component.sqlite-mock/sqlite-unit-mock aux.components/schemas)] - (database.reservation/insert! fixtures.reservation/reservation database-conn) - (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) database-conn) - (database.reservation/insert! (test.helper.schema/generate models.reservation/Reservation {}) database-conn) - - (is (match? {:reservation/id fixtures.reservation/reservation-id - :reservation/student-id fixtures.student/student-id - :reservation/menu-id fixtures.menu/menu-id - :reservation/created-at jt/local-date-time?} - (database.reservation/fetch-student-reservation-by-menu fixtures.student/student-id fixtures.menu/menu-id database-conn))) - - (is (nil? (database.reservation/fetch-student-reservation-by-menu (random-uuid) fixtures.menu/menu-id database-conn))) - - (is (nil? (database.reservation/fetch-student-reservation-by-menu fixtures.student/student-id (random-uuid) database-conn))) - - (is (nil? (database.reservation/fetch-student-reservation-by-menu (random-uuid) (random-uuid) database-conn)))))