OCaml client for the Slack Web API
1let decode_ok codec s =
2 match Json.of_string codec s with
3 | Ok v -> v
4 | Error e -> Alcotest.failf "decode error: %s" (Json.Error.to_string e)
5
6let roundtrip codec v =
7 let s = Json.to_string codec v in
8 match Json.of_string codec s with
9 | Ok v' -> v'
10 | Error e ->
11 Alcotest.failf "decode error on roundtrip: %s\njson: %s"
12 (Json.Error.to_string e) s
13
14let test_decode () =
15 let json = {|{"id":"T123","name":"My Team","domain":"myteam"}|} in
16 let t = decode_ok Slack.Team.json json in
17 let expected = Slack.Team.v ~id:"T123" ~name:"My Team" ~domain:"myteam" () in
18 Alcotest.(check bool) "equal" true (Slack.Team.equal t expected)
19
20let test_decode_with_email_domain () =
21 let json =
22 {|{"id":"T1","name":"Team","domain":"team","email_domain":"team.com"}|}
23 in
24 let t = decode_ok Slack.Team.json json in
25 let expected =
26 Slack.Team.v ~id:"T1" ~name:"Team" ~domain:"team" ~email_domain:"team.com"
27 ()
28 in
29 Alcotest.(check bool) "with email_domain" true (Slack.Team.equal t expected)
30
31let test_roundtrip () =
32 let t = Slack.Team.v ~id:"T1" ~name:"Team" ~domain:"team" () in
33 let t' = roundtrip Slack.Team.json t in
34 Alcotest.(check bool) "roundtrip" true (Slack.Team.equal t t')
35
36let test_pp () =
37 let t = Slack.Team.v ~id:"T1" ~name:"My Team" ~domain:"myteam" () in
38 let s = Fmt.str "%a" Slack.Team.pp t in
39 Alcotest.(check string) "pp" "Team(My Team: myteam.slack.com)" s
40
41let test_minimal () =
42 let json = {|{}|} in
43 let t = decode_ok Slack.Team.json json in
44 let expected = Slack.Team.v ~id:"" ~name:"" ~domain:"" () in
45 Alcotest.(check bool) "minimal defaults" true (Slack.Team.equal t expected)
46
47let suite =
48 ( "team",
49 [
50 Alcotest.test_case "decode" `Quick test_decode;
51 Alcotest.test_case "decode with email_domain" `Quick
52 test_decode_with_email_domain;
53 Alcotest.test_case "roundtrip" `Quick test_roundtrip;
54 Alcotest.test_case "pp" `Quick test_pp;
55 Alcotest.test_case "minimal" `Quick test_minimal;
56 ] )