public function StateTransitionFormTest::testConfirmationForm in State Machine 8
Tests the confirmation form.
File
- tests/
src/ Functional/ StateTransitionFormTest.php, line 94
Class
- StateTransitionFormTest
- Tests the state transition form.
Namespace
Drupal\Tests\state_machine\FunctionalCode
public function testConfirmationForm() {
$view_display = EntityViewDisplay::create([
'targetEntityType' => 'entity_test_with_bundle',
'bundle' => 'first',
'mode' => 'default',
'status' => TRUE,
]);
$view_display
->setComponent('field_state', [
'type' => 'state_transition_form',
'settings' => [
'require_confirmation' => TRUE,
],
]);
$view_display
->save();
$first_entity = EntityTestWithBundle::create([
'type' => 'first',
'name' => 'First',
]);
$first_entity
->save();
$this
->drupalGet($first_entity
->toUrl('canonical'));
$this
->assertSession()
->pageTextContains('First');
$buttons = $this
->xpath('//form[@id="state-machine-transition-form-entity-test-with-bundle-field-state-1"]/div/a');
$this
->assertCount(2, $buttons);
$this
->assertEquals('Create', $buttons[0]
->getText());
$this
->assertEquals('Cancel', $buttons[1]
->getText());
$this
->assertSession()
->linkExists('Create');
// Click the Create button.
$buttons[0]
->click();
$this
->assertSession()
->pageTextContains('Are you sure you want to apply this transition?');
$this
->assertSession()
->pageTextContains('From: New');
$this
->assertSession()
->pageTextContains('To: Fulfillment');
$this
->assertSession()
->pageTextContains('Transition: Create');
$this
->assertSession()
->pageTextContains('Test entity with bundle: First');
$this
->assertSession()
->pageTextContains('This action cannot be undone.');
$this
->assertSession()
->linkExists('Cancel');
$this
->submitForm([], t('Confirm'));
$buttons = $this
->xpath('//form[@id="state-machine-transition-form-entity-test-with-bundle-field-state-1"]/div/a');
$this
->assertCount(1, $buttons);
$this
->assertEquals('Fulfill', $buttons[0]
->getText());
$transitions = [
'create' => 403,
'cancel' => 403,
'fulfill' => 200,
];
// Ensure the state transition form route doesn't allow access for
// transitions that are not allowed.
foreach ($transitions as $transition_id => $expected_status_code) {
$route = Url::fromRoute('entity.entity_test_with_bundle.state_transition_form', [
'entity_test_with_bundle' => $first_entity
->id(),
'field_name' => 'field_state',
'transition_id' => $transition_id,
]);
$this
->drupalGet($route);
$this
->assertSession()
->statusCodeEquals($expected_status_code);
}
}