// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package externalaccount

import (
	"context"
	"testing"
)

var testFileConfig = Config{
	Audience:                       "32555940559.apps.googleusercontent.com",
	SubjectTokenType:               "urn:ietf:params:oauth:token-type:jwt",
	TokenURL:                       "http://localhost:8080/v1/token",
	TokenInfoURL:                   "http://localhost:8080/v1/tokeninfo",
	ServiceAccountImpersonationURL: "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/service-gcs-admin@$PROJECT_ID.iam.gserviceaccount.com:generateAccessToken",
	ClientSecret:                   "notsosecret",
	ClientID:                       "rbrgnognrhongo3bi4gb9ghg9g",
}

func TestRetrieveFileSubjectToken(t *testing.T) {
	var fileSourceTests = []struct {
		name string
		cs   CredentialSource
		want string
	}{
		{
			name: "UntypedFileSource",
			cs: CredentialSource{
				File: textBaseCredPath,
			},
			want: "street123",
		},
		{
			name: "TextFileSource",
			cs: CredentialSource{
				File:   textBaseCredPath,
				Format: format{Type: fileTypeText},
			},
			want: "street123",
		},
		{
			name: "JSONFileSource",
			cs: CredentialSource{
				File:   jsonBaseCredPath,
				Format: format{Type: fileTypeJSON, SubjectTokenFieldName: "SubjToken"},
			},
			want: "321road",
		},
	}

	for _, test := range fileSourceTests {
		test := test
		tfc := testFileConfig
		tfc.CredentialSource = test.cs

		t.Run(test.name, func(t *testing.T) {
			base, err := tfc.parse(context.Background())
			if err != nil {
				t.Fatalf("parse() failed %v", err)
			}

			out, err := base.subjectToken()
			if err != nil {
				t.Errorf("Method subjectToken() errored.")
			} else if test.want != out {
				t.Errorf("got %v but want %v", out, test.want)
			}

		})
	}
}
