package azblob

import "testing"

func TestParseConnectionString(t *testing.T) {
	tests := []struct {
		name            string
		connStr         string
		wantAccountName string
		wantAccountKey  string
	}{
		{
			name:            "full connection string",
			connStr:         "DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey==;EndpointSuffix=core.windows.net",
			wantAccountName: "myaccount",
			wantAccountKey:  "mykey==",
		},
		{
			name:            "only account name",
			connStr:         "AccountName=solo",
			wantAccountName: "solo",
			wantAccountKey:  "",
		},
		{
			name:            "only account key",
			connStr:         "AccountKey=abc123",
			wantAccountName: "",
			wantAccountKey:  "abc123",
		},
		{
			name:            "empty string",
			connStr:         "",
			wantAccountName: "",
			wantAccountKey:  "",
		},
		{
			name:            "key with equals sign in value",
			connStr:         "AccountName=acc;AccountKey=base64==value==",
			wantAccountName: "acc",
			wantAccountKey:  "base64==value==",
		},
		{
			name:            "extra whitespace around parts",
			connStr:         " AccountName=spaced ; AccountKey=key123 ",
			wantAccountName: "spaced",
			wantAccountKey:  "key123",
		},
		{
			name:            "unrelated keys are ignored",
			connStr:         "Foo=bar;AccountName=myaccount;Baz=qux;AccountKey=mykey",
			wantAccountName: "myaccount",
			wantAccountKey:  "mykey",
		},
		{
			name:            "no equals sign in part",
			connStr:         "AccountName=myaccount;noequals;AccountKey=mykey",
			wantAccountName: "myaccount",
			wantAccountKey:  "mykey",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			gotName, gotKey := parseConnectionString(tt.connStr)
			if gotName != tt.wantAccountName {
				t.Errorf("accountName = %q, want %q", gotName, tt.wantAccountName)
			}
			if gotKey != tt.wantAccountKey {
				t.Errorf("accountKey = %q, want %q", gotKey, tt.wantAccountKey)
			}
		})
	}
}
