package dto

import "testing"

func TestParseDataSourceAzureHTTPSDFS(t *testing.T) {
	info, err := ParseDataSource("https://o11yprodsoutheastasia.dfs.core.windows.net/o11y-prod-shared-southeastasia/deltalake/org/cluster/slowlogs/")
	if err != nil {
		t.Fatalf("ParseDataSource() error = %v", err)
	}
	if info.Vendor != "azure" {
		t.Fatalf("vendor = %q, want azure", info.Vendor)
	}
	if info.Account != "o11yprodsoutheastasia" {
		t.Fatalf("account = %q", info.Account)
	}
	if info.Container != "o11y-prod-shared-southeastasia" {
		t.Fatalf("container = %q", info.Container)
	}
	if info.Path != "deltalake/org/cluster/slowlogs/" {
		t.Fatalf("path = %q", info.Path)
	}
	wantCanonical := "https://o11yprodsoutheastasia.dfs.core.windows.net/o11y-prod-shared-southeastasia/deltalake/org/cluster/slowlogs/"
	if info.CanonicalURI != wantCanonical {
		t.Fatalf("canonical = %q, want %q", info.CanonicalURI, wantCanonical)
	}
}

func TestParseDataSourceAzureHTTPSBlobCanonicalizesToDFS(t *testing.T) {
	info, err := ParseDataSource("https://acct.blob.core.windows.net/container/path/to/table")
	if err != nil {
		t.Fatalf("ParseDataSource() error = %v", err)
	}
	if info.CanonicalURI != "https://acct.dfs.core.windows.net/container/path/to/table" {
		t.Fatalf("canonical = %q", info.CanonicalURI)
	}
}

func TestParseDataSourceAzureABFSS(t *testing.T) {
	info, err := ParseDataSource("abfss://container@acct.dfs.core.windows.net/deltalake/table")
	if err != nil {
		t.Fatalf("ParseDataSource() error = %v", err)
	}
	if info.Vendor != "azure" || info.Account != "acct" || info.Container != "container" {
		t.Fatalf("unexpected info: %+v", info)
	}
	if info.CanonicalURI != "https://acct.dfs.core.windows.net/container/deltalake/table" {
		t.Fatalf("canonical = %q", info.CanonicalURI)
	}
}

func TestParseDataSourceAzureShortABFSS(t *testing.T) {
	info, err := ParseDataSource("abfss://container/deltalake/table")
	if err != nil {
		t.Fatalf("ParseDataSource() error = %v", err)
	}
	if info.Vendor != "azure" || info.Container != "container" || info.Account != "" {
		t.Fatalf("unexpected info: %+v", info)
	}
	if info.CanonicalURI != "" {
		t.Fatalf("short abfss should require config to canonicalize, got %q", info.CanonicalURI)
	}
}
