/** * @group parser */ public function testParseHashTags() { $this->assertContains('#hash', Tags::parseHashTags('test #hash test')['parsed']); $this->assertContains('#hash', Tags::parseHashTags('#hash')['parsed'], 'full'); $this->assertContains('#hash', Tags::parseHashTags('test #hash')['parsed'], 'end'); $this->assertContains('#hash', Tags::parseHashTags('#hash test')['parsed'], 'start'); $this->assertContains('#hash', Tags::parseHashTags('test #hash, test')['parsed'], 'separator ","'); $this->assertContains('#hash', Tags::parseHashTags('test #hash! test')['parsed'], 'separator "!"'); $this->assertContains('#hash', Tags::parseHashTags('test #hash?')['parsed'], 'separator "?"'); $this->assertContains('#hash2', Tags::parseHashTags('test #hash1 test #hash2.')['parsed'], 'multiple'); $this->assertContains('#hash-tag', Tags::parseHashTags('test #hash-Tag test')['parsed'], 'lowercase'); $this->assertCount(3, Tags::parseHashTags('test #hash1 test #hash2 #hash5')['parsed'], 'multiple - count'); $this->assertCount(1, Tags::parseHashTags('test #hash test #hash')['parsed'], 'repeated as single'); $this->assertCount(0, Tags::parseHashTags('test hash1 tst hash2 hash5')['parsed'], 'not found, empty array'); $this->assertCount(0, Tags::parseHashTags('www.example.com#test www.example.com/#test')['parsed'], 'not found when link'); $this->assertContains('#hash-Tag', Tags::parseHashTags('test #hash-Tag test')['original'], 'original'); }
/** * @param Question $question * @param bool $saveTagsInEntity */ public function addForQuestion(Question $question, $saveTagsInEntity = true) { $em = $this->getEntityManager(); if ($question instanceof PollPetition) { $tags = HashTagParser::parseHashTags($question->getPetitionBody()); } else { $tags = HashTagParser::parseHashTags($question->getSubject()); } foreach ($tags['parsed'] as $tag) { $entity = $this->findOneByName($tag); if (!$entity) { $entity = new HashTag($tag); $em->persist($entity); } $entity->addQuestion($question); $em->flush($entity); } if ($saveTagsInEntity) { $question->setCachedHashTags($tags['original']); $em->flush($question); } }