[mb-commits] branch, mbs-5700, created. MBS-5703: When an editor deletes their account, unsubscribe anyone subscribed...

MusicBrainz Git Server <[email protected]> Fri, 25 Jan 2013 11:29:37 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1TyhTV-0005x5-3m@wiley>
The branch, mbs-5700 has been created
        at  ca4f866eadd7abac6cadfc6e51004ed984e5b417 (commit)

- Log -----------------------------------------------------------------
commit ca4f866eadd7abac6cadfc6e51004ed984e5b417
Author: Oliver Charles <[email protected]>
Date:   Fri Jan 25 11:29:19 2013 +0000

    MBS-5703: When an editor deletes their account, unsubscribe anyone subscribed to them

diff --git a/admin/sql/updates/20130125-unsubscribe-to-deleted-editors.sql b/admin/sql/updates/20130125-unsubscribe-to-deleted-editors.sql
new file mode 100644
index 0000000..55d4f40
--- /dev/null
+++ b/admin/sql/updates/20130125-unsubscribe-to-deleted-editors.sql
@@ -0,0 +1,8 @@
+BEGIN;
+
+DELETE FROM editor_subscribe_editor
+WHERE subscribed_editor IN (
+  SELECT id FROM editor WHERE name ~ E'^Deleted Editor #(\\d+)$'
+) order by name asc;
+
+COMMIT;
diff --git a/lib/MusicBrainz/Server/Data/Editor.pm b/lib/MusicBrainz/Server/Data/Editor.pm
index 5cf0f2f..989c688 100644
--- a/lib/MusicBrainz/Server/Data/Editor.pm
+++ b/lib/MusicBrainz/Server/Data/Editor.pm
@@ -478,6 +478,7 @@ sub delete {
     $self->c->model('EditorLanguage')->delete_editor($editor_id);
 
     $self->c->model('EditorSubscriptions')->delete_editor($editor_id);
+    $self->c->model('Editor')->unsubscribe_to($editor_id);
     $self->c->model('Collection')->delete_editor($editor_id);
     $self->c->model('WatchArtist')->delete_editor($editor_id);
 
@@ -553,6 +554,13 @@ sub last_24h_edit_count
     return $self->sql->select_single_value($query, $editor_id);
 }
 
+sub unsubscribe_to {
+    my ($self, $editor_id) = @_;
+    $self->sql->do(
+        'DELETE FROM editor_subscribe_editor WHERE subscribed_editor = ?',
+        $editor_id);
+}
+
 no Moose;
 __PACKAGE__->meta->make_immutable;
 1;
diff --git a/t/lib/t/MusicBrainz/Server/Data/Editor.pm b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
index 066a72e..c9c4e35 100644
--- a/t/lib/t/MusicBrainz/Server/Data/Editor.pm
+++ b/t/lib/t/MusicBrainz/Server/Data/Editor.pm
@@ -241,6 +241,21 @@ test 'Deleting an editor cancels all open edits' => sub {
     is($c->model('Edit')->get_by_id($open_edit->id)->status, $STATUS_DELETED);
 };
 
+test 'Deleting an editor unsubscribes anyone who was subscribed to them' => sub {
+    my $test = shift;
+    my $c = $test->c;
+
+    $c->sql->do(<<'EOSQL');
+INSERT INTO editor (id, name, password)
+  VALUES (1, 'Subject', ''), (2, 'Subscriber', '');
+INSERT INTO editor_subscribe_editor (editor, subscribed_editor, last_edit_sent)
+  VALUES (2, 1, 1);
+EOSQL
+
+    $c->model('Editor')->delete(1);
+    is(scalar($c->model('Editor')->subscription->get_subscriptions(2)), 0);
+};
+
 test 'Open edit and last-24-hour counts' => sub {
     my $test = shift;
     my $c = $test->c;

-----------------------------------------------------------------------


hooks/post-receive
-- 
mb_server