Skip to content
This repository has been archived by the owner on Jul 4, 2024. It is now read-only.

Commit

Permalink
Tenant fetcher server no-op delete (#1940) (#1941)
Browse files Browse the repository at this point in the history
* Tenant fetcher noop delete and fix tests

* Bump PR number
  • Loading branch information
Daniel Gospodinow committed Jul 7, 2021
1 parent df529fa commit 7e6b8fe
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 380 deletions.
4 changes: 2 additions & 2 deletions chart/compass/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ global:
version: "PR-1924"
tenant_fetcher:
dir:
version: "PR-1888"
version: "PR-1940"
ord_service:
dir:
version: "PR-31"
Expand All @@ -103,7 +103,7 @@ global:
version: "PR-36"
e2e_tests:
dir:
version: "PR-1927"
version: "PR-1940"
isLocalEnv: false
oauth2:
host: oauth2
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 0 additions & 15 deletions components/tenant-fetcher/internal/tenant/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ type TenantRepository interface {
Create(ctx context.Context, item model.TenantModel) error
GetByExternalID(ctx context.Context, tenantId string) (model.TenantModel, error)
Update(ctx context.Context, item model.TenantModel) error
DeleteByExternalID(ctx context.Context, tenantId string) error
}

//go:generate mockery --name=Converter --output=automock --outpkg=automock --case=underscore
Expand Down Expand Up @@ -115,17 +114,3 @@ func (r *repository) Update(ctx context.Context, item model.TenantModel) error {

return persistence.MapSQLError(ctx, err, resource.Tenant, resource.Update, "while updating row to '%s' table", r.tableName)
}

func (r *repository) DeleteByExternalID(ctx context.Context, tenantId string) error {
persist, err := persistence.FromCtx(ctx)
if err != nil {
return err
}

stmt := fmt.Sprintf("DELETE FROM %s WHERE %s = $1", r.tableName, externalTenantColumn)

log.C(ctx).Infof("Executing DB query: %s", stmt)
_, err = persist.ExecContext(ctx, stmt, tenantId)

return persistence.MapSQLError(ctx, err, resource.Tenant, resource.Delete, "while deleting row to '%s' table", r.tableName)
}
40 changes: 0 additions & 40 deletions components/tenant-fetcher/internal/tenant/repository_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,43 +222,3 @@ func TestRepository_Update(t *testing.T) {
require.Error(t, err)
})
}

