ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
SortingTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 namespace ILIAS\Badge\test;
22 
25 use Closure;
26 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 
42  public function testSorting(array $input, string $key, string $label, string $what, string $method, array $equal, array $less, array $greater): void
43  {
44  $sort = new Sorting(...$input);
45  $this->assertEquals($key, $sort->key());
46  $this->assertEquals($label, $sort->label());
47  $this->assertEquals(0, $sort->compare($this->pair($what, $method, $equal[0]), $this->pair($what, $method, $equal[1])));
48  $this->assertEquals(-1, $this->sign($sort->compare($this->pair($what, $method, $less[0]), $this->pair($what, $method, $less[1]))));
49  $this->assertEquals(1, $this->sign($sort->compare($this->pair($what, $method, $greater[0]), $this->pair($what, $method, $greater[1]))));
50  }
51 
55  public function testOptions(): void
56  {
57  $this->assertEquals([
58  'title_asc',
59  'title_desc',
60  'date_asc',
61  'date_desc',
62  ], array_keys((new Sorting())->options()));
63  }
64 
65  public function sortProvider(): array
66  {
67  return [
68  'Default sort is title_asc' => [[], 'title_asc', 'sort_by_title_asc', 'badge', 'getTitle', ['A', 'a'], ['f', 'G'], ['d', 'c']],
69  'Descending title' => [['title_desc'], 'title_desc', 'sort_by_title_desc', 'badge', 'getTitle', ['A', 'a'], ['d', 'c'], ['f', 'G']],
70  'Ascending date' => [['date_asc'], 'date_asc', 'sort_by_date_asc', 'assignment', 'getTimestamp', ['7', '7'], [8, 30], [20, 6]],
71  'Ascending date' => [['date_desc'], 'date_desc', 'sort_by_date_desc', 'assignment', 'getTimestamp', [7, 7], [20, 6], [8, 30]],
72  'Random input results in title_asc' => [['Lorem ipsum'], 'title_asc', 'sort_by_title_asc', 'badge', 'getTitle', ['A', 'a'], ['f', 'G'], ['d', 'c']]
73  ];
74  }
75 
76  private function pair(string $what, string $method, $value): array
77  {
78  $badge = $this->getMockBuilder(ilBadge::class)->disableOriginalConstructor()->getMock();
79  $assignment = $this->getMockBuilder(ilBadgeAssignment::class)->disableOriginalConstructor()->getMock();
80 
81  $pair = [
82  'badge' => $badge,
83  'assignment' => $assignment,
84  ];
85 
86  $pair[$what]->method($method)->willReturn($value);
87 
88  return $pair;
89  }
90 
91  private function sign(int $x): int
92  {
93  return !$x ? 0 : $x / abs($x);
94  }
95 }
pair(string $what, string $method, $value)
Definition: SortingTest.php:76
string $key
Consumer key/client ID value.
Definition: System.php:193
testSorting(array $input, string $key, string $label, string $what, string $method, array $equal, array $less, array $greater)
testConstruct sortProvider
Definition: SortingTest.php:42
testOptions()
testConstruct
Definition: SortingTest.php:55