fix(t243): allow deleting unreferenced procurement drafts
This commit is contained in:
@@ -60,14 +60,19 @@ func invalidError(code, message string, fields map[string]string) *Error {
|
||||
}
|
||||
|
||||
var (
|
||||
ErrRepositoryNotFound = errors.New("repository resource not found")
|
||||
ErrIdempotencyConflict = errors.New("idempotency key payload conflict")
|
||||
ErrSourceReferenceConflict = errors.New("source reference conflict")
|
||||
ErrAssetUnavailable = errors.New("asset is unavailable")
|
||||
ErrTaskStateConflict = errors.New("task state conflict")
|
||||
ErrFreightOrderInUse = errors.New("freight order is in use")
|
||||
ErrRepositoryUnavailable = errors.New("repository unavailable")
|
||||
ErrRepositoryInvariant = errors.New("repository invariant failed")
|
||||
ErrRepositoryNotFound = errors.New("repository resource not found")
|
||||
ErrIdempotencyConflict = errors.New("idempotency key payload conflict")
|
||||
ErrSourceReferenceConflict = errors.New("source reference conflict")
|
||||
ErrAssetUnavailable = errors.New("asset is unavailable")
|
||||
ErrTaskStateConflict = errors.New("task state conflict")
|
||||
ErrFreightOrderHasReference = errors.New(
|
||||
"freight order has a procurement reference",
|
||||
)
|
||||
ErrFreightOrderHasPurchaseTask = errors.New(
|
||||
"freight order has a purchase task",
|
||||
)
|
||||
ErrRepositoryUnavailable = errors.New("repository unavailable")
|
||||
ErrRepositoryInvariant = errors.New("repository invariant failed")
|
||||
)
|
||||
|
||||
func wrapRepositoryError(err error) error {
|
||||
@@ -107,11 +112,18 @@ func wrapRepositoryError(err error) error {
|
||||
"task state does not allow this operation",
|
||||
err,
|
||||
)
|
||||
case errors.Is(err, ErrFreightOrderInUse):
|
||||
case errors.Is(err, ErrFreightOrderHasPurchaseTask):
|
||||
return newError(
|
||||
ErrorKindConflict,
|
||||
"FREIGHT_ORDER_IN_USE",
|
||||
"freight order is already used by procurement",
|
||||
"FREIGHT_ORDER_HAS_PURCHASE_TASK",
|
||||
"freight order already has a purchase task",
|
||||
err,
|
||||
)
|
||||
case errors.Is(err, ErrFreightOrderHasReference):
|
||||
return newError(
|
||||
ErrorKindConflict,
|
||||
"FREIGHT_ORDER_HAS_REFERENCE",
|
||||
"freight order already has a procurement reference",
|
||||
err,
|
||||
)
|
||||
case errors.Is(err, ErrRepositoryUnavailable):
|
||||
|
||||
@@ -385,7 +385,7 @@ func validFreightOrderSyncCommand(idempotencyKey string) CreateFreightSyncComman
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteFreightOrderValidatesConflictAndCleansImages(t *testing.T) {
|
||||
func TestDeleteFreightOrderValidatesConflictsAndCleansImages(t *testing.T) {
|
||||
repository := &syncTrackingRepository{
|
||||
deleteStorageKeys: []string{"first/image.jpg", "second/image.jpg"},
|
||||
}
|
||||
@@ -420,17 +420,34 @@ func TestDeleteFreightOrderValidatesConflictAndCleansImages(t *testing.T) {
|
||||
t.Fatalf("deleted image keys = %#v", imageCache.deleted)
|
||||
}
|
||||
|
||||
repository.deleteErr = ErrFreightOrderInUse
|
||||
repository.deleteErr = ErrFreightOrderHasReference
|
||||
err = service.DeleteOrder(context.Background(), command)
|
||||
assertUsecaseError(t, err, ErrorKindConflict, "FREIGHT_ORDER_IN_USE")
|
||||
assertUsecaseError(
|
||||
t,
|
||||
err,
|
||||
ErrorKindConflict,
|
||||
"FREIGHT_ORDER_HAS_REFERENCE",
|
||||
)
|
||||
if len(imageCache.deleted) != 2 {
|
||||
t.Fatalf("conflicting delete cleaned images = %#v", imageCache.deleted)
|
||||
t.Fatalf("reference conflict cleaned images = %#v", imageCache.deleted)
|
||||
}
|
||||
|
||||
repository.deleteErr = ErrFreightOrderHasPurchaseTask
|
||||
err = service.DeleteOrder(context.Background(), command)
|
||||
assertUsecaseError(
|
||||
t,
|
||||
err,
|
||||
ErrorKindConflict,
|
||||
"FREIGHT_ORDER_HAS_PURCHASE_TASK",
|
||||
)
|
||||
if len(imageCache.deleted) != 2 {
|
||||
t.Fatalf("task conflict cleaned images = %#v", imageCache.deleted)
|
||||
}
|
||||
|
||||
command.OrderID = "invalid"
|
||||
err = service.DeleteOrder(context.Background(), command)
|
||||
assertUsecaseError(t, err, ErrorKindInvalid, "FREIGHT_DELETE_INVALID")
|
||||
if repository.deleteCalls != 2 {
|
||||
if repository.deleteCalls != 3 {
|
||||
t.Fatalf("invalid delete reached repository %d times", repository.deleteCalls)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user