-
-
Save little-arhat/c4da3415b88a0ddf8214f09dc44fff9a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns our.internal.library.test.client | |
(:require [clojure.core.async :as a] | |
[com.stuartsierra.component :as component] | |
[our.internal.library.http-client :as client] | |
[our.internal.library.test.mocks :as mocks])) | |
(defn define-mock | |
[mocks service]) | |
(defrecord Client [mocks started-mocks] | |
component/Lifecycle | |
(start [this] | |
(assoc this :started-mocks (mocks/start mocks))) | |
(stop [this] | |
(mocks/check-mocks started-mocks) | |
this) | |
client/ServiceClient | |
(send-request [this method data] | |
(mocks/activation! started-mocks {:method method :arg data}))) | |
(defmacro mocked-client | |
[& defs] | |
(let [mocks (->> defs | |
(partition 4) | |
(map (fn [[method pattern _ value]] | |
{:method method | |
:pattern pattern | |
:value value | |
:options (assoc (meta pattern) | |
:dynamic true)})))] | |
`(let [mocks# (-> (mocks/mocks) | |
~@(for [m mocks] | |
`(mocks/define {:method ~(:method m) :arg ~(:pattern m)} | |
(fn [v#] (a/go (~(:value m) (:arg v#)))) ~(:options m))))] | |
(map->Client {:mocks mocks#})))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment