Skip to content

Commit

Permalink
SI-2621 Prevent references from blocking burn handling (#93)
Browse files Browse the repository at this point in the history
* Add delete behavior for two foreign keys referencing vehicles

* Rewards rows get deleted
* DCNs get nulled out

* Fix migration file name

* Test that we really can delete a linked vehicle

* Be as complete as before

* One more assert
  • Loading branch information
elffjs authored Apr 30, 2024
1 parent 84de4df commit 79bc5d8
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 6 deletions.
34 changes: 28 additions & 6 deletions internal/services/contract_events_consumer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -732,20 +732,42 @@ func Test_HandleVehicle_Transferred_To_Zero_Event_ShouldDelete(t *testing.T) {
err = privilege.Insert(ctx, pdb.DBS().Writer, boil.Infer())
assert.NoError(t, err)

reward := models.Reward{
IssuanceWeek: 1,
VehicleID: tkID,
EarnedAt: time.Now(),
}

err = reward.Insert(ctx, pdb.DBS().Writer, boil.Infer())
assert.NoError(t, err)

dcn := models.DCN{
Node: common.Hash{}.Bytes(),
OwnerAddress: wallet.Bytes(),
MintedAt: time.Now(),
}

err = dcn.Insert(ctx, pdb.DBS().Writer, boil.Infer())
assert.NoError(t, err)

err = contractEventConsumer.Process(ctx, &e)
assert.NoError(t, err)

veh, err := models.Vehicles(
models.VehicleWhere.ID.EQ(tkID),
).All(ctx, pdb.DBS().Reader.DB)
exists, err := models.VehicleExists(ctx, pdb.DBS().Reader, tkID)
assert.NoError(t, err)
assert.False(t, exists)

assert.Len(t, veh, 0)
numPrivs, err := models.Privileges().Count(ctx, pdb.DBS().Reader)
assert.NoError(t, err)
assert.Zero(t, numPrivs)

priv, err := models.Privileges().All(ctx, pdb.DBS().Reader.DB)
numRewards, err := models.Rewards().Count(ctx, pdb.DBS().Reader)
assert.NoError(t, err)
assert.Zero(t, numRewards)

assert.Len(t, priv, 0)
err = dcn.Reload(ctx, pdb.DBS().Reader.DB)
assert.NoError(t, err)
assert.False(t, dcn.VehicleID.Valid)
}

func Test_HandleVehicle_Transferred_To_Zero_Event_NoDelete_SyntheticDevice(t *testing.T) {
Expand Down
21 changes: 21 additions & 0 deletions migrations/00024_vehicle_burn_constraints.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
-- +goose Up
-- +goose StatementBegin
ALTER TABLE rewards
DROP CONSTRAINT rewards_vehicle_token_id,
ADD CONSTRAINT rewards_vehicle_id_fkey FOREIGN KEY (vehicle_id) REFERENCES vehicles (id) ON DELETE CASCADE;

ALTER TABLE dcns
DROP CONSTRAINT vehicle_dcn_vehicle_token_id,
ADD CONSTRAINT dcns_vehicle_id_fkey FOREIGN KEY (vehicle_id) REFERENCES vehicles (id) ON DELETE SET NULL;
-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
ALTER TABLE rewards
DROP CONSTRAINT rewards_vehicle_id_fkey,
ADD CONSTRAINT rewards_vehicle_token_id FOREIGN KEY (vehicle_id) REFERENCES vehicles (id);

ALTER TABLE dcns
DROP CONSTRAINT dcns_vehicle_id_fkey,
ADD CONSTRAINT vehicle_dcn_vehicle_token_id FOREIGN KEY (vehicle_id) REFERENCES vehicles (id);
-- +goose StatementEnd

0 comments on commit 79bc5d8

Please sign in to comment.