Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion intercom/company.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

from intercom.api_operations.all import All
from intercom.api_operations.count import Count
from intercom.api_operations.delete import Delete
from intercom.api_operations.find import Find
from intercom.api_operations.load import Load
from intercom.api_operations.save import Save
from intercom.extended_api_operations.users import Users
from intercom.traits.api_resource import Resource


class Company(Resource, Count, Find, All, Save, Load, Users):
class Company(Resource, Delete, Count, Find, All, Save, Load, Users):
update_verb = 'post'
identity_vars = ['id', 'company_id']
5 changes: 2 additions & 3 deletions intercom/extended_api_operations/reply.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@

class Reply(object):

@property
def reply(self, reply_data):
def reply(self, **reply_data):
from intercom import Intercom
collection = utils.resource_class_to_collection_name(self.__class__)
url = "/%s/%s/reply" % (collection, self.id)
reply_data['conversation_id'] = self.id
response = Intercom.post(url, reply_data)
response = Intercom.post(url, **reply_data)
return self.from_response(response)
48 changes: 48 additions & 0 deletions tests/integration/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,49 @@
# -*- coding: utf-8 -*-

import time

from datetime import datetime
from intercom import Company
from intercom import ResourceNotFound
from intercom import User


def get_timestamp():
now = datetime.utcnow()
return int(time.mktime(now.timetuple()))


def get_or_create_user(timestamp):
# get user
email = '%s@example.com' % (timestamp)
try:
user = User.find(email=email)
except ResourceNotFound:
# Create a user
user = User.create(
email=email,
user_id=timestamp,
name="Ada %s" % (timestamp))
time.sleep(5)
return user


def get_or_create_company(timestamp):
name = 'Company %s' % (timestamp)

# get company
try:
company = Company.find(name=name)
except ResourceNotFound:
# Create a company
company = Company.create(
company_id=timestamp, name=name)
return company


def delete(resource):
try:
resource.delete()
except ResourceNotFound:
# not much we can do here
pass
39 changes: 19 additions & 20 deletions tests/integration/test_company.py
Original file line number Diff line number Diff line change
@@ -1,46 +1,45 @@
# -*- coding: utf-8 -*-

from datetime import datetime
import os
import time
import unittest
from intercom import Intercom
from intercom import Company
from intercom import Intercom
from intercom import User
from . import delete
from . import get_or_create_user
from . import get_or_create_company
from . import get_timestamp

Intercom.app_id = os.environ.get('INTERCOM_APP_ID')
Intercom.app_api_key = os.environ.get('INTERCOM_APP_API_KEY')


class CompanyTest(unittest.TestCase):
email = "ada@example.com"

@classmethod
def setup_class(cls):
# get company
cls.company = Company.all()[0]
# get user
cls.user = User.find(email=cls.email)
if not hasattr(cls.user, 'user_id'):
# Create a user
cls.user = User.create(
email=cls.email,
user_id="ada",
name="Ada Lovelace")
nowstamp = get_timestamp()
cls.company = get_or_create_company(nowstamp)
cls.user = get_or_create_user(nowstamp)

@classmethod
def teardown_class(cls):
delete(cls.company)
delete(cls.user)

def test_add_user(self):
user = User.find(email=self.email)
user = User.find(email=self.user.email)
user.companies = [
{"company_id": 6, "name": "Intercom"},
{"company_id": 9, "name": "Test Company"}
]
user.save()
user = User.find(email=self.email)
user = User.find(email=self.user.email)
self.assertEqual(len(user.companies), 2)
self.assertEqual(user.companies[0].company_id, "9")

def test_add_user_custom_attributes(self):
user = User.find(email=self.email)
user = User.find(email=self.user.email)
user.companies = [
{
"id": 6,
Expand All @@ -51,7 +50,7 @@ def test_add_user_custom_attributes(self):
}
]
user.save()
user = User.find(email=self.email)
user = User.find(email=self.user.email)
self.assertEqual(len(user.companies), 2)
self.assertEqual(user.companies[0].company_id, "9")

Expand All @@ -74,8 +73,8 @@ def test_update(self):
# Find a company by id
company = Company.find(id=self.company.id)
# Update a company
now = datetime.utcnow()
updated_name = 'Company %s' % (time.mktime(now.timetuple()))
now = get_timestamp()
updated_name = 'Company %s' % (now)
company.name = updated_name
company.save()
company = Company.find(id=self.company.id)
Expand Down
89 changes: 49 additions & 40 deletions tests/integration/test_conversations.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,53 @@
from intercom import Intercom
from intercom import Admin
from intercom import Conversation
from intercom import User
from intercom import Message
from . import delete
from . import get_or_create_user
from . import get_timestamp

Intercom.app_id = os.environ.get('INTERCOM_APP_ID')
Intercom.app_api_key = os.environ.get('INTERCOM_APP_API_KEY')


class ConversationTest(unittest.TestCase):
email = "ada@example.com"

@classmethod
def setup_class(cls):
# get admin
cls.admin = Admin.all()[0]
cls.admin = Admin.all()[1]

# get user
cls.user = User.find(email=cls.email)
if not hasattr(cls.user, 'user_id'):
# Create a user
cls.user = User.create(
email=cls.email,
user_id="ada",
name="Ada Lovelace")
cls.user.companies = [
{"company_id": 6, "name": "Intercom"},
{"company_id": 9, "name": "Test Company"}
]
cls.user.save()
timestamp = get_timestamp()
cls.user = get_or_create_user(timestamp)
cls.email = cls.user.email

