Example #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
Example #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
Example #3
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
Example #4
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
Example #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
Example #6
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
Example #7
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