ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
SortingTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS\Badge\test;
22
24use ilBadge;
26use PHPUnit\Framework\TestCase;
27use PHPUnit\Framework\Attributes\DataProvider;
28use PHPUnit\Framework\Attributes\Depends;
29
30class 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
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...