Skip to content

Commit

Permalink
Correctly fall back to empty string when there is no user
Browse files Browse the repository at this point in the history
  • Loading branch information
nickvergessen committed Aug 11, 2015
1 parent 5acaafb commit 3a977a2
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 4 deletions.
18 changes: 14 additions & 4 deletions lib/data.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

use OCP\Activity\IExtension;
use OCP\DB;
use OCP\IUser;
use OCP\User;
use OCP\Util;

Expand Down Expand Up @@ -77,9 +78,18 @@ public function getNotificationTypes(\OCP\IL10N $l) {
*/
public static function send($app, $subject, $subjectparams = array(), $message = '', $messageparams = array(), $file = '', $link = '', $affecteduser = '', $type = '', $prio = IExtension::PRIORITY_MEDIUM) {
$timestamp = time();
$user = User::getUser();

if ($affecteduser === '') {

$user = \OC::$server->getUserSession()->getUser();
if ($user instanceof IUser) {
$user = $user->getUID();
} else {
// Public page or incognito mode
$user = '';
}

if ($affecteduser === '' && $user === '') {
return false;
} elseif ($affecteduser === '') {
$auser = $user;
} else {
$auser = $affecteduser;
Expand All @@ -103,7 +113,7 @@ public static function send($app, $subject, $subjectparams = array(), $message =
* @param array $subjectParams Array of parameters that are filled in the placeholders
* @param string $affectedUser Name of the user we are sending the activity to
* @param string $type Type of notification
* @param int $latestSendTime Activity time() + batch setting of $affecteduser
* @param int $latestSendTime Activity time() + batch setting of $affectedUser
* @return bool
*/
public static function storeMail($app, $subject, array $subjectParams, $affectedUser, $type, $latestSendTime) {
Expand Down
71 changes: 71 additions & 0 deletions tests/datatest.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
use OC\ActivityManager;
use OCA\Activity\Data;
use OCA\Activity\Tests\Mock\Extension;
use OCP\Activity\IExtension;

class DataTest extends TestCase {
/** @var \OCA\Activity\Data */
Expand Down Expand Up @@ -89,4 +90,74 @@ public function validateFilterData() {
public function testValidateFilter($filter, $expected) {
$this->assertEquals($expected, $this->data->validateFilter($filter));
}

public function dataSend() {
return [
// Default case
['author', 'affectedUser', 'author', 'affectedUser', true],
// Public page / Incognito mode
['', 'affectedUser', '', 'affectedUser', true],
// No affected user, falling back to author
['author', '', 'author', 'author', true],
// No affected user and no author => no activity
['', '', '', '', false],
];
}

/**
* @dataProvider dataSend
*
* @param string $actionUser
* @param string $affectedUser
*/
public function testSend($actionUser, $affectedUser, $expectedAuthor, $expectedAffected, $expectedActivity) {
$mockSession = $this->getMockBuilder('\OC\User\Session')
->disableOriginalConstructor()
->getMock();

if ($actionUser !== '') {
$mockUser = $this->getMockBuilder('\OCP\IUser')
->disableOriginalConstructor()
->getMock();
$mockUser->expects($this->any())
->method('getUID')
->willReturn($actionUser);

$mockSession->expects($this->any())
->method('getUser')
->willReturn($mockUser);
} else {
$mockSession->expects($this->any())
->method('getUser')
->willReturn(null);
}

$this->overwriteService('UserSession', $mockSession);
$this->deleteTestActivities();

$this->assertSame($expectedActivity, Data::send('test', 'subject', [], '', [], '', '', $affectedUser, 'type', IExtension::PRIORITY_MEDIUM));

$connection = \OC::$server->getDatabaseConnection();
$query = $connection->prepare('SELECT `user`, `affecteduser` FROM `*PREFIX*activity` WHERE `app` = ? ORDER BY `activity_id` DESC');
$query->execute(['test']);
$row = $query->fetch();

if ($expectedActivity) {
$this->assertEquals(['user' => $expectedAuthor, 'affecteduser' => $expectedAffected], $row);
} else {
$this->assertFalse($row);
}

$this->deleteTestActivities();
$this->restoreService('UserSession');
}

/**
* Delete all testing activities
*/
public function deleteTestActivities() {
$connection = \OC::$server->getDatabaseConnection();
$query = $connection->prepare('DELETE FROM `*PREFIX*activity` WHERE `app` = ?');
$query->execute(['test']);
}
}
39 changes: 39 additions & 0 deletions tests/testcase.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,43 @@
namespace OCA\Activity\Tests;

abstract class TestCase extends \Test\TestCase {
/** @var array */
protected $services = [];

/**
* @param string $name
* @param mixed $newService
* @return bool
*/
public function overwriteService($name, $newService) {
if (isset($this->services[$name])) {
return false;
}

$this->services[$name] = \OC::$server->query($name);
\OC::$server->registerService($name, function () use ($newService) {
return $newService;
});

return true;
}

/**
* @param string $name
* @return bool
*/
public function restoreService($name) {
if ($this->services[$name]) {
$oldService = $this->services[$name];
\OC::$server->registerService($name, function () use ($oldService) {
return $oldService;
});


unset($this->services[$name]);
return true;
}

return false;
}
}

0 comments on commit 3a977a2

Please sign in to comment.