// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. package public import ( "context" "errors" "fmt" "net/http" "net/url" "testing" "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/fake" ) func fakeBrowserOpenURL(authURL string) error { // we will get called with the URL for requesting an auth code u, err := url.Parse(authURL) if err != nil { return err } // validate the URL content q := u.Query() if q.Get("code_challenge") == "" { return errors.New("missing query param 'code_challenge") } if m := q.Get("code_challenge_method"); m != "S256" { return fmt.Errorf("unexpected code_challenge_method '%s'", m) } if q.Get("prompt") == "" { return errors.New("missing query param 'prompt") } state := q.Get("state") if state == "" { return errors.New("missing query param 'state'") } redirect := q.Get("redirect_uri") if redirect == "" { return errors.New("missing query param 'redirect_uri'") } // now send the info to our local redirect server resp, err := http.DefaultClient.Get(redirect + fmt.Sprintf("/?state=%s&code=fake_auth_code", state)) if err != nil { return err } if resp.StatusCode != http.StatusOK { return fmt.Errorf("unexpected status code %d", resp.StatusCode) } return nil } func TestAcquireTokenInteractive(t *testing.T) { browserOpenURL = fakeBrowserOpenURL client, err := New("some_client_id") if err != nil { t.Fatal(err) } client.base.Token.AccessTokens = &fake.AccessTokens{} client.base.Token.Authority = &fake.Authority{} client.base.Token.Resolver = &fake.ResolveEndpoints{} client.base.Token.WSTrust = &fake.WSTrust{} _, err = client.AcquireTokenInteractive(context.Background(), []string{"the_scope"}) if err != nil { t.Fatal(err) } }