@@ -858,3 +858,155 @@ func TestKubernetesGetAppConfigValues(t *testing.T) {
858
858
assert .Equal (t , http .StatusInternalServerError , apiErr .StatusCode )
859
859
assert .Equal (t , "Internal Server Error" , apiErr .Message )
860
860
}
861
+
862
+ func TestLinuxSetAppConfigValues (t * testing.T ) {
863
+ // Define expected config once
864
+ expectedConfig := types.AppConfig {
865
+ Groups : []kotsv1beta1.ConfigGroup {
866
+ {
867
+ Name : "test-group" ,
868
+ Title : "Test Group" ,
869
+ Items : []kotsv1beta1.ConfigItem {
870
+ {
871
+ Name : "test-item" ,
872
+ Type : "text" ,
873
+ Title : "Test Item" ,
874
+ Default : multitype.BoolOrString {StrVal : "default" },
875
+ Value : multitype.BoolOrString {StrVal : "value" },
876
+ },
877
+ },
878
+ },
879
+ },
880
+ }
881
+
882
+ // Create a test server
883
+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
884
+ // Check request method and path
885
+ assert .Equal (t , "POST" , r .Method )
886
+ assert .Equal (t , "/api/linux/install/app/config/values" , r .URL .Path )
887
+
888
+ // Check headers
889
+ assert .Equal (t , "application/json" , r .Header .Get ("Content-Type" ))
890
+ assert .Equal (t , "Bearer test-token" , r .Header .Get ("Authorization" ))
891
+
892
+ // Decode request body
893
+ var request types.SetAppConfigValuesRequest
894
+ err := json .NewDecoder (r .Body ).Decode (& request )
895
+ require .NoError (t , err , "Failed to decode request body" )
896
+
897
+ // Verify the request contains expected values
898
+ assert .Equal (t , "new-value" , request .Values ["test-item" ])
899
+ assert .Equal (t , "required-value" , request .Values ["required-item" ])
900
+
901
+ // Return successful response
902
+ w .WriteHeader (http .StatusOK )
903
+ json .NewEncoder (w ).Encode (expectedConfig )
904
+ }))
905
+ defer server .Close ()
906
+
907
+ // Test successful set
908
+ c := New (server .URL , WithToken ("test-token" ))
909
+ configValues := map [string ]string {
910
+ "test-item" : "new-value" ,
911
+ "required-item" : "required-value" ,
912
+ }
913
+ config , err := c .SetLinuxAppConfigValues (configValues )
914
+ assert .NoError (t , err )
915
+ assert .Equal (t , expectedConfig , config )
916
+
917
+ // Test error response
918
+ errorServer := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
919
+ w .WriteHeader (http .StatusBadRequest )
920
+ json .NewEncoder (w ).Encode (types.APIError {
921
+ StatusCode : http .StatusBadRequest ,
922
+ Message : "Bad Request" ,
923
+ })
924
+ }))
925
+ defer errorServer .Close ()
926
+
927
+ c = New (errorServer .URL , WithToken ("test-token" ))
928
+ config , err = c .SetLinuxAppConfigValues (configValues )
929
+ assert .Error (t , err )
930
+ assert .Equal (t , types.AppConfig {}, config )
931
+
932
+ apiErr , ok := err .(* types.APIError )
933
+ require .True (t , ok , "Expected err to be of type *types.APIError" )
934
+ assert .Equal (t , http .StatusBadRequest , apiErr .StatusCode )
935
+ assert .Equal (t , "Bad Request" , apiErr .Message )
936
+ }
937
+
938
+ func TestKubernetesSetAppConfigValues (t * testing.T ) {
939
+ // Define expected config once
940
+ expectedConfig := types.AppConfig {
941
+ Groups : []kotsv1beta1.ConfigGroup {
942
+ {
943
+ Name : "test-group" ,
944
+ Title : "Test Group" ,
945
+ Items : []kotsv1beta1.ConfigItem {
946
+ {
947
+ Name : "test-item" ,
948
+ Type : "text" ,
949
+ Title : "Test Item" ,
950
+ Default : multitype.BoolOrString {StrVal : "default" },
951
+ Value : multitype.BoolOrString {StrVal : "value" },
952
+ },
953
+ },
954
+ },
955
+ },
956
+ }
957
+
958
+ // Create a test server
959
+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
960
+ // Check request method and path
961
+ assert .Equal (t , "POST" , r .Method )
962
+ assert .Equal (t , "/api/kubernetes/install/app/config/values" , r .URL .Path )
963
+
964
+ // Check headers
965
+ assert .Equal (t , "application/json" , r .Header .Get ("Content-Type" ))
966
+ assert .Equal (t , "Bearer test-token" , r .Header .Get ("Authorization" ))
967
+
968
+ // Decode request body
969
+ var request types.SetAppConfigValuesRequest
970
+ err := json .NewDecoder (r .Body ).Decode (& request )
971
+ require .NoError (t , err , "Failed to decode request body" )
972
+
973
+ // Verify the request contains expected values
974
+ assert .Equal (t , "new-value" , request .Values ["test-item" ])
975
+ assert .Equal (t , "required-value" , request .Values ["required-item" ])
976
+
977
+ // Return successful response
978
+ w .WriteHeader (http .StatusOK )
979
+ json .NewEncoder (w ).Encode (expectedConfig )
980
+ }))
981
+ defer server .Close ()
982
+
983
+ // Test successful set
984
+ c := New (server .URL , WithToken ("test-token" ))
985
+ configValues := map [string ]string {
986
+ "test-item" : "new-value" ,
987
+ "required-item" : "required-value" ,
988
+ }
989
+ config , err := c .SetKubernetesAppConfigValues (configValues )
990
+ assert .NoError (t , err )
991
+ assert .Equal (t , expectedConfig , config )
992
+
993
+ // Test error response
994
+ errorServer := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
995
+ w .WriteHeader (http .StatusBadRequest )
996
+ json .NewEncoder (w ).Encode (types.APIError {
997
+ StatusCode : http .StatusBadRequest ,
998
+ Message : "Bad Request" ,
999
+ })
1000
+ }))
1001
+ defer errorServer .Close ()
1002
+
1003
+ c = New (errorServer .URL , WithToken ("test-token" ))
1004
+ config , err = c .SetKubernetesAppConfigValues (configValues )
1005
+ assert .Error (t , err )
1006
+ assert .Equal (t , types.AppConfig {}, config )
1007
+
1008
+ apiErr , ok := err .(* types.APIError )
1009
+ require .True (t , ok , "Expected err to be of type *types.APIError" )
1010
+ assert .Equal (t , http .StatusBadRequest , apiErr .StatusCode )
1011
+ assert .Equal (t , "Bad Request" , apiErr .Message )
1012
+ }
0 commit comments