@@ -686,6 +686,183 @@ data "coder_parameter" "region" {
686
686
}
687
687
}
688
688
689
+ //nolint:paralleltest,tparallel // Parameters load values from env vars
690
+ func TestParameterValidationEnforcement (t * testing.T ) {
691
+ for _ , tc := range []struct {
692
+ Name string
693
+ Config string
694
+ Value string
695
+ ExpectError * regexp.Regexp
696
+ Check func (state * terraform.ResourceState )
697
+ }{
698
+ // Empty
699
+ {
700
+ Name : "EmptyString" ,
701
+ Config : `
702
+ data "coder_parameter" "parameter" {
703
+ name = "parameter"
704
+ type = "string"
705
+ }
706
+ ` ,
707
+ ExpectError : nil ,
708
+ Check : func (state * terraform.ResourceState ) {
709
+ attrs := state .Primary .Attributes
710
+ for key , value := range map [string ]interface {}{
711
+ "default" : "" ,
712
+ "value" : "" ,
713
+ "optional" : "false" ,
714
+ } {
715
+ require .Equal (t , value , attrs [key ])
716
+ }
717
+ },
718
+ },
719
+ {
720
+ Name : "EmptyNumber" ,
721
+ Config : `
722
+ data "coder_parameter" "parameter" {
723
+ name = "parameter"
724
+ type = "number"
725
+ }
726
+ ` ,
727
+ ExpectError : nil ,
728
+ Check : func (state * terraform.ResourceState ) {
729
+ attrs := state .Primary .Attributes
730
+ for key , value := range map [string ]interface {}{
731
+ "default" : "" ,
732
+ "value" : "" ,
733
+ "optional" : "false" ,
734
+ } {
735
+ require .Equal (t , value , attrs [key ])
736
+ }
737
+ },
738
+ },
739
+ // EmptyWithOption
740
+ {
741
+ Name : "EmptyWithOption" ,
742
+ Config : `
743
+ data "coder_parameter" "parameter" {
744
+ name = "parameter"
745
+ type = "number"
746
+
747
+ option {
748
+ name = "option"
749
+ value = "5"
750
+ }
751
+ }
752
+ ` ,
753
+ ExpectError : nil ,
754
+ Check : func (state * terraform.ResourceState ) {
755
+ attrs := state .Primary .Attributes
756
+ for key , value := range map [string ]interface {}{
757
+ "default" : "" ,
758
+ "value" : "" ,
759
+ "optional" : "false" ,
760
+ } {
761
+ require .Equal (t , value , attrs [key ])
762
+ }
763
+ },
764
+ },
765
+ // DefaultSet
766
+ {
767
+ Name : "DefaultSet" ,
768
+ Config : `
769
+ data "coder_parameter" "parameter" {
770
+ name = "parameter"
771
+ type = "number"
772
+ default = "5"
773
+ }
774
+ ` ,
775
+ ExpectError : nil ,
776
+ Check : func (state * terraform.ResourceState ) {
777
+ attrs := state .Primary .Attributes
778
+ for key , value := range map [string ]interface {}{
779
+ "default" : "5" ,
780
+ "value" : "5" ,
781
+ "optional" : "true" ,
782
+ } {
783
+ require .Equal (t , value , attrs [key ])
784
+ }
785
+ },
786
+ },
787
+ {
788
+ Name : "DefaultSetInOption" ,
789
+ Config : `
790
+ data "coder_parameter" "parameter" {
791
+ name = "parameter"
792
+ type = "number"
793
+ default = "5"
794
+ option {
795
+ name = "option"
796
+ value = "5"
797
+ }
798
+ }
799
+ ` ,
800
+ ExpectError : nil ,
801
+ Check : func (state * terraform.ResourceState ) {
802
+ attrs := state .Primary .Attributes
803
+ for key , value := range map [string ]interface {}{
804
+ "default" : "5" ,
805
+ "value" : "5" ,
806
+ "optional" : "true" ,
807
+ } {
808
+ require .Equal (t , value , attrs [key ])
809
+ }
810
+ },
811
+ },
812
+ {
813
+ Name : "DefaultSetOutOption" ,
814
+ Config : `
815
+ data "coder_parameter" "parameter" {
816
+ name = "parameter"
817
+ type = "number"
818
+ default = "2"
819
+ option {
820
+ name = "option"
821
+ value = "5"
822
+ }
823
+ }
824
+ ` ,
825
+ ExpectError : nil ,
826
+ Check : func (state * terraform.ResourceState ) {
827
+ attrs := state .Primary .Attributes
828
+ for key , value := range map [string ]interface {}{
829
+ "default" : "5" ,
830
+ "value" : "5" ,
831
+ "optional" : "true" ,
832
+ } {
833
+ require .Equal (t , value , attrs [key ])
834
+ }
835
+ },
836
+ },
837
+ } {
838
+ tc := tc
839
+ //nolint:paralleltest,tparallel // Parameters load values from env vars
840
+ t .Run (tc .Name , func (t * testing.T ) {
841
+ if tc .Value != "" {
842
+ t .Setenv (provider .ParameterEnvironmentVariable ("parameter" ), tc .Value )
843
+ }
844
+ resource .Test (t , resource.TestCase {
845
+ ProviderFactories : coderFactory (),
846
+ IsUnitTest : true ,
847
+ Steps : []resource.TestStep {{
848
+ Config : tc .Config ,
849
+ ExpectError : tc .ExpectError ,
850
+ Check : func (state * terraform.State ) error {
851
+ require .Len (t , state .Modules , 1 )
852
+ require .Len (t , state .Modules [0 ].Resources , 1 )
853
+ param := state .Modules [0 ].Resources ["data.coder_parameter.parameter" ]
854
+ require .NotNil (t , param )
855
+ if tc .Check != nil {
856
+ tc .Check (param )
857
+ }
858
+ return nil
859
+ },
860
+ }},
861
+ })
862
+ })
863
+ }
864
+ }
865
+
689
866
func TestValueValidatesType (t * testing.T ) {
690
867
t .Parallel ()
691
868
for _ , tc := range []struct {
@@ -798,6 +975,25 @@ func TestValueValidatesType(t *testing.T) {
798
975
Value : `[]` ,
799
976
MinDisabled : true ,
800
977
MaxDisabled : true ,
978
+ }, {
979
+ Name : "ValidListOfStrings" ,
980
+ Type : "list(string)" ,
981
+ Value : `["first","second","third"]` ,
982
+ MinDisabled : true ,
983
+ MaxDisabled : true ,
984
+ }, {
985
+ Name : "InvalidListOfStrings" ,
986
+ Type : "list(string)" ,
987
+ Value : `["first","second","third"` ,
988
+ MinDisabled : true ,
989
+ MaxDisabled : true ,
990
+ Error : regexp .MustCompile ("is not valid list of strings" ),
991
+ }, {
992
+ Name : "EmptyListOfStrings" ,
993
+ Type : "list(string)" ,
994
+ Value : `[]` ,
995
+ MinDisabled : true ,
996
+ MaxDisabled : true ,
801
997
}} {
802
998
tc := tc
803
999
t .Run (tc .Name , func (t * testing.T ) {
0 commit comments