diff --git a/.gitignore b/.gitignore index 6d8cf0ccc..f65d02904 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ # Project artifacts /auth0 /test/integration/identifiers +/coverage +coverage.out # Swap [._]*.s[a-v][a-z] diff --git a/Makefile b/Makefile index 456f3aa2a..9a6f30b7c 100644 --- a/Makefile +++ b/Makefile @@ -92,6 +92,10 @@ build: ## Build the cli binary for the native platform ${call print, "Building the cli binary"} go build -v -ldflags "$(GO_LINKER_FLAGS)" -o "${BUILD_DIR}/auth0" cmd/auth0/main.go +build-with-cover: ## Build the cli binary for the native platform with coverage support. + ${call print, "Building the cli binary"} + go build -cover -v -ldflags "$(GO_LINKER_FLAGS)" -o "${BUILD_DIR}/auth0" cmd/auth0/main.go + build-all-platforms: ## Build a dev version of the cli binary for all supported platforms for os in darwin linux windows; \ do env GOOS=$$os go build -ldflags "$(GO_LINKER_FLAGS)" -o "${BUILD_DIR}/auth0-$${os}" cmd/auth0/main.go; \ @@ -101,6 +105,10 @@ install: ## Install the cli binary for the native platform ${call print, "Installing the cli binary"} @$(MAKE) build BUILD_DIR="$(GO_BIN)" +install-with-cover: ## Install the cli binary for the native platform with coverage support. + ${call print, "Installing the cli binary"} + @$(MAKE) build-with-cover BUILD_DIR="$(GO_BIN)" + #----------------------------------------------------------------------------------------------------------------------- # Checks #----------------------------------------------------------------------------------------------------------------------- diff --git a/internal/cli/login.go b/internal/cli/login.go index d683bbe19..3cb51bced 100644 --- a/internal/cli/login.go +++ b/internal/cli/login.go @@ -3,6 +3,7 @@ package cli import ( "context" "fmt" + "strings" "github.com/pkg/browser" "github.com/spf13/cobra" @@ -272,6 +273,7 @@ func RunLoginAsMachine(ctx context.Context, inputs LoginInputs, cli *cli, cmd *c } t := Tenant{ + Name: strings.Split(inputs.Domain, ".")[0], Domain: inputs.Domain, ExpiresAt: token.ExpiresAt, ClientID: inputs.ClientID, diff --git a/internal/cli/utils_shared.go b/internal/cli/utils_shared.go index c06039158..d08dfe5c9 100644 --- a/internal/cli/utils_shared.go +++ b/internal/cli/utils_shared.go @@ -272,8 +272,16 @@ func openManageURL(cli *cli, tenant string, path string) { cli.renderer.Warnf("Unable to format the correct URL, please ensure you have run 'auth0 login' and try again.") return } - if err := browser.OpenURL(fmt.Sprintf("%s%s", manageTenantURL, path)); err != nil { - cli.renderer.Warnf("Couldn't open the URL, please do it manually: %s.", manageTenantURL) + + settingsURL := fmt.Sprintf("%s%s", manageTenantURL, path) + + if cli.noInput { + cli.renderer.Infof("Open the following URL in a browser: %s", settingsURL) + return + } + + if err := browser.OpenURL(settingsURL); err != nil { + cli.renderer.Warnf("Couldn't open the URL, please do it manually: %s", settingsURL) } } diff --git a/test/integration/apps-test-cases.yaml b/test/integration/apps-test-cases.yaml new file mode 100644 index 000000000..e236bb80e --- /dev/null +++ b/test/integration/apps-test-cases.yaml @@ -0,0 +1,263 @@ +config: + inherit-env: true + +tests: + 001 - it successfully lists all apps: + command: auth0 apps list + exit-code: 0 + + 002 - it throws an error when listing all apps and passing an invalid number flag: + command: auth0 apps list --number -1 + exit-code: 1 + stderr: + contains: + - "number flag invalid, please pass a number between 1 and 1000" + + 003 - it successfully creates a native app: + command: auth0 apps create --name integration-test-app-nativeapp1 --type native --description NativeApp1 + exit-code: 0 + stdout: + contains: + - NAME integration-test-app-nativeapp1 + - DESCRIPTION NativeApp1 + - TYPE Native + + 004 - it successfully creates a native app and outputs in json: + command: auth0 apps create --name integration-test-app-nativeapp1 --type native --description NativeApp1 --json + exit-code: 0 + stdout: + json: + name: integration-test-app-nativeapp1 + description: NativeApp1 + app_type: native + + 005 - it successfully creates a spa app and outputs in json: + command: auth0 apps create --name integration-test-app-spaapp1 --type spa --description SpaApp1 --json + exit-code: 0 + stdout: + json: + name: integration-test-app-spaapp1 + description: SpaApp1 + app_type: spa + + 006 - it successfully creates a regular app and outputs in json: + command: auth0 apps create --name integration-test-app-regapp1 --type regular --description RegApp1 --json + exit-code: 0 + stdout: + json: + name: integration-test-app-regapp1 + description: RegApp1 + app_type: regular_web + + 007 - it successfully creates a m2m app and outputs in json: + command: auth0 apps create --name integration-test-app-m2mapp1 --type m2m --description M2mApp1 --json + exit-code: 0 + stdout: + json: + name: integration-test-app-m2mapp1 + description: M2mApp1 + app_type: non_interactive + + 008 - it successfully creates a spa app with auth method set to none and outputs in json: + command: auth0 apps create --name integration-test-app-spaapp2 --type spa --description SpaApp2 --auth-method None --json + exit-code: 0 + stdout: + json: + token_endpoint_auth_method: none + + 009 - it fails to creates a m2m app with auth method set to none: + command: auth0 apps create --name integration-test-app-m2mapp2 --type m2m --description M2mApp2 --auth-method None + exit-code: 1 + stderr: + contains: + - "Unable to create application" + + 010 - it successfully creates a regular app with auth method set to post and outputs in json: + command: auth0 apps create --name integration-test-app-regapp2 --type regular --description RegApp2 --auth-method Post --json + exit-code: 0 + stdout: + json: + token_endpoint_auth_method: client_secret_post + + 011 - it successfully creates a regular app with auth method set to basic and outputs in json: + command: auth0 apps create --name integration-test-app-regapp3 --type regular --description RegApp3 --auth-method Basic --json + exit-code: 0 + stdout: + json: + token_endpoint_auth_method: client_secret_basic + + 012 - it successfully creates a m2m app with callbacks: + command: auth0 apps create --name integration-test-app-m2mapp3 --type m2m --description M2mApp3 --callbacks https://example.com + exit-code: 0 + stdout: + contains: + - CALLBACKS https://example.com + + 013 - it successfully creates a regular app with callbacks and outputs in json: + command: auth0 apps create --name integration-test-app-regapp4 --type regular --description RegApp4 --callbacks https://example.com,https://google.com --json + exit-code: 0 + stdout: + json: + callbacks: "[https://example.com https://google.com]" + + 014 - it successfully creates a regular app with grants: + command: auth0 apps create --name integration-test-app-regapp5 --type regular --description RegApp4 --grants credentials,password + exit-code: 0 + stdout: + contains: + - GRANTS client_credentials, password + + 015 - it successfully creates a spa app with grants and outputs in json: + command: auth0 apps create --name integration-test-app-spaapp3 --type spa --description SpaApp3 --grants refresh-token --json + exit-code: 0 + stdout: + json: + grant_types: "[refresh_token]" + + 016 - it successfully creates a native app with grants and outputs in json: + command: auth0 apps create --name integration-test-app-nativeapp2 --type native --description NativeApp2 --grants refresh-token,code --json + exit-code: 0 + stdout: + json: + grant_types: "[refresh_token authorization_code]" + + 017 - it fails to create a m2m app with device code grant: + command: auth0 apps create --name integration-test-app-m2mapp4 --type m2m --description M2mApp4 --grants credentials,device-code + exit-code: 1 + stderr: + contains: + - "Unable to create application" + + 018 - it successfully creates a native app with logout urls and outputs in json: + command: auth0 apps create --name integration-test-app-regapp6 --type native --description RegularApp --logout-urls https://*.example.com/logout,https://example.com/logout --json + exit-code: 0 + stdout: + json: + allowed_logout_urls: "[https://*.example.com/logout https://example.com/logout]" + + 019 - it successfully creates a native app with origins and outputs in json: + command: auth0 apps create --name integration-test-app-regapp7 --type native --description RegularApp --origins https://*.example.com,https://example.com --json + exit-code: 0 + stdout: + json: + allowed_origins: "[https://*.example.com https://example.com]" + + 020 - it successfully creates a native app with web origins and outputs in json: + command: auth0 apps create --name integration-test-app-spaapp4 --type native --description SpaApp4 --web-origins https://example.com --json + exit-code: 0 + stdout: + json: + web_origins: "[https://example.com]" + + 021 - given a test app: + command: ./test/integration/scripts/get-app-id.sh + exit-code: 0 + + 022 - given a test app, it successfully gets the app's details and outputs in json: + command: auth0 apps show $(cat ./test/integration/identifiers/app-id) --json + exit-code: 0 + stdout: + json: + name: integration-test-app-newapp + description: NewApp + app_type: native + + 023 - given a test app, it successfully gets the app's details: + command: auth0 apps show $(cat ./test/integration/identifiers/app-id) + exit-code: 0 + stdout: + contains: + - NAME integration-test-app-newapp + - DESCRIPTION NewApp + - TYPE Native + + 024 - given a test app, it successfully updates the app's auth method and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --auth-method Basic --json + exit-code: 0 + stdout: + json: + token_endpoint_auth_method: client_secret_basic + + 025 - given a test app, it successfully updates the app's callbacks and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --callbacks https://example.com --json + stdout: + json: + callbacks: "[https://example.com]" + exit-code: 0 + + 026 - given a test app, it successfully updates the app's description and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --description "A better description" --json + exit-code: 0 + stdout: + json: + description: A better description + + 027 - given a test app, it successfully updates the app's grants and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --grants code --json + exit-code: 0 + stdout: + json: + grant_types: "[authorization_code]" + + 028 - given a test app, it successfully updates the app's logout urls and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --logout-urls https://example.com --json + exit-code: 0 + stdout: + json: + allowed_logout_urls: "[https://example.com]" + + 029 - given a test app, it successfully updates the app's name and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --name integration-test-app-betterAppName --json + exit-code: 0 + stdout: + json: + name: integration-test-app-betterAppName + + 030 - given a test app, it successfully updates the app's origins and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --origins https://example.com --json + exit-code: 0 + stdout: + json: + allowed_origins: "[https://example.com]" + + 031 - given a test app, it successfully updates the app's type and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --type spa --json + exit-code: 0 + stdout: + json: + app_type: spa + + 032 - given a test app, it successfully updates the app's web origins and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --web-origins https://example.com --json + exit-code: 0 + stdout: + json: + web_origins: "[https://example.com]" + + 033 - given a test app, it successfully updates the app's web origins and type and outputs in json: + command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --web-origins https://examples.com --type native --json + exit-code: 0 + stdout: + json: + app_type: native + web_origins: "[https://examples.com]" + + 034 - given a test app, it successfully opens the settings page: + command: auth0 apps open $(cat ./test/integration/identifiers/app-id) --no-input + exit-code: 0 + stderr: + contains: + - "Open the following URL in a browser" + + + 035 - given a test app, it successfully sets the default application: + command: auth0 apps use $(cat ./test/integration/identifiers/app-id) --no-input + exit-code: 0 + stderr: + contains: + - "Successfully set the default application to" + + + 036 - given a test app, it successfully deletes the app: + command: auth0 apps delete $(cat ./test/integration/identifiers/app-id) --force + exit-code: 0 diff --git a/test/integration/test-cases.yaml b/test/integration/test-cases.yaml index 534c371ad..cbf712314 100644 --- a/test/integration/test-cases.yaml +++ b/test/integration/test-cases.yaml @@ -5,9 +5,6 @@ tests: auth0 apis list: exit-code: 0 - auth0 apps list: - exit-code: 0 - auth0 logs list: exit-code: 0 stdout: @@ -45,238 +42,6 @@ tests: auth0 completion bash: exit-code: 0 - # Test 'apps create' --type flag - apps create type native and check data: - command: auth0 apps create --name integration-test-app-nativeapp1 --type native --description NativeApp1 --json - exit-code: 0 - stdout: - json: - name: integration-test-app-nativeapp1 - description: NativeApp1 - app_type: native - - apps create type native and check output: - command: auth0 apps create --name integration-test-app-nativeapp1 --type native --description NativeApp1 - exit-code: 0 - stdout: - contains: - - NAME integration-test-app-nativeapp1 - - DESCRIPTION NativeApp1 - - TYPE Native - - apps create type spa: - command: auth0 apps create --name integration-test-app-spaapp1 --type spa --description SpaApp1 --json - exit-code: 0 - stdout: - json: - name: integration-test-app-spaapp1 - description: SpaApp1 - app_type: spa - - apps create type regular: - command: auth0 apps create --name integration-test-app-regapp1 --type regular --description RegApp1 --json - exit-code: 0 - stdout: - json: - name: integration-test-app-regapp1 - description: RegApp1 - app_type: regular_web - - apps create type m2m: - command: auth0 apps create --name integration-test-app-m2mapp1 --type m2m --description M2mApp1 --json - exit-code: 0 - stdout: - json: - name: integration-test-app-m2mapp1 - description: M2mApp1 - app_type: non_interactive - - # Test 'apps create' --auth-method flag - apps create type spa auth method none: - command: auth0 apps create --name integration-test-app-spaapp2 --type spa --description SpaApp2 --auth-method None --json - stdout: - json: - token_endpoint_auth_method: none - exit-code: 0 - - apps create type m2m auth method none fails: - command: auth0 apps create --name integration-test-app-m2mapp2 --type m2m --description M2mApp2 --auth-method None - exit-code: 1 - - apps create type regular auth method post: - command: auth0 apps create --name integration-test-app-regapp2 --type regular --description RegApp2 --auth-method Post --json - stdout: - json: - token_endpoint_auth_method: client_secret_post - exit-code: 0 - - apps create type regular auth method basic: - command: auth0 apps create --name integration-test-app-regapp3 --type regular --description RegApp3 --auth-method Basic --json - stdout: - json: - token_endpoint_auth_method: client_secret_basic - exit-code: 0 - - # Test 'apps create' --callbacks flag - apps create type m2m callbacks: - command: auth0 apps create --name integration-test-app-m2mapp3 --type m2m --description M2mApp3 --callbacks https://example.com - stdout: - contains: - - CALLBACKS https://example.com - exit-code: 0 - - apps create type regular callbacks list: - command: auth0 apps create --name integration-test-app-regapp4 --type regular --description RegApp4 --callbacks https://example.com,https://google.com --json - stdout: - json: - callbacks: "[https://example.com https://google.com]" - exit-code: 0 - - # Test 'apps create' --grants flag - apps create type regular grants: - command: auth0 apps create --name integration-test-app-regapp5 --type regular --description RegApp4 --grants credentials,password - stdout: - contains: - - GRANTS client_credentials, password - exit-code: 0 - - apps create type spa grants: - command: auth0 apps create --name integration-test-app-spaapp3 --type spa --description SpaApp3 --grants refresh-token --json - stdout: - json: - grant_types: "[refresh_token]" - exit-code: 0 - - apps create type native grants: - command: auth0 apps create --name integration-test-app-nativeapp2 --type native --description NativeApp2 --grants refresh-token,code --json - stdout: - json: - grant_types: "[refresh_token authorization_code]" - exit-code: 0 - - apps create type m2m grants fails: - command: auth0 apps create --name integration-test-app-m2mapp4 --type m2m --description M2mApp4 --grants credentials,device-code - exit-code: 1 - - # Test 'apps create' --logout-urls flag - apps create type regular logout urls: - command: auth0 apps create --name integration-test-app-regapp6 --type native --description RegularApp --logout-urls https://*.example.com/logout,https://example.com/logout --json - stdout: - json: - allowed_logout_urls: "[https://*.example.com/logout https://example.com/logout]" - exit-code: 0 - - # Test 'apps create' --origins flag - apps create type regular origins: - command: auth0 apps create --name integration-test-app-regapp7 --type native --description RegularApp --origins https://*.example.com,https://example.com --json - stdout: - json: - allowed_origins: "[https://*.example.com https://example.com]" - exit-code: 0 - - # Test 'apps create' --web-origins flag - apps create type native web origins: - command: auth0 apps create --name integration-test-app-spaapp4 --type native --description SpaApp4 --web-origins https://example.com --json - stdout: - json: - web_origins: "[https://example.com]" - exit-code: 0 - - # Test 'apps show' - apps create test app: # create an app and capture its client id - command: ./test/integration/scripts/get-app-id.sh - exit-code: 0 - - apps show json: - command: auth0 apps show $(cat ./test/integration/identifiers/app-id) --json # depends on "apps create test app" test - stdout: - json: - name: integration-test-app-newapp - description: NewApp - app_type: native - exit-code: 0 - - apps show: - command: auth0 apps show $(cat ./test/integration/identifiers/app-id) # depends on "apps create test app" test - stdout: - contains: - - NAME integration-test-app-newapp - - DESCRIPTION NewApp - - TYPE Native - exit-code: 0 - - # Test 'apps update'; all tests depend on "apps create test app" test - apps update auth method: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --auth-method Basic --json - stdout: - json: - token_endpoint_auth_method: client_secret_basic - exit-code: 0 - - apps update callbacks: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --callbacks https://example.com --json - stdout: - json: - callbacks: "[https://example.com]" - exit-code: 0 - - apps update description: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --description "A better description" --json - stdout: - json: - description: A better description - exit-code: 0 - - apps update grants: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --grants code --json - stdout: - json: - grant_types: "[authorization_code]" - exit-code: 0 - - apps update logout urls: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --logout-urls https://example.com --json - stdout: - json: - allowed_logout_urls: "[https://example.com]" - exit-code: 0 - - apps update name: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --name integration-test-app-betterAppName --json - stdout: - json: - name: integration-test-app-betterAppName - exit-code: 0 - - apps update origins: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --origins https://example.com --json - stdout: - json: - allowed_origins: "[https://example.com]" - exit-code: 0 - - apps update type: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --type spa --json - stdout: - json: - app_type: spa - exit-code: 0 - - apps update web origins: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --web-origins https://example.com --json - stdout: - json: - web_origins: "[https://example.com]" - exit-code: 0 - - apps update multiple updates: - command: auth0 apps update $(cat ./test/integration/identifiers/app-id) --web-origins https://examples.com --type native --json - stdout: - json: - app_type: native - web_origins: "[https://examples.com]" - exit-code: 0 - # Test 'apis create' apis create and check data: command: auth0 apis create --name integration-test-api-def1 --identifier http://integration-test-api-def1 --scopes read:todos,write:todos --json @@ -337,7 +102,6 @@ tests: json: allow_offline_access: "false" - # Test 'apps show' apis create test api: # create an api and capture its id command: ./test/integration/scripts/get-api-id.sh exit-code: 0