Skip to content

Commit a220358

Browse files
committed
Merge pull request #60 from jkeyes/improve-tests
Updating integrations tests.
2 parents e530bc7 + 38cc136 commit a220358

File tree

9 files changed

+168
-100
lines changed

9 files changed

+168
-100
lines changed

intercom/company.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
from intercom.api_operations.all import All
44
from intercom.api_operations.count import Count
5+
from intercom.api_operations.delete import Delete
56
from intercom.api_operations.find import Find
67
from intercom.api_operations.load import Load
78
from intercom.api_operations.save import Save
89
from intercom.extended_api_operations.users import Users
910
from intercom.traits.api_resource import Resource
1011

1112

12-
class Company(Resource, Count, Find, All, Save, Load, Users):
13+
class Company(Resource, Delete, Count, Find, All, Save, Load, Users):
1314
update_verb = 'post'
1415
identity_vars = ['id', 'company_id']

intercom/extended_api_operations/reply.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55

66
class Reply(object):
77

8-
@property
9-
def reply(self, reply_data):
8+
def reply(self, **reply_data):
109
from intercom import Intercom
1110
collection = utils.resource_class_to_collection_name(self.__class__)
1211
url = "/%s/%s/reply" % (collection, self.id)
1312
reply_data['conversation_id'] = self.id
14-
response = Intercom.post(url, reply_data)
13+
response = Intercom.post(url, **reply_data)
1514
return self.from_response(response)

tests/integration/__init__.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,49 @@
11
# -*- coding: utf-8 -*-
2+
3+
import time
4+
5+
from datetime import datetime
6+
from intercom import Company
7+
from intercom import ResourceNotFound
8+
from intercom import User
9+
10+
11+
def get_timestamp():
12+
now = datetime.utcnow()
13+
return int(time.mktime(now.timetuple()))
14+
15+
16+
def get_or_create_user(timestamp):
17+
# get user
18+
email = '%s@example.com' % (timestamp)
19+
try:
20+
user = User.find(email=email)
21+
except ResourceNotFound:
22+
# Create a user
23+
user = User.create(
24+
email=email,
25+
user_id=timestamp,
26+
name="Ada %s" % (timestamp))
27+
time.sleep(5)
28+
return user
29+
30+
31+
def get_or_create_company(timestamp):
32+
name = 'Company %s' % (timestamp)
33+
34+
# get company
35+
try:
36+
company = Company.find(name=name)
37+
except ResourceNotFound:
38+
# Create a company
39+
company = Company.create(
40+
company_id=timestamp, name=name)
41+
return company
42+
43+
44+
def delete(resource):
45+
try:
46+
resource.delete()
47+
except ResourceNotFound:
48+
# not much we can do here
49+
pass

tests/integration/test_company.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,45 @@
11
# -*- coding: utf-8 -*-
22

3-
from datetime import datetime
43
import os
5-
import time
64
import unittest
7-
from intercom import Intercom
85
from intercom import Company
6+
from intercom import Intercom
97
from intercom import User
8+
from . import delete
9+
from . import get_or_create_user
10+
from . import get_or_create_company
11+
from . import get_timestamp
1012

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

1416

1517
class CompanyTest(unittest.TestCase):
16-
email = "ada@example.com"
1718

1819
@classmethod
1920
def setup_class(cls):
20-
# get company
21-
cls.company = Company.all()[0]
22-
# get user
23-
cls.user = User.find(email=cls.email)
24-
if not hasattr(cls.user, 'user_id'):
25-
# Create a user
26-
cls.user = User.create(
27-
email=cls.email,
28-
user_id="ada",
29-
name="Ada Lovelace")
21+
nowstamp = get_timestamp()
22+
cls.company = get_or_create_company(nowstamp)
23+
cls.user = get_or_create_user(nowstamp)
24+
25+
@classmethod
26+
def teardown_class(cls):
27+
delete(cls.company)
28+
delete(cls.user)
3029

