예제 #1
0
def test_create_draft_with_attachments(api_client, attachments, example_draft):
    attachment_ids = []
    upload_path = '/files'
    for filename, path in attachments:
        data = {'file': (open(path, 'rb'), filename)}
        r = api_client.post_raw(upload_path, data=data)
        assert r.status_code == 200
        attachment_id = json.loads(r.data)[0]['id']
        attachment_ids.append(attachment_id)

    first_attachment = attachment_ids.pop()

    example_draft['file_ids'] = [first_attachment]
    r = api_client.post_data('/drafts', example_draft)
    assert r.status_code == 200
    returned_draft = json.loads(r.data)
    draft_public_id = returned_draft['id']
    assert returned_draft['version'] == 0
    example_draft['version'] = returned_draft['version']
    assert len(returned_draft['files']) == 1

    attachment_ids.append(first_attachment)
    example_draft['file_ids'] = attachment_ids
    r = api_client.put_data('/drafts/{}'.format(draft_public_id),
                            example_draft)
    assert r.status_code == 200
    returned_draft = json.loads(r.data)
    assert len(returned_draft['files']) == 3
    assert returned_draft['version'] == 1
    example_draft['version'] = returned_draft['version']

    # Make sure we can't delete the files now
    for file_id in attachment_ids:
        r = api_client.delete('/files/{}'.format(file_id))
        assert r.status_code == 400

    # Now remove the attachment
    example_draft['file_ids'] = [first_attachment]
    r = api_client.put_data('/drafts/{}'.format(draft_public_id),
                            example_draft)

    draft_data = api_client.get_data('/drafts/{}'.format(draft_public_id))
    assert len(draft_data['files']) == 1
    assert draft_data['version'] == 2
    example_draft['version'] = draft_data['version']

    example_draft['file_ids'] = []
    r = api_client.put_data('/drafts/{}'.format(draft_public_id),
                            example_draft)
    draft_data = api_client.get_data('/drafts/{}'.format(draft_public_id))
    assert r.status_code == 200
    assert len(draft_data['files']) == 0
    assert draft_data['version'] == 3

    # now that they're not attached, we should be able to delete them
    for file_id in attachment_ids:
        r = api_client.delete('/files/{}'.format(file_id))
        assert r.status_code == 200
예제 #2
0
def test_create_draft_with_attachments(api_client, attachments, example_draft):
    attachment_ids = []
    upload_path = '/files'
    for filename, path in attachments:
        data = {'file': (open(path, 'rb'), filename)}
        r = api_client.post_raw(upload_path, data=data)
        assert r.status_code == 200
        attachment_id = json.loads(r.data)[0]['id']
        attachment_ids.append(attachment_id)

    first_attachment = attachment_ids.pop()

    example_draft['file_ids'] = [first_attachment]
    r = api_client.post_data('/drafts', example_draft)
    assert r.status_code == 200
    returned_draft = json.loads(r.data)
    draft_public_id = returned_draft['id']
    assert returned_draft['version'] == 0
    example_draft['version'] = returned_draft['version']
    assert len(returned_draft['files']) == 1

    attachment_ids.append(first_attachment)
    example_draft['file_ids'] = attachment_ids
    r = api_client.put_data('/drafts/{}'.format(draft_public_id),
                            example_draft)
    assert r.status_code == 200
    returned_draft = json.loads(r.data)
    assert len(returned_draft['files']) == 3
    assert returned_draft['version'] == 1
    example_draft['version'] = returned_draft['version']

    # Make sure we can't delete the files now
    for file_id in attachment_ids:
        r = api_client.delete('/files/{}'.format(file_id))
        assert r.status_code == 400

    # Now remove the attachment
    example_draft['file_ids'] = [first_attachment]
    r = api_client.put_data('/drafts/{}'.format(draft_public_id),
                            example_draft)

    draft_data = api_client.get_data('/drafts/{}'.format(draft_public_id))
    assert len(draft_data['files']) == 1
    assert draft_data['version'] == 2
    example_draft['version'] = draft_data['version']

    example_draft['file_ids'] = []
    r = api_client.put_data('/drafts/{}'.format(draft_public_id),
                            example_draft)
    draft_data = api_client.get_data('/drafts/{}'.format(draft_public_id))
    assert r.status_code == 200
    assert len(draft_data['files']) == 0
    assert draft_data['version'] == 3

    # now that they're not attached, we should be able to delete them
    for file_id in attachment_ids:
        r = api_client.delete('/files/{}'.format(file_id))
        assert r.status_code == 200
