Skip to content

Commit 4804429

Browse files
committed
MBS-11760: Improve testing for tag autodeletion
These were not testing the ON DELETE triggers at all, since the first "commit" only sees that the inserted tag is not being used via the ON INSERT trigger. That meant entities where the ON DELETE trigger was missing (release, recording) still showed as working fine. Additionally, several entities were not being tested at all.
1 parent 949d9d0 commit 4804429

11 files changed

+286
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
SET search_path = 'musicbrainz', 'public';
2+
3+
--------------------------------------------------------------------------------
4+
BEGIN;
5+
SELECT no_plan();
6+
7+
INSERT INTO area (id, gid, name, comment)
8+
VALUES (1, '82ac9811-db47-4c05-9792-83cf4208afd0', 'Area', 'Area 1'),
9+
(2, '9baea67a-8d86-422d-b653-b0f6d0a93c7c', 'Area', 'Area 2');
10+
11+
INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Shared tag');
12+
INSERT INTO area_tag (area, tag, count) VALUES
13+
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
14+
15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
16+
DELETE FROM area_tag WHERE tag = 2;
17+
18+
-- Deleting but the re-adding should not garbage collect
19+
DELETE FROM area_tag WHERE tag = 4;
20+
INSERT INTO area_tag (area, tag, count) VALUES (1, 4, 1);
21+
22+
DELETE FROM area_tag WHERE tag = 5 AND area = 1;
23+
24+
SELECT set_eq(
25+
'SELECT id FROM tag', '{2, 4, 5}'::INT[],
26+
'Tag exists before commit'
27+
);
28+
29+
-- Simulate the commit
30+
SET CONSTRAINTS ALL IMMEDIATE;
31+
32+
SELECT set_eq(
33+
'SELECT id FROM tag', '{4, 5}'::INT[],
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON area_tag trigger
38+
DELETE FROM area_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON area_tag'
43+
);
44+
45+
SELECT finish();
46+
ROLLBACK;

t/pgtap/unused-tags/unused-artist-tags-deleted.sql

+10-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1212
INSERT INTO artist_tag (artist, tag, count) VALUES
1313
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1414

15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
1516
DELETE FROM artist_tag WHERE tag = 2;
1617

1718
-- Deleting but the re-adding should not garbage collect
@@ -30,7 +31,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3031

3132
SELECT set_eq(
3233
'SELECT id FROM tag', '{4, 5}'::INT[],
33-
'Tag collected after commit'
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON artist_tag trigger
38+
DELETE FROM artist_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON artist_tag'
3443
);
3544

3645
SELECT finish();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
SET search_path = 'musicbrainz', 'public';
2+
3+
--------------------------------------------------------------------------------
4+
BEGIN;
5+
SELECT no_plan();
6+
7+
INSERT INTO event (id, gid, name, comment)
8+
VALUES (1, '82ac9811-db47-4c05-9792-83cf4208afd0', 'Event', 'Event 1'),
9+
(2, '9baea67a-8d86-422d-b653-b0f6d0a93c7c', 'Event', 'Event 2');
10+
11+
INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Shared tag');
12+
INSERT INTO event_tag (event, tag, count) VALUES
13+
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
14+
15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
16+
DELETE FROM event_tag WHERE tag = 2;
17+
18+
-- Deleting but the re-adding should not garbage collect
19+
DELETE FROM event_tag WHERE tag = 4;
20+
INSERT INTO event_tag (event, tag, count) VALUES (1, 4, 1);
21+
22+
DELETE FROM event_tag WHERE tag = 5 AND event = 1;
23+
24+
SELECT set_eq(
25+
'SELECT id FROM tag', '{2, 4, 5}'::INT[],
26+
'Tag exists before commit'
27+
);
28+
29+
-- Simulate the commit
30+
SET CONSTRAINTS ALL IMMEDIATE;
31+
32+
SELECT set_eq(
33+
'SELECT id FROM tag', '{4, 5}'::INT[],
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON event_tag trigger
38+
DELETE FROM event_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON event_tag'
43+
);
44+
45+
SELECT finish();
46+
ROLLBACK;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
SET search_path = 'musicbrainz', 'public';
2+
3+
--------------------------------------------------------------------------------
4+
BEGIN;
5+
SELECT no_plan();
6+
7+
INSERT INTO instrument (id, gid, name, comment)
8+
VALUES (1, '82ac9811-db47-4c05-9792-83cf4208afd0', 'Instrument', 'Instrument 1'),
9+
(2, '9baea67a-8d86-422d-b653-b0f6d0a93c7c', 'Instrument', 'Instrument 2');
10+
11+
INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Shared tag');
12+
INSERT INTO instrument_tag (instrument, tag, count) VALUES
13+
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
14+
15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
16+
DELETE FROM instrument_tag WHERE tag = 2;
17+
18+
-- Deleting but the re-adding should not garbage collect
19+
DELETE FROM instrument_tag WHERE tag = 4;
20+
INSERT INTO instrument_tag (instrument, tag, count) VALUES (1, 4, 1);
21+
22+
DELETE FROM instrument_tag WHERE tag = 5 AND instrument = 1;
23+
24+
SELECT set_eq(
25+
'SELECT id FROM tag', '{2, 4, 5}'::INT[],
26+
'Tag exists before commit'
27+
);
28+
29+
-- Simulate the commit
30+
SET CONSTRAINTS ALL IMMEDIATE;
31+
32+
SELECT set_eq(
33+
'SELECT id FROM tag', '{4, 5}'::INT[],
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON instrument_tag trigger
38+
DELETE FROM instrument_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON instrument_tag'
43+
);
44+
45+
SELECT finish();
46+
ROLLBACK;

