@@ -2,6 +2,7 @@ package waitfor
22
33import (
44 "context"
5+ "errors"
56 "net/url"
67 "testing"
78
@@ -36,3 +37,117 @@ func TestRegistry_Register(t *testing.T) {
3637 assert .NoError (t , err )
3738 assert .NotNilf (t , rsc , "resource not found" )
3839}
40+
41+ func TestRegistry_Register_NewScheme (t * testing.T ) {
42+ r := newRegistry ([]ResourceConfig {})
43+
44+ factory := func (_ * url.URL ) (Resource , error ) {
45+ return & TestResource {}, nil
46+ }
47+
48+ err := r .Register ("custom" , factory )
49+ assert .NoError (t , err )
50+
51+ // Verify the scheme was registered
52+ rsc , err := r .Resolve ("custom://test" )
53+ assert .NoError (t , err )
54+ assert .NotNil (t , rsc )
55+ }
56+
57+ func TestRegistry_Register_DuplicateScheme (t * testing.T ) {
58+ factory := func (_ * url.URL ) (Resource , error ) {
59+ return & TestResource {}, nil
60+ }
61+
62+ r := newRegistry ([]ResourceConfig {
63+ {
64+ Scheme : []string {"existing" },
65+ Factory : factory ,
66+ },
67+ })
68+
69+ // Try to register the same scheme again
70+ err := r .Register ("existing" , factory )
71+ assert .Error (t , err )
72+ assert .Contains (t , err .Error (), "resource is already registered with a given scheme:" )
73+ }
74+
75+ func TestRegistry_Register_WithWhitespace (t * testing.T ) {
76+ r := newRegistry ([]ResourceConfig {})
77+
78+ factory := func (_ * url.URL ) (Resource , error ) {
79+ return & TestResource {}, nil
80+ }
81+
82+ // Register with whitespace - should be trimmed
83+ err := r .Register (" spaced " , factory )
84+ assert .NoError (t , err )
85+
86+ // Verify it was registered with trimmed name
87+ rsc , err := r .Resolve ("spaced://test" )
88+ assert .NoError (t , err )
89+ assert .NotNil (t , rsc )
90+ }
91+
92+ func TestRegistry_Resolve_InvalidURL (t * testing.T ) {
93+ r := newRegistry ([]ResourceConfig {})
94+
95+ // Test with invalid URL
96+ rsc , err := r .Resolve ("://invalid-url" )
97+ assert .Error (t , err )
98+ assert .Nil (t , rsc )
99+ }
100+
101+ func TestRegistry_Resolve_UnknownScheme (t * testing.T ) {
102+ r := newRegistry ([]ResourceConfig {})
103+
104+ // Test with unknown scheme
105+ rsc , err := r .Resolve ("unknown://test" )
106+ assert .Error (t , err )
107+ assert .Nil (t , rsc )
108+ assert .Contains (t , err .Error (), "resource with a given scheme is not found:" )
109+ }
110+
111+ func TestRegistry_Resolve_FactoryError (t * testing.T ) {
112+ factory := func (_ * url.URL ) (Resource , error ) {
113+ return nil , errors .New ("factory error" )
114+ }
115+
116+ r := newRegistry ([]ResourceConfig {
117+ {
118+ Scheme : []string {"error" },
119+ Factory : factory ,
120+ },
121+ })
122+
123+ rsc , err := r .Resolve ("error://test" )
124+ assert .Error (t , err )
125+ assert .Nil (t , rsc )
126+ assert .Contains (t , err .Error (), "factory error" )
127+ }
128+
129+ func TestRegistry_List (t * testing.T ) {
130+ factory := func (_ * url.URL ) (Resource , error ) {
131+ return & TestResource {}, nil
132+ }
133+
134+ r := newRegistry ([]ResourceConfig {
135+ {
136+ Scheme : []string {"http" , "https" , "custom" },
137+ Factory : factory ,
138+ },
139+ })
140+
141+ schemes := r .List ()
142+ assert .Len (t , schemes , 3 )
143+ assert .Contains (t , schemes , "http" )
144+ assert .Contains (t , schemes , "https" )
145+ assert .Contains (t , schemes , "custom" )
146+ }
147+
148+ func TestRegistry_List_Empty (t * testing.T ) {
149+ r := newRegistry ([]ResourceConfig {})
150+
151+ schemes := r .List ()
152+ assert .Empty (t , schemes )
153+ }
0 commit comments