Skip to content

Commit

Permalink
add unit tests for adapters
Browse files Browse the repository at this point in the history
  • Loading branch information
macielti committed Nov 11, 2024
1 parent 3df6ae0 commit c379441
Show file tree
Hide file tree
Showing 20 changed files with 210 additions and 29 deletions.
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,11 @@ README.md
.git
.github
/resources
/test
/doc
/dev-resources
/.lsp
/.github
/.clj-kondo
/.idea

9 changes: 9 additions & 0 deletions .idea/libraries/Leiningen__danlentz_clj_uuid_0_1_9.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 0 additions & 9 deletions .idea/libraries/Leiningen__danlentz_clj_uuid_0_2_0.xml

This file was deleted.

This file was deleted.

9 changes: 9 additions & 0 deletions .idea/libraries/Leiningen__primitive_math_0_1_6.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@
:test-paths ["test/unit" "test/integration" "test/helpers"]

:dependencies [[net.clojars.macielti/common-test-clj "1.1.0"]
[danlentz/clj-uuid "0.2.0"]
[danlentz/clj-uuid "0.1.9"]
[hashp "0.2.2"]
[nubank/matcher-combinators "3.9.1"]
[com.github.igrishaev/pg2-migration "0.1.20"]]

:injections [(require 'hashp.core)]

:repl-options {:init-ns rango.components}
:repl-options {:init-ns rango-graalvm.components}

:aliases {"clean-ns" ["clojure-lsp" "clean-ns" "--dry"] ;; check if namespaces are clean
"format" ["clojure-lsp" "format" "--dry"] ;; check if namespaces are formatted
Expand Down
3 changes: 2 additions & 1 deletion src/rango_graalvm/adapters/menu.clj
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
[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.postgresql.menu :as wire.postgresql.menu]
[schema.core :as s]))

(s/defn wire->internal :- models.menu/Menu
Expand All @@ -20,7 +21,7 @@
:created-at (str created-at)})

