diff --git a/dataaccess/dataaccess.go b/dataaccess/dataaccess.go index bc014ae..65bbbc3 100644 --- a/dataaccess/dataaccess.go +++ b/dataaccess/dataaccess.go @@ -39,7 +39,7 @@ type DataAccess interface { BundleCreate(ctx context.Context, bundle data.Bundle) error BundleDelete(ctx context.Context, name string, version string) error - BundleDisable(ctx context.Context, name string) error + BundleDisable(ctx context.Context, name string, version string) error BundleEnable(ctx context.Context, name string, version string) error BundleEnabledVersion(ctx context.Context, name string) (string, error) BundleExists(ctx context.Context, name string, version string) (bool, error) diff --git a/dataaccess/memory/bundle-access.go b/dataaccess/memory/bundle-access.go index 28b07d1..fe3b67e 100644 --- a/dataaccess/memory/bundle-access.go +++ b/dataaccess/memory/bundle-access.go @@ -71,15 +71,15 @@ func (da *InMemoryDataAccess) BundleDelete(ctx context.Context, name, version st } // BundleDisable TBD -func (da *InMemoryDataAccess) BundleDisable(ctx context.Context, name string) error { +func (da *InMemoryDataAccess) BundleDisable(ctx context.Context, name, version string) error { if name == "" { return errs.ErrEmptyBundleName } foundMatch := false - for n, b := range da.bundles { - if n != name { + for _, b := range da.bundles { + if b.Name != name || b.Version != version { continue } diff --git a/dataaccess/memory/bundle-access_test.go b/dataaccess/memory/bundle-access_test.go index 9cde722..a8c60b9 100644 --- a/dataaccess/memory/bundle-access_test.go +++ b/dataaccess/memory/bundle-access_test.go @@ -23,6 +23,7 @@ import ( "github.com/getgort/gort/data" "github.com/getgort/gort/dataaccess/errs" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func testBundleAccess(t *testing.T) { @@ -33,6 +34,7 @@ func testBundleAccess(t *testing.T) { t.Run("testBundleEnableTwo", testBundleEnableTwo) t.Run("testBundleExists", testBundleExists) t.Run("testBundleDelete", testBundleDelete) + t.Run("testBundleDeleteDoesntDisable", testBundleDeleteDoesntDisable) t.Run("testBundleGet", testBundleGet) t.Run("testBundleList", testBundleList) t.Run("testBundleVersionList", testBundleVersionList) @@ -268,6 +270,34 @@ func testBundleDelete(t *testing.T) { } } +func testBundleDeleteDoesntDisable(t *testing.T) { + var err error + + bundle, _ := getTestBundle() + bundle.Name = "test-delete2" + bundle.Version = "0.0.1" + err = da.BundleCreate(ctx, bundle) + require.NoError(t, err) + defer da.BundleDelete(ctx, bundle.Name, bundle.Version) + + bundle2, _ := getTestBundle() + bundle2.Name = "test-delete2" + bundle2.Version = "0.0.2" + err = da.BundleCreate(ctx, bundle2) + require.NoError(t, err) + defer da.BundleDelete(ctx, bundle2.Name, bundle2.Version) + + err = da.BundleEnable(ctx, bundle2.Name, bundle2.Version) + require.NoError(t, err) + + err = da.BundleDelete(ctx, bundle.Name, bundle.Version) + require.NoError(t, err) + + bundle2, err = da.BundleGet(ctx, bundle2.Name, bundle2.Version) + require.NoError(t, err) + assert.True(t, bundle2.Enabled) +} + func testBundleGet(t *testing.T) { var err error diff --git a/dataaccess/postgres/bundle-access.go b/dataaccess/postgres/bundle-access.go index 75dc3d3..4192c9f 100644 --- a/dataaccess/postgres/bundle-access.go +++ b/dataaccess/postgres/bundle-access.go @@ -135,7 +135,7 @@ func (da PostgresDataAccess) BundleDelete(ctx context.Context, name, version str return errs.ErrNoSuchBundle } - err = da.doBundleDisable(ctx, tx, name) + err = da.doBundleDisable(ctx, tx, name, version) if err != nil { tx.Rollback() return gerr.Wrap(errs.ErrDataAccess, err) @@ -157,7 +157,7 @@ func (da PostgresDataAccess) BundleDelete(ctx context.Context, name, version str } // BundleDisable TBD -func (da PostgresDataAccess) BundleDisable(ctx context.Context, name string) error { +func (da PostgresDataAccess) BundleDisable(ctx context.Context, name, version string) error { tr := otel.GetTracerProvider().Tracer(telemetry.ServiceName) ctx, sp := tr.Start(ctx, "postgres.BundleDisable") defer sp.End() @@ -173,7 +173,7 @@ func (da PostgresDataAccess) BundleDisable(ctx context.Context, name string) err return gerr.Wrap(errs.ErrDataAccess, err) } - err = da.doBundleDisable(ctx, tx, name) + err = da.doBundleDisable(ctx, tx, name, version) if err != nil { tx.Rollback() return gerr.Wrap(errs.ErrDataAccess, err) @@ -521,10 +521,10 @@ func (da PostgresDataAccess) doBundleDelete(ctx context.Context, tx *sql.Tx, nam } // doBundleDisable TBD -func (da PostgresDataAccess) doBundleDisable(ctx context.Context, tx *sql.Tx, name string) error { - query := `DELETE FROM bundle_enabled WHERE bundle_name=$1` +func (da PostgresDataAccess) doBundleDisable(ctx context.Context, tx *sql.Tx, name string, version string) error { + query := `DELETE FROM bundle_enabled WHERE bundle_name=$1 AND bundle_version=$2` - _, err := tx.ExecContext(ctx, query, name) + _, err := tx.ExecContext(ctx, query, name, version) if err != nil { return gerr.Wrap(errs.ErrDataAccess, err) } diff --git a/dataaccess/postgres/bundle-access_test.go b/dataaccess/postgres/bundle-access_test.go index 0eb063c..5b97bf3 100644 --- a/dataaccess/postgres/bundle-access_test.go +++ b/dataaccess/postgres/bundle-access_test.go @@ -23,6 +23,7 @@ import ( "github.com/getgort/gort/data" "github.com/getgort/gort/dataaccess/errs" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func testBundleAccess(t *testing.T) { @@ -33,6 +34,7 @@ func testBundleAccess(t *testing.T) { t.Run("testBundleEnableTwo", testBundleEnableTwo) t.Run("testBundleExists", testBundleExists) t.Run("testBundleDelete", testBundleDelete) + t.Run("testBundleDeleteDoesntDisable", testBundleDeleteDoesntDisable) t.Run("testBundleGet", testBundleGet) t.Run("testBundleList", testBundleList) t.Run("testBundleVersionList", testBundleVersionList) @@ -268,6 +270,34 @@ func testBundleDelete(t *testing.T) { } } +func testBundleDeleteDoesntDisable(t *testing.T) { + var err error + + bundle, _ := getTestBundle() + bundle.Name = "test-delete2" + bundle.Version = "0.0.1" + err = da.BundleCreate(ctx, bundle) + require.NoError(t, err) + defer da.BundleDelete(ctx, bundle.Name, bundle.Version) + + bundle2, _ := getTestBundle() + bundle2.Name = "test-delete2" + bundle2.Version = "0.0.2" + err = da.BundleCreate(ctx, bundle2) + require.NoError(t, err) + defer da.BundleDelete(ctx, bundle2.Name, bundle2.Version) + + err = da.BundleEnable(ctx, bundle2.Name, bundle2.Version) + require.NoError(t, err) + + err = da.BundleDelete(ctx, bundle.Name, bundle.Version) + require.NoError(t, err) + + bundle2, err = da.BundleGet(ctx, bundle2.Name, bundle2.Version) + require.NoError(t, err) + assert.True(t, bundle2.Enabled) +} + func testBundleGet(t *testing.T) { var err error diff --git a/service/bundle-handlers.go b/service/bundle-handlers.go index 659026e..96b9823 100644 --- a/service/bundle-handlers.go +++ b/service/bundle-handlers.go @@ -178,7 +178,7 @@ func handlePatchBundleVersion(w http.ResponseWriter, r *http.Request) { if enabledValue[0] == 'T' { err = dataAccessLayer.BundleEnable(r.Context(), name, version) } else if enabledValue[0] == 'F' { - err = dataAccessLayer.BundleDisable(r.Context(), name) + err = dataAccessLayer.BundleDisable(r.Context(), name, version) } if err != nil { respondAndLogError(r.Context(), w, err)