Added Entity and Entity Reference Revisions which got dropped somewhere along the...
[yaffs-website] / web / modules / contrib / entity / tests / src / Kernel / RevisionBasicUITest.php
1 <?php
2
3 namespace Drupal\Tests\entity\Kernel;
4
5 use Drupal\entity_module_test\Entity\EnhancedEntity;
6 use Drupal\KernelTests\KernelTestBase;
7 use Drupal\user\Entity\Role;
8 use Drupal\user\Entity\User;
9 use Symfony\Component\HttpFoundation\Request;
10
11 /**
12  * @group entity
13  */
14 class RevisionBasicUITest extends KernelTestBase {
15
16   /**
17    * {@inheritdoc}
18    */
19   public static $modules = ['entity_module_test', 'system', 'user', 'entity'];
20
21   /**
22    * {@inheritdoc}
23    */
24   protected function setUp() {
25     parent::setUp();
26
27     $this->installEntitySchema('user');
28     $this->installEntitySchema('entity_test_enhanced');
29     $this->installSchema('system', 'router');
30     $this->installConfig(['system']);
31
32     \Drupal::service('router.builder')->rebuild();
33   }
34
35   /**
36    * Tests the revision history controller.
37    */
38   public function testRevisionHistory() {
39     $entity = EnhancedEntity::create([
40       'name' => 'rev 1',
41       'type' => 'default',
42     ]);
43     $entity->save();
44
45     $revision = clone $entity;
46     $revision->name->value = 'rev 2';
47     $revision->setNewRevision(TRUE);
48     $revision->isDefaultRevision(FALSE);
49     $revision->save();
50
51     /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel */
52     $http_kernel = \Drupal::service('http_kernel');
53     $request = Request::create($revision->toUrl('version-history')->toString());
54     $response = $http_kernel->handle($request);
55     $this->assertEquals(403, $response->getStatusCode());
56
57     $role_admin = Role::create(['id' => 'test_role_admin']);
58     $role_admin->grantPermission('administer entity_test_enhanced');
59     $role_admin->save();
60
61     $role = Role::create(['id' => 'test_role']);
62     $role->grantPermission('view all entity_test_enhanced revisions');
63     $role->grantPermission('administer entity_test_enhanced');
64     $role->save();
65
66     $user_admin = User::create([
67       'name' => 'Test user admin',
68     ]);
69     $user_admin->addRole($role_admin->id());
70     \Drupal::service('account_switcher')->switchTo($user_admin);
71
72     $request = Request::create($revision->toUrl('version-history')->toString());
73     $response = $http_kernel->handle($request);
74     $this->assertEquals(200, $response->getStatusCode());
75
76     $user = User::create([
77       'name' => 'Test user',
78     ]);
79     $user->addRole($role->id());
80     \Drupal::service('account_switcher')->switchTo($user);
81
82     $request = Request::create($revision->toUrl('version-history')->toString());
83     $response = $http_kernel->handle($request);
84     $this->assertEquals(200, $response->getStatusCode());
85
86     // This ensures that the default revision is still the first revision.
87     $this->assertTrue(strpos($response->getContent(), 'entity_test_enhanced/1/revisions/2/view') !== FALSE);
88     $this->assertTrue(strpos($response->getContent(), 'entity_test_enhanced/1') !== FALSE);
89
90     // Publish a new revision.
91     $revision = clone $entity;
92     $revision->name->value = 'rev 3';
93     $revision->setNewRevision(TRUE);
94     $revision->isDefaultRevision(TRUE);
95     $revision->save();
96
97     $request = Request::create($revision->toUrl('version-history')->toString());
98     $response = $http_kernel->handle($request);
99     $this->assertEquals(200, $response->getStatusCode());
100
101     // The first revision row should now include a revert link.
102     $this->assertTrue(strpos($response->getContent(), 'entity_test_enhanced/1/revisions/1/revert') !== FALSE);
103   }
104
105   public function testRevisionView() {
106     $entity = EnhancedEntity::create([
107       'name' => 'rev 1',
108       'type' => 'default',
109     ]);
110     $entity->save();
111
112     $revision = clone $entity;
113     $revision->name->value = 'rev 2';
114     $revision->setNewRevision(TRUE);
115     $revision->isDefaultRevision(FALSE);
116     $revision->save();
117
118     /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel */
119     $http_kernel = \Drupal::service('http_kernel');
120     $request = Request::create($revision->toUrl('revision')->toString());
121     $response = $http_kernel->handle($request);
122     $this->assertEquals(403, $response->getStatusCode());
123
124     $role_admin = Role::create(['id' => 'test_role_admin']);
125     $role_admin->grantPermission('administer entity_test_enhanced');
126     $role_admin->save();
127
128     $role = Role::create(['id' => 'test_role']);
129     $role->grantPermission('view all entity_test_enhanced revisions');
130     $role->grantPermission('administer entity_test_enhanced');
131     $role->save();
132
133     $user_admin = User::create([
134       'name' => 'Test user admin',
135     ]);
136     $user_admin->addRole($role_admin->id());
137     \Drupal::service('account_switcher')->switchTo($user_admin);
138
139     $request = Request::create($revision->toUrl('version-history')->toString());
140     $response = $http_kernel->handle($request);
141     $this->assertEquals(200, $response->getStatusCode());
142
143     $user = User::create([
144       'name' => 'Test user',
145     ]);
146     $user->addRole($role->id());
147     \Drupal::service('account_switcher')->switchTo($user);
148
149     $request = Request::create($revision->toUrl('revision')->toString());
150     $response = $http_kernel->handle($request);
151     $this->assertEquals(200, $response->getStatusCode());
152     $this->assertNotContains('rev 1', $response->getContent());
153     $this->assertContains('rev 2', $response->getContent());
154   }
155
156   public function testRevisionRevert() {
157     $entity = EnhancedEntity::create([
158       'name' => 'rev 1',
159       'type' => 'entity_test_enhance',
160     ]);
161     $entity->save();
162     $entity->name->value = 'rev 2';
163     $entity->setNewRevision(TRUE);
164     $entity->isDefaultRevision(TRUE);
165     $entity->save();
166
167     $role = Role::create(['id' => 'test_role']);
168     $role->grantPermission('administer entity_test_enhanced');
169     $role->grantPermission('revert all entity_test_enhanced revisions');
170     $role->save();
171
172     $user = User::create([
173       'name' => 'Test user',
174     ]);
175     $user->addRole($role->id());
176     \Drupal::service('account_switcher')->switchTo($user);
177
178     /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel */
179     $http_kernel = \Drupal::service('http_kernel');
180     $request = Request::create($entity->toUrl('revision-revert-form')->toString());
181     $response = $http_kernel->handle($request);
182     $this->assertEquals(200, $response->getStatusCode());
183   }
184
185 }