@@ -106,13 +106,30 @@ impl ProviderBuilder {
106106 Some ( "random" ) => {
107107 providers:: random:: builder:: get_corresponding_provider ( provider_split, column)
108108 }
109- _ => Err ( unknown_provider ( provider) ) ,
109+ other => Err ( unknown_provider (
110+ "" ,
111+ other,
112+ & [ "constant.*" , "increment.*" , "person.*" , "random.*" ] ,
113+ ) ) ,
110114 }
111115 }
112116}
113117
114- pub fn unknown_provider ( wrong_provider : & str ) -> FakeLakeError {
115- FakeLakeError :: BadYAMLFormat ( format ! ( "Unknown provider: {}" , wrong_provider) )
118+ pub fn unknown_provider (
119+ prefix : & str ,
120+ segment : Option < & str > ,
121+ available : & ' static [ & ' static str ] ,
122+ ) -> FakeLakeError {
123+ let provider = match ( prefix, segment) {
124+ ( "" , Some ( s) ) => s. to_string ( ) ,
125+ ( "" , None ) => "<missing>" . to_string ( ) ,
126+ ( p, Some ( s) ) => format ! ( "{}.{}" , p, s) ,
127+ ( p, None ) => format ! ( "{}.<missing>" , p) ,
128+ } ;
129+ FakeLakeError :: UnknownProvider {
130+ provider,
131+ available,
132+ }
116133}
117134
118135#[ cfg( test) ]
@@ -195,6 +212,36 @@ mod tests {
195212 }
196213 }
197214
215+ #[ test]
216+ fn given_valid_provider_case_insensitive_should_return_provider ( ) {
217+ let provider_names = [
218+ "Constant.String" ,
219+ "CONSTANT.STRING" ,
220+ "Increment.Integer" ,
221+ "INCREMENT.INTEGER" ,
222+ "Person.Email" ,
223+ "PERSON.EMAIL" ,
224+ "Random.String.Alphanumeric" ,
225+ "RANDOM.STRING.ALPHANUMERIC" ,
226+ "Random.Number.I32" ,
227+ "RANDOM.NUMBER.F64" ,
228+ "Random.Date.Date" ,
229+ "RANDOM.DATE.DATETIME" ,
230+ ] ;
231+ for provider_name in provider_names {
232+ let yaml_str = format ! ( "name: name{}provider: {}" , '\n' , provider_name) ;
233+ let column = & YamlLoader :: load_from_str ( yaml_str. as_str ( ) ) . unwrap ( ) [ 0 ] ;
234+
235+ match ProviderBuilder :: get_corresponding_provider ( provider_name, column) {
236+ Ok ( _) => ( ) ,
237+ _ => panic ! (
238+ "Provider '{}' should be resolved case-insensitively" ,
239+ provider_name
240+ ) ,
241+ }
242+ }
243+ }
244+
198245 #[ test]
199246 fn given_wrong_provider_should_return_error ( ) {
200247 let provider_name = "not_a_provider" ;
0 commit comments