(.require [library [lux (.except) [abstract [monad (.only do)]] [control ["[0]" try (.use "[1]#[0]" functor)] [concurrency ["[0]" async]]] [data ["[0]" binary (.use "[1]#[0]" equivalence)] [text [encoding ["[0]" utf8]]]] [math ["[0]" random]] [world ["[0]" file] ["[0]" environment ["program" /] ["[1]" \\parser]]] [test ["[0]" unit] ["_" property (.only Test)]]]] [\\program ["[0]" /]]) (def .public test Test (<| (_.covering /._) (do [! random.monad] [/ (random.upper_cased 1) home (random.lower_cased 10) working_directory (random.lower_cased 10) .let [fs (file.mock /) program (program.async (program.mock environment.empty home working_directory)) repo (/.repository program fs)] uri (random.lower_cased 10) expected (at ! each (at utf8.codec encoded) (random.lower_cased 10))] (all _.and (in (do async.monad [before_upload (at repo download uri) _ (at repo upload uri expected) actual (at repo download uri)] (unit.coverage [/.repository] (and (when before_upload {try.#Success _} false {try.#Failure _} true) (|> actual (try#each (binary#= expected)) (try.else false)))))) ))))