diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Feature/Model/RoomModelTest.php | 2 | ||||
-rw-r--r-- | tests/Unit/HasDatabase.php | 19 | ||||
-rw-r--r-- | tests/Unit/Helpers/Schedule/Assets/schedule.xml | 46 | ||||
-rw-r--r-- | tests/Unit/Helpers/Schedule/CalculatesTimeTest.php | 33 | ||||
-rw-r--r-- | tests/Unit/Helpers/Schedule/ConferenceTest.php | 49 | ||||
-rw-r--r-- | tests/Unit/Helpers/Schedule/DayTest.php | 47 | ||||
-rw-r--r-- | tests/Unit/Helpers/Schedule/EventTest.php | 149 | ||||
-rw-r--r-- | tests/Unit/Helpers/Schedule/RoomTest.php | 31 | ||||
-rw-r--r-- | tests/Unit/Helpers/Schedule/ScheduleTest.php | 112 | ||||
-rw-r--r-- | tests/Unit/Helpers/Schedule/XmlParserTest.php | 54 | ||||
-rw-r--r-- | tests/Unit/HelpersTest.php | 47 | ||||
-rw-r--r-- | tests/Unit/Http/HttpClientServiceProviderTest.php | 29 | ||||
-rw-r--r-- | tests/Unit/Http/RedirectServiceProviderTest.php | 23 | ||||
-rw-r--r-- | tests/Unit/Http/RedirectorTest.php | 53 | ||||
-rw-r--r-- | tests/Unit/Http/ResponseTest.php | 57 | ||||
-rw-r--r-- | tests/Unit/Middleware/ErrorHandlerTest.php | 9 | ||||
-rw-r--r-- | tests/Unit/Models/Shifts/ScheduleShiftTest.php | 41 | ||||
-rw-r--r-- | tests/Unit/Models/Shifts/ScheduleTest.php | 37 |
18 files changed, 827 insertions, 11 deletions
diff --git a/tests/Feature/Model/RoomModelTest.php b/tests/Feature/Model/RoomModelTest.php index 9908082a..3ed4bcd2 100644 --- a/tests/Feature/Model/RoomModelTest.php +++ b/tests/Feature/Model/RoomModelTest.php @@ -13,7 +13,7 @@ class RoomModelTest extends TestCase */ public function createRoom() { - $this->room_id = Room_create('test', false, null, null); + $this->room_id = Room_create('test', null, null); } /** diff --git a/tests/Unit/HasDatabase.php b/tests/Unit/HasDatabase.php index dbaa253e..3fe29e4a 100644 --- a/tests/Unit/HasDatabase.php +++ b/tests/Unit/HasDatabase.php @@ -36,14 +36,17 @@ trait HasDatabase $this->database ->getConnection() ->table('migrations') - ->insert([ - ['migration' => '2018_01_01_000001_import_install_sql'], - ['migration' => '2018_01_01_000002_import_update_sql'], - ['migration' => '2018_01_01_000003_fix_old_tables'], - ['migration' => '2018_01_01_000004_cleanup_group_privileges'], - ['migration' => '2018_01_01_000005_add_angel_supporter_permissions'], - ['migration' => '2018_12_27_000000_fix_missing_arrival_dates'], - ]); + ->insert( + [ + ['migration' => '2018_01_01_000001_import_install_sql'], + ['migration' => '2018_01_01_000002_import_update_sql'], + ['migration' => '2018_01_01_000003_fix_old_tables'], + ['migration' => '2018_01_01_000004_cleanup_group_privileges'], + ['migration' => '2018_01_01_000005_add_angel_supporter_permissions'], + ['migration' => '2018_12_27_000000_fix_missing_arrival_dates'], + ['migration' => '2019_09_07_000000_migrate_admin_schedule_permissions'], + ] + ); $migration->run(__DIR__ . '/../../db/migrations'); } diff --git a/tests/Unit/Helpers/Schedule/Assets/schedule.xml b/tests/Unit/Helpers/Schedule/Assets/schedule.xml new file mode 100644 index 00000000..45aaaf35 --- /dev/null +++ b/tests/Unit/Helpers/Schedule/Assets/schedule.xml @@ -0,0 +1,46 @@ +<?xml version='1.0' encoding='utf-8' ?> +<schedule> + <version>Some version string</version> + <conference> + <title>Test Event</title> + <acronym>Test1</acronym> + <start>2042-01-01</start> + <end>2042-01-01</end> + <days>1</days> + <timeslot_duration>00:15</timeslot_duration> + <base_url>https://foo.bar/baz/schedule/</base_url> + </conference> + <day index='1' date='2042-01-01' start='2042-01-01T01:00:00+02:00' end='2042-01-01T22:59:00+02:00'> + <room name='Rooming'> + <event guid='e427cfa9-9ba1-4b14-a99f-bce83ffe5a1c' id='1337'> + <date>2042-01-01T12:30:00+02:00</date> + <title>Foo Bar Test</title> + <subtitle>Some sub</subtitle> + <start>12:30</start> + <duration>00:30</duration> + <room>Rooming</room> + <slug>foo-bar-test</slug> + <recording> + <license>WTFPL</license> + <optout>false</optout> + </recording> + <track>Testing</track> + <type>Talk</type> + <language>de</language> + <abstract>Foo bar is da best</abstract> + <description>Any describing stuff?</description> + <url>https://foo.bar/baz/schedule/ipsum</url> + <logo>https://lorem.ipsum/foo/bar.png</logo> + <persons> + <person id='1234'>Some Person</person> + </persons> + <links> + <link href="https://foo.bar">Some Foo Bar</link> + </links> + <attachments> + <attachment href="https://foo.bar/stuff.pdf">A PDF File</attachment> + </attachments> + </event> + </room> + </day> +</schedule> diff --git a/tests/Unit/Helpers/Schedule/CalculatesTimeTest.php b/tests/Unit/Helpers/Schedule/CalculatesTimeTest.php new file mode 100644 index 00000000..8f0123e9 --- /dev/null +++ b/tests/Unit/Helpers/Schedule/CalculatesTimeTest.php @@ -0,0 +1,33 @@ +<?php + +namespace Engelsystem\Test\Unit\Helpers\Schedule; + +use Engelsystem\Helpers\Schedule\CalculatesTime; +use Engelsystem\Test\Unit\TestCase; + +class CalculatesTimeTest extends TestCase +{ + /** + * @covers \Engelsystem\Helpers\Schedule\CalculatesTime::secondsFromTime + */ + public function testSecondsFromTime() + { + $calc = new class { + use CalculatesTime; + + /** + * @param string $time + * @return int + */ + public function calc(string $time): int + { + return $this->secondsFromTime($time); + } + }; + + $this->assertEquals(0, $calc->calc('0:00')); + $this->assertEquals(60, $calc->calc('0:01')); + $this->assertEquals(60 * 60, $calc->calc('01:00')); + $this->assertEquals(60 * 60 * 10 + 60 * 11, $calc->calc('10:11')); + } +} diff --git a/tests/Unit/Helpers/Schedule/ConferenceTest.php b/tests/Unit/Helpers/Schedule/ConferenceTest.php new file mode 100644 index 00000000..959e272b --- /dev/null +++ b/tests/Unit/Helpers/Schedule/ConferenceTest.php @@ -0,0 +1,49 @@ +<?php + +namespace Engelsystem\Test\Unit\Helpers\Schedule; + +use Engelsystem\Helpers\Schedule\Conference; +use Engelsystem\Test\Unit\TestCase; + +class ConferenceTest extends TestCase +{ + /** + * @covers \Engelsystem\Helpers\Schedule\Conference::__construct + * @covers \Engelsystem\Helpers\Schedule\Conference::getTitle + * @covers \Engelsystem\Helpers\Schedule\Conference::getAcronym + * @covers \Engelsystem\Helpers\Schedule\Conference::getStart + * @covers \Engelsystem\Helpers\Schedule\Conference::getEnd + * @covers \Engelsystem\Helpers\Schedule\Conference::getDays + * @covers \Engelsystem\Helpers\Schedule\Conference::getTimeslotDuration + * @covers \Engelsystem\Helpers\Schedule\Conference::getTimeslotDurationSeconds + * @covers \Engelsystem\Helpers\Schedule\Conference::getBaseUrl + */ + public function testCreate() + { + $conference = new Conference('Doing stuff', 'DS'); + $this->assertEquals('Doing stuff', $conference->getTitle()); + $this->assertEquals('DS', $conference->getAcronym()); + $this->assertNull($conference->getStart()); + $this->assertNull($conference->getEnd()); + $this->assertNull($conference->getDays()); + $this->assertNull($conference->getTimeslotDuration()); + $this->assertNull($conference->getTimeslotDurationSeconds()); + $this->assertNull($conference->getBaseUrl()); + + $conference = new Conference( + 'Doing stuff', + 'DS', + '2042-01-01', + '2042-01-10', + 10, + '00:10', + 'https://foo.bar/schedule' + ); + $this->assertEquals('2042-01-01', $conference->getStart()); + $this->assertEquals('2042-01-10', $conference->getEnd()); + $this->assertEquals(10, $conference->getDays()); + $this->assertEquals('00:10', $conference->getTimeslotDuration()); + $this->assertEquals(60 * 10, $conference->getTimeslotDurationSeconds()); + $this->assertEquals('https://foo.bar/schedule', $conference->getBaseUrl()); + } +} diff --git a/tests/Unit/Helpers/Schedule/DayTest.php b/tests/Unit/Helpers/Schedule/DayTest.php new file mode 100644 index 00000000..65704181 --- /dev/null +++ b/tests/Unit/Helpers/Schedule/DayTest.php @@ -0,0 +1,47 @@ +<?php + +namespace Engelsystem\Test\Unit\Helpers\Schedule; + +use Carbon\Carbon; +use Engelsystem\Helpers\Schedule\Day; +use Engelsystem\Helpers\Schedule\Room; +use Engelsystem\Test\Unit\TestCase; + +class DayTest extends TestCase +{ + /** + * @covers \Engelsystem\Helpers\Schedule\Day::__construct + * @covers \Engelsystem\Helpers\Schedule\Day::getDate + * @covers \Engelsystem\Helpers\Schedule\Day::getStart + * @covers \Engelsystem\Helpers\Schedule\Day::getEnd + * @covers \Engelsystem\Helpers\Schedule\Day::getIndex + * @covers \Engelsystem\Helpers\Schedule\Day::getRoom + */ + public function testCreate() + { + $day = new Day( + '2000-01-01', + new Carbon('2000-01-01T03:00:00+01:00'), + new Carbon('2000-01-02T05:59:00+00:00'), + 1 + ); + $this->assertEquals('2000-01-01', $day->getDate()); + $this->assertEquals('2000-01-01T03:00:00+01:00', $day->getStart()->format(Carbon::RFC3339)); + $this->assertEquals('2000-01-02T05:59:00+00:00', $day->getEnd()->format(Carbon::RFC3339)); + $this->assertEquals(1, $day->getIndex()); + $this->assertEquals([], $day->getRoom()); + + $rooms = [ + new Room('Foo'), + new Room('Bar'), + ]; + $day = new Day( + '2001-01-01', + new Carbon('2001-01-01T03:00:00+01:00'), + new Carbon('2001-01-02T05:59:00+00:00'), + 1, + $rooms + ); + $this->assertEquals($rooms, $day->getRoom()); + } +} diff --git a/tests/Unit/Helpers/Schedule/EventTest.php b/tests/Unit/Helpers/Schedule/EventTest.php new file mode 100644 index 00000000..d9706b13 --- /dev/null +++ b/tests/Unit/Helpers/Schedule/EventTest.php @@ -0,0 +1,149 @@ +<?php + +namespace Engelsystem\Test\Unit\Helpers\Schedule; + +use Carbon\Carbon; +use Engelsystem\Helpers\Schedule\Event; +use Engelsystem\Helpers\Schedule\Room; +use Engelsystem\Test\Unit\TestCase; + +class EventTest extends TestCase +{ + /** + * @covers \Engelsystem\Helpers\Schedule\Event::__construct + * @covers \Engelsystem\Helpers\Schedule\Event::getGuid + * @covers \Engelsystem\Helpers\Schedule\Event::getId + * @covers \Engelsystem\Helpers\Schedule\Event::getRoom + * @covers \Engelsystem\Helpers\Schedule\Event::getTitle + * @covers \Engelsystem\Helpers\Schedule\Event::getSubtitle + * @covers \Engelsystem\Helpers\Schedule\Event::getType + * @covers \Engelsystem\Helpers\Schedule\Event::getDate + * @covers \Engelsystem\Helpers\Schedule\Event::getStart + * @covers \Engelsystem\Helpers\Schedule\Event::getDuration + * @covers \Engelsystem\Helpers\Schedule\Event::getDurationSeconds + * @covers \Engelsystem\Helpers\Schedule\Event::getAbstract + * @covers \Engelsystem\Helpers\Schedule\Event::getSlug + * @covers \Engelsystem\Helpers\Schedule\Event::getTrack + * @covers \Engelsystem\Helpers\Schedule\Event::getLogo + * @covers \Engelsystem\Helpers\Schedule\Event::getPersons + * @covers \Engelsystem\Helpers\Schedule\Event::getLanguage + * @covers \Engelsystem\Helpers\Schedule\Event::getDescription + * @covers \Engelsystem\Helpers\Schedule\Event::getRecording + * @covers \Engelsystem\Helpers\Schedule\Event::getLinks + * @covers \Engelsystem\Helpers\Schedule\Event::getAttachments + * @covers \Engelsystem\Helpers\Schedule\Event::getUrl + * @covers \Engelsystem\Helpers\Schedule\Event::getVideoDownloadUrl + * @covers \Engelsystem\Helpers\Schedule\Event::getEndDate + */ + public function testCreate() + { + $room = new Room('Foo'); + $date = new Carbon('2020-12-28T19:30:00+00:00'); + $event = new Event( + '0-1-2-3', + 1, + $room, + 'Some stuff', + 'sub stuff', + 'Talk', + $date, + '19:30:00', + '00:50', + 'Doing stuff is hard, plz try again', + '1-some-stuff', + 'Security' + ); + + $this->assertEquals('0-1-2-3', $event->getGuid()); + $this->assertEquals(1, $event->getId()); + $this->assertEquals($room, $event->getRoom()); + $this->assertEquals('Some stuff', $event->getTitle()); + $this->assertEquals('sub stuff', $event->getSubtitle()); + $this->assertEquals('Talk', $event->getType()); + $this->assertEquals($date, $event->getDate()); + $this->assertEquals('19:30:00', $event->getStart()); + $this->assertEquals('00:50', $event->getDuration()); + $this->assertEquals('Doing stuff is hard, plz try again', $event->getAbstract()); + $this->assertEquals('1-some-stuff', $event->getSlug()); + $this->assertEquals('Security', $event->getTrack()); + $this->assertNull($event->getLogo()); + $this->assertEquals([], $event->getPersons()); + $this->assertNull($event->getLanguage()); + $this->assertNull($event->getDescription()); + $this->assertEquals('', $event->getRecording()); + $this->assertEquals([], $event->getLinks()); + $this->assertEquals([], $event->getAttachments()); + $this->assertNull($event->getUrl()); + $this->assertNull($event->getVideoDownloadUrl()); + $this->assertEquals('2020-12-28T20:20:00+00:00', $event->getEndDate()->format(Carbon::RFC3339)); + } + + /** + * @covers \Engelsystem\Helpers\Schedule\Event::__construct + * @covers \Engelsystem\Helpers\Schedule\Event::getGuid + * @covers \Engelsystem\Helpers\Schedule\Event::getId + * @covers \Engelsystem\Helpers\Schedule\Event::getRoom + * @covers \Engelsystem\Helpers\Schedule\Event::getTitle + * @covers \Engelsystem\Helpers\Schedule\Event::setTitle + * @covers \Engelsystem\Helpers\Schedule\Event::getSubtitle + * @covers \Engelsystem\Helpers\Schedule\Event::getType + * @covers \Engelsystem\Helpers\Schedule\Event::getDate + * @covers \Engelsystem\Helpers\Schedule\Event::getStart + * @covers \Engelsystem\Helpers\Schedule\Event::getDuration + * @covers \Engelsystem\Helpers\Schedule\Event::getDurationSeconds + * @covers \Engelsystem\Helpers\Schedule\Event::getAbstract + * @covers \Engelsystem\Helpers\Schedule\Event::getSlug + * @covers \Engelsystem\Helpers\Schedule\Event::getTrack + * @covers \Engelsystem\Helpers\Schedule\Event::getLogo + * @covers \Engelsystem\Helpers\Schedule\Event::getPersons + * @covers \Engelsystem\Helpers\Schedule\Event::getLanguage + * @covers \Engelsystem\Helpers\Schedule\Event::getDescription + * @covers \Engelsystem\Helpers\Schedule\Event::getRecording + * @covers \Engelsystem\Helpers\Schedule\Event::getLinks + * @covers \Engelsystem\Helpers\Schedule\Event::getAttachments + * @covers \Engelsystem\Helpers\Schedule\Event::getUrl + * @covers \Engelsystem\Helpers\Schedule\Event::getVideoDownloadUrl + */ + public function testCreateNotDefault() + { + $persons = [1337 => 'Some Person']; + $links = ['https://foo.bar' => 'Foo Bar']; + $attachments = ['/files/foo.pdf' => 'Suspicious PDF']; + $event = new Event( + '3-2-1-0', + 2, + new Room('Bar'), + 'Lorem', + 'Ipsum', + 'Workshop', + new Carbon('2021-01-01T00:00:00+00:00'), + '00:00:00', + '00:30', + 'Lorem ipsum dolor sit amet', + '2-lorem', + 'DevOps', + '/foo/bar.png', + $persons, + 'de', + 'Foo bar is awesome! & That\'s why...', + 'CC BY SA', + $links, + $attachments, + 'https://foo.bar/2-lorem', + 'https://videos.orem.ipsum/2-lorem.mp4' + ); + + $this->assertEquals('/foo/bar.png', $event->getLogo()); + $this->assertEquals($persons, $event->getPersons()); + $this->assertEquals('de', $event->getLanguage()); + $this->assertEquals('Foo bar is awesome! & That\'s why...', $event->getDescription()); + $this->assertEquals('CC BY SA', $event->getRecording()); + $this->assertEquals($links, $event->getLinks()); + $this->assertEquals($attachments, $event->getAttachments()); + $this->assertEquals('https://foo.bar/2-lorem', $event->getUrl()); + $this->assertEquals('https://videos.orem.ipsum/2-lorem.mp4', $event->getVideoDownloadUrl()); + + $event->setTitle('Event title'); + $this->assertEquals('Event title', $event->getTitle()); + } +} diff --git a/tests/Unit/Helpers/Schedule/RoomTest.php b/tests/Unit/Helpers/Schedule/RoomTest.php new file mode 100644 index 00000000..8b9b600a --- /dev/null +++ b/tests/Unit/Helpers/Schedule/RoomTest.php @@ -0,0 +1,31 @@ +<?php + +namespace Engelsystem\Test\Unit\Helpers\Schedule; + +use Engelsystem\Helpers\Schedule\Event; +use Engelsystem\Helpers\Schedule\Room; +use Engelsystem\Test\Unit\TestCase; + +class RoomTest extends TestCase +{ + /** + * @covers \Engelsystem\Helpers\Schedule\Room::__construct + * @covers \Engelsystem\Helpers\Schedule\Room::getName + * @covers \Engelsystem\Helpers\Schedule\Room::getEvent + * @covers \Engelsystem\Helpers\Schedule\Room::setEvent + */ + public function testCreate() + { + $room = new Room('Test'); + $this->assertEquals('Test', $room->getName()); + $this->assertEquals([], $room->getEvent()); + + $events = [$this->createMock(Event::class), $this->createMock(Event::class)]; + $events2 = [$this->createMock(Event::class)]; + $room = new Room('Test2', $events); + $this->assertEquals($events, $room->getEvent()); + + $room->setEvent($events2); + $this->assertEquals($events2, $room->getEvent()); + } +} diff --git a/tests/Unit/Helpers/Schedule/ScheduleTest.php b/tests/Unit/Helpers/Schedule/ScheduleTest.php new file mode 100644 index 00000000..6a3634cf --- /dev/null +++ b/tests/Unit/Helpers/Schedule/ScheduleTest.php @@ -0,0 +1,112 @@ +<?php + +namespace Engelsystem\Test\Unit\Helpers\Schedule; + +use Carbon\Carbon; +use Engelsystem\Helpers\Schedule\Conference; +use Engelsystem\Helpers\Schedule\Day; +use Engelsystem\Helpers\Schedule\Room; +use Engelsystem\Helpers\Schedule\Schedule; +use Engelsystem\Test\Unit\HasDatabase; +use Engelsystem\Test\Unit\TestCase; + +class ScheduleTest extends TestCase +{ + use HasDatabase; + + /** + * @covers \Engelsystem\Helpers\Schedule\Schedule::__construct + * @covers \Engelsystem\Helpers\Schedule\Schedule::getVersion + * @covers \Engelsystem\Helpers\Schedule\Schedule::getConference + * @covers \Engelsystem\Helpers\Schedule\Schedule::getDay + */ + public function testCreate() + { + $conference = new Conference('Foo Bar', 'FooB'); + $days = [$this->createMock(Day::class)]; + $schedule = new Schedule('Foo\'ing stuff 1.0', $conference, $days); + + $this->assertEquals('Foo\'ing stuff 1.0', $schedule->getVersion()); + $this->assertEquals($conference, $schedule->getConference()); + $this->assertEquals($days, $schedule->getDay()); + } + + /** + * @covers \Engelsystem\Helpers\Schedule\Schedule::getRooms + */ + public function testGetRooms() + { + $conference = new Conference('Test', 'T'); + $room1 = new Room('Test 1'); + $room2 = new Room('Test 2'); + $room3 = new Room('Test 3'); + $days = [ + new Day( + '2042-01-01', + new Carbon('2042-01-01T00:00:00+00:00'), + new Carbon('2042-01-01T23:59:00+00:00'), + 1, + [$room1, $room2] + ), + new Day( + '2042-01-02', + new Carbon('2042-02-01T00:00:00+00:00'), + new Carbon('2042-02-01T23:59:00+00:00'), + 2, + [new Room('Test 2'), $room3] + ), + ]; + $schedule = new Schedule('Lorem 1.3.3.7', $conference, $days); + + $this->assertEquals(['Test 1' => $room1, 'Test 2' => $room2, 'Test 3' => $room3], $schedule->getRooms()); + + $schedule = new Schedule('Lorem 1.3.3.0', $conference, []); + $this->assertEquals([], $schedule->getRooms()); + } + + /** + * @covers \Engelsystem\Helpers\Schedule\Schedule::getStartDateTime + * @covers \Engelsystem\Helpers\Schedule\Schedule::getEndDateTime + */ + public function testGetDateTimes() + { + $conference = new Conference('Some Conference', 'SC'); + $days = [ + new Day( + '2042-01-02', + new Carbon('2042-01-02T00:00:00+00:00'), + new Carbon('2042-01-02T23:59:00+00:00'), + 2 + ), + new Day( + '2042-01-01', + new Carbon('2042-01-01T00:00:00+00:00'), + new Carbon('2042-01-01T23:59:00+00:00'), + 1 + ), + new Day( + '2042-01-04', + new Carbon('2042-01-04T00:00:00+00:00'), + new Carbon('2042-01-04T23:59:00+00:00'), + 3 + ), + ]; + $schedule = new Schedule('Ipsum tester', $conference, $days); + + $this->assertEquals('2042-01-01T00:00:00+00:00', $schedule->getStartDateTime()->format(Carbon::RFC3339)); + $this->assertEquals('2042-01-04T23:59:00+00:00', $schedule->getEndDateTime()->format(Carbon::RFC3339)); + + $schedule = new Schedule('Ipsum old', $conference, []); + $this->assertNull($schedule->getStartDateTime()); + $this->assertNull($schedule->getEndDateTime()); + } + + /** + * Prepare test + */ + protected function setUp(): void + { + parent::setUp(); + $this->initDatabase(); + } +} diff --git a/tests/Unit/Helpers/Schedule/XmlParserTest.php b/tests/Unit/Helpers/Schedule/XmlParserTest.php new file mode 100644 index 00000000..023e9c7d --- /dev/null +++ b/tests/Unit/Helpers/Schedule/XmlParserTest.php @@ -0,0 +1,54 @@ +<?php + +namespace Engelsystem\Test\Unit\Helpers\Schedule; + +use Engelsystem\Helpers\Schedule\Day; +use Engelsystem\Helpers\Schedule\Event; +use Engelsystem\Helpers\Schedule\Room; +use Engelsystem\Helpers\Schedule\XmlParser; +use Engelsystem\Test\Unit\TestCase; +use Illuminate\Support\Arr; + +class XmlParserTest extends TestCase +{ + /** + * @covers \Engelsystem\Helpers\Schedule\XmlParser::load + * @covers \Engelsystem\Helpers\Schedule\XmlParser::parseXml + * @covers \Engelsystem\Helpers\Schedule\XmlParser::parseEvents + * @covers \Engelsystem\Helpers\Schedule\XmlParser::getFirstXpathContent + * @covers \Engelsystem\Helpers\Schedule\XmlParser::getListFromSequence + * @covers \Engelsystem\Helpers\Schedule\XmlParser::getSchedule + */ + public function testLoad() + { + libxml_use_internal_errors(true); + + $parser = new XmlParser(); + $this->assertFalse($parser->load('foo')); + $this->assertTrue($parser->load(file_get_contents(__DIR__ . '/Assets/schedule.xml'))); + + $schedule = $parser->getSchedule(); + $this->assertEquals('Some version string', $schedule->getVersion()); + $this->assertEquals('Test Event', $schedule->getConference()->getTitle()); + + /** @var Room $room */ + $room = Arr::first($schedule->getRooms()); + $this->assertEquals('Rooming', $room->getName()); + + /** @var Day $day */ + $day = Arr::first($schedule->getDay()); + $this->assertEquals('2042-01-01', $day->getDate()); + $this->assertEquals(1, $day->getIndex()); + + /** @var Room $room */ + $room = Arr::first($day->getRoom()); + /** @var Event $event */ + $event = Arr::first($room->getEvent()); + + $this->assertEquals('Foo Bar Test', $event->getTitle()); + $this->assertEquals('WTFPL', $event->getRecording()); + $this->assertEquals('de', $event->getLanguage()); + $this->assertEquals('12:30', $event->getStart()); + $this->assertEquals([1234 => 'Some Person'], $event->getPersons()); + } +} diff --git a/tests/Unit/HelpersTest.php b/tests/Unit/HelpersTest.php index 09362a90..710deff5 100644 --- a/tests/Unit/HelpersTest.php +++ b/tests/Unit/HelpersTest.php @@ -7,6 +7,7 @@ use Engelsystem\Config\Config; use Engelsystem\Container\Container; use Engelsystem\Helpers\Authenticator; use Engelsystem\Helpers\Translation\Translator; +use Engelsystem\Http\Redirector; use Engelsystem\Http\Request; use Engelsystem\Http\Response; use Engelsystem\Http\UrlGeneratorInterface; @@ -99,6 +100,29 @@ class HelpersTest extends TestCase } /** + * @covers \back + */ + public function testBack() + { + $response = new Response(); + /** @var Redirector|MockObject $redirect */ + $redirect = $this->createMock(Redirector::class); + $redirect->expects($this->exactly(2)) + ->method('back') + ->withConsecutive([302, []], [303, ['test' => 'ing']]) + ->willReturn($response); + + $app = new Application(); + $app->instance('redirect', $redirect); + + $return = back(); + $this->assertEquals($response, $return); + + $return = back(303, ['test' => 'ing']); + $this->assertEquals($response, $return); + } + + /** * @covers \config_path */ public function testConfigPath() @@ -118,6 +142,29 @@ class HelpersTest extends TestCase } /** + * @covers \redirect + */ + public function testRedirect() + { + $response = new Response(); + /** @var Redirector|MockObject $redirect */ + $redirect = $this->createMock(Redirector::class); + $redirect->expects($this->exactly(2)) + ->method('to') + ->withConsecutive(['/lorem', 302, []], ['/ipsum', 303, ['test' => 'er']]) + ->willReturn($response); + + $app = new Application(); + $app->instance('redirect', $redirect); + + $return = redirect('/lorem'); + $this->assertEquals($response, $return); + + $return = redirect('/ipsum', 303, ['test' => 'er']); + $this->assertEquals($response, $return); + } + + /** * @covers \request */ public function testRequest() diff --git a/tests/Unit/Http/HttpClientServiceProviderTest.php b/tests/Unit/Http/HttpClientServiceProviderTest.php new file mode 100644 index 00000000..7dfc0a3e --- /dev/null +++ b/tests/Unit/Http/HttpClientServiceProviderTest.php @@ -0,0 +1,29 @@ +<?php + +namespace Engelsystem\Test\Unit\Http; + +use Engelsystem\Application; +use Engelsystem\Http\HttpClientServiceProvider; +use Engelsystem\Test\Unit\ServiceProviderTest; +use GuzzleHttp\Client as GuzzleClient; + +class HttpClientServiceProviderTest extends ServiceProviderTest +{ + /** + * @covers \Engelsystem\Http\HttpClientServiceProvider::register + */ + public function testRegister() + { + $app = new Application(); + + $serviceProvider = new HttpClientServiceProvider($app); + $serviceProvider->register(); + + /** @var GuzzleClient $guzzle */ + $guzzle = $app->make(GuzzleClient::class); + $config = $guzzle->getConfig(); + + $this->assertFalse($config['http_errors']); + $this->assertArrayHasKey('timeout', $config); + } +} diff --git a/tests/Unit/Http/RedirectServiceProviderTest.php b/tests/Unit/Http/RedirectServiceProviderTest.php new file mode 100644 index 00000000..9c2a07fc --- /dev/null +++ b/tests/Unit/Http/RedirectServiceProviderTest.php @@ -0,0 +1,23 @@ +<?php + +namespace Engelsystem\Test\Unit\Http; + +use Engelsystem\Application; +use Engelsystem\Http\RedirectServiceProvider; +use Engelsystem\Test\Unit\ServiceProviderTest; + +class RedirectServiceProviderTest extends ServiceProviderTest +{ + /** + * @covers \Engelsystem\Http\RedirectServiceProvider::register + */ + public function testRegister() + { + $app = new Application(); + + $serviceProvider = new RedirectServiceProvider($app); + $serviceProvider->register(); + + $this->assertTrue($app->has('redirect')); + } +} diff --git a/tests/Unit/Http/RedirectorTest.php b/tests/Unit/Http/RedirectorTest.php new file mode 100644 index 00000000..300b0180 --- /dev/null +++ b/tests/Unit/Http/RedirectorTest.php @@ -0,0 +1,53 @@ +<?php + +namespace Engelsystem\Test\Unit\Http; + +use Engelsystem\Http\Redirector; +use Engelsystem\Http\Request; +use Engelsystem\Http\Response; +use PHPUnit\Framework\TestCase; + +class RedirectorTest extends TestCase +{ + /** + * @covers \Engelsystem\Http\Redirector::__construct + * @covers \Engelsystem\Http\Redirector::to + */ + public function testTo() + { + $request = new Request(); + $response = new Response(); + $redirector = new Redirector($request, $response); + + $return = $redirector->to('/test'); + $this->assertEquals(['/test'], $return->getHeader('location')); + $this->assertEquals(302, $return->getStatusCode()); + + $return = $redirector->to('/foo', 303, ['test' => 'data']); + $this->assertEquals(['/foo'], $return->getHeader('location')); + $this->assertEquals(303, $return->getStatusCode()); + $this->assertEquals(['data'], $return->getHeader('test')); + } + + /** + * @covers \Engelsystem\Http\Redirector::back + * @covers \Engelsystem\Http\Redirector::getPreviousUrl + */ + public function testBack() + { + $request = new Request(); + $response = new Response(); + $redirector = new Redirector($request, $response); + + $return = $redirector->back(); + $this->assertEquals(['/'], $return->getHeader('location')); + $this->assertEquals(302, $return->getStatusCode()); + + $request = $request->withHeader('referer', '/old-page'); + $redirector = new Redirector($request, $response); + $return = $redirector->back(303, ['foo' => 'bar']); + $this->assertEquals(303, $return->getStatusCode()); + $this->assertEquals(['/old-page'], $return->getHeader('location')); + $this->assertEquals(['bar'], $return->getHeader('foo')); + } +} diff --git a/tests/Unit/Http/ResponseTest.php b/tests/Unit/Http/ResponseTest.php index b8e6e527..56d8410f 100644 --- a/tests/Unit/Http/ResponseTest.php +++ b/tests/Unit/Http/ResponseTest.php @@ -10,6 +10,8 @@ use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ResponseInterface; use Symfony\Component\HttpFoundation\Response as SymfonyResponse; +use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; class ResponseTest extends TestCase { @@ -116,4 +118,59 @@ class ResponseTest extends TestCase $newResponse->getHeaders() ); } + + /** + * @covers \Engelsystem\Http\Response::with + */ + public function testWith() + { + $session = new Session(new MockArraySessionStorage()); + $response = new Response('', 200, [], null, $session); + + $response->with('foo', 'bar'); + $this->assertEquals('bar', $session->get('foo')); + + $response->with('lorem', ['ipsum', 'dolor' => ['foo' => 'bar']]); + $this->assertEquals(['ipsum', 'dolor' => ['foo' => 'bar']], $session->get('lorem')); + + $response->with('lorem', ['dolor' => ['test' => 'er']]); + $this->assertEquals(['ipsum', 'dolor' => ['foo' => 'bar', 'test' => 'er']], $session->get('lorem')); + } + + /** + * @covers \Engelsystem\Http\Response::with + */ + public function testWithNoSession() + { + $this->expectException(InvalidArgumentException::class); + + $response = new Response(); + $response->with('foo', 'bar'); + } + + /** + * @covers \Engelsystem\Http\Response::withInput + */ + public function testWithInput() + { + $session = new Session(new MockArraySessionStorage()); + $response = new Response('', 200, [], null, $session); + + $response->withInput(['some' => 'value']); + $this->assertEquals(['some' => 'value'], $session->get('form-data')); + + $response->withInput(['lorem' => 'ipsum']); + $this->assertEquals(['lorem' => 'ipsum'], $session->get('form-data')); + } + + /** + * @covers \Engelsystem\Http\Response::withInput + */ + public function testWithInputNoSession() + { + $this->expectException(InvalidArgumentException::class); + + $response = new Response(); + $response->withInput(['some' => 'value']); + } } diff --git a/tests/Unit/Middleware/ErrorHandlerTest.php b/tests/Unit/Middleware/ErrorHandlerTest.php index ef2f7be0..91b59507 100644 --- a/tests/Unit/Middleware/ErrorHandlerTest.php +++ b/tests/Unit/Middleware/ErrorHandlerTest.php @@ -6,6 +6,7 @@ use Engelsystem\Application; use Engelsystem\Http\Exceptions\HttpException; use Engelsystem\Http\Exceptions\ValidationException; use Engelsystem\Http\Psr7ServiceProvider; +use Engelsystem\Http\RedirectServiceProvider; use Engelsystem\Http\Request; use Engelsystem\Http\Response; use Engelsystem\Http\ResponseServiceProvider; @@ -18,6 +19,7 @@ use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; use Twig\Loader\LoaderInterface as TwigLoader; @@ -155,7 +157,7 @@ class ErrorHandlerTest extends TestCase /** * @covers \Engelsystem\Middleware\ErrorHandler::process - * @covers \Engelsystem\Middleware\ErrorHandler::getPreviousUrl + * @covers \Engelsystem\Middleware\ErrorHandler::redirectBack */ public function testProcessValidationException() { @@ -185,11 +187,13 @@ class ErrorHandlerTest extends TestCase /** @var Application $app */ $app = app(); + $app->instance(Session::class, $session); + $app->bind(SessionInterface::class, Session::class); (new ResponseServiceProvider($app))->register(); (new Psr7ServiceProvider($app))->register(); + (new RedirectServiceProvider($app))->register(); $errorHandler = new ErrorHandler($twigLoader); - $return = $errorHandler->process($request, $handler); $this->assertEquals(302, $return->getStatusCode()); @@ -209,6 +213,7 @@ class ErrorHandlerTest extends TestCase ], $session->all()); $request = $request->withAddedHeader('referer', '/foo/batz'); + $app->instance(Request::class, $request); $return = $errorHandler->process($request, $handler); $this->assertEquals('/foo/batz', $return->getHeaderLine('location')); diff --git a/tests/Unit/Models/Shifts/ScheduleShiftTest.php b/tests/Unit/Models/Shifts/ScheduleShiftTest.php new file mode 100644 index 00000000..b615f90d --- /dev/null +++ b/tests/Unit/Models/Shifts/ScheduleShiftTest.php @@ -0,0 +1,41 @@ +<?php + +namespace Engelsystem\Test\Unit\Models\Shifts; + +use Engelsystem\Models\Shifts\Schedule; +use Engelsystem\Models\Shifts\ScheduleShift; +use Engelsystem\Test\Unit\HasDatabase; +use Engelsystem\Test\Unit\TestCase; +use Illuminate\Database\Eloquent\Relations\BelongsTo; + +class ScheduleShiftTest extends TestCase +{ + use HasDatabase; + + /** + * @covers \Engelsystem\Models\Shifts\ScheduleShift::schedule + */ + public function testScheduleShifts() + { + $schedule = new Schedule(['url' => 'https://lorem.ipsum/schedule.xml']); + $schedule->save(); + + $scheduleShift = new ScheduleShift(['shift_id' => 1, 'guid' => 'a']); + $scheduleShift->schedule()->associate($schedule); + $scheduleShift->save(); + + /** @var ScheduleShift $scheduleShift */ + $scheduleShift = (new ScheduleShift())->find(1); + $this->assertInstanceOf(BelongsTo::class, $scheduleShift->schedule()); + $this->assertEquals($schedule->id, $scheduleShift->schedule->id); + } + + /** + * Prepare test + */ + protected function setUp(): void + { + parent::setUp(); + $this->initDatabase(); + } +} diff --git a/tests/Unit/Models/Shifts/ScheduleTest.php b/tests/Unit/Models/Shifts/ScheduleTest.php new file mode 100644 index 00000000..34988afd --- /dev/null +++ b/tests/Unit/Models/Shifts/ScheduleTest.php @@ -0,0 +1,37 @@ +<?php + +namespace Engelsystem\Test\Unit\Models\Shifts; + +use Engelsystem\Models\Shifts\Schedule; +use Engelsystem\Models\Shifts\ScheduleShift; +use Engelsystem\Test\Unit\HasDatabase; +use Engelsystem\Test\Unit\TestCase; + +class ScheduleTest extends TestCase +{ + use HasDatabase; + + /** + * @covers \Engelsystem\Models\Shifts\Schedule::scheduleShifts + */ + public function testScheduleShifts() + { + $schedule = new Schedule(['url' => 'https://foo.bar/schedule.xml']); + $schedule->save(); + + (new ScheduleShift(['shift_id' => 1, 'schedule_id' => $schedule->id, 'guid' => 'a']))->save(); + (new ScheduleShift(['shift_id' => 2, 'schedule_id' => $schedule->id, 'guid' => 'b']))->save(); + (new ScheduleShift(['shift_id' => 3, 'schedule_id' => $schedule->id, 'guid' => 'c']))->save(); + + $this->assertCount(3, $schedule->scheduleShifts); + } + + /** + * Prepare test + */ + protected function setUp(): void + { + parent::setUp(); + $this->initDatabase(); + } +} |