View source
<?php
namespace Drupal\Tests\pbf\Functional;
class PbfAccessByTermRefTest extends PbfBaseTest {
protected $fieldname;
public function setUp() {
parent::setUp();
$this->fieldname = 'field_pbf_term';
$this
->attachPbfTermFields($this->vocabulary, $this->fieldname);
$this->article1 = $this
->createSimpleArticle('Article 1', $this->fieldname, $this->term1
->id(), 1, 0, 0, 0);
$this->article2 = $this
->createSimpleArticle('Article 2', $this->fieldname, $this->term1
->id(), 0, 1, 0, 0);
}
public function testPbfAccessByTermRef() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet("node/{$this->article1->id()}");
$this
->assertResponse(200, 'adminUser is allowed to view the content.');
$this
->drupalGet("node/{$this->article1->id()}/edit");
$this
->assertResponse(200, 'adminUser is allowed to edit the content.');
$bundle_path = 'admin/structure/types/manage/article';
$this
->drupalGet($bundle_path . '/fields');
$this
->assertFieldByXPath('//table[@id="field-overview"]//tr[@id="field-pbf-term"]/td[1]', 'Content related to term', 'Field was created and appears in the overview page.');
$this
->drupalGet($bundle_path . '/form-display');
$this
->assertFieldByXPath('//table[@id="field-display-overview"]//tr[@id="field-pbf-term"]/td[1]', 'Content related to term', 'Field appears in the Manage form display page.');
$this
->assertFieldByName('fields[field_pbf_term][type]', 'pbf_widget', 'The expected widget is selected.');
$this
->drupalGet($bundle_path . '/display');
$this
->assertFieldByXPath('//table[@id="field-display-overview"]//tr[@id="field-pbf-term"]/td[1]', 'Content related to term', 'Field appears in the Manage form display page.');
$this
->assertFieldByName('fields[field_pbf_term][type]', 'pbf_formatter_default', 'The expected formatter is selected.');
$user_path_config = 'admin/config/people/accounts';
$this
->drupalGet($user_path_config . '/fields');
$this
->assertFieldByXPath('//table[@id="field-overview"]//tr[@id="field-pbf-term"]/td[1]', 'User related to term', 'User Pbf field was created and appears in the overview page.');
$this
->drupalGet($user_path_config . '/form-display');
$this
->assertFieldByName('fields[field_pbf_term][type]', 'pbf_widget', 'The expected widget is selected.');
$this
->drupalGet($user_path_config . '/display');
$this
->assertFieldByName('fields[field_pbf_term][type]', 'pbf_formatter_default', 'The expected formatter is selected.');
$this
->drupalLogin($this->normalUser);
$this
->drupalGet("node/{$this->article2->id()}");
$this
->assertText(t('Access denied'));
$this
->assertResponse(403);
$this
->drupalGet("node/{$this->article1->id()}");
$this
->assertResponse(200);
$this
->drupalGet("node/{$this->article1->id()}/edit");
$this
->assertResponse(403);
$this
->drupalGet("node/{$this->article2->id()}/edit");
$this
->assertResponse(403);
$this->container
->get('cron')
->run();
$this
->checkSearchResults('Article', 1);
$value = [
'target_id' => $this->term1
->id(),
'grant_public' => 1,
'grant_view' => 0,
'grant_update' => 0,
'grant_delete' => 0,
];
$this->article2
->set($this->fieldname, $value)
->save();
$this
->drupalGet("node/{$this->article2->id()}");
$this
->assertResponse(200);
$this
->checkSearchResults('Article', 2);
$this
->drupalGet("node/{$this->article2->id()}/edit");
$this
->assertResponse(403);
$this
->drupalGet("node/{$this->article2->id()}/delete");
$this
->assertResponse(403);
$value = [
'target_id' => $this->term1
->id(),
'grant_public' => 0,
'grant_view' => 1,
'grant_update' => 0,
'grant_delete' => 0,
];
$this->article2
->set($this->fieldname, $value)
->save();
$this
->drupalGet("node/{$this->article2->id()}");
$this
->assertResponse(403);
$this
->checkSearchResults('Article', 1);
$this
->setUserField($this->normalUser
->id(), $this->fieldname, [
'target_id' => $this->term1
->id(),
]);
$this
->drupalGet("user/{$this->normalUser->id()}/edit");
$this
->assertResponse(200);
$this
->assertFieldByName('field_pbf_term[0][target_id]', $this->term1
->getName() . ' (' . $this->term1
->id() . ')', 'The expected value is found in the Pbf input field');
$this
->drupalGet("user/{$this->normalUser->id()}");
$this
->assertLink($this->term1
->getName());
$this
->assertResponse(200);
$this->container
->get('cron')
->run();
$this
->checkSearchResults('Article', 2);
$this
->drupalGet("node/{$this->article2->id()}");
$this
->assertResponse(200);
$this
->drupalGet("node/{$this->article2->id()}/edit");
$this
->assertResponse(403);
$this
->drupalGet("node/{$this->article2->id()}/delete");
$this
->assertResponse(403);
$value = [
'target_id' => $this->term1
->id(),
'grant_public' => 0,
'grant_view' => 1,
'grant_update' => 1,
'grant_delete' => 1,
];
$this->article2
->set($this->fieldname, $value)
->save();
$this
->drupalGet("node/{$this->article2->id()}");
$this
->assertResponse(200);
$this
->drupalGet("node/{$this->article2->id()}/edit");
$this
->assertResponse(200);
$this
->drupalGet("node/{$this->article2->id()}/delete");
$this
->assertResponse(200);
$this
->drupalLogout();
$this
->drupalGet("node/{$this->article1->id()}");
$this
->assertResponse(200);
$this
->drupalGet("node/{$this->article2->id()}");
$this
->assertResponse(403);
}
}