Ejemplo n.º 1
0
 /**
  * Tests that a list can be chosen with a property path selector.
  */
 public function testPropertyPathList()
 {
     $rule = $this->rulesExpressionManager->createRule();
     $rule->addAction('rules_variable_add', ContextConfig::create()->setValue('type', 'string')->setValue('value', '')->provideAs('variable_added', 'result'));
     $loop = $this->rulesExpressionManager->createInstance('rules_loop', ['list' => 'node.field_text']);
     $loop->addAction('rules_data_set', ContextConfig::create()->map('data', 'result')->setValue('value', '{{result}} {{list_item}}')->process('value', 'rules_tokens'));
     $rule->addExpressionObject($loop);
     // Create a fake field for the fake node for testing.
     $list_definition = $this->typedDataManager->createListDataDefinition('string');
     $field_text = new FieldItemList($list_definition);
     $field_text->setValue(['Hello', 'world', 'this', 'is', 'the', 'loop']);
     $node = $this->prophesizeEntity(NodeInterface::class);
     $node->get('field_text')->willReturn($field_text);
     // We cannot use EntityDataDefinitionInterface here because the context
     // system in core violates the interface and relies on the actuoal class.
     // @see https://www.drupal.org/node/2660216
     $node_definition = $this->prophesize(EntityDataDefinition::class);
     $node_definition->getPropertyDefinition("field_text")->willReturn($list_definition);
     $context_definition = $this->getContextDefinitionFor('entity:node', $node_definition);
     $component = RulesComponent::create($rule)->addContextDefinition('node', $context_definition)->provideContext('result')->setContextValue('node', $node->reveal());
     $violations = $component->checkIntegrity();
     $this->assertEquals(0, iterator_count($violations));
     $result = $component->execute();
     $this->assertEquals(' Hello world this is the loop', $result['result']);
 }
Ejemplo n.º 2
0
 /**
  * @covers ::equals
  */
 public function testEqualsEmptyItems()
 {
     /** @var \Drupal\Core\Field\FieldItemBase  $fv */
     $first_field_item = $this->getMockForAbstractClass('Drupal\\Core\\Field\\FieldItemBase', [], '', FALSE);
     $first_field_item->setValue(['0' => 1, '1' => 2]);
     $second_field_item = $this->getMockForAbstractClass('Drupal\\Core\\Field\\FieldItemBase', [], '', FALSE);
     $second_field_item->setValue(['1' => 2, '0' => 1]);
     $empty_field_item = $this->getMockForAbstractClass('Drupal\\Core\\Field\\FieldItemBase', [], '', FALSE);
     // Mock the field type manager and place it in the container.
     $field_type_manager = $this->getMock('Drupal\\Core\\Field\\FieldTypePluginManagerInterface');
     $container = new ContainerBuilder();
     $container->set('plugin.manager.field.field_type', $field_type_manager);
     \Drupal::setContainer($container);
     $field_storage_definition = $this->getMock('Drupal\\Core\\Field\\FieldStorageDefinitionInterface');
     $field_storage_definition->expects($this->any())->method('getColumns')->willReturn([0 => '0', 1 => '1']);
     $field_definition = $this->getMock('Drupal\\Core\\Field\\FieldDefinitionInterface');
     $field_definition->expects($this->any())->method('getFieldStorageDefinition')->willReturn($field_storage_definition);
     $field_list_a = new FieldItemList($field_definition);
     $field_list_b = new FieldItemList($field_definition);
     // Set up the mocking necessary for creating field items.
     $field_type_manager->expects($this->any())->method('createFieldItem')->willReturnOnConsecutiveCalls($first_field_item, $second_field_item, $empty_field_item, $empty_field_item);
     // Set the field item values.
     $field_list_a->setValue($first_field_item);
     $field_list_b->setValue($second_field_item);
     $field_list_a->appendItem($empty_field_item);
     // Field list A has an empty item.
     $this->assertEquals(FALSE, $field_list_a->equals($field_list_b));
     // Field lists A and B have empty items.
     $field_list_b->appendItem($empty_field_item);
     $this->assertEquals(TRUE, $field_list_a->equals($field_list_b));
     // Field list B has an empty item.
     $field_list_a->filterEmptyItems();
     $this->assertEquals(FALSE, $field_list_a->equals($field_list_b));
     // Neither field lists A and B have empty items.
     $field_list_b->filterEmptyItems();
     $this->assertEquals(TRUE, $field_list_a->equals($field_list_b));
 }