<?php
use PHPUnit\Framework\TestCase;
class QueryStringTest extends TestCase
{
/** @test */
public function it_can_add_parameters()
{
// Arrange
$expected = 'foo=bar';
// Act
$query = new QueryString();
$query->add('foo', 'bar');
// Assert
$this->assertSame($expected, $query->build());
}
/** @test */
public function it_can_add_duplicate_parameters()
{
// Arrange
$expected = 'foo=bar&foo=baz';
// Act
$query = new QueryString();
$query->add('foo', 'bar');
$query->add('foo', 'baz');
// Assert
$this->assertSame($expected, $query->build());
}
/** @test */
public function it_can_add_multiple_parameters()
{
// Arrange
$expected = 'foo=bar&baz=qux';
// Act
$query = new QueryString();
$query->addMultiple([
'foo' => 'bar',
'baz' => 'qux',
]);
// Assert
$this->assertSame($expected, $query->build());
}
/** @test */
public function it_can_set_separator_and_equals_strings()
{
// Arrange
$expected = 'foo:bar;baz:qux';
// Act
$query = new QueryString();
$query->addMultiple([
'foo' => 'bar',
'baz' => 'qux',
]);
// Assert
$this->assertSame($expected, $query->build(';', ':'));
}
/** @test */
public function it_can_cast_to_string()
{
// Arrange
$expected = 'foo=bar&baz=qux';
// Act
$query = new QueryString();
$query->addMultiple([
'foo' => 'bar',
'baz' => 'qux',
]);
// Assert
$this->assertSame($expected, (string) $query);
$this->assertSame($query->build(), (string) $query);
}
/** @test */
public function it_encodes_parameters()
{
// Arrange
$expected = 'foo%5B%5D=b%26ar&qu+x=ba%2Bz&foo=bar&baz=qux';
// Act
$query = new QueryString();
$query->add('foo[]', 'b&ar');
$query->add('qu x', 'ba+z');
$query->addMultiple([
'foo' => 'bar',
'baz' => 'qux',
]);
// Assert
$this->assertSame($expected, $query->build());
}
/** @test */
public function it_can_create_a_query_string_in_order()
{
// Arrange
$expected = 'foo=bar&baz=corge&foo=bar&baz=qux&quuz=quuz&qux=baz';
// Act
$query = new QueryString();
$query->add('foo', 'bar');
$query->add('baz', 'corge');
$query->addMultiple([
'foo' => 'bar',
'baz' => 'qux',
]);
$query->add('quuz', 'quuz');
$query->add('qux', 'baz');
// Assert
$this->assertSame($expected, $query->build());
}
}