Skip to content

Commit bab0a62

Browse files
author
Rachel Sanders
committed
Merge pull request #17 from linkedin/pytest
Migrated from nose to pytests, and added coveralls
2 parents f3b9514 + 489a46f commit bab0a62

14 files changed

+207
-182
lines changed

.travis.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@ install:
99
- pip install -r dev_requirements.txt
1010

1111
# command to run tests
12-
script: nosetests tests
12+
script: py.test --cov pyexchange tests
13+
14+
after_success:
15+
coveralls

dev_requirements.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
sphinx
2-
nose
2+
pytest
3+
pytest-cov
34
httpretty
45
flake8
56

tests/exchange2010/test_create_event.py

+60-53
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
55
Unless required by applicable law or agreed to in writing, software?distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
66
"""
7+
import unittest
78
from httpretty import HTTPretty, httprettified
8-
from nose.tools import eq_, raises
9+
from pytest import raises
910
from pyexchange import Exchange2010Service
1011

1112
from pyexchange.connection import ExchangeNTLMAuthConnection
@@ -15,12 +16,12 @@
1516
from .fixtures import *
1617
from .. import wip
1718

18-
class Test_PopulatingANewEvent():
19+
class Test_PopulatingANewEvent(unittest.TestCase):
1920
""" Tests all the attribute setting works when creating a new event """
2021
calendar = None
2122

2223
@classmethod
23-
def setUpAll(cls):
24+
def setUpClass(cls):
2425

2526
cls.calendar = Exchange2010Service(connection=ExchangeNTLMAuthConnection(url=FAKE_EXCHANGE_URL,
2627
username=FAKE_EXCHANGE_USERNAME,
@@ -33,124 +34,130 @@ def test_canary(self):
3334

3435
def test_events_created_dont_have_an_id(self):
3536
event = self.calendar.event()
36-
eq_(event.id, None)
37+
assert event.id is None
3738

3839
def test_can_add_a_subject(self):
3940
event = self.calendar.event(subject=TEST_EVENT.subject)
40-
eq_(event.subject, TEST_EVENT.subject)
41+
assert event.subject == TEST_EVENT.subject
4142

4243
def test_can_add_a_location(self):
4344
event = self.calendar.event(location=TEST_EVENT.location)
44-
eq_(event.location, TEST_EVENT.location)
45+
assert event.location == TEST_EVENT.location
4546

4647
def test_can_add_an_html_body(self):
4748
event = self.calendar.event(html_body=TEST_EVENT.body)
48-
eq_(event.html_body, TEST_EVENT.body)
49-
eq_(event.text_body, None)
50-
eq_(event.body, TEST_EVENT.body)
49+
assert event.html_body == TEST_EVENT.body
50+
assert event.text_body is None
51+
assert event.body == TEST_EVENT.body
5152

5253
def test_can_add_a_text_body(self):
5354
event = self.calendar.event(text_body=TEST_EVENT.body)
54-
eq_(event.text_body, TEST_EVENT.body)
55-
eq_(event.html_body, None)
56-
eq_(event.body, TEST_EVENT.body)
55+
assert event.text_body == TEST_EVENT.body
56+
assert event.html_body is None
57+
assert event.body == TEST_EVENT.body
5758

5859
def test_can_add_a_start_time(self):
5960
event = self.calendar.event(start=TEST_EVENT.start)
60-
eq_(event.start, TEST_EVENT.start)
61+
assert event.start == TEST_EVENT.start
6162

6263
def test_can_add_an_end_time(self):
6364
event = self.calendar.event(end=TEST_EVENT.end)
64-
eq_(event.end, TEST_EVENT.end)
65+
assert event.end == TEST_EVENT.end
6566

6667
def test_can_add_attendees_via_email(self):
6768
event = self.calendar.event(attendees=PERSON_REQUIRED_ACCEPTED.email)
68-
eq_(len(event.attendees), 1)
69-
eq_(len(event.required_attendees), 1)
70-
eq_(len(event.optional_attendees), 0)
71-
eq_(event.attendees[0].email, PERSON_REQUIRED_ACCEPTED.email)
69+
assert len(event.attendees) == 1
70+
assert len(event.required_attendees) == 1
71+
assert len(event.optional_attendees) == 0
72+
assert event.attendees[0].email == PERSON_REQUIRED_ACCEPTED.email
7273

7374
def test_can_add_multiple_attendees_via_email(self):
7475
event = self.calendar.event(attendees=[PERSON_REQUIRED_ACCEPTED.email, PERSON_REQUIRED_TENTATIVE.email])
75-
eq_(len(event.attendees), 2)
76-
eq_(len(event.required_attendees), 2)
77-
eq_(len(event.optional_attendees), 0)
76+
assert len(event.attendees) == 2
77+
assert len(event.required_attendees) == 2
78+
assert len(event.optional_attendees) == 0
7879

7980
def test_can_add_attendees_via_named_tuple(self):
8081

8182
person = ExchangeEventAttendee(name=PERSON_OPTIONAL_ACCEPTED.name, email=PERSON_OPTIONAL_ACCEPTED.email, required=PERSON_OPTIONAL_ACCEPTED.required)
8283

8384
event = self.calendar.event(attendees=person)
84-
eq_(len(event.attendees), 1)
85-
eq_(len(event.required_attendees), 0)
86-
eq_(len(event.optional_attendees), 1)
87-
eq_(event.attendees[0].email, PERSON_OPTIONAL_ACCEPTED.email)
85+
assert len(event.attendees) == 1
86+
assert len(event.required_attendees) == 0
87+
assert len(event.optional_attendees) == 1
88+
assert event.attendees[0].email == PERSON_OPTIONAL_ACCEPTED.email
8889

8990
def test_can_assign_to_required_attendees(self):
9091

9192
event = self.calendar.event(attendees=PERSON_REQUIRED_ACCEPTED.email)
9293
event.required_attendees = [PERSON_REQUIRED_ACCEPTED.email, PERSON_OPTIONAL_ACCEPTED.email]
9394

94-
eq_(len(event.attendees), 2)
95-
eq_(len(event.required_attendees), 2)
96-
eq_(len(event.optional_attendees), 0)
95+
assert len(event.attendees) == 2
96+
assert len(event.required_attendees) == 2
97+
assert len(event.optional_attendees) == 0
9798

9899
def test_can_assign_to_optional_attendees(self):
99100

100101
event = self.calendar.event(attendees=PERSON_REQUIRED_ACCEPTED.email)
101102
event.optional_attendees = PERSON_OPTIONAL_ACCEPTED.email
102103

103-
eq_(len(event.attendees), 2)
104-
eq_(len(event.required_attendees), 1)
105-
eq_(len(event.optional_attendees), 1)
106-
eq_(event.required_attendees[0].email, PERSON_REQUIRED_ACCEPTED.email)
107-
eq_(event.optional_attendees[0].email, PERSON_OPTIONAL_ACCEPTED.email)
104+
assert len(event.attendees) == 2
105+
assert len(event.required_attendees) == 1
106+
assert len(event.optional_attendees) == 1
107+
assert event.required_attendees[0].email == PERSON_REQUIRED_ACCEPTED.email
108+
assert event.optional_attendees[0].email == PERSON_OPTIONAL_ACCEPTED.email
108109

109110

110111
def test_can_add_resources(self):
111112
event = self.calendar.event(resources=[RESOURCE.email])
112-
eq_(len(event.resources), 1)
113-
eq_(event.resources[0].email, RESOURCE.email)
114-
eq_(event.conference_room.email, RESOURCE.email)
113+
assert len(event.resources) == 1
114+
assert event.resources[0].email == RESOURCE.email
115+
assert event.conference_room.email == RESOURCE.email
115116

116117

117-
class Test_CreatingANewEvent(object):
118+
class Test_CreatingANewEvent(unittest.TestCase):
118119
service = None
119120
event = None
120121

121122
@classmethod
122-
def setUpAll(cls):
123+
def setUpClass(cls):
123124
cls.service = Exchange2010Service(connection=ExchangeNTLMAuthConnection(url=FAKE_EXCHANGE_URL, username=FAKE_EXCHANGE_USERNAME, password=FAKE_EXCHANGE_PASSWORD))
124125

125126
def setUp(self):
126127
self.event = self.service.calendar().event(start=TEST_EVENT.start, end=TEST_EVENT.end)
127128

128-
@raises(ValueError)
129129
def test_events_must_have_a_start_date(self):
130130
self.event.start = None
131-
self.event.create()
132131

133-
@raises(ValueError)
132+
with raises(ValueError):
133+
self.event.create()
134+
134135
def test_events_must_have_an_end_date(self):
135136
self.event.end = None
136-
self.event.create()
137137

138-
@raises(ValueError)
138+
with raises(ValueError):
139+
self.event.create()
140+
139141
def test_event_end_date_must_come_after_start_date(self):
140142
self.event.start, self.event.end = self.event.end, self.event.start
141-
self.event.create()
142143

143-
@raises(ValueError)
144+
with raises(ValueError):
145+
self.event.create()
146+
144147
def cant_delete_a_newly_created_event(self):
145-
self.event.delete()
146148

147-
@raises(ValueError)
149+
with raises(ValueError):
150+
self.event.delete()
151+
148152
def cant_update_a_newly_created_event(self):
149-
self.event.update()
150153

151-
@raises(ValueError)
154+
with raises(ValueError):
155+
self.event.update()
156+
152157
def cant_resend_invites_for_a_newly_created_event(self):
153-
self.event.resend_invitations()
158+
159+
with raises(ValueError):
160+
self.event.resend_invitations()
154161

155162
@httprettified
156163
def test_can_set_subject(self):
@@ -237,7 +244,6 @@ def test_attendees(self):
237244
for email in attendees:
238245
assert email in HTTPretty.last_request.body.decode('utf-8')
239246

240-
@raises(ValueError)
241247
def test_resources_must_have_an_email_address(self):
242248

243249
HTTPretty.register_uri(HTTPretty.POST, FAKE_EXCHANGE_URL,
@@ -246,8 +252,9 @@ def test_resources_must_have_an_email_address(self):
246252

247253
attendees = [PERSON_WITH_NO_EMAIL_ADDRESS]
248254

249-
self.event.attendees = attendees
250-
self.event.create()
255+
with raises(ValueError):
256+
self.event.attendees = attendees
257+
self.event.create()
251258

252259
@httprettified
253260
def test_resources(self):

tests/exchange2010/test_create_folder.py

+20-16
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
55
Unless required by applicable law or agreed to in writing, software?distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
66
"""
7+
import unittest
78
from httpretty import HTTPretty, httprettified
8-
from nose.tools import eq_, raises
9+
from pytest import raises
910
from pyexchange import Exchange2010Service
1011

