Chris@0: installEntitySchema('node'); Chris@0: $this->installEntitySchema('user'); Chris@0: Chris@0: $this->installSchema('node', ['node_access']); Chris@0: Chris@0: $node_type = NodeType::create(['type' => 'foo']); Chris@0: $node_type->save(); Chris@0: Chris@0: $this->installConfig(['language']); Chris@0: ConfigurableLanguage::createFromLangcode('de')->save(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Test creating, loading, updating and deleting aliases through PathItem. Chris@0: */ Chris@0: public function testPathItem() { Chris@0: Chris@0: /** @var \Drupal\Core\Path\AliasStorageInterface $alias_storage */ Chris@0: $alias_storage = \Drupal::service('path.alias_storage'); Chris@0: Chris@0: $node_storage = \Drupal::entityTypeManager()->getStorage('node'); Chris@0: Chris@0: $node = Node::create([ Chris@0: 'title' => 'Testing create()', Chris@0: 'type' => 'foo', Chris@0: 'path' => ['alias' => '/foo'], Chris@0: ]); Chris@0: $this->assertFalse($node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/foo', $node->get('path')->alias); Chris@0: Chris@0: $node->save(); Chris@0: $this->assertFalse($node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/foo', $node->get('path')->alias); Chris@0: Chris@0: $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId()); Chris@0: $this->assertEquals('/foo', $stored_alias); Chris@0: Chris@0: $node_storage->resetCache(); Chris@0: Chris@0: /** @var \Drupal\node\NodeInterface $loaded_node */ Chris@0: $loaded_node = $node_storage->load($node->id()); Chris@0: $this->assertFalse($loaded_node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/foo', $loaded_node->get('path')->alias); Chris@0: $node_storage->resetCache(); Chris@0: $loaded_node = $node_storage->load($node->id()); Chris@0: $this->assertEquals('/foo', $loaded_node->get('path')[0]->get('alias')->getValue()); Chris@0: Chris@0: $node_storage->resetCache(); Chris@0: $loaded_node = $node_storage->load($node->id()); Chris@0: $values = $loaded_node->get('path')->getValue(); Chris@0: $this->assertEquals('/foo', $values[0]['alias']); Chris@0: Chris@0: $node_storage->resetCache(); Chris@0: $loaded_node = $node_storage->load($node->id()); Chris@0: $this->assertEquals('/foo', $loaded_node->path->alias); Chris@0: Chris@0: // Add a translation, verify it is being saved as expected. Chris@0: $translation = $loaded_node->addTranslation('de', $loaded_node->toArray()); Chris@0: $translation->get('path')->alias = '/furchtbar'; Chris@0: $translation->save(); Chris@0: Chris@0: // Assert the alias on the English node, the German translation, and the Chris@0: // stored aliases. Chris@0: $node_storage->resetCache(); Chris@0: $loaded_node = $node_storage->load($node->id()); Chris@0: $this->assertEquals('/foo', $loaded_node->path->alias); Chris@0: $translation = $loaded_node->getTranslation('de'); Chris@0: $this->assertEquals('/furchtbar', $translation->path->alias); Chris@0: Chris@0: $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId()); Chris@0: $this->assertEquals('/foo', $stored_alias); Chris@0: $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $translation->language()->getId()); Chris@0: $this->assertEquals('/furchtbar', $stored_alias); Chris@0: Chris@0: $loaded_node->get('path')->alias = '/bar'; Chris@0: $this->assertFalse($loaded_node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/bar', $loaded_node->get('path')->alias); Chris@0: Chris@0: $loaded_node->save(); Chris@0: $this->assertFalse($loaded_node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/bar', $loaded_node->get('path')->alias); Chris@0: Chris@0: $node_storage->resetCache(); Chris@0: $loaded_node = $node_storage->load($node->id()); Chris@0: $this->assertFalse($loaded_node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/bar', $loaded_node->get('path')->alias); Chris@0: Chris@0: $loaded_node->get('path')->alias = '/bar'; Chris@0: $this->assertFalse($loaded_node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/bar', $loaded_node->get('path')->alias); Chris@0: Chris@0: $loaded_node->save(); Chris@0: $this->assertFalse($loaded_node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/bar', $loaded_node->get('path')->alias); Chris@0: Chris@0: $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId()); Chris@0: $this->assertEquals('/bar', $stored_alias); Chris@0: Chris@0: $old_alias = $alias_storage->lookupPathSource('/foo', $node->language()->getId()); Chris@0: $this->assertFalse($old_alias); Chris@0: Chris@0: // Reload the node to make sure that it is possible to set a value Chris@0: // immediately after loading. Chris@0: $node_storage->resetCache(); Chris@0: $loaded_node = $node_storage->load($node->id()); Chris@0: $loaded_node->get('path')->alias = '/foobar'; Chris@0: $loaded_node->save(); Chris@0: Chris@0: $node_storage->resetCache(); Chris@0: $loaded_node = $node_storage->load($node->id()); Chris@0: $this->assertFalse($loaded_node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/foobar', $loaded_node->get('path')->alias); Chris@0: $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId()); Chris@0: $this->assertEquals('/foobar', $stored_alias); Chris@0: Chris@0: $old_alias = $alias_storage->lookupPathSource('/bar', $node->language()->getId()); Chris@0: $this->assertFalse($old_alias); Chris@0: Chris@0: $loaded_node->get('path')->alias = ''; Chris@0: $this->assertEquals('', $loaded_node->get('path')->alias); Chris@0: Chris@0: $loaded_node->save(); Chris@0: Chris@0: $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId()); Chris@0: $this->assertFalse($stored_alias); Chris@0: Chris@0: // Check that reading, updating and reading the computed alias again in the Chris@0: // same request works without clearing any caches in between. Chris@0: $loaded_node = $node_storage->load($node->id()); Chris@0: $loaded_node->get('path')->alias = '/foo'; Chris@0: $loaded_node->save(); Chris@0: Chris@0: $this->assertFalse($loaded_node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/foo', $loaded_node->get('path')->alias); Chris@0: $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId()); Chris@0: $this->assertEquals('/foo', $stored_alias); Chris@0: Chris@0: $loaded_node->get('path')->alias = '/foobar'; Chris@0: $loaded_node->save(); Chris@0: Chris@0: $this->assertFalse($loaded_node->get('path')->isEmpty()); Chris@0: $this->assertEquals('/foobar', $loaded_node->get('path')->alias); Chris@0: $stored_alias = $alias_storage->lookupPathAlias('/' . $node->toUrl()->getInternalPath(), $node->language()->getId()); Chris@0: $this->assertEquals('/foobar', $stored_alias); Chris@12: Chris@12: // Check that \Drupal\Core\Field\FieldItemList::equals() for the path field Chris@12: // type. Chris@12: $node = Node::create([ Chris@12: 'title' => $this->randomString(), Chris@12: 'type' => 'foo', Chris@12: 'path' => ['alias' => '/foo'], Chris@12: ]); Chris@12: $second_node = Node::create([ Chris@12: 'title' => $this->randomString(), Chris@12: 'type' => 'foo', Chris@12: 'path' => ['alias' => '/foo'], Chris@12: ]); Chris@12: $this->assertTrue($node->get('path')->equals($second_node->get('path'))); Chris@12: Chris@12: // Change the alias for the second node to a different one and try again. Chris@12: $second_node->get('path')->alias = '/foobar'; Chris@12: $this->assertFalse($node->get('path')->equals($second_node->get('path'))); Chris@14: Chris@14: // Test the generateSampleValue() method. Chris@14: $node = Node::create([ Chris@14: 'title' => $this->randomString(), Chris@14: 'type' => 'foo', Chris@14: 'path' => ['alias' => '/foo'], Chris@14: ]); Chris@14: $node->save(); Chris@14: $path_field = $node->get('path'); Chris@14: $path_field->generateSampleItems(); Chris@14: $node->save(); Chris@14: $this->assertStringStartsWith('/', $node->get('path')->alias); Chris@0: } Chris@0: Chris@0: }