farmOS/modules/core/ui/views/tests/src/Functional/TaxonomyTermTasksTest.php

167 lines
4.9 KiB
PHP

<?php
namespace Drupal\Tests\farm_ui_views\Functional;
use Drupal\asset\Entity\Asset;
use Drupal\Tests\farm_test\Functional\FarmBrowserTestBase;
/**
* Tests the farm_ui_views taxonomy views routes.
*
* @group farm
*/
class TaxonomyTermTasksTest extends FarmBrowserTestBase {
/**
* Test user.
*
* @var \Drupal\user\Entity\User
*/
protected $user;
/**
* Test animal asset.
*
* @var \Drupal\asset\Entity\Asset
*/
protected $favaPlantType;
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'classy';
/**
* {@inheritdoc}
*/
protected static $modules = [
'block',
'farm_plant',
'farm_seed',
'farm_ui_views',
];
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
$this->drupalPlaceBlock('local_tasks_block');
// Create/login a user with permission to access taxonomy pages and assets.
$this->user = $this->createUser(['administer taxonomy', 'view any asset']);
$this->drupalLogin($this->user);
$entity_type_manager = $this->container->get('entity_type.manager');
$term_storage = $entity_type_manager->getStorage('taxonomy_term');
// Create a "Oat" plant type term.
$oat_plant_type = $term_storage->create([
'name' => 'Oat',
'vid' => 'plant_type',
]);
$oat_plant_type->save();
// Create a oat plant.
Asset::create([
'name' => 'Pringle\'s Progress Oat Planting',
'type' => 'plant',
'plant_type' => ['target_id' => $oat_plant_type->id()],
])->save();
// Create a "Fava Bean" plant type term.
$this->favaPlantType = $term_storage->create([
'name' => 'Fava Bean',
'vid' => 'plant_type',
]);
$this->favaPlantType->save();
// Create a fava plant.
Asset::create([
'name' => 'Red Flowering Fava Planting',
'type' => 'plant',
'plant_type' => ['target_id' => $this->favaPlantType->id()],
])->save();
// Create a fava seed.
Asset::create([
'name' => 'Red Flowering Fava Seeds',
'type' => 'seed',
'plant_type' => ['target_id' => $this->favaPlantType->id()],
])->save();
}
/**
* Test that the asset view task links appear on taxonomy term pages.
*/
public function testTaxonomyTermAssetTaskTabsAppear() {
$fava_term_url = 'taxonomy/term/' . $this->favaPlantType->id();
$this->drupalGet($fava_term_url);
$this->assertSession()->statusCodeEquals(200);
$get_array_of_link_text_by_url = function ($elems) {
$result = [];
foreach ($elems as $elem) {
$result[$elem->getAttribute('href')] = $elem->getText();
}
return $result;
};
$primary_tab_links = $get_array_of_link_text_by_url($this->xpath('//*[contains(@class, :class)]//a', [
':class' => 'tabs primary',
]));
$assert_has_link = function ($elements, $url, $label) {
$this->assertArrayHasKey($url, $elements, "No link exists with url '$url' among: " . print_r($elements, TRUE));
$this->assertEquals($label, $elements[$url], "Link label not as expected.");
};
$assert_has_link($primary_tab_links, "/$fava_term_url/assets/all", 'Assets');
$this->drupalGet("$fava_term_url/assets/all");
$this->assertSession()->statusCodeEquals(200);
$secondary_tab_links = $get_array_of_link_text_by_url($this->xpath('//*[contains(@class, :class)]//a', [
':class' => 'tabs secondary',
]));
$this->assertCount(3, $secondary_tab_links, 'Only 3 secondary tabs appear.');
$assert_has_link($secondary_tab_links, "/$fava_term_url/assets/all", 'All(active tab)');
$assert_has_link($secondary_tab_links, "/$fava_term_url/assets/plant", 'Plant');
$assert_has_link($secondary_tab_links, "/$fava_term_url/assets/seed", 'Seed');
}
/**
* Test that the views of assets for terms show the correct assets.
*/
public function testTaxonomyTermAssetViews() {
$fava_term_url = 'taxonomy/term/' . $this->favaPlantType->id();
$this->drupalGet("$fava_term_url/assets/all");
$this->assertSession()->statusCodeEquals(200);
$this->assertSession()->pageTextContains('Red Flowering Fava Planting');
$this->assertSession()->pageTextContains('Red Flowering Fava Seeds');
$this->assertSession()->pageTextNotContains('Pringle\'s Progress Oat Planting');
$this->drupalGet("$fava_term_url/assets/plant");
$this->assertSession()->statusCodeEquals(200);
$this->assertSession()->pageTextContains('Red Flowering Fava Planting');
$this->assertSession()->pageTextNotContains('Red Flowering Fava Seeds');
$this->assertSession()->pageTextNotContains('Pringle\'s Progress Oat Planting');
$this->drupalGet("$fava_term_url/assets/seed");
$this->assertSession()->statusCodeEquals(200);
$this->assertSession()->pageTextNotContains('Red Flowering Fava Planting');
$this->assertSession()->pageTextContains('Red Flowering Fava Seeds');
$this->assertSession()->pageTextNotContains('Pringle\'s Progress Oat Planting');
}
}