3130
def test_add_user(self):
32-
user = User.find(email=self.email)
31+
user = User.find(email=self.user.email)
3332
user.companies = [
3433
{"company_id": 6, "name": "Intercom"},
3534
{"company_id": 9, "name": "Test Company"}
3635
]
3736
user.save()
38-
user = User.find(email=self.email)
37+
user = User.find(email=self.user.email)
3938
self.assertEqual(len(user.companies), 2)
4039
self.assertEqual(user.companies[0].company_id, "9")
4140

4241
def test_add_user_custom_attributes(self):
43-
user = User.find(email=self.email)
42+
user = User.find(email=self.user.email)
4443
user.companies = [
4544
{
4645
"id": 6,
@@ -51,7 +50,7 @@ def test_add_user_custom_attributes(self):
5150
}
5251
]
5352
user.save()
54-
user = User.find(email=self.email)
53+
user = User.find(email=self.user.email)
5554
self.assertEqual(len(user.companies), 2)
5655
self.assertEqual(user.companies[0].company_id, "9")
5756

@@ -74,8 +73,8 @@ def test_update(self):
7473
# Find a company by id
7574
company = Company.find(id=self.company.id)
7675
# Update a company
77-
now = datetime.utcnow()
78-
updated_name = 'Company %s' % (time.mktime(now.timetuple()))
76+
now = get_timestamp()
77+
updated_name = 'Company %s' % (now)
7978
company.name = updated_name
8079
company.save()
8180
company = Company.find(id=self.company.id)

tests/integration/test_conversations.py

Lines changed: 49 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,53 @@
55
from intercom import Intercom
66
from intercom import Admin
77
from intercom import Conversation
8-
from intercom import User
8+
from intercom import Message
9+
from . import delete
10+
from . import get_or_create_user
11+
from . import get_timestamp
912

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

1316

1417
class ConversationTest(unittest.TestCase):
15-
email = "ada@example.com"
16-
1718
@classmethod
1819
def setup_class(cls):
1920
# get admin
20-
cls.admin = Admin.all()[0]
21+
cls.admin = Admin.all()[1]
22+
2123
# get user
22-
cls.user = User.find(email=cls.email)
23-
if not hasattr(cls.user, 'user_id'):
24-
# Create a user
25-
cls.user = User.create(
26-
email=cls.email,
27-
user_id="ada",
28-
name="Ada Lovelace")
29-
cls.user.companies = [
30-
{"company_id": 6, "name": "Intercom"},
31-
{"company_id": 9, "name": "Test Company"}
32-
]
33-
cls.user.save()
24+
timestamp = get_timestamp()
25+
cls.user = get_or_create_user(timestamp)
26+
cls.email = cls.user.email
27+
28+
# send user message
29+
message_data = {
30+
'from': {
31+
'type': "user",
32+
'id': cls.user.id
33+
},
34+
'body': "Hey"
35+
}
36+
cls.user_message = Message.create(**message_data)
37+
38+
conversations = Conversation.find_all()
39+
user_init_conv = conversations[0]
40+
# send admin reply
41+
cls.admin_conv = user_init_conv.reply(
42+
type='admin', admin_id=cls.admin.id,
43+
message_type='comment', body='There')
44+
45+
@classmethod
46+
def teardown_class(cls):
47+
delete(cls.user)
3448

3549
def test_find_all_admin(self):
3650
# FINDING CONVERSATIONS FOR AN ADMIN
3751
# Iterate over all conversations (open and closed) assigned to an admin
38-
3952
for convo in Conversation.find_all(type='admin', id=self.admin.id):
4053
self.assertIsNotNone(convo.id)
41-
self.__class__.convo_id = convo.id
54+
self.admin_conv.id = convo.id
4255

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

