From 4a66ff3c48c8388cdc164e7ba3ef26b2f4c5ec75 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+github@gmail.com> Date: Fri, 15 Jul 2022 10:22:26 +0200 Subject: [PATCH] fix fallout from 769675071b44cff1f699396270b378d189ada866 and provide test for variable assignments in StudipController, re #1328 --- app/controllers/calendar/single.php | 1 + .../studip_controller_properties_trait.php | 8 +++-- .../unit/lib/classes/StudipControllerTest.php | 36 +++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/controllers/calendar/single.php b/app/controllers/calendar/single.php index e2ea4c7e9d2..6cfc133dc27 100644 --- a/app/controllers/calendar/single.php +++ b/app/controllers/calendar/single.php @@ -98,6 +98,7 @@ class Calendar_SingleController extends Calendar_CalendarController $timestamp = mktime(12, 0, 0, date('n', $this->atime), date('j', $this->atime), date('Y', $this->atime)); $monday = $timestamp - 86400 * (strftime('%u', $timestamp) - 1); $day_count = $this->settings['type_week'] == 'SHORT' ? 5 : 7; + $this->calendars = []; for ($i = 0; $i < $day_count; $i++) { $this->calendars[$i] = SingleCalendar::getDayCalendar( diff --git a/app/controllers/studip_controller_properties_trait.php b/app/controllers/studip_controller_properties_trait.php index 4246da05f98..fb3b68d57d6 100644 --- a/app/controllers/studip_controller_properties_trait.php +++ b/app/controllers/studip_controller_properties_trait.php @@ -42,9 +42,13 @@ trait StudipControllerPropertiesTrait * @param string $offset * @return mixed */ - public function __get(string $offset) + public function &__get(string $offset) { - return $this->_template_variables[$offset] ?? null; + $result = null; + if (isset($this->_template_variables[$offset])) { + $result = &$this->_template_variables[$offset]; + } + return $result; } /** diff --git a/tests/unit/lib/classes/StudipControllerTest.php b/tests/unit/lib/classes/StudipControllerTest.php index 532116677ae..2b25bc4435f 100644 --- a/tests/unit/lib/classes/StudipControllerTest.php +++ b/tests/unit/lib/classes/StudipControllerTest.php @@ -182,6 +182,42 @@ final class StudipControllerTest extends Codeception\Test\Unit $this->getController()->relocate(...$args); } + public function testVariableAssignment(): void + { + $controller = $this->getController(); + + // Set and test assignments + $controller->foo = 'bar'; + $this->assertEquals('bar', $controller->foo); + + $controller->bar = 42; + $this->assertEquals(42, $controller->bar); + + $controller->baz = []; + $controller->baz[] = 23; + $this->assertEquals([23], $controller->baz); + + // Test fetching all variables + $variables = $controller->get_assigned_variables(); + + $this->assertIsArray($variables); + + // - Implicit variables + $this->assertArrayHasKey('controller', $variables); + $this->assertArrayHasKey('current_action', $variables); + + // - Explicit variables + $this->assertArrayHasKey('foo', $variables); + $this->assertEquals('bar', $variables['foo']); + + $this->assertArrayHasKey('bar', $variables); + $this->assertEquals(42, $variables['bar']); + + $this->assertArrayHasKey('baz', $variables); + $this->assertCount(1, $variables['baz']); + $this->assertEquals([23], $variables['baz']); + } + /** * Returns a relative url for Stud.IP if given url matches. */ -- GitLab