@@ -2,6 +2,7 @@ package exception_item_test
22
33import (
44 "fmt"
5+ "regexp"
56 "testing"
67
78 "github.com/elastic/terraform-provider-elasticstack/internal/acctest"
@@ -304,3 +305,170 @@ func TestAccResourceExceptionItemEntryType_Wildcard(t *testing.T) {
304305 },
305306 })
306307}
308+
309+ func TestAccResourceExceptionItemValidation (t * testing.T ) {
310+ listID := fmt .Sprintf ("test-exception-list-validation-%s" , uuid .New ().String ()[:8 ])
311+ itemID := fmt .Sprintf ("test-exception-item-validation-%s" , uuid .New ().String ()[:8 ])
312+
313+ resource .Test (t , resource.TestCase {
314+ PreCheck : func () { acctest .PreCheck (t ) },
315+ Steps : []resource.TestStep {
316+ // Test 1: Match entry missing value
317+ {
318+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
319+ ProtoV6ProviderFactories : acctest .Providers ,
320+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_match_missing_value" ),
321+ ConfigVariables : config.Variables {
322+ "list_id" : config .StringVariable (listID ),
323+ "item_id" : config .StringVariable (itemID ),
324+ },
325+ ExpectError : regexp .MustCompile ("Entry type 'match' requires 'value' to be set" ),
326+ PlanOnly : true ,
327+ },
328+ // Test 2: Match entry missing operator
329+ {
330+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
331+ ProtoV6ProviderFactories : acctest .Providers ,
332+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_match_missing_operator" ),
333+ ConfigVariables : config.Variables {
334+ "list_id" : config .StringVariable (listID ),
335+ "item_id" : config .StringVariable (itemID ),
336+ },
337+ ExpectError : regexp .MustCompile ("Entry type 'match' requires 'operator' to be set" ),
338+ PlanOnly : true ,
339+ },
340+ // Test 3: Wildcard entry missing value
341+ {
342+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
343+ ProtoV6ProviderFactories : acctest .Providers ,
344+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_wildcard_missing_value" ),
345+ ConfigVariables : config.Variables {
346+ "list_id" : config .StringVariable (listID ),
347+ "item_id" : config .StringVariable (itemID ),
348+ },
349+ ExpectError : regexp .MustCompile ("Entry type 'wildcard' requires 'value' to be set" ),
350+ PlanOnly : true ,
351+ },
352+ // Test 4: MatchAny entry missing values
353+ {
354+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
355+ ProtoV6ProviderFactories : acctest .Providers ,
356+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_match_any_missing_values" ),
357+ ConfigVariables : config.Variables {
358+ "list_id" : config .StringVariable (listID ),
359+ "item_id" : config .StringVariable (itemID ),
360+ },
361+ ExpectError : regexp .MustCompile ("Entry type 'match_any' requires 'values' to be set" ),
362+ PlanOnly : true ,
363+ },
364+ // Test 5: MatchAny entry missing operator
365+ {
366+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
367+ ProtoV6ProviderFactories : acctest .Providers ,
368+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_match_any_missing_operator" ),
369+ ConfigVariables : config.Variables {
370+ "list_id" : config .StringVariable (listID ),
371+ "item_id" : config .StringVariable (itemID ),
372+ },
373+ ExpectError : regexp .MustCompile ("Entry type 'match_any' requires 'operator' to be set" ),
374+ PlanOnly : true ,
375+ },
376+ // Test 6: List entry missing list object
377+ {
378+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
379+ ProtoV6ProviderFactories : acctest .Providers ,
380+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_list_missing_list_object" ),
381+ ConfigVariables : config.Variables {
382+ "list_id" : config .StringVariable (listID ),
383+ "item_id" : config .StringVariable (itemID ),
384+ },
385+ ExpectError : regexp .MustCompile ("Entry type 'list' requires 'list' object to be set" ),
386+ PlanOnly : true ,
387+ },
388+ // Test 7: List entry missing list.id
389+ {
390+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
391+ ProtoV6ProviderFactories : acctest .Providers ,
392+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_list_missing_list_id" ),
393+ ConfigVariables : config.Variables {
394+ "list_id" : config .StringVariable (listID ),
395+ "item_id" : config .StringVariable (itemID ),
396+ },
397+ ExpectError : regexp .MustCompile (`attribute "id" is required` ),
398+ PlanOnly : true ,
399+ },
400+ // Test 8: List entry missing list.type
401+ {
402+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
403+ ProtoV6ProviderFactories : acctest .Providers ,
404+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_list_missing_list_type" ),
405+ ConfigVariables : config.Variables {
406+ "list_id" : config .StringVariable (listID ),
407+ "item_id" : config .StringVariable (itemID ),
408+ },
409+ ExpectError : regexp .MustCompile (`attribute "type" is required` ),
410+ PlanOnly : true ,
411+ },
412+ // Test 9: Exists entry missing operator
413+ {
414+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
415+ ProtoV6ProviderFactories : acctest .Providers ,
416+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_exists_missing_operator" ),
417+ ConfigVariables : config.Variables {
418+ "list_id" : config .StringVariable (listID ),
419+ "item_id" : config .StringVariable (itemID ),
420+ },
421+ ExpectError : regexp .MustCompile ("Entry type 'exists' requires 'operator' to be set" ),
422+ PlanOnly : true ,
423+ },
424+ // Test 10: Nested entry missing entries
425+ {
426+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
427+ ProtoV6ProviderFactories : acctest .Providers ,
428+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_nested_missing_entries" ),
429+ ConfigVariables : config.Variables {
430+ "list_id" : config .StringVariable (listID ),
431+ "item_id" : config .StringVariable (itemID ),
432+ },
433+ ExpectError : regexp .MustCompile ("Entry type 'nested' requires 'entries' to be set" ),
434+ PlanOnly : true ,
435+ },
436+ // Test 11: Nested entry with invalid entry type
437+ {
438+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
439+ ProtoV6ProviderFactories : acctest .Providers ,
440+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_nested_invalid_entry_type" ),
441+ ConfigVariables : config.Variables {
442+ "list_id" : config .StringVariable (listID ),
443+ "item_id" : config .StringVariable (itemID ),
444+ },
445+ ExpectError : regexp .MustCompile (`(Nested entry .* has invalid type|value must be one of:.*"match".*"match_any".*"exists")` ),
446+ PlanOnly : true ,
447+ },
448+ // Test 12: Nested match entry missing value
449+ {
450+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
451+ ProtoV6ProviderFactories : acctest .Providers ,
452+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_nested_entry_missing_value" ),
453+ ConfigVariables : config.Variables {
454+ "list_id" : config .StringVariable (listID ),
455+ "item_id" : config .StringVariable (itemID ),
456+ },
457+ ExpectError : regexp .MustCompile ("Nested entry type 'match' requires 'value' to be set" ),
458+ PlanOnly : true ,
459+ },
460+ // Test 13: Nested entry missing operator
461+ {
462+ SkipFunc : versionutils .CheckIfVersionIsUnsupported (minExceptionItemAPISupport ),
463+ ProtoV6ProviderFactories : acctest .Providers ,
464+ ConfigDirectory : acctest .NamedTestCaseDirectory ("validation_nested_entry_missing_operator" ),
465+ ConfigVariables : config.Variables {
466+ "list_id" : config .StringVariable (listID ),
467+ "item_id" : config .StringVariable (itemID ),
468+ },
469+ ExpectError : regexp .MustCompile (`(Nested entry requires 'operator' to be set|attribute "operator" is required)` ),
470+ PlanOnly : true ,
471+ },
472+ },
473+ })
474+ }
0 commit comments