(.require [library [lux (.except) [abstract [equivalence (.only Equivalence)] [hash (.only Hash)] ["[0]" monad (.only do)]] [control ["[0]" io] ["[0]" try (.only Try)] ["[0]" exception (.only Exception)] [concurrency ["[0]" async (.only Async)]]] [data ["[0]" product] ["[0]" binary (.only Binary) ["_[1]" \\test]] ["[0]" text (.only) ["%" \\format (.only format)]] [collection ["[0]" dictionary (.only Dictionary)]]] [math ["[0]" random (.only Random)]] [world [net ["[0]" uri (.only URI)]]] [test ["_" property (.only Test)] ["[0]" unit]]]] ["[0]" / ["[1][0]" identity] ["[1][0]" origin] ["[1][0]" local] ["[1][0]" remote] [// ["@[0]" artifact]]] [\\program ["[0]" / (.only) ["[0]" remote] ["/[1]" // ["[1][0]" artifact (.only Version Artifact) ["[1]/[0]" extension (.only Extension)]]]]]) (def .public (spec valid_artifact invalid_artifact subject) (-> Artifact Artifact (/.Repository Async) Test) (do random.monad [expected (_binary.random 100)] (in (all unit.and (do async.monad [.let [good_uri (remote.uri (the //artifact.#version valid_artifact) valid_artifact //artifact/extension.lux_library)] good_upload! (of subject upload good_uri expected) good_download! (of subject download good_uri) .let [bad_uri (remote.uri (the //artifact.#version invalid_artifact) invalid_artifact //artifact/extension.lux_library)] bad_upload! (of subject upload bad_uri expected) bad_download! (of subject download bad_uri)] (unit.coverage [/.Repository] (let [successfull_flow! (when [good_upload! good_download!] [{try.#Success _} {try.#Success actual}] (of binary.equivalence = expected actual) _ false) failed_flow! (when [bad_upload! bad_download!] [{try.#Failure _} {try.#Failure _}] true _ false)] (and successfull_flow! failed_flow!)))) )))) (def artifact (-> Version Artifact) (|>> ["com.github.luxlang" "test-artifact"])) (with_template [] [(exception.def ( uri) (Exception URI) (exception.report (list ["URI" (%.text uri)])))] [not_found] [cannot_upload] ) (type Store (Dictionary URI Binary)) (def .public empty Store (dictionary.empty text.hash)) (def valid_version Version "1.2.3-YES") (def invalid_version Version "4.5.6-NO") (def .public mock (/.Mock Store) (implementation (def the_description "@") (def (on_download uri state) (when (dictionary.value uri state) {.#Some content} (when (binary.size content) 0 (exception.except ..not_found [uri]) _ {try.#Success [state content]}) {.#None} (exception.except ..not_found [uri]))) (def (on_upload uri content state) (if (dictionary.key? state uri) (exception.except ..cannot_upload [uri]) {try.#Success (dictionary.has uri content state)})))) (def .public test Test (<| (_.covering /._) (all _.and (_.for [/.mock /.Mock] (do random.monad [_ (in [])] (..spec (..artifact ..valid_version) (..artifact ..invalid_version) (/.mock ..mock (|> ..empty (dictionary.has (remote.uri ..invalid_version (..artifact ..invalid_version) //artifact/extension.lux_library) (binary.empty 0))))))) /identity.test /origin.test /local.test /remote.test )))