(s/defn postgresql->internal :- models.menu/Menu
[{:keys [] :as menu}]
[{:keys [] :as menu} :- wire.postgresql.menu/Menu]
{:menu/id (:id menu)
:menu/reference-date (:reference_date menu)
:menu/description (:description menu)
Expand Down
3 changes: 2 additions & 1 deletion src/rango_graalvm/adapters/reservation.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(ns rango-graalvm.adapters.reservation
(:require [rango-graalvm.models.reservation :as models.reservation]
[rango-graalvm.wire.out.reservation :as wire.out.reservation]
[rango-graalvm.wire.postgresql.reservation :as wire.postgresql.reservation]
[schema.core :as s]))

(s/defn internal->wire :- wire.out.reservation/Reservation
Expand All @@ -11,7 +12,7 @@
:created-at (str created-at)})

(s/defn postgresql->internal :- models.reservation/Reservation
[{:keys [id student_id menu_id created_at]}]
[{: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
Expand Down
3 changes: 2 additions & 1 deletion src/rango_graalvm/adapters/student.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
[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.postgresql.student :as wire.postgresql.student]
[schema.core :as s]))

(s/defn wire->internal :- models.student/Student
Expand All @@ -23,7 +24,7 @@
:created-at (str created-at)})

(s/defn postgresql->internal :- models.student/Student
[{:keys [id code name class created_at]}]
[{:keys [id code name class created_at]} :- wire.postgresql.student/Student]
{:student/id id
:student/code code
:student/name name
Expand Down
6 changes: 3 additions & 3 deletions src/rango_graalvm/components.clj
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
(ns rango-graalvm.components
(:require [clojure.tools.logging :as log]
[common-clj.integrant-components.config :as component.config]
[common-clj.integrant-components.routes :as component.routes]
[common-clj.integrant-components.prometheus :as component.prometheus]
[common-clj.integrant-components.http-client :as component.http-client]
[new-relic-component.core :as component.new-relic]
[common-clj.integrant-components.prometheus :as component.prometheus]
[common-clj.integrant-components.routes :as component.routes]
[integrant.core :as ig]
[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]
Expand Down
5 changes: 2 additions & 3 deletions src/rango_graalvm/models/menu.clj
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
(ns rango-graalvm.models.menu
(:require [schema.core :as s])
(:import (java.time LocalDate LocalDateTime)
(org.pg.processor Uuid)))
(:import (java.time LocalDate LocalDateTime)))

(def menu
{:menu/id Uuid
{:menu/id s/Uuid
:menu/reference-date LocalDate
:menu/description s/Str
:menu/created-at LocalDateTime})
Expand Down
11 changes: 11 additions & 0 deletions src/rango_graalvm/wire/postgresql/menu.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
(ns rango-graalvm.wire.postgresql.menu
(:require [schema.core :as s])
(:import (java.time LocalDate LocalDateTime)))

(def menu
{:id s/Uuid
:reference_date LocalDate
:description s/Str
:created_at LocalDateTime})

(s/defschema Menu menu)
11 changes: 11 additions & 0 deletions src/rango_graalvm/wire/postgresql/reservation.clj
Original file line number Diff line number Diff line change
@@ -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)
12 changes: 12 additions & 0 deletions src/rango_graalvm/wire/postgresql/student.clj
Original file line number Diff line number Diff line change
@@ -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)
20 changes: 20 additions & 0 deletions test/helpers/fixtures/menu.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
(ns fixtures.menu
(:require [common-test-clj.helpers.schema :as helpers.schema]
[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]
[schema.core :as s]))

(def raw-menu-reference-date "2024-01-01")
(def menu-description "Bolo de cenoura com cobertura de chocolate")

(s/def wire-in-menu :- wire.in.menu/Menu
(helpers.schema/generate wire.in.menu/Menu
{:reference-date raw-menu-reference-date
:description menu-description}))

(s/def postgresql-menu :- wire.postgresql.menu/Menu
(helpers.schema/generate wire.postgresql.menu/Menu {}))

(s/def menu :- models.menu/Menu
(helpers.schema/generate models.menu/Menu {}))
11 changes: 11 additions & 0 deletions test/helpers/fixtures/reservation.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
(ns fixtures.reservation
(:require [common-test-clj.helpers.schema :as helpers.schema]
[rango-graalvm.models.reservation :as models.reservation]
[rango-graalvm.wire.postgresql.reservation :as wire.postgresql.reservation]
[schema.core :as s]))

(s/def reservation :- models.reservation/Reservation
(helpers.schema/generate models.reservation/Reservation {}))

(s/def postgresql-reservation :- wire.postgresql.reservation/Reservation
(helpers.schema/generate wire.postgresql.reservation/Reservation {}))
15 changes: 15 additions & 0 deletions test/helpers/fixtures/student.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
(ns fixtures.student
(: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.postgresql.student :as wire.postgresql.student]
[schema.core :as s]))

(s/def wire-in-student :- wire.in.student/Student
(helpers.schema/generate wire.in.student/Student {}))

(s/def student :- models.student/Student
(helpers.schema/generate models.student/Student {}))

(s/def postgresql-student :- wire.postgresql.student/Student
(helpers.schema/generate wire.postgresql.student/Student {}))
32 changes: 32 additions & 0 deletions test/unit/rango_graalvm/adapters/menu_test.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
(ns rango-graalvm.adapters.menu-test
(:require [clj-uuid]
[clojure.test :refer [is testing]]
[fixtures.menu]
[java-time.api :as jt]
[matcher-combinators.test :refer [match?]]
[rango-graalvm.adapters.menu :as adapters.menu]
[schema.test :as s]))

(s/deftest wire->internal-test
(testing "That we can covert a wire incoming Menu to a internal Menu"
(is (match? {:menu/created-at jt/local-date-time?
:menu/description "Bolo de cenoura com cobertura de chocolate"
:menu/id uuid?
:menu/reference-date jt/local-date?}
(adapters.menu/wire->internal fixtures.menu/wire-in-menu)))))

(s/deftest internal->wire-test
(testing "That we can convert a internal Menu to a wire outgoing Menu"
(is (match? {:id clj-uuid/uuid-string?
:reference-date string?
:description string?
:created-at string?}
(adapters.menu/internal->wire fixtures.menu/menu)))))

(s/deftest postgresql->internal-test
(testing "That we can internalize a postgresql Menu"
(is (match? {:menu/id uuid?
:menu/reference-date jt/local-date?
:menu/description string?
:menu/created-at jt/local-date-time?}
(adapters.menu/postgresql->internal fixtures.menu/postgresql-menu)))))
24 changes: 24 additions & 0 deletions test/unit/rango_graalvm/adapters/reservation_test.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
(ns rango-graalvm.adapters.reservation-test
(:require [clj-uuid]
[clojure.test :refer [is testing]]
[fixtures.reservation]
[java-time.api :as jt]
[matcher-combinators.test :refer [match?]]
[rango-graalvm.adapters.reservation :as adapters.reservation]
[schema.test :as s]))

(s/deftest internal->wire-test
(testing "That we can convert a internal Reservation to a wire outgoing Reservation"
(is (match? {:id clj-uuid/uuid-string?
:student-id clj-uuid/uuid-string?
:menu-id clj-uuid/uuid-string?
:created-at string?}
(adapters.reservation/internal->wire fixtures.reservation/reservation)))))

(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/postgresql->internal fixtures.reservation/postgresql-reservation)))))
35 changes: 35 additions & 0 deletions test/unit/rango_graalvm/adapters/student_test.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
(ns rango-graalvm.adapters.student-test
(:require [clj-uuid]
[clojure.test :refer [is testing]]
[fixtures.student]
[java-time.api :as jt]
[matcher-combinators.test :refer [match?]]
[rango-graalvm.adapters.student :as adapters.student]
[schema.test :as s]))

(s/deftest wire->internal-test
(testing "That we can convert a wire incoming Student to a internal Student"
(is (match? {:student/id uuid?
:student/code string?
:student/name string?
:student/class keyword?
:student/created-at jt/local-date-time?}
(adapters.student/wire->internal fixtures.student/wire-in-student)))))

(s/deftest internal->wire-test
(testing "That we can convert a internal Student to a wire outgoing Student"
(is (match? {:id clj-uuid/uuid-string?
:code string?
:name string?
:class string?
:created-at string?}
(adapters.student/internal->wire fixtures.student/student)))))

(s/deftest postgresql->internal-test
(testing "That we can internalize a postgresql Student"
(is (match? {:student/id uuid?
:student/code string?
:student/name string?
:student/class keyword?
:student/created-at jt/local-date-time?}
(adapters.student/postgresql->internal fixtures.student/postgresql-student)))))

0 comments on commit c379441

Please sign in to comment.