beznez's avatar

How do I send data in a POST call?

Hello all, I am making an API with Laravel 5 and I'm testing it with PHPUnit. I need to test legacy functionality for compatibility, which is an XML POST. As of right now, my first test looks like:

public function testPostMessages()
{
    $response = $this->call('POST', 'xml');

    $this->assertEquals(200, $response->getStatusCode());
}

This is passing just fine. Next on my list is actually sending the XML data with the POST. So for my second test, I have:

public function testPostMessagesContent()
{
    $response = $this->call('POST', 'xml');

    $this->assertTrue(is_valid_xml($response->getContent()));
}

This test fails. However, I am not sending my XML data. How do I send my XML?
Now, after that I need to add in the functionality to get the content from the request. I know there is a Request object that I can interact with but I don't exactly know which method to call on it. How do I get my XML from inside my controller?

0 likes
1 reply
beznez's avatar

Update: I was able to get some results in the meantime. My current test looks like this:

public function testPostMessagesContent()
{
    $response = $this->call('POST', 'xml', array('key' => 'value'), array(), array(), array('content' => 'content'));
    $this->assertContains('~', $response->getContent());
}

I only have the tilde there because I know it won't match so that I can see the whole response. In XmlController.php I have:

class XmlController extends Controller {
public function index(Request $request)
{
    return $request;
    }
}

My output from PHPUnit is as follows:

1) XmlTest::testPostMessagesContent
Failed asserting that 'POST xml HTTP/1.1
Accept:          text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Language: en-us,en;q=0.5
Content-Type:    application/x-www-form-urlencoded
Host:            localhost
User-Agent:      Symfony/2.X
' contains "~".

Where are my parameters and my content? I feel like I am simply just using call() incorrectly.

Please or to participate in this conversation.