@@ -5,6 +5,7 @@ package dagsettings_test
55
66import (
77 "context"
8+ "errors"
89 "testing"
910 "time"
1011
@@ -34,7 +35,7 @@ func TestResolveProfile(t *testing.T) {
3435 require .NoError (t , err )
3536 require .NoError (t , settingsStore .Upsert (ctx , settings ))
3637
37- resolved , err := dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" )
38+ resolved , err := dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" , "" )
3839 require .NoError (t , err )
3940 assert .Equal (t , "prod" , resolved )
4041}
@@ -47,11 +48,39 @@ func TestResolveProfileMissingSettingsReturnsEmpty(t *testing.T) {
4748 profileStore , err := store .NewProfileStore (backend .Collection ("profiles" ))
4849 require .NoError (t , err )
4950
50- resolved , err := dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" )
51+ resolved , err := dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" , "" )
5152 require .NoError (t , err )
5253 assert .Empty (t , resolved )
5354}
5455
56+ func TestResolveProfileWorkspaceDefaultWithoutProfileStoreReturnsEmpty (t * testing.T ) {
57+ ctx := context .Background ()
58+ backend := testutil .NewMemoryBackend ()
59+ settingsStore , err := store .NewDAGSettingsStore (backend .Collection ("dag-settings" ))
60+ require .NoError (t , err )
61+
62+ resolved , err := dagsettings .ResolveProfile (ctx , settingsStore , nil , "example" , "ops" )
63+ require .NoError (t , err )
64+ assert .Empty (t , resolved )
65+ }
66+
67+ func TestResolveProfileDAGDefaultWithoutProfileStoreReturnsUnavailable (t * testing.T ) {
68+ ctx := context .Background ()
69+ backend := testutil .NewMemoryBackend ()
70+ settingsStore , err := store .NewDAGSettingsStore (backend .Collection ("dag-settings" ))
71+ require .NoError (t , err )
72+
73+ settings , err := dagsettings .New (dagsettings.UpdateInput {
74+ DAGName : "example" ,
75+ Profile : "prod" ,
76+ }, time .Now ())
77+ require .NoError (t , err )
78+ require .NoError (t , settingsStore .Upsert (ctx , settings ))
79+
80+ _ , err = dagsettings .ResolveProfile (ctx , settingsStore , nil , "example" , "ops" )
81+ require .ErrorIs (t , err , dagsettings .ErrProfileStoreUnavailable )
82+ }
83+
5584func TestResolveProfileReturnsDisabledProfileError (t * testing.T ) {
5685 ctx := context .Background ()
5786 backend := testutil .NewMemoryBackend ()
@@ -71,6 +100,105 @@ func TestResolveProfileReturnsDisabledProfileError(t *testing.T) {
71100 require .NoError (t , err )
72101 require .NoError (t , settingsStore .Upsert (ctx , settings ))
73102
74- _ , err = dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" )
103+ _ , err = dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" , "" )
75104 require .ErrorIs (t , err , profile .ErrDisabled )
76105}
106+
107+ func TestResolveProfileDAGDefaultWinsOverWorkspaceDefault (t * testing.T ) {
108+ ctx := context .Background ()
109+ backend := testutil .NewMemoryBackend ()
110+ settingsStore , err := store .NewDAGSettingsStore (backend .Collection ("dag-settings" ))
111+ require .NoError (t , err )
112+ profileStore , err := store .NewProfileStore (backend .Collection ("profiles" ))
113+ require .NoError (t , err )
114+
115+ local , err := profile .New (profile.CreateInput {Name : "local" }, time .Now ())
116+ require .NoError (t , err )
117+ require .NoError (t , profileStore .Create (ctx , local ))
118+ prod , err := profile .New (profile.CreateInput {Name : "prod" }, time .Now ())
119+ require .NoError (t , err )
120+ require .NoError (t , profileStore .Create (ctx , prod ))
121+
122+ settings , err := dagsettings .New (dagsettings.UpdateInput {
123+ DAGName : "example" ,
124+ Profile : "local" ,
125+ }, time .Now ())
126+ require .NoError (t , err )
127+ require .NoError (t , settingsStore .Upsert (ctx , settings ))
128+
129+ ref , err := profile .WorkspaceInheritedRef ("ops" )
130+ require .NoError (t , err )
131+ defaults , err := profile .NewInherited (ref , profile.InheritedCreateInput {}, time .Now ())
132+ require .NoError (t , err )
133+ defaults .DefaultProfile = "prod"
134+ require .NoError (t , profileStore .Create (ctx , defaults ))
135+
136+ resolved , err := dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" , "ops" )
137+ require .NoError (t , err )
138+ assert .Equal (t , "local" , resolved )
139+ }
140+
141+ func TestResolveProfileUsesWorkspaceDefault (t * testing.T ) {
142+ ctx := context .Background ()
143+ backend := testutil .NewMemoryBackend ()
144+ settingsStore , err := store .NewDAGSettingsStore (backend .Collection ("dag-settings" ))
145+ require .NoError (t , err )
146+ profileStore , err := store .NewProfileStore (backend .Collection ("profiles" ))
147+ require .NoError (t , err )
148+
149+ prod , err := profile .New (profile.CreateInput {Name : "prod" }, time .Now ())
150+ require .NoError (t , err )
151+ require .NoError (t , profileStore .Create (ctx , prod ))
152+ ref , err := profile .WorkspaceInheritedRef ("ops" )
153+ require .NoError (t , err )
154+ defaults , err := profile .NewInherited (ref , profile.InheritedCreateInput {}, time .Now ())
155+ require .NoError (t , err )
156+ defaults .DefaultProfile = "prod"
157+ require .NoError (t , profileStore .Create (ctx , defaults ))
158+
159+ resolved , err := dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" , "ops" )
160+ require .NoError (t , err )
161+ assert .Equal (t , "prod" , resolved )
162+ }
163+
164+ func TestResolveProfileEmptyWorkspaceDefaultReturnsEmpty (t * testing.T ) {
165+ ctx := context .Background ()
166+ backend := testutil .NewMemoryBackend ()
167+ settingsStore , err := store .NewDAGSettingsStore (backend .Collection ("dag-settings" ))
168+ require .NoError (t , err )
169+ profileStore , err := store .NewProfileStore (backend .Collection ("profiles" ))
170+ require .NoError (t , err )
171+
172+ ref , err := profile .WorkspaceInheritedRef ("ops" )
173+ require .NoError (t , err )
174+ defaults , err := profile .NewInherited (ref , profile.InheritedCreateInput {}, time .Now ())
175+ require .NoError (t , err )
176+ require .NoError (t , profileStore .Create (ctx , defaults ))
177+
178+ resolved , err := dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" , "ops" )
179+ require .NoError (t , err )
180+ assert .Empty (t , resolved )
181+ }
182+
183+ func TestResolveProfileReturnsStaleWorkspaceDefaultProfileError (t * testing.T ) {
184+ ctx := context .Background ()
185+ backend := testutil .NewMemoryBackend ()
186+ settingsStore , err := store .NewDAGSettingsStore (backend .Collection ("dag-settings" ))
187+ require .NoError (t , err )
188+ profileStore , err := store .NewProfileStore (backend .Collection ("profiles" ))
189+ require .NoError (t , err )
190+
191+ ref , err := profile .WorkspaceInheritedRef ("ops" )
192+ require .NoError (t , err )
193+ defaults , err := profile .NewInherited (ref , profile.InheritedCreateInput {}, time .Now ())
194+ require .NoError (t , err )
195+ defaults .DefaultProfile = "prod"
196+ require .NoError (t , profileStore .Create (ctx , defaults ))
197+
198+ _ , err = dagsettings .ResolveProfile (ctx , settingsStore , profileStore , "example" , "ops" )
199+ require .ErrorIs (t , err , profile .ErrNotFound )
200+
201+ var refErr * dagsettings.ProfileReferenceError
202+ require .True (t , errors .As (err , & refErr ))
203+ assert .Equal (t , "prod" , refErr .Name )
204+ }
0 commit comments