REBELinBLUE
3/30/2017 - 10:06 PM

QueryStringTest.php

<?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());
    }
}