예제 #3
0
def test_latest_cursor(api_client):
    time.sleep(5)
    now = int(time.time())

    latest_cursor_resp = api_client.post_raw('/delta/latest_cursor', None)
    latest_cursor = json.loads(latest_cursor_resp.data)['cursor']

    now_cursor = get_cursor(api_client, now)
    assert latest_cursor == now_cursor
예제 #4
0
def test_latest_cursor(api_client):
    time.sleep(5)
    now = int(time.time())

    latest_cursor_resp = api_client.post_raw('/delta/latest_cursor', None)
    latest_cursor = json.loads(latest_cursor_resp.data)['cursor']

    now_cursor = get_cursor(api_client, now)
    assert latest_cursor == now_cursor
예제 #5
0
def test_sending_raw_mime(patch_smtp, api_client):
    api_client.post_raw(
        "/send",
        ("From: [email protected]\r\n"
         "To: golang-nuts "
         "<*****@*****.**>\r\n"
         "Cc: [email protected]\r\n"
         "Bcc: Some Guy <*****@*****.**>\r\n"
         "Subject: "
         "[go-nuts] Runtime Panic On Method Call"
         "\r\n"
         "Mime-Version: 1.0\r\n"
         "In-Reply-To: "
         "<78pgxboai332pi9p2smo4db73-0"
         "@mailer.nylas.com>\r\n"
         "References: "
         "<78pgxboai332pi9p2smo4db73-0"
         "@mailer.nylas.com>\r\n"
         "Content-Type: text/plain; charset=UTF-8"
         "\r\n"
         "Content-Transfer-Encoding: 7bit\r\n"
         "X-My-Custom-Header: Random\r\n\r\n"
         "Yo."),
        headers={"Content-Type": "message/rfc822"},
    )

    _, msg = patch_smtp[-1]
    parsed = mime.from_string(msg)
    assert parsed.body == "Yo."
    assert parsed.headers["From"] == "*****@*****.**"
    assert parsed.headers[
        "Subject"] == "[go-nuts] Runtime Panic On Method Call"
    assert parsed.headers["Cc"] == "*****@*****.**"
    assert parsed.headers["To"] == "golang-nuts <*****@*****.**>"
    assert (parsed.headers["In-Reply-To"] ==
            "<*****@*****.**>")
    assert (parsed.headers["References"] ==
            "<*****@*****.**>")
    assert parsed.headers["X-My-Custom-Header"] == "Random"
    assert "Bcc" not in parsed.headers
    assert "X-INBOX-ID" in parsed.headers
    assert "Message-Id" in parsed.headers
    assert "User-Agent" in parsed.headers
예제 #6
0
def test_latest_cursor(api_client):
    with freeze_time(datetime.datetime.utcnow()) as freezer:
        freezer.tick(datetime.timedelta(seconds=5))
        now = int(time.time())

        latest_cursor_resp = api_client.post_raw("/delta/latest_cursor", None)
        latest_cursor = json.loads(latest_cursor_resp.data)["cursor"]

        now_cursor = get_cursor(api_client, now)
        assert latest_cursor == now_cursor
예제 #7
0
def test_latest_cursor(api_client):
    with freeze_time(datetime.datetime.utcnow()) as freezer:
        freezer.tick(datetime.timedelta(seconds=5))
        now = int(time.time())

        latest_cursor_resp = api_client.post_raw('/delta/latest_cursor', None)
        latest_cursor = json.loads(latest_cursor_resp.data)['cursor']

        now_cursor = get_cursor(api_client, now)
        assert latest_cursor == now_cursor
