protected function SimpleWidgetTest::checkEditAccess in Inline Entity Form 8
Tests that user only has access to the their own nodes.
Parameters
\Drupal\node\NodeInterface $host_node: The node of the type of ief_simple_single.
int $number_of_items: The number of entity reference values in the "single" field.
int $cardinality: The field cardinality with which to check.
1 call to SimpleWidgetTest::checkEditAccess()
- SimpleWidgetTest::testSimpleCardinalityOptions in tests/
src/ FunctionalJavascript/ SimpleWidgetTest.php - Tests simple IEF widget with different cardinality options.
File
- tests/
src/ FunctionalJavascript/ SimpleWidgetTest.php, line 242
Class
- SimpleWidgetTest
- Tests the IEF simple widget.
Namespace
Drupal\Tests\inline_entity_form\FunctionalJavascriptCode
protected function checkEditAccess(NodeInterface $host_node, int $number_of_items, int $cardinality) {
$assert_session = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$other_user = $this
->createUser([
'edit own ief_test_custom content',
'edit any ief_simple_single content',
]);
$first_child_node = $host_node->single[0]->entity;
$first_child_node
->setOwner($other_user)
->save();
$this
->drupalGet("node/{$host_node->id()}/edit");
$assert_session
->pageTextContains($first_child_node
->label());
// Assert the form of child node without edit access is not found.
$assert_session
->fieldNotExists('single[0][inline_entity_form][title][0][value]');
// Check that the forms for other child nodes (if any) appear on the form.
// If $number_of_items is greater than one, iterate through the other
// fields that should appear on the page.
$delta = 1;
while ($delta < $number_of_items) {
$child_node = $host_node->single[$delta]->entity;
// Assert the form of child node with edit access is found.
$delta_field = $assert_session
->fieldExists("single[{$delta}][inline_entity_form][title][0][value]");
$this
->assertStringContainsString($child_node
->label(), $delta_field
->getValue());
$delta++;
}
// Check that there is NOT an extra "add" form when editing.
$unexpected_item_number = $number_of_items;
// Assert no empty "add" entity form is found on edit.
$assert_session
->fieldNotExists("single[{$unexpected_item_number}][inline_entity_form][title][0][value]");
if ($cardinality == FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) {
$next_item_number = $number_of_items;
$page
->pressButton('Add another item');
// Assert item $next_item_number does appear after 'Add More'
// clicked.
$this
->assertNotEmpty($assert_session
->waitForField("single[{$next_item_number}][inline_entity_form][title][0][value]"));
// Make sure only 1 item is added.
$unexpected_item_number = $next_item_number + 1;
// Assert extra item $unexpected_item_number is not added after
// 'Add More' clicked.
$assert_session
->fieldNotExists("single[{$unexpected_item_number}][inline_entity_form][title][0][value]");
}
// Now that we have confirmed the correct fields appear, let's update the
// values and save them. We do not have access to the form for delta 0
// because it is owned by another user.
$delta = 1;
$new_titles = [];
$edit = [];
// Loop through an update all child node titles.
while ($delta < $number_of_items) {
/** @var \Drupal\node\Entity\Node $child_node */
$child_node = $host_node->single[$delta]->entity;
$new_titles[$delta] = $child_node
->label() . ' - updated';
$edit["single[{$delta}][inline_entity_form][title][0][value]"] = $new_titles[$delta];
$delta++;
}
// If cardinality equals CARDINALITY_UNLIMITED then we should have 1 extra
// form open.
if ($cardinality === FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) {
$new_titles[$delta] = 'Title for new child';
$edit["single[{$delta}][inline_entity_form][title][0][value]"] = $new_titles[$delta];
}
$this
->submitForm($edit, 'Save');
$assert_session
->pageTextContains("IEF simple single {$host_node->label()} has been updated.");
// Reset cache for nodes.
$node_ids = [
$host_node
->id(),
];
foreach ($host_node->single as $item) {
$node_ids[] = $item->entity
->id();
}
$this->container
->get('entity_type.manager')
->getStorage('node')
->resetCache($node_ids);
$host_node = Node::load($host_node
->id());
// Check that titles were updated.
foreach ($new_titles as $delta => $new_title) {
$child_node = $host_node->single[$delta]->entity;
$this
->assertSame($new_title, $child_node
->label(), "Child {$delta} node title has been updated.");
}
}