id}\"",
$widget,
'artist-autocomp-redir-html-link'
);
$this->assertStringContainsString(
"$redirectName
",
$widget,
'artist-autocomp-redir-html-name'
);
$this->assertStringNotContainsString(
"{$artist->primaryName()}
",
$widget,
'artist-autocomp-redir-html-name-not-primary'
);
$this->assertStringContainsString(
"aka {$artist->primaryName()}
",
$widget,
'artist-autocomp-redir-html-aka'
);
$cached = $manager->autocompleteList($redirectName);
$this->assertCount(1, $cached, 'artist-autocomp-redir-cache-count');
$this->assertSame($autocomplete[0]['data'], $cached[0]['data'], 'artist-autocomp-redir-cache-data');
$this->assertSame($autocomplete[0]['value'], $cached[0]['value'], 'artist-autocomp-redir-cache-value');
$this->assertInstanceOf(Artist::class, $cached[0]['widget']['artist'], 'artist-autocomp-redir-cache-artist-object');
$this->assertSame(
$widget,
$this->renderAutocompleteWidget($cached[0]),
'artist-autocomp-redir-cache-html'
);
}
public function testArtistAutocompleteSortBySnatchTotal(): void {
$manager = new Manager\Artist();
$rankPrefix = 'qrank.phpunit.' . randomString(6) . '.';
$rankedList = [];
foreach ([
['Alpha', 20],
['Beta', 50],
['Gamma', 20],
] as [$suffix, $snatches]) {
$name = $rankPrefix . $suffix;
$artist = $manager->create($name);
$this->artistIdList[] = $artist->id;
$tgroup = Helper::makeTGroupMusic(
$this->user,
'phpunit artist autocomp rank ' . randomString(10),
[[ARTIST_MAIN], [$name]],
['punk'],
);
$torrent = Helper::makeTorrentMusic($tgroup, $this->user);
Helper::addTorrentTraffic($torrent, 0, 0, $snatches);
$this->tgroupList[] = $tgroup;
$rankedList[$suffix] = $artist;
}
global $Cache;
$Cache->delete_value($manager->autocompleteKey($rankPrefix));
$autocomplete = $manager->autocompleteList($rankPrefix);
$this->assertSame(
[
$rankedList['Beta']->id,
$rankedList['Alpha']->id,
$rankedList['Gamma']->id,
],
array_column($autocomplete, 'data'),
'artist-autocomp-order-snatched'
);
$this->assertSame(
[
$rankPrefix . 'Beta',
$rankPrefix . 'Alpha',
$rankPrefix . 'Gamma',
],
array_column($autocomplete, 'value'),
'artist-autocomp-order-snatched-value'
);
}
public function testArtistAutocompleteFlushesCachedHtmlOnRevisionChange(): void {
$manager = new Manager\Artist();
$name = 'qcache.phpunit.' . randomString(6);
$prefix = substr($name, 0, 6);
$artist = $manager->create($name);
$this->artistIdList[] = $artist->id;
$artist->createRevision(
body: 'before cache body',
image: null,
summary: ['before cache body'],
user: $this->user,
);
$tgroup = Helper::makeTGroupMusic(
$this->user,
'phpunit artist autocomp cache ' . randomString(10),
[[ARTIST_MAIN], [$name]],
['punk'],
);
Helper::makeTorrentMusic($tgroup, $this->user);
$this->tgroupList[] = $tgroup;
global $Cache;
$Cache->delete_value($manager->autocompleteKey($prefix));
$autocomplete = $manager->autocompleteList($prefix);
$this->assertStringContainsString(
'before cache body',
$this->renderAutocompleteWidget($autocomplete[0]),
'artist-autocomp-cache-before'
);
$artist->createRevision(
body: 'after cache body',
image: null,
summary: ['after cache body'],
user: $this->user,
);
$autocomplete = $manager->autocompleteList($prefix);
$widget = $this->renderAutocompleteWidget($autocomplete[0]);
$this->assertStringContainsString('after cache body', $widget, 'artist-autocomp-cache-after');
$this->assertStringNotContainsString('before cache body', $widget, 'artist-autocomp-cache-stale');
}
public function testArtistBookmark(): void {
$name = 'phpunit.' . randomString(12);
$manager = new Manager\Artist();
$artist = $manager->create($name);
$this->artistIdList[] = $artist->id;
new User\Bookmark($this->user)->create($artist);
$json = new Json\Bookmark\Artist(new User\Bookmark($this->user));
$this->assertEquals(
[[
'artistId' => $artist->id,
'artistName' => $name,
]],
$json->payload(),
'artist-json-bookmark-payload'
);
}
public function testArtistDiscogs(): void {
$manager = new Manager\Artist();
$artist = $manager->create('phpunit.' . randomString(12));
$this->artistIdList[] = $artist->id;
$id = (int)DB::DB()->scalar("
SELECT 1+coalesce(max(artist_discogs_id), 0) FROM artist_discogs
");
$name = 'discogs phpunit ' . randomString(10);
$discogs = new Util\Discogs(
id: $id,
stem: $name,
name: $name,
sequence: 2,
);
$this->assertEquals($id, $discogs->id, 'artist-discogs-id');
$this->assertEquals($name, $discogs->name(), 'artist-discogs-name');
$this->assertEquals($name, $discogs->stem(), 'artist-discogs-stem');
$this->assertEquals(2, $discogs->sequence(), 'artist-discogs-sequence');
$this->assertTrue(
$artist->setField('discogs', $discogs)->setUpdateUser($this->user)->modify(),
'artist-add-discogs'
);
$this->assertEquals($name, $artist->discogs()->name(), 'artist-self-discogs-name');
$context = $artist->widgetContext();
$this->assertSame($artist, $context['artist'], 'artist-widget-context-object');
$widget = \Gazelle\Util\Twig::factory(new Manager\User())->render(
'artist/widget.twig',
$context
);
$this->assertStringContainsString('cae-advanced-meta', $widget, 'artist-discogs-advanced-meta');
$this->assertStringContainsString('cae-advanced-item-discogs', $widget, 'artist-discogs-advanced-discogs');
$this->assertStringContainsString((string)$id, $widget, 'artist-discogs-advanced-discogs-id');
$this->assertStringContainsString('cae-advanced-item-snatches', $widget, 'artist-discogs-advanced-snatches');
$this->assertEquals(1, $artist->removeDiscogsRelation(), 'artist-discogs-remove');
}
public function testArtistRole(): void {
$manager = new Manager\Artist();
$this->assertTrue($manager->roleExists(0, ARTIST_MAIN), 'artist-role-main');
$this->assertFalse($manager->roleExists(0, 99), 'artist-role-inexistent');
}
public function testArtistComment(): void {
$manager = new Manager\Artist();
$artist = $manager->create('phpunit.' . randomString(12));
$this->artistIdList[] = $artist->id;
$body = "phpunit u{$this->user->id} a{$artist->id}";
$comment = new Manager\Comment()->create(
$this->user,
CommentType::artist->value,
$artist->id,
$body
);
$search = new Search\Comment(
CommentType::artist,
'default',
$this->user->id === $this->user->id,
$this->user,
);
$this->assertCount(0, $search->linkList(), 'artist-comment-linklist');
$this->assertEquals(
'Artist comments',
$search->title(),
'artist-comment-linklist'
);
$this->assertEquals(
1,
$search->total(),
'artist-comment-total'
);
$page = $search->page(2, 0);
$this->assertCount(1, $page['list'], 'artist-comment-list-total');
$this->assertCount(1, $page['user'], 'artist-comment-user-total');
$this->assertTrue(
isset($page['user'][$this->user->id]),
'artist-comment-user-id'
);
$comment = $page['list'][0];
$this->assertEqualsCanonicalizing(
["id_user", "type", "id_type", "name", "id", "body", "created", "edited", "id_editor"],
array_keys($comment),
'artist-comment-keys',
);
$this->assertEquals($body, $comment['body'], 'artist-comment-body');
}
}