def test_submit_file_with_name_and_file_object(self):
        url = _url('/post')
        files = {'file': ('foo.txt', io.BytesIO(b'binarydata'))}
        response = nr.post(url, files=files)

        self.assertEqual(response.status_code, 200)

        data = response.json()
        self.assertEqual(data['files'], {'file': 'binarydata'})
    def test_json_keyword(self):
        url = _url('/post')
        json_data = {'foo': 'bar'}
        response = nr.post(url, json=json_data)

        self.assertEqual(response.status_code, 200)

        data = response.json()

        self.assertEqual(data['data'], '{"foo": "bar"}')
        self.assertEqual(data['headers']['Content-Type'], 'application/json')
    def test_submit_file_and_form_data(self):
        url = _url('/post')
        files = {'file': io.BytesIO(b'binarydata')}
        request_data = {'foo': b'bar baz'}
        response = nr.post(url, files=files, data=request_data)

        self.assertEqual(response.status_code, 200)

        data = response.json()

        self.assertEqual(data['files'], {'file': 'binarydata'})
        self.assertEqual(data['form'], {'foo': 'bar baz'})
    def test_sending_data_as_bytes(self):
        url = _url('/post')
        request_data = json.dumps({'foo': 'bar'}).encode('utf-8')
        headers={'Content-Type': 'application/json'}
        response = nr.post(url, data=request_data, headers=headers)

        self.assertEqual(response.status_code, 200)

        data = response.json()

        self.assertEqual(data['headers']['Content-Type'], 'application/json')
        self.assertEqual(data['data'], '{"foo": "bar"}')
    def test_sending_data_dict_is_form_encoded(self):
        url = _url('/post')
        request_data = {
            'foo': 'bar baz',
        }
        response = nr.post(url, data=request_data)

        self.assertEqual(response.status_code, 200)

        data = response.json()

        self.assertEqual(data['headers']['Content-Type'], 'application/x-www-form-urlencoded')
        self.assertEqual(data['form'], request_data)
    def test_submit_file_with_file_from_disk(self):
        # This exercises the code which guesses the uploaded filename from
        # the open file handle.

        url = _url('/post')
        _, path = tempfile.mkstemp()

        with open(path, 'wb') as fh:
            fh.write(b'binarydata')

        try:
            with open(path, 'rb') as fh:
                files = {'file': fh}
                response = nr.post(url, files=files)

            self.assertEqual(response.status_code, 200)

            data = response.json()

            self.assertEqual(data['files'], {'file': 'binarydata'})
        finally:
            os.unlink(path)