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