Skip to content

Commit d5be2a0

Browse files
committed
Fix #55, improve tests
1 parent 62d0a33 commit d5be2a0

File tree

2 files changed

+40
-9
lines changed

2 files changed

+40
-9
lines changed

src/ColumnSortable/SortableLink.php

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,7 @@ public static function render(array $parameters)
3434

3535
$anchorClass = self::getAnchorClass();
3636

37-
$queryString = http_build_query(array_merge($queryParameters,
38-
array_filter(Request::except('sort', 'order', 'page'), 'strlen'), [
39-
'sort' => $sortParameter,
40-
'order' => $direction,
41-
]));
37+
$queryString = self::buildQueryString($queryParameters, $sortParameter, $direction);
4238

4339
return '<a'.$anchorClass.' href="'.url(Request::path().'?'.$queryString).'"'.'>'.htmlentities($title).$trailingTag;
4440
}
@@ -183,4 +179,27 @@ private static function getAnchorClass()
183179

184180
return '';
185181
}
182+
183+
184+
/**
185+
* @param $queryParameters
186+
* @param $sortParameter
187+
* @param $direction
188+
*
189+
* @return string
190+
*/
191+
private static function buildQueryString($queryParameters, $sortParameter, $direction)
192+
{
193+
$checkStrlenOrArray = function ($element) {
194+
return is_array($element) ? $element : strlen($element);
195+
};
196+
197+
$persistParameters = array_filter(Request::except('sort', 'order', 'page'), $checkStrlenOrArray);
198+
$queryString = http_build_query(array_merge($queryParameters, $persistParameters, [
199+
'sort' => $sortParameter,
200+
'order' => $direction,
201+
]));
202+
203+
return $queryString;
204+
}
186205
}

tests/SortableLinkTest.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,24 @@ class SortableLinkTest extends \Orchestra\Testbench\TestCase
1212

1313
public function testQueryStringParameterWithBooleanStaysInLink()
1414
{
15-
Request::replace(['key' => 0, 'another-key' => null, 'another-one' => 1]);
15+
$parameters = ['key' => 0, 'another-key' => null, 'another-one' => 1];
16+
Request::replace($parameters);
17+
18+
$link = SortableLink::render(['column']);
19+
$expected = http_build_query($parameters);
20+
21+
$this->assertContains($expected, $link);
22+
}
23+
24+
public function testQueryStringCanHoldArray()
25+
{
26+
$parameters = ['key' => ['part1', 'part2'], 'another-one' => 1];
27+
Request::replace($parameters);
28+
1629
$link = SortableLink::render(['column']);
30+
$expected = http_build_query($parameters);
1731

18-
$this->assertTrue(str_contains($link, ['key=0']));
19-
$this->assertTrue(str_contains($link, ['another-one=1']));
20-
$this->assertFalse(str_contains($link, ['another-key=null']));
32+
$this->assertContains($expected, $link);
2133
}
2234

2335

0 commit comments

Comments
 (0)