102-
# def test_reply(self):
103-
# # REPLYING TO CONVERSATIONS
104-
# convo_id = Conversation.find_all(
105-
# type='admin', id=self.admin.id)[0].id
106-
# conversation = Conversation.find(id=convo_id)
107-
# num_parts = len(conversation.conversation_parts)
108-
# # User (identified by email) replies with a comment
109-
# conversation.reply(
110-
# type='user', email=self.email,
111-
# message_type='comment', body='foo')
112-
# # Admin (identified by email) replies with a comment
113-
# conversation.reply(
114-
# type='admin', email=self.admin.email,
115-
# message_type='comment', body='bar')
116-
# conversation = Conversation.find(id=convo_id)
117-
# self.assertEqual(num_parts + 2, len(conversation.conversation_parts))
115+
def test_reply(self):
116+
# REPLYING TO CONVERSATIONS
117+
conversation = Conversation.find(id=self.admin_conv.id)
118+
num_parts = len(conversation.conversation_parts)
119+
# User (identified by email) replies with a comment
120+
conversation.reply(
121+
type='user', email=self.email,
122+
message_type='comment', body='foo')
123+
# Admin (identified by admin_id) replies with a comment
124+
conversation.reply(
125+
type='admin', admin_id=self.admin.id,
126+
message_type='comment', body='bar')
127+
conversation = Conversation.find(id=self.admin_conv.id)
128+
self.assertEqual(num_parts + 2, len(conversation.conversation_parts))
118129

119130
def test_mark_read(self):
120131
# MARKING A CONVERSATION AS READ
121-
convo_id = Conversation.find_all(type='admin', id=self.admin.id)[0].id
122-
conversation = Conversation.find(id=convo_id)
132+
conversation = Conversation.find(id=self.admin_conv.id)
123133
conversation.read = False
124134
conversation.save()
125-
conversation = Conversation.find(id=convo_id)
126-
# CANNOT MARK AS UNREAD VIA API
127-
# self.assertFalse(conversation.read)
135+
conversation = Conversation.find(id=self.admin_conv.id)
136+
self.assertFalse(conversation.read)
128137
conversation.read = True
129138
conversation.save()
130-
conversation = Conversation.find(id=convo_id)
139+
conversation = Conversation.find(id=self.admin_conv.id)
131140
self.assertTrue(conversation.read)

tests/integration/test_notes.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,24 @@
44
import unittest
55
from intercom import Intercom
66
from intercom import Note
7+
from . import delete
8+
from . import get_or_create_user
9+
from . import get_timestamp
710

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

1114

1215
class NoteTest(unittest.TestCase):
13-
email = "ada@example.com"
16+
@classmethod
17+
def setup_class(cls):
18+
timestamp = get_timestamp()
19+
cls.user = get_or_create_user(timestamp)
20+
cls.email = cls.user.email
21+
22+
@classmethod
23+
def teardown_class(cls):
24+
delete(cls.user)
1425

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

3041
def test_find_all_email(self):
3142
# Iterate over all notes for a user via their email address
32-
for note in Note.find_all(email=self.email):
43+
notes = Note.find_all(email=self.email)
44+
for note in notes:
3345
self.assertTrue(note.id is not None)
3446
user = note.user.load()
3547
self.assertEqual(user.email, self.email)
48+
break
3649

3750
def test_find_all_id(self):
3851
from intercom.user import User

tests/integration/test_segments.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,24 @@
1212

1313

1414
class SegmentTest(unittest.TestCase):
15-
email = "ada@example.com"
1615

1716
@classmethod
1817
def setup_class(cls):
19-
# get user
20-
cls.segment_id = "5425e77db351e072bb000017"
18+
cls.segment = Segment.all()[0]
2119

2220
def test_find_segment(self):
2321
# Find a segment
24-
segment = Segment.find(id=self.segment_id)
25-
self.assertEqual(segment.id, self.segment_id)
22+
segment = Segment.find(id=self.segment.id)
23+
self.assertEqual(segment.id, self.segment.id)
2624

2725
def test_save_segment(self):
2826
# Update a segment
29-
segment = Segment.find(id=self.segment_id)
27+
segment = Segment.find(id=self.segment.id)
3028
now = datetime.utcnow()
3129
updated_name = 'Updated %s' % (time.mktime(now.timetuple()))
3230
segment.name = updated_name
3331
segment.save()
34-
segment = Segment.find(id=self.segment_id)
32+
segment = Segment.find(id=self.segment.id)
3533
self.assertEqual(segment.name, updated_name)
3634

3735
def test_iterate(self):

0 commit comments

Comments
 (0)