ILIAS  trunk Revision v11.0_alpha-2662-g519ff7d528f
SortingTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 namespace ILIAS\Badge\test;
22 
24 use ilBadge;
29 
30 class SortingTest extends TestCase
31 {
32  public function testConstruct(): void
33  {
34  $sort = new Sorting();
35  $this->assertInstanceOf(Sorting::class, $sort);
36  }
37 
38  #[DataProvider('sortProvider')]
39  #[Depends('testConstruct')]
40  public function testSorting(array $input, string $key, string $label, string $what, string $method, array $equal, array $less, array $greater): void
41  {
42  $sort = new Sorting(...$input);
43  $this->assertEquals($key, $sort->key());
44  $this->assertEquals($label, $sort->label());
45  $this->assertEquals(0, $sort->compare($this->pair($what, $method, $equal[0]), $this->pair($what, $method, $equal[1])));
46  $this->assertEquals(-1, $this->sign($sort->compare($this->pair($what, $method, $less[0]), $this->pair($what, $method, $less[1]))));
47  $this->assertEquals(1, $this->sign($sort->compare($this->pair($what, $method, $greater[0]), $this->pair($what, $method, $greater[1]))));
48  }
49 
50  #[Depends('testConstruct')]
51  public function testOptions(): void
52  {
53  $this->assertEquals([
54  'title_asc',
55  'title_desc',
56  'date_asc',
57  'date_desc',
58  ], array_keys((new Sorting())->options()));
59  }
60 
61  public static function sortProvider(): array
62  {
63  return [
64  'Default sort is title_asc' => [[], 'title_asc', 'sort_by_title_asc', 'badge', 'getTitle', ['A', 'a'], ['f', 'G'], ['d', 'c']],
65  'Descending title' => [['title_desc'], 'title_desc', 'sort_by_title_desc', 'badge', 'getTitle', ['A', 'a'], ['d', 'c'], ['f', 'G']],
66  'Ascending date' => [['date_asc'], 'date_asc', 'sort_by_date_asc', 'assignment', 'getTimestamp', [7, 7], [8, 30], [20, 6]],
67  'Descending date' => [['date_desc'], 'date_desc', 'sort_by_date_desc', 'assignment', 'getTimestamp', [7, 7], [20, 6], [8, 30]],
68  'Random input results in title_asc' => [['Lorem ipsum'], 'title_asc', 'sort_by_title_asc', 'badge', 'getTitle', ['A', 'a'], ['f', 'G'], ['d', 'c']]
69  ];
70  }
71 
72  private function pair(string $what, string $method, $value): array
73  {
74  $badge = $this->getMockBuilder(ilBadge::class)->disableOriginalConstructor()->getMock();
75  $assignment = $this->getMockBuilder(ilBadgeAssignment::class)->disableOriginalConstructor()->getMock();
76 
77  $pair = [
78  'badge' => $badge,
79  'assignment' => $assignment,
80  ];
81 
82  $pair[$what]->method($method)->willReturn($value);
83 
84  return $pair;
85  }
86 
87  private function sign(int $x): int
88  {
89  return !$x ? 0 : $x / abs($x);
90  }
91 }
pair(string $what, string $method, $value)
Definition: SortingTest.php:72
testSorting(array $input, string $key, string $label, string $what, string $method, array $equal, array $less, array $greater)
Definition: SortingTest.php:40