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:
Cursor Agent
2026-07-29 15:31:55 +00:00
committed by Bryan Frimin
parent 24d137e536
commit 255bea4738
3 changed files with 38 additions and 33 deletions

View File

@@ -814,9 +814,20 @@ func TestRiskDocumentMapping_DeleteDocumentClearsRiskDocumentLink(t *testing.T)
linkedDocumentIDs = loadRiskLinkedDocumentIDs(t, owner, riskID)
assert.NotContains(t, linkedDocumentIDs, documentID)
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()
owner := testutil.NewClient(t, testutil.RoleOwner)
@@ -841,6 +852,32 @@ func TestRiskDocumentMapping_DeleteRiskWithActiveDocumentMapping(t *testing.T) {
})
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(`
mutation DeleteRisk($input: DeleteRiskInput!) {
deleteRisk(input: $input) {

View File

@@ -108,33 +108,6 @@ WHERE
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(
ctx context.Context,
conn pg.Tx,

View File

@@ -612,15 +612,10 @@ func (s RiskService) Delete(
riskID gid.GID,
) error {
risk := &coredata.Risk{}
riskDocument := &coredata.RiskDocument{}
return s.svc.pg.WithTx(
ctx,
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)
},
)