Make risk delete prove document mapping cleanup
Removing junction rows before deleteRisk hid missing soft-delete cleanup in e2e. Assert deleteRisk succeeds only after deleteDocument clears mappings, and document links must be removed first. Signed-off-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
This commit is contained in:
committed by
Bryan Frimin
parent
24d137e536
commit
255bea4738
@@ -814,9 +814,20 @@ func TestRiskDocumentMapping_DeleteDocumentClearsRiskDocumentLink(t *testing.T)
|
|||||||
linkedDocumentIDs = loadRiskLinkedDocumentIDs(t, owner, riskID)
|
linkedDocumentIDs = loadRiskLinkedDocumentIDs(t, owner, riskID)
|
||||||
assert.NotContains(t, linkedDocumentIDs, documentID)
|
assert.NotContains(t, linkedDocumentIDs, documentID)
|
||||||
assert.Empty(t, linkedDocumentIDs)
|
assert.Empty(t, linkedDocumentIDs)
|
||||||
|
|
||||||
|
_, err = owner.Do(`
|
||||||
|
mutation DeleteRisk($input: DeleteRiskInput!) {
|
||||||
|
deleteRisk(input: $input) {
|
||||||
|
deletedRiskId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`, map[string]any{
|
||||||
|
"input": map[string]any{"riskId": riskID},
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRiskDocumentMapping_DeleteRiskWithActiveDocumentMapping(t *testing.T) {
|
func TestRiskDocumentMapping_DeleteRiskRequiresUnlinkedDocuments(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
owner := testutil.NewClient(t, testutil.RoleOwner)
|
owner := testutil.NewClient(t, testutil.RoleOwner)
|
||||||
|
|
||||||
@@ -841,6 +852,32 @@ func TestRiskDocumentMapping_DeleteRiskWithActiveDocumentMapping(t *testing.T) {
|
|||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = owner.Do(`
|
||||||
|
mutation DeleteRisk($input: DeleteRiskInput!) {
|
||||||
|
deleteRisk(input: $input) {
|
||||||
|
deletedRiskId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`, map[string]any{
|
||||||
|
"input": map[string]any{"riskId": riskID},
|
||||||
|
})
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
|
_, err = owner.Do(`
|
||||||
|
mutation($input: DeleteRiskDocumentMappingInput!) {
|
||||||
|
deleteRiskDocumentMapping(input: $input) {
|
||||||
|
deletedRiskId
|
||||||
|
deletedDocumentId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`, map[string]any{
|
||||||
|
"input": map[string]any{
|
||||||
|
"riskId": riskID,
|
||||||
|
"documentId": documentID,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = owner.Do(`
|
_, err = owner.Do(`
|
||||||
mutation DeleteRisk($input: DeleteRiskInput!) {
|
mutation DeleteRisk($input: DeleteRiskInput!) {
|
||||||
deleteRisk(input: $input) {
|
deleteRisk(input: $input) {
|
||||||
|
|||||||
@@ -108,33 +108,6 @@ WHERE
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rp RiskDocument) DeleteByRiskID(
|
|
||||||
ctx context.Context,
|
|
||||||
conn pg.Tx,
|
|
||||||
scope Scoper,
|
|
||||||
riskID gid.GID,
|
|
||||||
) error {
|
|
||||||
q := `
|
|
||||||
DELETE
|
|
||||||
FROM
|
|
||||||
risks_documents
|
|
||||||
WHERE
|
|
||||||
%s
|
|
||||||
AND risk_id = @risk_id;
|
|
||||||
`
|
|
||||||
|
|
||||||
q = fmt.Sprintf(q, scope.SQLFragment())
|
|
||||||
|
|
||||||
args := pgx.StrictNamedArgs{
|
|
||||||
"risk_id": riskID,
|
|
||||||
}
|
|
||||||
maps.Copy(args, scope.SQLArguments())
|
|
||||||
|
|
||||||
_, err := conn.Exec(ctx, q, args)
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rp RiskDocument) DeleteByDocumentIDs(
|
func (rp RiskDocument) DeleteByDocumentIDs(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
conn pg.Tx,
|
conn pg.Tx,
|
||||||
|
|||||||
@@ -612,15 +612,10 @@ func (s RiskService) Delete(
|
|||||||
riskID gid.GID,
|
riskID gid.GID,
|
||||||
) error {
|
) error {
|
||||||
risk := &coredata.Risk{}
|
risk := &coredata.Risk{}
|
||||||
riskDocument := &coredata.RiskDocument{}
|
|
||||||
|
|
||||||
return s.svc.pg.WithTx(
|
return s.svc.pg.WithTx(
|
||||||
ctx,
|
ctx,
|
||||||
func(ctx context.Context, tx pg.Tx) error {
|
func(ctx context.Context, tx pg.Tx) error {
|
||||||
if err := riskDocument.DeleteByRiskID(ctx, tx, scope, riskID); err != nil {
|
|
||||||
return fmt.Errorf("cannot delete risk document mappings: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return risk.Delete(ctx, tx, scope, riskID)
|
return risk.Delete(ctx, tx, scope, riskID)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user