1112
from pyexchange.connection import ExchangeNTLMAuthConnection
@@ -14,12 +15,12 @@
1415
from .fixtures import *
1516

1617

17-
class Test_PopulatingANewFolder():
18+
class Test_PopulatingANewFolder(unittest.TestCase):
1819
""" Tests all the attribute setting works when creating a new folder """
1920
folder = None
2021

2122
@classmethod
22-
def setUpAll(cls):
23+
def setUpClass(cls):
2324

2425
cls.folder = Exchange2010Service(
2526
connection=ExchangeNTLMAuthConnection(
@@ -35,27 +36,27 @@ def test_canary(self):
3536

3637
def test_folders_created_dont_have_an_id(self):
3738
folder = self.folder.new_folder()
38-
eq_(folder.id, None)
39+
assert folder.id is None
3940

4041
def test_folder_has_display_name(self):
4142
folder = self.folder.new_folder(display_name=u'Conference Room')
42-
eq_(folder.display_name, u'Conference Room')
43+
assert folder.display_name == u'Conference Room'
4344

4445
def test_folder_has_default_folder_type(self):
4546
folder = self.folder.new_folder()
46-
eq_(folder.folder_type, u'Folder')
47+
assert folder.folder_type == u'Folder'
4748

4849
def test_folder_has_calendar_folder_type(self):
4950
folder = self.folder.new_folder(folder_type=u'CalendarFolder')
50-
eq_(folder.folder_type, u'CalendarFolder')
51+
assert folder.folder_type == u'CalendarFolder'
5152

5253

53-
class Test_CreatingANewFolder(object):
54+
class Test_CreatingANewFolder(unittest.TestCase):
5455
service = None
5556
folder = None
5657

5758
@classmethod
58-
def setUpAll(cls):
59+
def setUpClass(cls):
5960
cls.service = Exchange2010Service(
6061
connection=ExchangeNTLMAuthConnection(
6162
url=FAKE_EXCHANGE_URL,
@@ -67,20 +68,23 @@ def setUpAll(cls):
6768
def setUp(self):
6869
self.folder = self.service.folder().new_folder()
6970

70-
@raises(AttributeError)
7171
def test_folders_must_have_a_display_name(self):
7272
self.parent_id = u'AQASAGFyMTY2AUB0eHN0YXRlLmVkdQAuAAADXToP9jZJ50ix6mBloAoUtQEAIXy9HV1hQUKHHMQm+PlY6QINNPfbUQAAAA=='
73-
self.folder.create()
7473

75-
@raises(ValueError)
74+
with raises(AttributeError):
75+
self.folder.create()
76+
77+
7678
def test_folders_must_have_a_parent_id(self):
7779
self.folder.display_name = u'Conference Room'
7880
self.parent_id = None
79-
self.folder.create()
8081

81-
@raises(TypeError)
82+
with raises(ValueError):
83+
self.folder.create()
84+
8285
def cant_delete_an_uncreated_folder(self):
83-
self.folder.delete()
86+
with raises(TypeError):
87+
self.folder.delete()
8488

8589
@httprettified
8690
def test_can_set_display_name(self):
@@ -146,4 +150,4 @@ def test_can_create(self):
146150
self.folder.folder_type = TEST_FOLDER.folder_type
147151
self.folder.create()
148152

149-
eq_(self.folder.id, TEST_FOLDER.id)
153+
assert self.folder.id == TEST_FOLDER.id

tests/exchange2010/test_delete_event.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,21 @@
44
55
Unless required by applicable law or agreed to in writing, software?distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
66
"""
7+
import unittest
78
import httpretty
8-
from nose.tools import eq_, raises
9+
from pytest import raises
910
from pyexchange import Exchange2010Service
1011
from pyexchange.connection import ExchangeNTLMAuthConnection
1112

1213
from .fixtures import *
1314
from .. import wip
1415

1516

16-
class Test_EventDeletion(object):
17+
class Test_EventDeletion(unittest.TestCase):
1718
event = None
1819

1920
@classmethod
20-
def setUpAll(cls):
21+
def setUpClass(cls):
2122
cls.service = Exchange2010Service(connection=ExchangeNTLMAuthConnection(url=FAKE_EXCHANGE_URL, username=FAKE_EXCHANGE_USERNAME, password=FAKE_EXCHANGE_PASSWORD))
2223

2324

@@ -43,10 +44,9 @@ def test_can_cancel_event(self):
4344
])
4445

4546
response = self.event.cancel()
46-
eq_(response, None)
47+
assert response is None
4748

4849

49-
@raises(TypeError)
5050
@httpretty.activate
5151
def test_cant_cancel_an_event_with_no_exchange_id(self):
5252
httpretty.register_uri(httpretty.POST, FAKE_EXCHANGE_URL,
@@ -55,5 +55,7 @@ def test_cant_cancel_an_event_with_no_exchange_id(self):
5555
self.delete_event_response,
5656
])
5757
unsaved_event = self.service.calendar().event()
58-
unsaved_event.cancel() #bzzt - can't do this
58+
59+
with raises(TypeError):
60+
unsaved_event.cancel() #bzzt - can't do this
5961

0 commit comments

Comments
 (0)