component

NaleagDeco 2018-03-17T22:12:49.000008Z

Hello! Apologies if this is a beginner question asked somewhere more appropriate, but: I've been trying to convert Eric Normand's article on using database transactions for quicker integration test cleanup into something that works with component. So far I have:

(defn with-transaction-fixture
  [f]
  (let [db (:db *system*)
        spec (:spec db)]
    (dbc/migrate db)
    (sql/with-db-transaction [spec spec]
      (sql/db-set-rollback-only! spec)
      (binding [*system* (assoc-in *system* [:db :spec] spec)]
        (f)))))
which worked well originally, until I put a bunch of my logic into a second component for business logic which uses the db component as a dependency. I could write a second fixture that performs the binding on that second component, but I'm wondering if there's something that wouldn't require a variant for every db-using-component I define and test. This feels like a pattern that should be common and yet I'm not seeing many examples of it in github for some reason (perhaps I don't know the right code-snippet to look for)