3 namespace Tests\Entity;
7 class SlugTest extends TestCase
9 public function test_slug_multi_byte_url_safe()
11 $book = $this->entities->newBook([
12 'name' => 'информация',
15 $this->assertEquals('informaciia', $book->slug);
17 $book = $this->entities->newBook([
21 $this->assertEquals('que', $book->slug);
24 public function test_slug_format()
26 $book = $this->entities->newBook([
27 'name' => 'PartA / PartB / PartC',
30 $this->assertEquals('parta-partb-partc', $book->slug);
33 public function test_old_page_slugs_redirect_to_new_pages()
35 $page = $this->entities->page();
36 $pageUrl = $page->getUrl();
38 $this->asAdmin()->put($pageUrl, [
39 'name' => 'super test page',
44 ->assertRedirect("/books/{$page->book->slug}/page/super-test-page");
47 public function test_old_shelf_slugs_redirect_to_new_shelf()
49 $shelf = $this->entities->shelf();
50 $shelfUrl = $shelf->getUrl();
52 $this->asAdmin()->put($shelf->getUrl(), [
53 'name' => 'super test shelf',
57 ->assertRedirect("/shelves/super-test-shelf");
60 public function test_old_book_slugs_redirect_to_new_book()
62 $book = $this->entities->book();
63 $bookUrl = $book->getUrl();
65 $this->asAdmin()->put($book->getUrl(), [
66 'name' => 'super test book',
70 ->assertRedirect("/books/super-test-book");
73 public function test_old_chapter_slugs_redirect_to_new_chapter()
75 $chapter = $this->entities->chapter();
76 $chapterUrl = $chapter->getUrl();
78 $this->asAdmin()->put($chapter->getUrl(), [
79 'name' => 'super test chapter',
82 $this->get($chapterUrl)
83 ->assertRedirect("/books/{$chapter->book->slug}/chapter/super-test-chapter");
86 public function test_old_book_slugs_in_page_urls_redirect_to_current_page_url()
88 $page = $this->entities->page();
90 $pageUrl = $page->getUrl();
92 $this->asAdmin()->put($book->getUrl(), [
93 'name' => 'super test book',
97 ->assertRedirect("/books/super-test-book/page/{$page->slug}");
100 public function test_old_book_slugs_in_chapter_urls_redirect_to_current_chapter_url()
102 $chapter = $this->entities->chapter();
103 $book = $chapter->book;
104 $chapterUrl = $chapter->getUrl();
106 $this->asAdmin()->put($book->getUrl(), [
107 'name' => 'super test book',
110 $this->get($chapterUrl)
111 ->assertRedirect("/books/super-test-book/chapter/{$chapter->slug}");
114 public function test_slugs_recorded_in_history_on_page_update()
116 $page = $this->entities->page();
117 $this->asAdmin()->put($page->getUrl(), [
118 'name' => 'new slug',
122 $oldSlug = $page->slug;
124 $this->assertNotEquals($oldSlug, $page->slug);
126 $this->assertDatabaseHas('slug_history', [
127 'sluggable_id' => $page->id,
128 'sluggable_type' => 'page',
130 'parent_slug' => $page->book->slug,
134 public function test_slugs_recorded_in_history_on_chapter_update()
136 $chapter = $this->entities->chapter();
137 $this->asAdmin()->put($chapter->getUrl(), [
138 'name' => 'new slug',
141 $oldSlug = $chapter->slug;
143 $this->assertNotEquals($oldSlug, $chapter->slug);
145 $this->assertDatabaseHas('slug_history', [
146 'sluggable_id' => $chapter->id,
147 'sluggable_type' => 'chapter',
149 'parent_slug' => $chapter->book->slug,
153 public function test_slugs_recorded_in_history_on_book_update()
155 $book = $this->entities->book();
156 $this->asAdmin()->put($book->getUrl(), [
157 'name' => 'new slug',
160 $oldSlug = $book->slug;
162 $this->assertNotEquals($oldSlug, $book->slug);
164 $this->assertDatabaseHas('slug_history', [
165 'sluggable_id' => $book->id,
166 'sluggable_type' => 'book',
168 'parent_slug' => null,
172 public function test_slugs_recorded_in_history_on_shelf_update()
174 $shelf = $this->entities->shelf();
175 $this->asAdmin()->put($shelf->getUrl(), [
176 'name' => 'new slug',
179 $oldSlug = $shelf->slug;
181 $this->assertNotEquals($oldSlug, $shelf->slug);
183 $this->assertDatabaseHas('slug_history', [
184 'sluggable_id' => $shelf->id,
185 'sluggable_type' => 'bookshelf',
187 'parent_slug' => null,