aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/world/net/http/client.lux
blob: 612d599ff6ba96ab8cdf8ab02d96e7149d620686 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
(.module:
  [lux #*
   ["_" test (#+ Test)]
   [abstract
    [monad (#+ do)]]
   [control
    [pipe (#+ do>)]
    ["." io (#+ IO)]
    ["." try]
    ["." function]]
   [data
    ["." binary]
    ["." product]
    [text
     ["%" format (#+ format)]
     [encoding
      ["." utf8]]]]
   [math
    ["." random (#+ Random)]
    [number
     ["." nat]]]]
  [\\
   ["." /
    ["/#" //
     ["#." status]]]])

(def: #export test
  Test
  (<| (_.covering /._)
      (_.for [/.Client])
      (do random.monad
        [on_post random.nat
         on_get random.nat
         on_put random.nat
         on_patch random.nat
         on_delete random.nat
         on_head random.nat
         on_connect random.nat
         on_options random.nat
         on_trace random.nat
         #let [mock (: (/.Client IO)
                       (implementation
                        (def: (request method url headers data)
                          (io.io (let [value (case method
                                               #//.Post on_post
                                               #//.Get on_get
                                               #//.Put on_put
                                               #//.Patch on_patch
                                               #//.Delete on_delete
                                               #//.Head on_head
                                               #//.Connect on_connect
                                               #//.Options on_options
                                               #//.Trace on_trace)
                                       data (|> value
                                                (\ nat.decimal encode)
                                                (\ utf8.codec encode))]
                                   (#try.Success [//status.ok
                                                  {#//.headers headers
                                                   #//.body (function (_ ?wanted_bytes)
                                                              (io.io (#try.Success [(binary.size data)
                                                                                    data])))}]))))))]]
        (`` ($_ _.and
                (~~ (template [<definition> <expected>]
                      [(_.cover [<definition>]
                                (|> (<definition> "" //.empty #.None mock)
                                    (do> try.monad
                                         [io.run]
                                         [product.right (get@ #//.body) (function.apply #.None) io.run]
                                         [product.right (\ utf8.codec decode)]
                                         [(\ nat.decimal decode)]
                                         [(nat.= <expected>) wrap])
                                    (try.default false)))]

                      [/.post on_post]
                      [/.get on_get]
                      [/.put on_put]
                      [/.patch on_patch]
                      [/.delete on_delete]
                      [/.head on_head]
                      [/.connect on_connect]
                      [/.options on_options]
                      [/.trace on_trace]
                      ))
                )))))