diff --git a/internal/api/api_test.go b/internal/api/api_test.go index a1906b11a..a55f7c37b 100644 --- a/internal/api/api_test.go +++ b/internal/api/api_test.go @@ -4,6 +4,8 @@ import ( "bytes" "context" "encoding/json" + "fmt" + "io" "log/slog" "net/http" "testing" @@ -555,6 +557,45 @@ func TestAPI(t *testing.T) { fakeSM.RespondWithData() }) + t.Run("POST Service Binding 409 error", func(t *testing.T) { + // given + secretName, secretNamespace := "sb-test-01-secret", "default" + sbCreateRequest := requests.CreateServiceBinding{ + Name: "sb-test-01", + ServiceInstanceID: "a7e240d6-e348-4fc0-a54c-7b7bfe9b9da6", + Parameters: []byte(`{"param1": "value1", "param2": "value2"}`), + SecretName: secretName, + SecretNamespace: secretNamespace, + } + sbCreateRequestJSON, err := json.Marshal(sbCreateRequest) + require.NoError(t, err) + + existingSecret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: secretName, + Namespace: secretNamespace, + }, + StringData: map[string]string{"foo": "bar"}, + } + require.NoError(t, secretMgr.Create(context.TODO(), existingSecret)) + + req, err := http.NewRequest(http.MethodPost, apiAddr+"/api/service-bindings", bytes.NewBuffer(sbCreateRequestJSON)) + require.NoError(t, err) + resp, err := apiClient.Do(req) + require.NoError(t, err) + + defer resp.Body.Close() + msgBytes, err := io.ReadAll(resp.Body) + require.NoError(t, err) + + // then + require.Equal(t, http.StatusConflict, resp.StatusCode) + assert.Contains(t, fmt.Sprintf("secret \"%s\" in \"%s\" namespace already exists", secretName, secretNamespace), string(msgBytes)) + + // cleanup + err = secretMgr.Delete(context.TODO(), existingSecret) + }) + t.Run("DELETE Service Binding by ID", func(t *testing.T) { // given sbID := "318a16c3-7c80-485f-b55c-918629012c9a" diff --git a/internal/cluster-object/fake.go b/internal/cluster-object/fake.go index 5837535c9..83351a180 100644 --- a/internal/cluster-object/fake.go +++ b/internal/cluster-object/fake.go @@ -5,6 +5,7 @@ import ( "fmt" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -37,7 +38,7 @@ func (p *FakeSecretManager) GetByNameAndNamespace(ctx context.Context, name, nam return secret, nil } } - return nil, fmt.Errorf("secret not found") + return nil, errors.NewNotFound(corev1.Resource("secret"), name) } func (p *FakeSecretManager) Clean() {