Include tags as hashtags for automated tweets

References #24
This commit is contained in:
Oliver Davies 2020-09-04 12:04:55 +01:00
parent 150c974040
commit c5c774290d
2 changed files with 30 additions and 3 deletions

View file

@ -50,11 +50,27 @@ class Post extends Node implements ContentEntityBundleInterface {
}
public function toTweet(): string {
// TODO: Add tags.
$parts = [$this->label(), $this->url('canonical', ['absolute' => TRUE])];
$parts = [
$this->label(),
$this->url('canonical', ['absolute' => TRUE]),
$this->convertTermsToHashtags(),
];
return implode(PHP_EOL . PHP_EOL, $parts);
}
private function convertTermsToHashtags(): string {
return $this->getTags()
->map(fn(Term $term) => $this->convertTermToHashtag($term))
->implode(' ');
}
private function convertTermToHashtag(Term $tag): string {
$tagName = strtolower($tag->label());
$tagName = "#{$tagName}";
$tagName = str_replace(' ', '-', $tagName);
return $tagName;
}
}

View file

@ -8,6 +8,7 @@ use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
use Drupal\node\Entity\Node;
use Drupal\node\NodeInterface;
use Drupal\opdavies_blog\Entity\Node\Post;
use Drupal\taxonomy\Entity\Term;
final class PostTest extends EntityKernelTestBase {
@ -43,6 +44,12 @@ final class PostTest extends EntityKernelTestBase {
public function it_converts_a_post_to_a_tweet(): void {
/** @var Post $post */
$post = Node::create([
'field_tags' => [
Term::create(['vid' => 'tags', 'name' => 'Automated testing']),
Term::create(['vid' => 'tags', 'name' => 'DDEV']),
Term::create(['vid' => 'tags', 'name' => 'Drupal']),
Term::create(['vid' => 'tags', 'name' => 'PHP']),
],
'status' => NodeInterface::PUBLISHED,
'title' => 'Creating a custom PHPUnit command for DDEV',
'type' => 'post',
@ -53,6 +60,8 @@ final class PostTest extends EntityKernelTestBase {
Creating a custom PHPUnit command for DDEV
http://localhost/node/1
#automated-testing #ddev #drupal #php
EOF;
$this->assertSame($expected, $post->toTweet());
@ -61,6 +70,8 @@ final class PostTest extends EntityKernelTestBase {
protected function setUp() {
parent::setUp();
$this->installEntitySchema('taxonomy_term');
$this->installConfig(['opdavies_blog_test']);
}