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
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
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
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