configFactory = $this->getConfigFactoryStub( [ 'aggregator.settings' => [ 'processors' => ['aggregator_test'], ], 'aggregator_test.settings' => [], ] ); foreach (['fetcher', 'parser', 'processor'] as $type) { $this->managers[$type] = $this->getMockBuilder('Drupal\aggregator\Plugin\AggregatorPluginManager') ->disableOriginalConstructor() ->getMock(); $this->managers[$type]->expects($this->once()) ->method('getDefinitions') ->will($this->returnValue(['aggregator_test' => ['title' => '', 'description' => '']])); } /** @var \Drupal\Core\Messenger\MessengerInterface|\PHPUnit_Framework_MockObject_MockBuilder $messenger */ $messenger = $this->createMock(MessengerInterface::class); $messenger->expects($this->any())->method('addMessage'); $this->settingsForm = new SettingsForm( $this->configFactory, $this->managers['fetcher'], $this->managers['parser'], $this->managers['processor'], $this->getStringTranslationStub() ); $this->settingsForm->setMessenger($messenger); } /** * Test for AggregatorPluginSettingsBase. * * Ensure that the settings form calls build, validate and submit methods on * plugins that extend AggregatorPluginSettingsBase. */ public function testSettingsForm() { // Emulate a form state of a submitted form. $form_state = (new FormState())->setValues([ 'dummy_length' => '', 'aggregator_allowed_html_tags' => '', ]); $test_processor = $this->getMock( 'Drupal\aggregator_test\Plugin\aggregator\processor\TestProcessor', ['buildConfigurationForm', 'validateConfigurationForm', 'submitConfigurationForm'], [[], 'aggregator_test', ['description' => ''], $this->configFactory] ); $test_processor->expects($this->at(0)) ->method('buildConfigurationForm') ->with($this->anything(), $form_state) ->will($this->returnArgument(0)); $test_processor->expects($this->at(1)) ->method('validateConfigurationForm') ->with($this->anything(), $form_state); $test_processor->expects($this->at(2)) ->method('submitConfigurationForm') ->with($this->anything(), $form_state); $this->managers['processor']->expects($this->once()) ->method('createInstance') ->with($this->equalTo('aggregator_test')) ->will($this->returnValue($test_processor)); $form = $this->settingsForm->buildForm([], $form_state); $this->settingsForm->validateForm($form, $form_state); $this->settingsForm->submitForm($form, $form_state); } }