t/pgtap/unused-tags/unused-label-tags-deleted.sql

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1212
INSERT INTO label_tag (label, tag, count) VALUES
1313
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1414

15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
1516
DELETE FROM label_tag WHERE tag = 2;
1617

1718
-- Deleting but the re-adding should not garbage collect
@@ -30,8 +31,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3031

3132
SELECT set_eq(
3233
'SELECT id FROM tag', '{4, 5}'::INT[],
33-
'Tag collected after commit'
34+
'Tag deleted after commit by AFTER INSERT ON tag'
3435
);
3536

37+
-- Delete tag after commit to test AFTER DELETE ON label_tag trigger
38+
DELETE FROM label_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON label_tag');
43+
3644
SELECT finish();
3745
ROLLBACK;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
SET search_path = 'musicbrainz', 'public';
2+
3+
--------------------------------------------------------------------------------
4+
BEGIN;
5+
SELECT no_plan();
6+
7+
INSERT INTO place (id, gid, name, comment)
8+
VALUES (1, '82ac9811-db47-4c05-9792-83cf4208afd0', 'Place', 'Place 1'),
9+
(2, '9baea67a-8d86-422d-b653-b0f6d0a93c7c', 'Place', 'Place 2');
10+
11+
INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Shared tag');
12+
INSERT INTO place_tag (place, tag, count) VALUES
13+
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
14+
15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
16+
DELETE FROM place_tag WHERE tag = 2;
17+
18+
-- Deleting but the re-adding should not garbage collect
19+
DELETE FROM place_tag WHERE tag = 4;
20+
INSERT INTO place_tag (place, tag, count) VALUES (1, 4, 1);
21+
22+
DELETE FROM place_tag WHERE tag = 5 AND place = 1;
23+
24+
SELECT set_eq(
25+
'SELECT id FROM tag', '{2, 4, 5}'::INT[],
26+
'Tag exists before commit'
27+
);
28+
29+
-- Simulate the commit
30+
SET CONSTRAINTS ALL IMMEDIATE;
31+
32+
SELECT set_eq(
33+
'SELECT id FROM tag', '{4, 5}'::INT[],
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON place_tag trigger
38+
DELETE FROM place_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON place_tag'
43+
);
44+
45+
SELECT finish();
46+
ROLLBACK;

t/pgtap/unused-tags/unused-recording-tags-deleted.sql

+10-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1414
INSERT INTO recording_tag (recording, tag, count) VALUES
1515
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1616

17+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
1718
DELETE FROM recording_tag WHERE tag = 2;
1819

1920
-- Deleting but the re-adding should not garbage collect
@@ -32,7 +33,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3233

3334
SELECT set_eq(
3435
'SELECT id FROM tag', '{4, 5}'::INT[],
35-
'Tag collected after commit'
36+
'Tag deleted after commit by AFTER INSERT ON tag'
37+
);
38+
39+
-- Delete tag after commit to test AFTER DELETE ON recording_tag trigger
40+
DELETE FROM recording_tag WHERE tag = 5;
41+
42+
SELECT set_eq(
43+
'SELECT id FROM tag', '{4}'::INT[],
44+
'Tag deleted after commit by AFTER DELETE ON recording_tag'
3645
);
3746