예제 #8
0
def test_sending_raw_mime(patch_smtp, api_client):
    api_client.post_raw('/send', ('From: [email protected]\r\n'
                                  'To: golang-nuts '
                                  '<*****@*****.**>\r\n'
                                  'Cc: [email protected]\r\n'
                                  'Bcc: Some Guy <*****@*****.**>\r\n'
                                  'Subject: '
                                  '[go-nuts] Runtime Panic On Method Call'
                                  '\r\n'
                                  'Mime-Version: 1.0\r\n'
                                  'In-Reply-To: '
                                  '<78pgxboai332pi9p2smo4db73-0'
                                  '@mailer.nylas.com>\r\n'
                                  'References: '
                                  '<78pgxboai332pi9p2smo4db73-0'
                                  '@mailer.nylas.com>\r\n'
                                  'Content-Type: text/plain; charset=UTF-8'
                                  '\r\n'
                                  'Content-Transfer-Encoding: 7bit\r\n'
                                  'X-My-Custom-Header: Random\r\n\r\n'
                                  'Yo.'),
                        headers={'Content-Type': 'message/rfc822'})

    _, msg = patch_smtp[-1]
    parsed = mime.from_string(msg)
    assert parsed.body == 'Yo.'
    assert parsed.headers['From'] == '*****@*****.**'
    assert parsed.headers['Subject'] == \
                            '[go-nuts] Runtime Panic On Method Call'
    assert parsed.headers['Cc'] == '*****@*****.**'
    assert parsed.headers['To'] == \
                            'golang-nuts <*****@*****.**>'
    assert parsed.headers['In-Reply-To'] == \
                            '<*****@*****.**>'
    assert parsed.headers['References'] == \
                            '<*****@*****.**>'
    assert parsed.headers['X-My-Custom-Header'] == 'Random'
    assert 'Bcc' not in parsed.headers
    assert 'X-INBOX-ID' in parsed.headers
    assert 'Message-Id' in parsed.headers
    assert 'User-Agent' in parsed.headers
예제 #9
0
def test_sending_raw_mime(patch_smtp, api_client):
    api_client.post_raw('/send', ('From: [email protected]\r\n'
                                    'To: golang-nuts '
                                    '<*****@*****.**>\r\n'
                                    'Cc: [email protected]\r\n'
                                    'Bcc: Some Guy <*****@*****.**>\r\n'
                                    'Subject: '
                                    '[go-nuts] Runtime Panic On Method Call'
                                    '\r\n'
                                    'Mime-Version: 1.0\r\n'
                                    'In-Reply-To: '
                                    '<78pgxboai332pi9p2smo4db73-0'
                                    '@mailer.nylas.com>\r\n'
                                    'References: '
                                    '<78pgxboai332pi9p2smo4db73-0'
                                    '@mailer.nylas.com>\r\n'
                                    'Content-Type: text/plain; charset=UTF-8'
                                    '\r\n'
                                    'Content-Transfer-Encoding: 7bit\r\n'
                                    'X-My-Custom-Header: Random\r\n\r\n'
                                    'Yo.'), headers={'Content-Type':
                                                        'message/rfc822'})

    _, msg = patch_smtp[-1]
    parsed = mime.from_string(msg)
    assert parsed.body == 'Yo.'
    assert parsed.headers['From'] == '*****@*****.**'
    assert parsed.headers['Subject'] == \
                            '[go-nuts] Runtime Panic On Method Call'
    assert parsed.headers['Cc'] == '*****@*****.**'
    assert parsed.headers['To'] == \
                            'golang-nuts <*****@*****.**>'
    assert parsed.headers['In-Reply-To'] == \
                            '<*****@*****.**>'
    assert parsed.headers['References'] == \
                            '<*****@*****.**>'
    assert parsed.headers['X-My-Custom-Header'] == 'Random'
    assert 'Bcc' not in parsed.headers
    assert 'X-INBOX-ID' in parsed.headers
    assert 'Message-Id' in parsed.headers
    assert 'User-Agent' in parsed.headers
예제 #10
0
def test_sending_bad_raw_mime(patch_smtp, api_client):
    res = api_client.post_raw('/send', ('From: [email protected]\r\n'
                                        'To: \r\n'
                                        'Subject: '
                                        '[go-nuts] Runtime Panic On Method'
                                        'Call \r\n'
                                        'Mime-Version: 1.0\r\n'
                                        'Content-Type: '
                                        'text/plain; charset=UTF-8\r\n'
                                        'Content-Transfer-Encoding: 7bit\r\n'
                                        'X-My-Custom-Header: Random'
                                        '\r\n\r\n'
                                        'Yo.'), headers={'Content-Type':
                                                             'message/rfc822'})

    assert res.status_code == 400
