TermMergerTermCrudTest.php in Term Merge 8
File
tests/src/Kernel/TermMergerTermCrudTest.php
View source
<?php
namespace Drupal\Tests\term_merge\Kernel;
use Drupal\taxonomy\TermInterface;
use Drupal\term_merge\TermMerger;
class TermMergerTermCrudTest extends MergeTermsTestBase {
public function mergeTermFunctionsProvider() {
$functions['::mergeIntoNewTerm'] = [
'methodName' => 'mergeIntoNewTerm',
'target' => 'new term',
];
$functions['::mergeIntoTerm'] = [
'methodName' => 'mergeIntoTerm',
'target' => '',
];
return $functions;
}
public function canOnlyMergeTermsInTheSameVocabulary($methodName, $target) {
$this
->expectException('\\RuntimeException', 'Only merges within the same vocabulary are supported');
$vocab2 = $this
->createVocabulary();
$term3 = $this
->createTerm($vocab2);
$terms = [
reset($this->terms),
$term3,
];
$sut = $this
->createSubjectUnderTest();
$sut
->{$methodName}($terms, $this
->prepareTarget($target));
}
public function minimumTermsValidation($methodName, $target) {
$this
->expectException('\\RuntimeException', 'You must provide at least 1 term');
$sut = $this
->createSubjectUnderTest();
$sut
->{$methodName}([], $this
->prepareTarget($target));
}
public function mergeIntoNewTermCreatesNewTerm() {
$sut = $this
->createSubjectUnderTest();
$termLabel = 'newTerm';
$term = $sut
->mergeIntoNewTerm($this->terms, $termLabel);
self::assertTrue($term instanceof TermInterface);
self::assertSame($termLabel, $term
->label());
self::assertNotNull($term
->id());
}
public function existingTermMustBeInSameVocabularyAsMergedTerms() {
$this
->expectException('\\RuntimeException', 'The target term must be in the same vocabulary as the terms being merged');
$sut = $this
->createSubjectUnderTest();
$term = $this
->createTerm($this
->createVocabulary());
$sut
->mergeIntoTerm($this->terms, $term);
}
public function mergeIntoTermSavesTermIfNewTermIsPassedIn() {
$sut = $this
->createSubjectUnderTest();
$values = [
'name' => 'Unsaved term',
'vid' => $this->vocabulary
->id(),
];
$term = $this->entityTypeManager
->getStorage('taxonomy_term')
->create($values);
self::assertEmpty($term
->id());
$sut
->mergeIntoTerm($this->terms, $term);
self::assertNotEmpty($term
->id());
}
public function mergedTermsAreDeleted($methodName, $target) {
$sut = $this
->createSubjectUnderTest();
$sut
->{$methodName}($this->terms, $this
->prepareTarget($target));
$termStorage = $this->entityTypeManager
->getStorage('taxonomy_term');
$termIds = array_keys($this->terms);
self::assertEquals([], $termStorage
->loadMultiple($termIds));
}
private function createSubjectUnderTest() {
$migrator = \Drupal::service('term_reference_change.migrator');
$dispatcher = \Drupal::service('event_dispatcher');
$sut = new TermMerger($this->entityTypeManager, $migrator, $dispatcher);
return $sut;
}
protected function numberOfTermsToSetUp() {
return 2;
}
}