(.module: [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.ascii/upper 1) home (random.ascii/lower 10) working_directory (random.ascii/lower 10) .let [fs (file.mock /) program (program.async (program.mock environment.empty home working_directory)) repo (/.repository program fs)] uri (random.ascii/lower 10) expected (\ ! each (\ utf8.codec encoded) (random.ascii/lower 10))] ($_ _.and (in (do async.monad [before_upload (\ repo download uri) _ (\ repo upload uri expected) actual (\ repo download uri)] (_.cover' [/.repository] (and (case before_upload {#try.Success _} false {#try.Failure _} true) (|> actual (try\each (binary\= expected)) (try.else false)))))) ))))