From bdc68bcc44bed61a435febdfabbad7977a8a5dac Mon Sep 17 00:00:00 2001 From: Will Vedder Date: Fri, 31 Mar 2023 09:34:21 -0400 Subject: [PATCH] DXCDT-417: Tests for `test` commands (#694) * Adding tests for test commands * Removing commented-out code * Adding hashbang * Adding required flag, contrib note * Slightly stronger assertion --------- Co-authored-by: Will Vedder Co-authored-by: Ewan Harris --- internal/cli/test.go | 11 +++++- .../scripts/create-client-grant.sh | 6 +++ .../integration/scripts/get-default-app-id.sh | 18 +++++++++ test/integration/scripts/get-m2m-app-id.sh | 13 +++++++ .../scripts/get-manage-api-audience.sh | 18 +++++++++ .../integration/test-commands-test-cases.yaml | 39 +++++++++++++++++++ 6 files changed, 103 insertions(+), 2 deletions(-) create mode 100755 test/integration/scripts/create-client-grant.sh create mode 100755 test/integration/scripts/get-default-app-id.sh create mode 100755 test/integration/scripts/get-m2m-app-id.sh create mode 100755 test/integration/scripts/get-manage-api-audience.sh create mode 100644 test/integration/test-commands-test-cases.yaml diff --git a/internal/cli/test.go b/internal/cli/test.go index bdf1206fd..44e7664a1 100644 --- a/internal/cli/test.go +++ b/internal/cli/test.go @@ -37,6 +37,14 @@ var ( Help: "The unique identifier of the target API you want to access.", } + testAudienceRequired = Flag{ + Name: testAudience.Name, + LongForm: testAudience.LongForm, + ShortForm: testAudience.ShortForm, + Help: testAudience.Help, + IsRequired: true, + } + testScopes = Flag{ Name: "Scopes", LongForm: "scopes", @@ -269,8 +277,7 @@ func testTokenCmd(cli *cli) *cobra.Command { cmd.SetUsageTemplate(resourceUsageTemplate()) cmd.Flags().BoolVar(&cli.force, "force", false, "Skip confirmation.") cmd.Flags().BoolVar(&cli.json, "json", false, "Output in json format.") - testAudience.IsRequired = true - testAudience.RegisterString(cmd, &inputs.Audience, "") + testAudienceRequired.RegisterString(cmd, &inputs.Audience, "") testScopes.RegisterStringSlice(cmd, &inputs.Scopes, nil) return cmd diff --git a/test/integration/scripts/create-client-grant.sh b/test/integration/scripts/create-client-grant.sh new file mode 100755 index 000000000..a007d5f95 --- /dev/null +++ b/test/integration/scripts/create-client-grant.sh @@ -0,0 +1,6 @@ +#! /bin/bash + +management_api_audience=$(./test/integration/scripts/get-manage-api-audience.sh) +m2m_client_id=$(./test/integration/scripts/get-m2m-app-id.sh) + +auth0 api POST "client-grants" --data "{\"client_id\":\"$m2m_client_id\",\"audience\": \"$management_api_audience\",\"scope\": []}" \ No newline at end of file diff --git a/test/integration/scripts/get-default-app-id.sh b/test/integration/scripts/get-default-app-id.sh new file mode 100755 index 000000000..e16fed1d6 --- /dev/null +++ b/test/integration/scripts/get-default-app-id.sh @@ -0,0 +1,18 @@ +#! /bin/bash + +apps=$( auth0 apps list --json --no-input ) +for app in $( printf "%s" "$apps" | jq -r '.[] | @base64' ); do + _jq() { + echo "${app}" | base64 --decode | jq -r "${1}" + } + + id=$(_jq '.client_id') + name=$(_jq '.name') + + if [[ $name = "Default App" ]] + then + echo $id + exit 0 + fi + exit 1 +done \ No newline at end of file diff --git a/test/integration/scripts/get-m2m-app-id.sh b/test/integration/scripts/get-m2m-app-id.sh new file mode 100755 index 000000000..067c99adf --- /dev/null +++ b/test/integration/scripts/get-m2m-app-id.sh @@ -0,0 +1,13 @@ +#! /bin/bash + +FILE=./test/integration/identifiers/m2m-app-id +if [ -f "$FILE" ]; then + cat $FILE + exit 0 +fi + +m2m_app=$( auth0 apps create -n integration-test-app-m2m -t m2m --description "M2M test app" --json --no-input ) + +mkdir -p ./test/integration/identifiers +echo "$m2m_app" | jq -r '.["client_id"]' > $FILE +cat $FILE diff --git a/test/integration/scripts/get-manage-api-audience.sh b/test/integration/scripts/get-manage-api-audience.sh new file mode 100755 index 000000000..2e1052507 --- /dev/null +++ b/test/integration/scripts/get-manage-api-audience.sh @@ -0,0 +1,18 @@ +#! /bin/bash + +apis=$( auth0 apis list --json --no-input ) +for api in $( printf "%s" "$apis" | jq -r '.[] | @base64' ); do + _jq() { + echo "${api}" | base64 --decode | jq -r "${1}" + } + + audience=$(_jq '.identifier') + name=$(_jq '.name') + + if [[ $name = "Auth0 Management API" ]] + then + echo $audience + exit 0 + fi + exit 1 +done \ No newline at end of file diff --git a/test/integration/test-commands-test-cases.yaml b/test/integration/test-commands-test-cases.yaml new file mode 100644 index 000000000..e21bf20e0 --- /dev/null +++ b/test/integration/test-commands-test-cases.yaml @@ -0,0 +1,39 @@ +config: + inherit-env: true + +tests: + 001 - test login of default app (partially successful): + #Terminate early because command will otherwise wait for in-browser authorization stage + # `timeout` command provided by GNU coreutils + command: timeout 2s auth0 test login $(./test/integration/scripts/get-default-app-id.sh) --no-input 2>&1 + exit-code: 124 #Timeout exit code + stdout: + contains: + - "Open the following URL in a browser: https://" + - ".auth0.com/authorize?client_id=" + - "&response_type=code&scope=openid+profile&state=" + + 002 - unsuccessful test login of machine-to-machine app: + command: auth0 test login $(./test/integration/scripts/get-m2m-app-id.sh) --no-input + exit-code: 1 + stderr: + contains: + - "cannot test the Universal Login with a Machine to Machine application." + + 003 - test token without client grant: + command: auth0 test token $(./test/integration/scripts/get-m2m-app-id.sh) --audience "$(./test/integration/scripts/get-manage-api-audience.sh)" --no-input + exit-code: 1 + stderr: + contains: + - "failed to log in with client credentials for client with ID " + - "the integration-test-app-m2m application is not authorized to request access tokens for this API " + - ".auth0.com/api/v2/." + + 004 - test token after creating client grant: + command: ./test/integration/scripts/create-client-grant.sh; auth0 test token $(./test/integration/scripts/get-m2m-app-id.sh) --audience "$(./test/integration/scripts/get-manage-api-audience.sh)" --no-input + exit-code: 0 + stdout: + contains: + - "TOKEN TYPE Bearer" + - "EXPIRES IN 1440 minute(s)" + - "ACCESS TOKEN eyJhbGci"