package pilgrim_conf_test import ( "testing" "github.com/stretchr/testify/assert" "mvvasilev.dev/pilgrim/internal/pilgrim_conf" ) func Test_ParseDatabaseUrl(t *testing.T) { type args struct { cliUrl string } tests := []struct { name string args args want pilgrim_conf.UrlParts }{ { name: "parses_url_correctly", args: args{ cliUrl: "driver://user:pass@localhost:9999/segment1/segment2?arg1=val1&arg2=val2", }, want: pilgrim_conf.UrlParts{ Driver: "driver", Username: "user", Password: "pass", Host: "localhost", Port: "9999", Segments: []string{ "segment1", "segment2", }, Arguments: map[string]string{ "arg1": "val1", "arg2": "val2", }, }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if got := pilgrim_conf.ParseDatabaseUrl(tt.args.cliUrl); !assert.ObjectsAreEqual(got, tt.want) { t.Errorf("ParseDatabaseUrl() = %v, want %v", got, tt.want) } }) } } func Test_UrlParts_Validate_ValidUrl(t *testing.T) { urlParts := pilgrim_conf.ParseDatabaseUrl("mssql://user:pass@localhost:9999/segment1/segment2?arg1=val1&arg2=val2") isValid, err := urlParts.Validate() assert.True(t, isValid, "Valid DatabaseUrl returned as invalid") assert.True(t, err == nil, "Valid DatabaseUrl returned validation errors") } func Test_UrlParts_Validate_InvalidUrl(t *testing.T) { urlParts := pilgrim_conf.ParseDatabaseUrl("invalid-driver://user:pass@localhost:9999/segment1/segment2?arg1=val1&arg2=val2") isValid, err := urlParts.Validate() assert.True(t, !isValid, "Invalid DatabaseUrl returned as valid") assert.True(t, err != nil, "Invalid DatabaseUrl did not return validation errors") }