func TestRepository_Delete(t *testing.T) {
t.Run("Success", func(t *testing.T) {
//GIVEN
db, dbMock := testdb.MockDatabase(t)
ctx := context.Background()
ctx = persistence.SaveToContext(ctx, db)

mockConverter := &automock.Converter{}

defer dbMock.AssertExpectations(t)
dbMock.ExpectExec(regexp.QuoteMeta(deleteQuery)).
WithArgs(testID).
WillReturnResult(sqlmock.NewResult(-1, 1))

repo := tenant.NewRepository(mockConverter)

//WHEN
err := repo.DeleteByExternalID(ctx, testID)

// THEN
require.NoError(t, err)
})

t.Run("Error when there is no db instance in the context", func(t *testing.T) {
//GIVEN
ctx := context.Background()

mockConverter := &automock.Converter{}
defer mockConverter.AssertExpectations(t)

repo := tenant.NewRepository(mockConverter)

//WHEN
err := repo.DeleteByExternalID(ctx, testID)

// THEN
require.Error(t, err)
})
}
76 changes: 13 additions & 63 deletions components/tenant-fetcher/internal/tenant/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package tenant
import (
"context"
"database/sql"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
Expand All @@ -22,12 +21,11 @@ import (
)

const (
genericDatabaseError = "Something went wrong with our database"
parentTenantConfigureDatabaseError = "Something went wrong while configuring parent tenant"
tenantCreateDatabaseError = "Something went wrong while creating tenant"
tenantGetDatabaseError = "Something went wrong while getting tenant"
tenantUpdateDatabaseError = "Something went wrong while updating tenant"
tenantDeleteDatabaseError = "Something went wrong while deleting tenant"
GenericDatabaseError = "Something went wrong with our database"
ParentTenantConfigureDatabaseError = "Something went wrong while configuring parent tenant"
CreateTenantDatabaseError = "Something went wrong while creating tenant"
GetTenantDatabaseError = "Something went wrong while getting tenant"
UpdateTenantDatabaseError = "Something went wrong while updating tenant"

autogeneratedTenantProvider = "autogenerated"
)
Expand Down Expand Up @@ -110,7 +108,7 @@ func (s *service) Create(writer http.ResponseWriter, request *http.Request) {
tx, err := s.transact.Begin()
if err != nil {
logger.WithError(err).Errorf("while beginning db transaction: %v", err)
http.Error(writer, genericDatabaseError, http.StatusInternalServerError)
http.Error(writer, GenericDatabaseError, http.StatusInternalServerError)
return
}
defer s.transact.RollbackUnlessCommitted(ctx, tx)
Expand All @@ -121,22 +119,22 @@ func (s *service) Create(writer http.ResponseWriter, request *http.Request) {
parentTenantInternalID, err := s.getParentTenantInternalID(ctx, t)
if err != nil {
logger.WithError(err).Errorf("while getting parent tenant ID for tenant with ID %s: %v", t.TenantId, err)
http.Error(writer, parentTenantConfigureDatabaseError, http.StatusInternalServerError)
http.Error(writer, ParentTenantConfigureDatabaseError, http.StatusInternalServerError)
return
}
t.ParentInternalId = parentTenantInternalID

if _, err := s.repository.GetByExternalID(ctx, t.TenantId); err != nil {
if !apperrors.IsNotFoundError(err) && err != sql.ErrNoRows {
logger.WithError(err).Errorf("while getting tenant with ID %s: %v", t.TenantId, err)
http.Error(writer, tenantGetDatabaseError, http.StatusInternalServerError)
http.Error(writer, GetTenantDatabaseError, http.StatusInternalServerError)
return
}

if err := s.repository.Create(ctx, t); err != nil {
if !apperrors.IsNotUniqueError(err) {
logger.WithError(err).Errorf("while creating tenant: %v", err)
http.Error(writer, tenantCreateDatabaseError, http.StatusInternalServerError)
http.Error(writer, CreateTenantDatabaseError, http.StatusInternalServerError)
return
}
}
Expand All @@ -145,14 +143,14 @@ func (s *service) Create(writer http.ResponseWriter, request *http.Request) {
}
if err := s.repository.Update(ctx, t); err != nil {
logger.WithError(err).Errorf("while updating tenant: %v", err)
http.Error(writer, tenantUpdateDatabaseError, http.StatusInternalServerError)
http.Error(writer, UpdateTenantDatabaseError, http.StatusInternalServerError)
return
}
}

if err := tx.Commit(); err != nil {
logger.WithError(err).Errorf("while committing transaction : %v", err)
http.Error(writer, genericDatabaseError, http.StatusInternalServerError)
http.Error(writer, GenericDatabaseError, http.StatusInternalServerError)
return
}

Expand All @@ -165,56 +163,8 @@ func (s *service) Create(writer http.ResponseWriter, request *http.Request) {
}
}

func (s *service) DeleteByExternalID(writer http.ResponseWriter, request *http.Request) {
ctx := request.Context()
logger := log.C(ctx)

body, err := extractBody(request, writer)
if err != nil {
logger.WithError(err).Errorf("while extracting request body: %v", err)
http.Error(writer, err.Error(), http.StatusInternalServerError)
return
}

tenantId := gjson.GetBytes(body, s.config.TenantProviderTenantIdProperty)
if !tenantId.Exists() || tenantId.Type != gjson.String || len(tenantId.String()) == 0 {
logger.Errorf("Property %q not found in body or it is not of String type", s.config.TenantProviderTenantIdProperty)
http.Error(writer, fmt.Sprintf("Property %q not found in body or it is not of String type", s.config.TenantProviderTenantIdProperty), http.StatusInternalServerError)
return
}

tx, err := s.transact.Begin()
if err != nil {
logger.WithError(err).Errorf("while beginning db transaction: %v", err)
http.Error(writer, genericDatabaseError, http.StatusInternalServerError)
return
}

defer s.transact.RollbackUnlessCommitted(ctx, tx)

ctx = persistence.SaveToContext(ctx, tx)

if err := s.repository.DeleteByExternalID(ctx, tenantId.String()); err != nil {
if !apperrors.IsNotFoundError(err) {
logger.WithError(err).Errorf("while deleting tenant: %v", err)
http.Error(writer, tenantDeleteDatabaseError, http.StatusInternalServerError)
return
}
} else {
if err := tx.Commit(); err != nil {
logger.WithError(err).Errorf("while committing transaction: %v", err)
http.Error(writer, genericDatabaseError, http.StatusInternalServerError)
return
}
}

writer.Header().Set("Content-Type", "application/json")
err = json.NewEncoder(writer).Encode(map[string]interface{}{})
if err != nil {
logger.WithError(err).Errorf("while writing to response body: %v", err)
http.Error(writer, err.Error(), http.StatusInternalServerError)
return
}
func (s *service) DeleteByExternalID(writer http.ResponseWriter, _ *http.Request) {
writer.WriteHeader(http.StatusOK)
}

func (s *service) getParentTenantInternalID(ctx context.Context, tenant model.TenantModel) (string, error) {
Expand Down
Loading

0 comments on commit 7e6b8fe

Please sign in to comment.