| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Tests\Entity; | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 00:56:55 +08:00
										 |  |  | use BookStack\Activity\Models\Tag; | 
					
						
							| 
									
										
										
										
											2020-11-22 08:17:45 +08:00
										 |  |  | use BookStack\Entities\Models\Entity; | 
					
						
							|  |  |  | use BookStack\Entities\Models\Page; | 
					
						
							| 
									
										
										
										
											2021-05-24 23:12:09 +08:00
										 |  |  | use Tests\TestCase; | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 23:12:09 +08:00
										 |  |  | class TagTest extends TestCase | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2024-04-16 01:44:59 +08:00
										 |  |  |     protected int $defaultTagCount = 20; | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get an instance of a page that has many tags. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-05-24 23:12:09 +08:00
										 |  |  |     protected function getEntityWithTags($class, ?array $tags = null): Entity | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-03-30 21:09:51 +08:00
										 |  |  |         $entity = $class::first(); | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 23:12:09 +08:00
										 |  |  |         if (is_null($tags)) { | 
					
						
							| 
									
										
										
										
											2021-10-31 04:29:59 +08:00
										 |  |  |             $tags = Tag::factory()->count($this->defaultTagCount)->make(); | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 21:09:51 +08:00
										 |  |  |         $entity->tags()->saveMany($tags); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 21:09:51 +08:00
										 |  |  |         return $entity; | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_tag_name_suggestions() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // Create some tags with similar names to test with
 | 
					
						
							|  |  |  |         $attrs = collect(); | 
					
						
							| 
									
										
										
										
											2021-10-31 04:29:59 +08:00
										 |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'country'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'color'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'city'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'county'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'planet'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'plans'])); | 
					
						
							| 
									
										
										
										
											2021-05-24 23:16:58 +08:00
										 |  |  |         $page = $this->getEntityWithTags(Page::class, $attrs->all()); | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-31 04:29:59 +08:00
										 |  |  |         $this->asAdmin()->get('/ajax/tags/suggest/names?search=dog')->assertSimilarJson([]); | 
					
						
							|  |  |  |         $this->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson(['color', 'country', 'county']); | 
					
						
							|  |  |  |         $this->get('/ajax/tags/suggest/names?search=cou')->assertSimilarJson(['country', 'county']); | 
					
						
							|  |  |  |         $this->get('/ajax/tags/suggest/names?search=pla')->assertSimilarJson(['planet', 'plans']); | 
					
						
							| 
									
										
										
										
											2016-05-16 03:12:53 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_tag_value_suggestions() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // Create some tags with similar values to test with
 | 
					
						
							|  |  |  |         $attrs = collect(); | 
					
						
							| 
									
										
										
										
											2021-10-31 04:29:59 +08:00
										 |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'country', 'value' => 'cats'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'color', 'value' => 'cattery'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'city', 'value' => 'castle'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'county', 'value' => 'dog'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'planet', 'value' => 'catapult'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'plans', 'value' => 'dodgy'])); | 
					
						
							| 
									
										
										
										
											2021-05-24 23:16:58 +08:00
										 |  |  |         $page = $this->getEntityWithTags(Page::class, $attrs->all()); | 
					
						
							| 
									
										
										
										
											2016-05-16 03:12:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-31 04:29:59 +08:00
										 |  |  |         $this->asAdmin()->get('/ajax/tags/suggest/values?search=ora')->assertSimilarJson([]); | 
					
						
							|  |  |  |         $this->get('/ajax/tags/suggest/values?search=cat')->assertSimilarJson(['cats', 'cattery', 'catapult']); | 
					
						
							|  |  |  |         $this->get('/ajax/tags/suggest/values?search=do')->assertSimilarJson(['dog', 'dodgy']); | 
					
						
							|  |  |  |         $this->get('/ajax/tags/suggest/values?search=cas')->assertSimilarJson(['castle']); | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_entity_permissions_effect_tag_suggestions() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // Create some tags with similar names to test with and save to a page
 | 
					
						
							|  |  |  |         $attrs = collect(); | 
					
						
							| 
									
										
										
										
											2021-10-31 04:29:59 +08:00
										 |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'country'])); | 
					
						
							|  |  |  |         $attrs = $attrs->merge(Tag::factory()->count(5)->make(['name' => 'color'])); | 
					
						
							| 
									
										
										
										
											2021-05-24 23:16:58 +08:00
										 |  |  |         $page = $this->getEntityWithTags(Page::class, $attrs->all()); | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-31 04:29:59 +08:00
										 |  |  |         $this->asAdmin()->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson(['color', 'country']); | 
					
						
							|  |  |  |         $this->asEditor()->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson(['color', 'country']); | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // Set restricted permission the page
 | 
					
						
							| 
									
										
										
										
											2023-01-21 19:08:34 +08:00
										 |  |  |         $this->permissions->setEntityPermissions($page, [], []); | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-31 04:29:59 +08:00
										 |  |  |         $this->asAdmin()->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson(['color', 'country']); | 
					
						
							|  |  |  |         $this->asEditor()->get('/ajax/tags/suggest/names?search=co')->assertSimilarJson([]); | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 23:12:09 +08:00
										 |  |  |     public function test_tags_shown_on_search_listing() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $tags = [ | 
					
						
							| 
									
										
										
										
											2021-10-31 04:29:59 +08:00
										 |  |  |             Tag::factory()->make(['name' => 'category', 'value' => 'buckets']), | 
					
						
							|  |  |  |             Tag::factory()->make(['name' => 'color', 'value' => 'red']), | 
					
						
							| 
									
										
										
										
											2021-05-24 23:12:09 +08:00
										 |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $page = $this->getEntityWithTags(Page::class, $tags); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |         $resp = $this->asEditor()->get('/search?term=[category]'); | 
					
						
							| 
									
										
										
										
											2021-05-24 23:12:09 +08:00
										 |  |  |         $resp->assertSee($page->name); | 
					
						
							| 
									
										
										
										
											2022-07-23 22:10:18 +08:00
										 |  |  |         $this->withHtml($resp)->assertElementContains('[href="' . $page->getUrl() . '"]', 'category'); | 
					
						
							|  |  |  |         $this->withHtml($resp)->assertElementContains('[href="' . $page->getUrl() . '"]', 'buckets'); | 
					
						
							|  |  |  |         $this->withHtml($resp)->assertElementContains('[href="' . $page->getUrl() . '"]', 'color'); | 
					
						
							|  |  |  |         $this->withHtml($resp)->assertElementContains('[href="' . $page->getUrl() . '"]', 'red'); | 
					
						
							| 
									
										
										
										
											2021-05-24 23:12:09 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function test_tags_index_shows_tag_name_as_expected_with_right_counts() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $page = $this->entities->page(); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |         $page->tags()->create(['name' => 'Category', 'value' => 'GreatTestContent']); | 
					
						
							|  |  |  |         $page->tags()->create(['name' => 'Category', 'value' => 'OtherTestContent']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags'); | 
					
						
							|  |  |  |         $resp->assertSee('Category'); | 
					
						
							| 
									
										
										
										
											2022-07-23 22:10:18 +08:00
										 |  |  |         $html = $this->withHtml($resp); | 
					
						
							|  |  |  |         $html->assertElementCount('.tag-item', 1); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |         $resp->assertDontSee('GreatTestContent'); | 
					
						
							|  |  |  |         $resp->assertDontSee('OtherTestContent'); | 
					
						
							| 
									
										
										
										
											2022-07-23 22:10:18 +08:00
										 |  |  |         $html->assertElementContains('a[title="Total tag usages"]', '2'); | 
					
						
							|  |  |  |         $html->assertElementContains('a[title="Assigned to Pages"]', '2'); | 
					
						
							|  |  |  |         $html->assertElementContains('a[title="Assigned to Books"]', '0'); | 
					
						
							|  |  |  |         $html->assertElementContains('a[title="Assigned to Chapters"]', '0'); | 
					
						
							|  |  |  |         $html->assertElementContains('a[title="Assigned to Shelves"]', '0'); | 
					
						
							|  |  |  |         $html->assertElementContains('a[href$="/tags?name=Category"]', '2 unique values'); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $book = $this->entities->book(); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |         $book->tags()->create(['name' => 'Category', 'value' => 'GreatTestContent']); | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags'); | 
					
						
							| 
									
										
										
										
											2022-07-23 22:10:18 +08:00
										 |  |  |         $this->withHtml($resp)->assertElementContains('a[title="Total tag usages"]', '3'); | 
					
						
							|  |  |  |         $this->withHtml($resp)->assertElementContains('a[title="Assigned to Books"]', '1'); | 
					
						
							|  |  |  |         $this->withHtml($resp)->assertElementContains('a[href$="/tags?name=Category"]', '2 unique values'); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_tag_index_can_be_searched() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $page = $this->entities->page(); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |         $page->tags()->create(['name' => 'Category', 'value' => 'GreatTestContent']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags?search=cat'); | 
					
						
							| 
									
										
										
										
											2022-07-23 22:10:18 +08:00
										 |  |  |         $this->withHtml($resp)->assertElementContains('.tag-item .tag-name', 'Category'); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags?search=content'); | 
					
						
							| 
									
										
										
										
											2022-07-23 22:10:18 +08:00
										 |  |  |         $this->withHtml($resp)->assertElementContains('.tag-item .tag-name', 'Category'); | 
					
						
							|  |  |  |         $this->withHtml($resp)->assertElementContains('.tag-item .tag-value', 'GreatTestContent'); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags?search=other'); | 
					
						
							| 
									
										
										
										
											2022-07-23 22:10:18 +08:00
										 |  |  |         $this->withHtml($resp)->assertElementNotExists('.tag-item .tag-name'); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-16 03:00:37 +08:00
										 |  |  |     public function test_tag_index_search_will_show_mulitple_values_of_a_single_tag_name() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $page = $this->entities->page(); | 
					
						
							| 
									
										
										
										
											2021-11-16 03:00:37 +08:00
										 |  |  |         $page->tags()->create(['name' => 'Animal', 'value' => 'Catfish']); | 
					
						
							|  |  |  |         $page->tags()->create(['name' => 'Animal', 'value' => 'Catdog']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags?search=cat'); | 
					
						
							| 
									
										
										
										
											2022-07-23 22:10:18 +08:00
										 |  |  |         $this->withHtml($resp)->assertElementContains('.tag-item .tag-value', 'Catfish'); | 
					
						
							|  |  |  |         $this->withHtml($resp)->assertElementContains('.tag-item .tag-value', 'Catdog'); | 
					
						
							| 
									
										
										
										
											2021-11-16 03:00:37 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |     public function test_tag_index_can_be_scoped_to_specific_tag_name() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $page = $this->entities->page(); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |         $page->tags()->create(['name' => 'Category', 'value' => 'GreatTestContent']); | 
					
						
							|  |  |  |         $page->tags()->create(['name' => 'Category', 'value' => 'OtherTestContent']); | 
					
						
							|  |  |  |         $page->tags()->create(['name' => 'OtherTagName', 'value' => 'OtherValue']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags?name=Category'); | 
					
						
							|  |  |  |         $resp->assertSee('Category'); | 
					
						
							|  |  |  |         $resp->assertSee('GreatTestContent'); | 
					
						
							|  |  |  |         $resp->assertSee('OtherTestContent'); | 
					
						
							|  |  |  |         $resp->assertDontSee('OtherTagName'); | 
					
						
							|  |  |  |         $resp->assertSee('Active Filter:'); | 
					
						
							| 
									
										
										
										
											2022-11-01 22:53:36 +08:00
										 |  |  |         $this->withHtml($resp)->assertElementCount('.item-list .tag-item', 2); | 
					
						
							| 
									
										
										
										
											2022-07-23 22:10:18 +08:00
										 |  |  |         $this->withHtml($resp)->assertElementContains('form[action$="/tags"]', 'Clear Filter'); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_tags_index_adheres_to_page_permissions() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $page = $this->entities->page(); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  |         $page->tags()->create(['name' => 'SuperCategory', 'value' => 'GreatTestContent']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags'); | 
					
						
							|  |  |  |         $resp->assertSee('SuperCategory'); | 
					
						
							|  |  |  |         $resp = $this->get('/tags?name=SuperCategory'); | 
					
						
							|  |  |  |         $resp->assertSee('GreatTestContent'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-21 19:08:34 +08:00
										 |  |  |         $this->permissions->setEntityPermissions($page, [], []); | 
					
						
							| 
									
										
										
										
											2021-11-07 05:54:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags'); | 
					
						
							|  |  |  |         $resp->assertDontSee('SuperCategory'); | 
					
						
							|  |  |  |         $resp = $this->get('/tags?name=SuperCategory'); | 
					
						
							|  |  |  |         $resp->assertDontSee('GreatTestContent'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_tag_index_shows_message_on_no_results() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags?search=testingval'); | 
					
						
							|  |  |  |         $resp->assertSee('No items available'); | 
					
						
							|  |  |  |         $resp->assertSee('Tags can be assigned via the page editor sidebar'); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-07-24 01:29:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-16 01:44:59 +08:00
										 |  |  |     public function test_tag_index_does_not_include_tags_on_recycle_bin_items() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $page = $this->entities->page(); | 
					
						
							|  |  |  |         $page->tags()->create(['name' => 'DeleteRecord', 'value' => 'itemToDeleteTest']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags'); | 
					
						
							|  |  |  |         $resp->assertSee('DeleteRecord'); | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags?name=DeleteRecord'); | 
					
						
							|  |  |  |         $resp->assertSee('itemToDeleteTest'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->entities->sendToRecycleBin($page); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags'); | 
					
						
							|  |  |  |         $resp->assertDontSee('DeleteRecord'); | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get('/tags?name=DeleteRecord'); | 
					
						
							|  |  |  |         $resp->assertDontSee('itemToDeleteTest'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-24 01:29:04 +08:00
										 |  |  |     public function test_tag_classes_visible_on_entities() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->asEditor(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-29 23:49:25 +08:00
										 |  |  |         foreach ($this->entities->all() as $entity) { | 
					
						
							| 
									
										
										
										
											2022-07-24 01:29:04 +08:00
										 |  |  |             $entity->tags()->create(['name' => 'My Super Tag Name', 'value' => 'An-awesome-value']); | 
					
						
							|  |  |  |             $html = $this->withHtml($this->get($entity->getUrl())); | 
					
						
							|  |  |  |             $html->assertElementExists('body.tag-name-mysupertagname.tag-value-anawesomevalue.tag-pair-mysupertagname-anawesomevalue'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_tag_classes_are_escaped() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $page = $this->entities->page(); | 
					
						
							| 
									
										
										
										
											2022-07-24 01:29:04 +08:00
										 |  |  |         $page->tags()->create(['name' => '<>']); | 
					
						
							|  |  |  |         $resp = $this->asEditor()->get($page->getUrl()); | 
					
						
							|  |  |  |         $resp->assertDontSee('tag-name-<>', false); | 
					
						
							|  |  |  |         $resp->assertSee('tag-name-<>', false); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-05-14 04:20:21 +08:00
										 |  |  | } |