예제 #11
0
def test_sending_bad_raw_mime(patch_smtp, api_client):
    res = api_client.post_raw('/send', ('From: [email protected]\r\n'
                                        'To: \r\n'
                                        'Subject: '
                                        '[go-nuts] Runtime Panic On Method'
                                        'Call \r\n'
                                        'Mime-Version: 1.0\r\n'
                                        'Content-Type: '
                                        'text/plain; charset=UTF-8\r\n'
                                        'Content-Transfer-Encoding: 7bit\r\n'
                                        'X-My-Custom-Header: Random'
                                        '\r\n\r\n'
                                        'Yo.'),
                              headers={'Content-Type': 'message/rfc822'})

    assert res.status_code == 400
예제 #12
0
def uploaded_file_ids(api_client, files):
    file_ids = []
    upload_path = '/files'
    for filename, path in files:
        # Mac and linux fight over filesystem encodings if we store this
        # filename on the fs. Work around by changing the filename we upload
        # instead.
        if filename == 'piece-jointe.jpg':
            filename = u'pièce-jointe.jpg'
        elif filename == 'andra-moi-ennepe.txt':
            filename = u'ἄνδρα μοι ἔννεπε'
        data = {'file': (open(path, 'rb'), filename)}
        r = api_client.post_raw(upload_path, data=data)
        assert r.status_code == 200
        file_id = json.loads(r.data)[0]['id']
        file_ids.append(file_id)

    return file_ids
예제 #13
0
def uploaded_file_ids(api_client, files):
    file_ids = []
    upload_path = '/files'
    for filename, path in files:
        # Mac and linux fight over filesystem encodings if we store this
        # filename on the fs. Work around by changing the filename we upload
        # instead.
        if filename == 'piece-jointe.jpg':
            filename = u'pièce-jointe.jpg'
        elif filename == 'andra-moi-ennepe.txt':
            filename = u'ἄνδρα μοι ἔννεπε'
        data = {'file': (open(path, 'rb'), filename)}
        r = api_client.post_raw(upload_path, data=data)
        assert r.status_code == 200
        file_id = json.loads(r.data)[0]['id']
        file_ids.append(file_id)

    return file_ids
예제 #14
0
def test_send_with_event_and_attachments(patch_smtp, api_client, example_draft,
                                         event, attachments):
    msgs = patch_smtp

    # Load and post file for attachment
    filename, path = attachments[0]
    data = {'file': (open(path, 'rb'), filename)}
    r = api_client.post_raw('/files', data=data)
    assert r.status_code == 200
    attachment_id = json.loads(r.data)[0]['id']

    # Add attachment to the new draft and post the draft
    example_draft['file_ids'] = [attachment_id]
    r = api_client.post_data('/drafts', example_draft)
    assert r.status_code == 200
    returned_draft = json.loads(r.data)
    draft_public_id = returned_draft['id']
    version = returned_draft['version']

    # Send the draft along with an event ID to use for invites
    r = api_client.post_data('/send',
                             {'draft_id': draft_public_id,
                              'version': version,
                              'event_id': event.public_id})
    assert r.status_code == 200

    # Make sure one message was sent
    assert len(msgs) == 1
    recipients, raw_msg = msgs[0]
    msg = mime.from_string(raw_msg)

    # Check the MIME body of the message to make sure both the event and the
    # attachment are there
    parts = []
    for mimepart in msg.walk(with_self=msg.content_type.is_singlepart()):
        is_attachment = mimepart.is_attachment()
        format_type = mimepart.content_type.format_type
        subtype = mimepart.content_type.subtype
        parts.append((format_type, subtype, is_attachment))

    assert ('text', 'plain', False) in parts
    assert ('text', 'html', False) in parts
    assert ('text', 'calendar', False) in parts
    assert ('image', 'jpeg', True) in parts
예제 #15
0
def test_sending_bad_raw_mime(patch_smtp, api_client):
    res = api_client.post_raw(
        "/send",
        ("From: [email protected]\r\n"
         "To: \r\n"
         "Subject: "
         "[go-nuts] Runtime Panic On Method"
         "Call \r\n"
         "Mime-Version: 1.0\r\n"
         "Content-Type: "
         "text/plain; charset=UTF-8\r\n"
         "Content-Transfer-Encoding: 7bit\r\n"
         "X-My-Custom-Header: Random"
         "\r\n\r\n"
         "Yo."),
        headers={"Content-Type": "message/rfc822"},
    )

    assert res.status_code == 400