|
| 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_signing_secret = None; |
| 23 | + slack_oauth_state = None; |
| 24 | + } |
| 25 | + |
| 26 | +let secrets_with_state = { (secrets_default ()) with slack_oauth_state = Some "foo" } |
| 27 | + |
| 28 | +let secrets_with_token = { (secrets_default ()) with slack_access_token = Some "original token" } |
| 29 | + |
| 30 | +let tests = |
| 31 | + [ |
| 32 | + "success, valid params", [ arg_code ], secrets_default (), Some (sprintf "token of code %s" (snd arg_code)); |
| 33 | + "success, with state", [ arg_code; arg_state ], secrets_with_state, Some (sprintf "token of code %s" (snd arg_code)); |
| 34 | + "no-op, token exists", [ arg_code ], secrets_with_token, Some "original token"; |
| 35 | + "failure, no state arg", [ arg_code ], secrets_with_state, None; |
| 36 | + "failure, bad state arg", [ arg_code; arg_state_bad ], secrets_with_state, None; |
| 37 | + "failure, no code arg", [], secrets_default (), None; |
| 38 | + ] |
| 39 | + |
| 40 | +let process (name, args, secrets, expected_token) = |
| 41 | + let ctx = Context.make () in |
| 42 | + ctx.secrets <- Some secrets; |
| 43 | + Option.iter secrets.slack_access_token ~f:(fun t -> ctx.state.slack_access_token <- Some t); |
| 44 | + let%lwt _msg = Action.process_slack_oauth ctx args in |
| 45 | + match assert ((Option.equal String.equal) ctx.state.slack_access_token expected_token) with |
| 46 | + | exception Assert_failure _ -> Lwt.return @@ Error (sprintf "test failed: %s" name) |
| 47 | + | () -> Lwt.return @@ Ok () |
| 48 | + |
| 49 | +let () = |
| 50 | + Lwt_main.run |
| 51 | + ( match%lwt Lwt_list.map_s process tests |> Lwt.map Result.combine_errors_unit with |
| 52 | + | Ok () -> Lwt.return_unit |
| 53 | + | Error e -> |
| 54 | + List.iter e ~f:Stdio.print_endline; |
| 55 | + Caml.exit 1 |
| 56 | + ) |
0 commit comments