# send user message
message_data = {
'from': {
'type': "user",
'id': cls.user.id
},
'body': "Hey"
}
cls.user_message = Message.create(**message_data)

conversations = Conversation.find_all()
user_init_conv = conversations[0]
# send admin reply
cls.admin_conv = user_init_conv.reply(
type='admin', admin_id=cls.admin.id,
message_type='comment', body='There')

@classmethod
def teardown_class(cls):
delete(cls.user)

def test_find_all_admin(self):
# FINDING CONVERSATIONS FOR AN ADMIN
# Iterate over all conversations (open and closed) assigned to an admin

for convo in Conversation.find_all(type='admin', id=self.admin.id):
self.assertIsNotNone(convo.id)
self.__class__.convo_id = convo.id
self.admin_conv.id = convo.id

def test_find_all_open_admin(self):
# Iterate over all open conversations assigned to an admin
Expand Down Expand Up @@ -99,33 +112,29 @@ def test_conversation_parts(self):
# There is a body
self.assertIsNotNone(part.body)

# def test_reply(self):
# # REPLYING TO CONVERSATIONS
# convo_id = Conversation.find_all(
# type='admin', id=self.admin.id)[0].id
# conversation = Conversation.find(id=convo_id)
# num_parts = len(conversation.conversation_parts)
# # User (identified by email) replies with a comment
# conversation.reply(
# type='user', email=self.email,
# message_type='comment', body='foo')
# # Admin (identified by email) replies with a comment
# conversation.reply(
# type='admin', email=self.admin.email,
# message_type='comment', body='bar')
# conversation = Conversation.find(id=convo_id)
# self.assertEqual(num_parts + 2, len(conversation.conversation_parts))
def test_reply(self):
# REPLYING TO CONVERSATIONS
conversation = Conversation.find(id=self.admin_conv.id)
num_parts = len(conversation.conversation_parts)
# User (identified by email) replies with a comment
conversation.reply(
type='user', email=self.email,
message_type='comment', body='foo')
# Admin (identified by admin_id) replies with a comment
conversation.reply(
type='admin', admin_id=self.admin.id,
message_type='comment', body='bar')
conversation = Conversation.find(id=self.admin_conv.id)
self.assertEqual(num_parts + 2, len(conversation.conversation_parts))

def test_mark_read(self):
# MARKING A CONVERSATION AS READ
convo_id = Conversation.find_all(type='admin', id=self.admin.id)[0].id
conversation = Conversation.find(id=convo_id)
conversation = Conversation.find(id=self.admin_conv.id)
conversation.read = False
conversation.save()
conversation = Conversation.find(id=convo_id)
# CANNOT MARK AS UNREAD VIA API
# self.assertFalse(conversation.read)
conversation = Conversation.find(id=self.admin_conv.id)
self.assertFalse(conversation.read)
conversation.read = True
conversation.save()
conversation = Conversation.find(id=convo_id)
conversation = Conversation.find(id=self.admin_conv.id)
self.assertTrue(conversation.read)
17 changes: 15 additions & 2 deletions tests/integration/test_notes.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,24 @@
import unittest
from intercom import Intercom
from intercom import Note
from . import delete
from . import get_or_create_user
from . import get_timestamp

Intercom.app_id = os.environ.get('INTERCOM_APP_ID')
Intercom.app_api_key = os.environ.get('INTERCOM_APP_API_KEY')


class NoteTest(unittest.TestCase):
email = "ada@example.com"
@classmethod
def setup_class(cls):
timestamp = get_timestamp()
cls.user = get_or_create_user(timestamp)
cls.email = cls.user.email

@classmethod
def teardown_class(cls):
delete(cls.user)

def test_create_note(self):
# Create a note for a user
Expand All @@ -29,10 +40,12 @@ def test_find_note(self):

def test_find_all_email(self):
# Iterate over all notes for a user via their email address
for note in Note.find_all(email=self.email):
notes = Note.find_all(email=self.email)
for note in notes:
self.assertTrue(note.id is not None)
user = note.user.load()
self.assertEqual(user.email, self.email)
break

def test_find_all_id(self):
from intercom.user import User
Expand Down
12 changes: 5 additions & 7 deletions tests/integration/test_segments.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,24 @@


class SegmentTest(unittest.TestCase):
email = "ada@example.com"

@classmethod
def setup_class(cls):
# get user
cls.segment_id = "5425e77db351e072bb000017"
cls.segment = Segment.all()[0]

def test_find_segment(self):
# Find a segment
segment = Segment.find(id=self.segment_id)
self.assertEqual(segment.id, self.segment_id)
segment = Segment.find(id=self.segment.id)
self.assertEqual(segment.id, self.segment.id)

def test_save_segment(self):
# Update a segment
segment = Segment.find(id=self.segment_id)
segment = Segment.find(id=self.segment.id)
now = datetime.utcnow()
updated_name = 'Updated %s' % (time.mktime(now.timetuple()))
segment.name = updated_name
segment.save()
segment = Segment.find(id=self.segment_id)
segment = Segment.find(id=self.segment.id)
self.assertEqual(segment.name, updated_name)

def test_iterate(self):
Expand Down
Loading