PaginatorTest.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. // Copyright 2019 Hackware SpA <human@hackware.cl>
  3. // "Hackware Web Services Core" is released under the MIT License terms.
  4. namespace Hawese\Tests;
  5. use Hawese\Core\Http\Controllers\Paginator;
  6. use Laravel\Lumen\Testing\DatabaseTransactions;
  7. class PaginatorTest extends TestCase
  8. {
  9. use DatabaseTransactions;
  10. private const LIMIT = 10;
  11. public function setUp(): void
  12. {
  13. parent::setUp();
  14. for ($i = 0; $i < 21; $i++) {
  15. (new DumbTableModel([
  16. 'attr1' => bin2hex(random_bytes(12))
  17. ]))->insert();
  18. }
  19. $this->paginator = new Paginator(
  20. DumbTableModel::select(),
  21. 1,
  22. self::LIMIT
  23. );
  24. }
  25. public function testTotalPages()
  26. {
  27. $this->assertSame(3, $this->paginator->totalPages());
  28. }
  29. public function testGet()
  30. {
  31. $this->assertSame(self::LIMIT, $this->paginator->get()->count());
  32. $this->assertSame(
  33. 1,
  34. (new Paginator(DumbTableModel::select(), 3, self::LIMIT))->get()
  35. ->count()
  36. );
  37. }
  38. public function testLinks()
  39. {
  40. $links = $this->paginator->links(
  41. 'https://request/url/',
  42. ['unrelated' => 1, 'query' => 2, 'params' => 3]
  43. );
  44. $this->assertStringContainsString('page=1', $links['first']);
  45. $this->assertStringContainsString('page=3', $links['last']);
  46. $this->assertSame(null, $links['prev']);
  47. $this->assertStringContainsString('page=2', $links['next']);
  48. $this->assertStringContainsString('unrelated=1', $links['next']);
  49. $lastPagePaginator = new Paginator(
  50. DumbTableModel::select(),
  51. 3,
  52. self::LIMIT
  53. );
  54. $this->assertSame(
  55. null,
  56. $lastPagePaginator->links('https://request/url/')['next']
  57. );
  58. }
  59. }