Skip to content

Commit 4103cbd

Browse files
committed
tests: add oauth tests
1 parent d2f3b30 commit 4103cbd

File tree

2 files changed

+62
-2
lines changed

2 files changed

+62
-2
lines changed

test/dune

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
(executable
2-
(name test)
1+
(executables
2+
(names test slack_oauth_test)
33
(libraries lib base base.caml devkit devkit.core extlib lwt.unix stdio
44
yojson)
55
(preprocess
@@ -21,3 +21,8 @@
2121
(alias runtest)
2222
(action
2323
(diff slack_payloads.expected slack_payloads.out)))
24+
25+
(rule
26+
(alias runtest)
27+
(action
28+
(run ./slack_oauth_test.exe)))

test/slack_oauth_test.ml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
open Base
2+
open Printf
3+
open Lib
4+
module Action = Action.Action (Api_local.Github) (Api_local.Slack)
5+
6+
let log = Devkit.Log.from "oauth_test"
7+
8+
let arg_code = "code", "1591663521684.1613458437648.4a18cf683e541ff9d8fd75075181cac49c7acae9431d7e4ffd424ce1ca8d2543"
9+
10+
let arg_state = "state", "foo"
11+
12+
let arg_state_bad = "state", "bar"
13+
14+
let secrets_default () : Config_t.secrets =
15+
{
16+
gh_token = None;
17+
gh_hook_token = None;
18+
slack_hooks = [];
19+
slack_access_token = None;
20+
slack_client_id = Some "";
21+
slack_client_secret = Some "";
22+
slack_oauth_state = None;
23+
}
24+
25+
let secrets_with_state = { (secrets_default ()) with slack_oauth_state = Some "foo" }
26+
27+
let secrets_with_token = { (secrets_default ()) with slack_access_token = Some "original token" }
28+
29+
let tests =
30+
[
31+
"success, valid params", [ arg_code ], secrets_default (), Some (sprintf "token of code %s" (snd arg_code));
32+
"success, with state", [ arg_code; arg_state ], secrets_with_state, Some (sprintf "token of code %s" (snd arg_code));
33+
"no-op, token exists", [ arg_code ], secrets_with_token, Some "original token";
34+
"failure, no state arg", [ arg_code ], secrets_with_state, None;
35+
"failure, bad state arg", [ arg_code; arg_state_bad ], secrets_with_state, None;
36+
"failure, no code arg", [], secrets_default (), None;
37+
]
38+
39+
let process (name, args, secrets, expected_token) =
40+
let ctx = Context.make () in
41+
ctx.secrets <- Some secrets;
42+
Option.iter secrets.slack_access_token ~f:(fun t -> ctx.state.slack_access_token <- Some t);
43+
let%lwt _msg = Action.process_slack_oauth ctx args in
44+
match assert ((Option.equal String.equal) ctx.state.slack_access_token expected_token) with
45+
| exception Assert_failure _ -> Lwt.return @@ Error (sprintf "test failed: %s" name)
46+
| () -> Lwt.return @@ Ok ()
47+
48+
let () =
49+
Lwt_main.run
50+
( match%lwt Lwt_list.map_s process tests |> Lwt.map Result.combine_errors_unit with
51+
| Ok () -> Lwt.return_unit
52+
| Error e ->
53+
List.iter e ~f:Stdio.print_endline;
54+
Caml.exit 1
55+
)

0 commit comments

Comments
 (0)