3847
SELECT finish();

t/pgtap/unused-tags/unused-release-group-tags-deleted.sql

+9-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1414
INSERT INTO release_group_tag (release_group, tag, count) VALUES
1515
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1616

17+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
1718
DELETE FROM release_group_tag WHERE tag = 2;
1819

1920
-- Deleting but the re-adding should not garbage collect
@@ -32,8 +33,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3233

3334
SELECT set_eq(
3435
'SELECT id FROM tag', '{4, 5}'::INT[],
35-
'Tag collected after commit'
36+
'Tag deleted after commit by AFTER INSERT ON tag'
3637
);
3738

39+
-- Delete tag after commit to test AFTER DELETE ON release_group_tag trigger
40+
DELETE FROM release_group_tag WHERE tag = 5;
41+
42+
SELECT set_eq(
43+
'SELECT id FROM tag', '{4}'::INT[],
44+
'Tag deleted after commit by AFTER DELETE ON release_group_tag');
45+
3846
SELECT finish();
3947
ROLLBACK;

t/pgtap/unused-tags/unused-release-tags-deleted.sql

+9-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1717
INSERT INTO release_tag (release, tag, count) VALUES
1818
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1919

20+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
2021
DELETE FROM release_tag WHERE tag = 2;
2122

2223
-- Deleting but the re-adding should not garbage collect
@@ -35,8 +36,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3536

3637
SELECT set_eq(
3738
'SELECT id FROM tag', '{4, 5}'::INT[],
38-
'Tag collected after commit'
39+
'Tag deleted after commit by AFTER INSERT ON tag'
3940
);
4041

42+
-- Delete tag after commit to test AFTER DELETE ON release_tag trigger
43+
DELETE FROM release_tag WHERE tag = 5;
44+
45+
SELECT set_eq(
46+
'SELECT id FROM tag', '{4}'::INT[],
47+
'Tag deleted after commit by AFTER DELETE ON release_tag');
48+
4149
SELECT finish();
4250
ROLLBACK;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
SET search_path = 'musicbrainz', 'public';
2+
3+
--------------------------------------------------------------------------------
4+
BEGIN;
5+
SELECT no_plan();
6+
7+
INSERT INTO series (id, gid, name, comment, type, ordering_attribute, ordering_type)
8+
VALUES (1, '82ac9811-db47-4c05-9792-83cf4208afd0', 'Series', 'Series 1', 1, 788, 1),
9+
(2, '9baea67a-8d86-422d-b653-b0f6d0a93c7c', 'Series', 'Series 2', 1, 788, 1);
10+
11+
INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Shared tag');
12+
INSERT INTO series_tag (series, tag, count) VALUES
13+
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
14+
15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
16+
DELETE FROM series_tag WHERE tag = 2;
17+
18+
-- Deleting but the re-adding should not garbage collect
19+
DELETE FROM series_tag WHERE tag = 4;
20+
INSERT INTO series_tag (series, tag, count) VALUES (1, 4, 1);
21+
22+
DELETE FROM series_tag WHERE tag = 5 AND series = 1;
23+
24+
SELECT set_eq(
25+
'SELECT id FROM tag', '{2, 4, 5}'::INT[],
26+
'Tag exists before commit'
27+
);
28+
29+
-- Simulate the commit
30+
SET CONSTRAINTS ALL IMMEDIATE;
31+
32+
SELECT set_eq(
33+
'SELECT id FROM tag', '{4, 5}'::INT[],
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON series_tag trigger
38+
DELETE FROM series_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON series_tag'
43+
);
44+
45+
SELECT finish();
46+
ROLLBACK;

t/pgtap/unused-tags/unused-work-tags-deleted.sql

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1212
INSERT INTO work_tag (work, tag, count) VALUES
1313
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1414

15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
1516
DELETE FROM work_tag WHERE tag = 2;
1617

1718
-- Deleting but the re-adding should not garbage collect
@@ -30,8 +31,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3031

3132
SELECT set_eq(
3233
'SELECT id FROM tag', '{4, 5}'::INT[],
33-
'Tag collected after commit'
34+
'Tag deleted after commit by AFTER INSERT ON tag'
3435
);
3536

37+
-- Delete tag after commit to test AFTER DELETE ON work_tag trigger
38+
DELETE FROM work_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON work_tag');
43+
3644
SELECT finish();
3745
ROLLBACK;

0 commit comments

Comments
 (0)