import simplejson
from cherrypy.test.webtest import openURL

headers = [
    ('Accept', 'text/*'),
    ('Content-Type', 'multipart/form-data; '
         'boundary=----------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6'),
    ('User-Agent', 'Shockwave Flash'),
    ('Host', 'www.example.com:8080'),
    ('Content-Length', '499'),
    ('Connection', 'Keep-Alive'),
    ('Cache-Control', 'no-cache'),
    ]
filedata = ('<?xml version="1.0" encoding="UTF-8"?>\r\n'
            '<projectDescription>\r\n'
            '</projectDescription>\r\n')
body = (
    '------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6\r\n'
    'Content-Disposition: form-data; name="filename"\r\n'
    '\r\n'
    '.project\r\n'
    '------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6\r\n'
    'Content-Disposition: form-data; '
        'name="filedata"; filename=".project"\r\n'
    'Content-Type: application/octet-stream\r\n'
    '\r\n'
    + filedata +
    '\r\n'
    '------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6\r\n'
    'Content-Disposition: form-data; name="Upload"\r\n'
    '\r\n'
    'Submit Query\r\n'
    # Flash apps omit the trailing \r\n on the last line:
    '------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6--'
    )

for url in ['/okupload', '/failupload']:
    print "Sending multipart POST request to %s" % url
    status, header, res_body = openURL(url, headers=headers, method="POST",
        body=body, host="127.0.0.1", port=8080)
    try:
        response = simplejson.loads(res_body)
    except ValueError:
        print res_body
        print "FAILED"
    else:
        assert response['result'] == 'success'
        assert response['filename'] == '.project'
        print "OK"

