@@ -20,6 +20,7 @@ import (
2020 "testing"
2121
2222 "github.com/stretchr/testify/assert"
23+ "github.com/stretchr/testify/require"
2324
2425 "github.com/score-spec/score-compose/internal/provisioners"
2526)
@@ -107,3 +108,73 @@ func TestProvisioner(t *testing.T) {
107108 })
108109
109110}
111+
112+ func TestParse_success (t * testing.T ) {
113+ t .Run ("fully populated" , func (t * testing.T ) {
114+ p , err := Parse (map [string ]interface {}{
115+ "uri" : "local-env://example" ,
116+ "type" : "environment" ,
117+ "class" : "custom" ,
118+ "description" : "pulls env vars" ,
119+ "supported_params" : []string {"p1" },
120+ "expected_outputs" : []string {"o2" , "o1" },
121+ })
122+ require .NoError (t , err )
123+ assert .Equal (t , "local-env://example" , p .Uri ())
124+ assert .Equal (t , "environment" , p .Type ())
125+ assert .Equal (t , "custom" , p .Class ())
126+ assert .Equal (t , "pulls env vars" , p .Description ())
127+ assert .Equal (t , []string {"p1" }, p .Params ())
128+ assert .Equal (t , []string {"o1" , "o2" }, p .Outputs ())
129+ })
130+
131+ t .Run ("optional fields default" , func (t * testing.T ) {
132+ p , err := Parse (map [string ]interface {}{"uri" : "local-env://x" })
133+ require .NoError (t , err )
134+ assert .Equal (t , "environment" , p .Type ())
135+ assert .Equal (t , "(any)" , p .Class ())
136+ assert .Empty (t , p .Description ())
137+ assert .Nil (t , p .Outputs ())
138+ assert .Nil (t , p .Params ())
139+ })
140+
141+ t .Run ("non-environment type" , func (t * testing.T ) {
142+ p , err := Parse (map [string ]interface {}{"uri" : "local-env://x" , "type" : "secret" })
143+ require .NoError (t , err )
144+ assert .Equal (t , "secret" , p .Type ())
145+ })
146+ }
147+
148+ func TestParse_fail (t * testing.T ) {
149+ for name , tc := range map [string ]struct {
150+ in map [string ]interface {}
151+ msg string
152+ }{
153+ "missing uri" : {map [string ]interface {}{"type" : "environment" }, "uri not set" },
154+ "empty uri" : {map [string ]interface {}{"uri" : "" , "type" : "environment" }, "uri not set" },
155+ "unknown field" : {map [string ]interface {}{"uri" : "local-env://x" , "bogus" : true }, "field bogus not found" },
156+ } {
157+ t .Run (name , func (t * testing.T ) {
158+ _ , err := Parse (tc .in )
159+ require .Error (t , err )
160+ assert .Contains (t , err .Error (), tc .msg )
161+ })
162+ }
163+ }
164+
165+ func TestParsedProvisioner_match (t * testing.T ) {
166+ t .Run ("any class" , func (t * testing.T ) {
167+ p , err := Parse (map [string ]interface {}{"uri" : "local-env://x" , "type" : "environment" })
168+ require .NoError (t , err )
169+ assert .True (t , p .Match ("environment.default#w.r" ))
170+ assert .True (t , p .Match ("environment.custom#w.r" ))
171+ assert .False (t , p .Match ("postgres.default#w.r" ))
172+ })
173+
174+ t .Run ("fixed class" , func (t * testing.T ) {
175+ p , err := Parse (map [string ]interface {}{"uri" : "local-env://x" , "type" : "environment" , "class" : "special" })
176+ require .NoError (t , err )
177+ assert .True (t , p .Match ("environment.special#w.r" ))
178+ assert .False (t , p .Match ("environment.default#w.r" ))
179+ })
180+ }
0 commit comments