feat(t242): delete unused freight orders
This commit is contained in:
@@ -236,6 +236,7 @@ type recordingFreightImageCache struct {
|
||||
creatorSubject string
|
||||
runID string
|
||||
err error
|
||||
deleted []string
|
||||
}
|
||||
|
||||
func (cache *recordingFreightImageCache) CacheRun(
|
||||
@@ -248,6 +249,12 @@ func (cache *recordingFreightImageCache) CacheRun(
|
||||
return cache.err
|
||||
}
|
||||
|
||||
func (cache *recordingFreightImageCache) DeleteStoredImages(
|
||||
storageKeys []string,
|
||||
) {
|
||||
cache.deleted = append(cache.deleted, storageKeys...)
|
||||
}
|
||||
|
||||
func TestCreateFreightOrderSyncTimeoutUsesLiveCleanupContext(t *testing.T) {
|
||||
repository := &syncTrackingRepository{}
|
||||
source := &blockingOrderSource{}
|
||||
@@ -378,6 +385,56 @@ func validFreightOrderSyncCommand(idempotencyKey string) CreateFreightSyncComman
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteFreightOrderValidatesConflictAndCleansImages(t *testing.T) {
|
||||
repository := &syncTrackingRepository{
|
||||
deleteStorageKeys: []string{"first/image.jpg", "second/image.jpg"},
|
||||
}
|
||||
imageCache := &recordingFreightImageCache{}
|
||||
service, err := NewFreightService(
|
||||
repository,
|
||||
&recordingDateSource{},
|
||||
fakeClock{},
|
||||
&sequenceIDs{},
|
||||
time.Minute,
|
||||
WithFreightImageCache(imageCache),
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("NewFreightService() error = %v", err)
|
||||
}
|
||||
command := DeleteFreightOrderCommand{
|
||||
CreatorSubject: " local-admin ",
|
||||
ActorUserID: "00000000-0000-4000-8000-000000000099",
|
||||
OrderID: "00000000-0000-4000-8000-000000000100",
|
||||
}
|
||||
if err := service.DeleteOrder(context.Background(), command); err != nil {
|
||||
t.Fatalf("DeleteOrder() error = %v", err)
|
||||
}
|
||||
if repository.deleteCalls != 1 ||
|
||||
repository.deleteCreatorSubject != "local-admin" ||
|
||||
repository.deleteOrderID != command.OrderID {
|
||||
t.Fatalf("delete repository call = %+v", repository)
|
||||
}
|
||||
if len(imageCache.deleted) != 2 ||
|
||||
imageCache.deleted[0] != "first/image.jpg" ||
|
||||
imageCache.deleted[1] != "second/image.jpg" {
|
||||
t.Fatalf("deleted image keys = %#v", imageCache.deleted)
|
||||
}
|
||||
|
||||
repository.deleteErr = ErrFreightOrderInUse
|
||||
err = service.DeleteOrder(context.Background(), command)
|
||||
assertUsecaseError(t, err, ErrorKindConflict, "FREIGHT_ORDER_IN_USE")
|
||||
if len(imageCache.deleted) != 2 {
|
||||
t.Fatalf("conflicting delete 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 {
|
||||
t.Fatalf("invalid delete reached repository %d times", repository.deleteCalls)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFreightDateQuerySplitsIntoSevenDayWindows(t *testing.T) {
|
||||
source := &recordingDateSource{}
|
||||
service := &FreightService{source: source}
|
||||
@@ -581,12 +638,17 @@ func (*blockingOrderSource) QueryCreatedRange(
|
||||
}
|
||||
|
||||
type syncTrackingRepository struct {
|
||||
mu sync.Mutex
|
||||
startCalls int
|
||||
completeCalls int
|
||||
failCalls int
|
||||
failCode string
|
||||
failContextErr error
|
||||
mu sync.Mutex
|
||||
startCalls int
|
||||
completeCalls int
|
||||
failCalls int
|
||||
failCode string
|
||||
failContextErr error
|
||||
deleteCalls int
|
||||
deleteCreatorSubject string
|
||||
deleteOrderID string
|
||||
deleteStorageKeys []string
|
||||
deleteErr error
|
||||
}
|
||||
|
||||
func (*syncTrackingRepository) CreateFreightSync(
|
||||
@@ -682,6 +744,17 @@ func (*syncTrackingRepository) GetFreightOrder(
|
||||
return domain.FreightOrderDetail{}, nil
|
||||
}
|
||||
|
||||
func (repository *syncTrackingRepository) DeleteFreightOrder(
|
||||
_ context.Context,
|
||||
creatorSubject, orderID string,
|
||||
) ([]string, error) {
|
||||
repository.deleteCalls++
|
||||
repository.deleteCreatorSubject = creatorSubject
|
||||
repository.deleteOrderID = orderID
|
||||
return append([]string(nil), repository.deleteStorageKeys...),
|
||||
repository.deleteErr
|
||||
}
|
||||
|
||||
func (source *recordingDateSource) EnsureAuthenticated(context.Context) error {
|
||||
source.ensureCalls++
|
||||
return source.ensureErr
|
||||
@@ -800,3 +873,11 @@ func (*dateCaptureRepository) GetFreightOrder(
|
||||
) (domain.FreightOrderDetail, error) {
|
||||
return domain.FreightOrderDetail{}, nil
|
||||
}
|
||||
|
||||
func (*dateCaptureRepository) DeleteFreightOrder(
|
||||
context.Context,
|
||||
string,
|
||||
string,
|
||||
) ([]string, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user