[TESTS] Fix Circle SelfTags Setting test

This commit is contained in:
Diogo Peralta Cordeiro 2022-03-07 16:17:44 +00:00
parent ff06a2656a
commit cc4f967186
Signed by: diogo
GPG Key ID: 18D2D35001FBFAB0
5 changed files with 41 additions and 30 deletions

View File

@ -97,7 +97,7 @@ class Circle extends Component
public function onPopulateSettingsTabs(Request $request, string $section, array &$tabs): bool public function onPopulateSettingsTabs(Request $request, string $section, array &$tabs): bool
{ {
if ($section === 'profile' && $request->get('_route') === 'settings') { if ($section === 'profile' && \in_array($request->get('_route'), ['person_actor_settings', 'group_actor_settings'])) {
$tabs[] = [ $tabs[] = [
'title' => 'Self tags', 'title' => 'Self tags',
'desc' => 'Add or remove tags on yourself', 'desc' => 'Add or remove tags on yourself',

View File

@ -23,6 +23,7 @@ class SelfTagsSettings extends Controller
{ {
/** /**
* Generic settings page for an Actor's self tags * Generic settings page for an Actor's self tags
* TODO: We should have $actor->setSelfTags(), $actor->addSelfTags(), $actor->removeSelfTags()
*/ */
public static function settingsSelfTags(Request $request, E\Actor $target, string $details_id) public static function settingsSelfTags(Request $request, E\Actor $target, string $details_id)
{ {

View File

@ -31,7 +31,6 @@ use App\Entity\Actor;
use App\Util\Common; use App\Util\Common;
use App\Util\HTML; use App\Util\HTML;
use App\Util\Nickname; use App\Util\Nickname;
use Component\Circle\Controller\SelfTagsSettings;
use Component\Group\Controller as C; use Component\Group\Controller as C;
use Component\Group\Entity\LocalGroup; use Component\Group\Entity\LocalGroup;
use Component\Notification\Notification; use Component\Notification\Notification;
@ -44,7 +43,7 @@ class Group extends Component
$r->connect(id: 'group_actor_view_id', uri_path: '/group/{id<\d+>}', target: [C\GroupFeed::class, 'groupViewId']); $r->connect(id: 'group_actor_view_id', uri_path: '/group/{id<\d+>}', target: [C\GroupFeed::class, 'groupViewId']);
$r->connect(id: 'group_actor_view_nickname', uri_path: '/!{nickname<' . Nickname::DISPLAY_FMT . '>}', target: [C\GroupFeed::class, 'groupViewNickname']); $r->connect(id: 'group_actor_view_nickname', uri_path: '/!{nickname<' . Nickname::DISPLAY_FMT . '>}', target: [C\GroupFeed::class, 'groupViewNickname']);
$r->connect(id: 'group_create', uri_path: '/group/new', target: [C\Group::class, 'groupCreate']); $r->connect(id: 'group_create', uri_path: '/group/new', target: [C\Group::class, 'groupCreate']);
$r->connect(id: 'group_settings', uri_path: '/group/{id<\d+>}/settings', target: [C\Group::class, 'groupSettings']); $r->connect(id: 'group_actor_settings', uri_path: '/group/{id<\d+>}/settings', target: [C\Group::class, 'groupSettings']);
return Event::next; return Event::next;
} }
@ -65,7 +64,7 @@ class Group extends Component
} }
/** /**
* Add an <a href=group_settings> to the profile card for groups, if the current actor can access them * Add an <a href=group_actor_settings> to the profile card for groups, if the current actor can access them
*/ */
public function onAppendCardProfile(array $vars, array &$res): bool public function onAppendCardProfile(array $vars, array &$res): bool
{ {
@ -73,7 +72,7 @@ class Group extends Component
$group = $vars['actor']; $group = $vars['actor'];
if (!\is_null($actor) && $group->isGroup()) { if (!\is_null($actor) && $group->isGroup()) {
if ($actor->canModerate($group)) { if ($actor->canModerate($group)) {
$url = Router::url('group_settings', ['id' => $group->getId()]); $url = Router::url('group_actor_settings', ['id' => $group->getId()]);
$res[] = HTML::html(['a' => ['attrs' => ['href' => $url, 'title' => _m('Edit group settings'), 'class' => 'profile-extra-actions'], _m('Group settings')]]); $res[] = HTML::html(['a' => ['attrs' => ['href' => $url, 'title' => _m('Edit group settings'), 'class' => 'profile-extra-actions'], _m('Group settings')]]);
} }
$res[] = HTML::html(['a' => ['attrs' => ['href' => Router::url('blog_post', ['in' => $group->getId()]), 'title' => _m('Make a new blog post'), 'class' => 'profile-extra-actions'], _m('Post in blog')]]); $res[] = HTML::html(['a' => ['attrs' => ['href' => Router::url('blog_post', ['in' => $group->getId()]), 'title' => _m('Make a new blog post'), 'class' => 'profile-extra-actions'], _m('Post in blog')]]);
@ -81,21 +80,6 @@ class Group extends Component
return Event::next; return Event::next;
} }
public function onPopulateSettingsTabs(Request $request, string $section, array &$tabs): bool
{
if ($section === 'profile' && $request->get('_route') === 'group_settings') {
$group_id = (int) $request->get('id');
$group = Actor::getById($group_id);
$tabs[] = [
'title' => 'Self tags',
'desc' => 'Add or remove tags on this group',
'id' => 'settings-self-tags',
'controller' => SelfTagsSettings::settingsSelfTags($request, $group, 'settings-self-tags-details'),
];
}
return Event::next;
}
/** /**
* If in a group route, get the current group * If in a group route, get the current group
*/ */

View File

@ -36,6 +36,7 @@ use App\Util\Exception\NotImplementedException;
use App\Util\Formatting; use App\Util\Formatting;
use App\Util\Nickname; use App\Util\Nickname;
use Component\Avatar\Avatar; use Component\Avatar\Avatar;
use Component\Circle\Entity\ActorTag;
use Component\Group\Entity\GroupMember; use Component\Group\Entity\GroupMember;
use Component\Group\Entity\LocalGroup; use Component\Group\Entity\LocalGroup;
use Component\Language\Entity\ActorLanguage; use Component\Language\Entity\ActorLanguage;
@ -331,7 +332,7 @@ class Actor extends Entity
{ {
return Cache::getList( return Cache::getList(
self::cacheKeys($this->getId())['self-tags'], self::cacheKeys($this->getId())['self-tags'],
fn() => DB::findBy('actor_tag', ['tagger' => $this->getId(), 'tagged' => $this->getId()], order_by: ['modified' => 'DESC']), fn() => DB::findBy(ActorTag::class, ['tagger' => $this->getId(), 'tagged' => $this->getId()], order_by: ['modified' => 'DESC']),
); );
} }

View File

@ -21,10 +21,12 @@ declare(strict_types = 1);
namespace App\Tests\Entity; namespace App\Tests\Entity;
use App\Core\Cache;
use App\Core\DB\DB; use App\Core\DB\DB;
use App\Entity\Actor;
use App\Util\GNUsocialTestCase; use App\Util\GNUsocialTestCase;
use Component\Circle\Entity\ActorTag; use Component\Circle\Entity\ActorTag;
use Functional as F; use Component\Tag\Tag as CompTag;
use Jchook\AssertThrows\AssertThrows; use Jchook\AssertThrows\AssertThrows;
class ActorTest extends GNUsocialTestCase class ActorTest extends GNUsocialTestCase
@ -33,20 +35,43 @@ class ActorTest extends GNUsocialTestCase
public function testGetAvatarUrl() public function testGetAvatarUrl()
{ {
$actor = DB::findOneBy('actor', ['nickname' => 'taken_user']); $actor = DB::findOneBy(Actor::class, ['nickname' => 'taken_user']);
static::assertSame('/avatar/default', $actor->getAvatarUrl()); static::assertSame('/avatar/default', $actor->getAvatarUrl());
} }
public function testSelfTags() public function testSelfTags()
{ {
$actor = DB::findOneBy('actor', ['nickname' => 'taken_user']); $actor = DB::findOneBy(Actor::class, ['nickname' => 'taken_user']);
$tags = $actor->getSelfTags(); // Start with no self-tags
$actor->setSelfTags(['foo'], $tags); static::assertSame(
expected: [],
actual: $actor->getSelfTags(),
);
// Add one self-tag 'foo'
$tag = CompTag::sanitize('foo');
DB::persist($actor_tag_foo = ActorTag::create([
'tagger' => $actor->getId(), // self tag means tagger = tagger in ActorTag
'tagged' => $actor->getId(),
'tag' => $tag,
]));
DB::flush(); DB::flush();
$get_tags = fn ($tags) => F\map($tags, fn (ActorTag $t) => $t->getTag()); Cache::delete(Actor::cacheKeys($actor->getId())['self-tags']);
static::assertSame(['foo'], $get_tags($tags = $actor->getSelfTags())); static::assertSame(
$actor->setSelfTags(['bar'], $tags); expected: [$actor_tag_foo],
actual: $actor->getSelfTags(),
);
// Add a second self-tag 'foo'
$tag = CompTag::sanitize('bar');
DB::persist($actor_tag_bar = ActorTag::create([
'tagger' => $actor->getId(), // self tag means tagger = tagger in ActorTag
'tagged' => $actor->getId(),
'tag' => $tag,
]));
DB::flush(); DB::flush();
static::assertSame(['bar'], $get_tags($tags = $actor->getSelfTags())); Cache::delete(Actor::cacheKeys($actor->getId())['self-tags']);
static::assertSame(
expected: [$actor_tag_bar, $actor_tag_foo],
actual: $actor->getSelfTags(),
);
} }
} }