diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 5f7802238..78aaf0e40 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,6 +1,7 @@ 7.10.3 - fixed #11903: Unnecessary debug in Thingy - fixed #11908: Inbox messages linger after deleting a user + - fixed #11909: Wrong message count in the inbox 7.10.2 - fixed #11884: Editing Templates impossible / Code editor not loaded diff --git a/lib/WebGUI/Inbox.pm b/lib/WebGUI/Inbox.pm index 77d9cc6df..00a2edf44 100644 --- a/lib/WebGUI/Inbox.pm +++ b/lib/WebGUI/Inbox.pm @@ -499,20 +499,13 @@ ibox.messageId, ibox.subject, ibox.sentBy, ibox.dateStamp, SELECT } - my $messageLimit = 20_000; - my $limitHalf = $messageLimit / 2; - my $limitQuarter = $messageLimit / 4; - my $userGroups = $session->db->quoteAndJoin( $user->getGroupIdsRecursive ); - $userGroups = "''" if $userGroups eq ""; - - # for performance purposes don't use datasets larger than 20000 no matter how man messages are in the inbox my $sql = qq{ SELECT $select FROM inbox_messageState JOIN inbox ibox USING (messageId) - JOIN users on users.userId = ibox.sentBy - JOIN userProfileData on userProfileData.userId = ibox.sentBy + LEFT OUTER JOIN users on users.userId = ibox.sentBy + LEFT OUTER JOIN userProfileData on userProfileData.userId = ibox.sentBy WHERE inbox_messageState.messageId = ibox.messageId AND inbox_messageState.userId = '$userId' AND inbox_messageState.deleted = 0 diff --git a/t/Inbox.t b/t/Inbox.t index ea7989b29..1135f146f 100644 --- a/t/Inbox.t +++ b/t/Inbox.t @@ -17,13 +17,13 @@ use WebGUI::Session; use WebGUI::Inbox; use WebGUI::User; -use Test::More tests => 15; # increment this value for each test you create +use Test::More tests => 20; # increment this value for each test you create my $session = WebGUI::Test->session; # get a user so we can test retrieving messages for a specific user my $admin = WebGUI::User->new($session, 3); -WebGUI::Test->addToCleanup(sub { WebGUI::Test->cleanupAdminInbox; }); +WebGUI::Test->addToCleanup(sub { WebGUI::Test->cleanupAdminInbox($session); }); # Begin tests by getting an inbox object my $inbox = WebGUI::Inbox->new($session); @@ -132,4 +132,25 @@ my $messages = $inbox->getMessagesForUser($admin); $messages->[0]->setRead($admin->userId); is($inbox->getUnreadMessageCount($admin->userId), 3, '... really tracks unread messages'); +is(scalar @{ $inbox->getMessagesForUser($admin) }, 4, 'Four messages in the inbox'); +$inbox->deleteMessagesForUser($admin); +is(scalar @{ $inbox->getMessagesForUser($admin) }, 0, 'deleteMessagesForUser removed all messages'); + +my $dead_user = WebGUI::User->create($session); +WebGUI::Test->addToCleanup($dead_user); +$inbox->addMessage({ + message => "This method should be removed", + userId => 3, + sentBy => $dead_user->userId, + status => 'unread', +},{ + no_email => 1, +}); + +is(scalar @{ $inbox->getMessagesForUser($admin) }, 1, 'one message from dead_user in the inbox'); +$dead_user->delete; +is(scalar @{ $inbox->getMessagesForUser($admin) }, 1, '... after deleting the user, still 1 message'); +$inbox->deleteMessagesForUser($admin); +is(scalar @{ $inbox->getMessagesForUser($admin) }, 0, '... after deleteMessagesForUser, all messages gone again'); + #vim:ft=perl