|
2 | 2 |
|
3 | 3 | """pytest Messages functions, fixtures and tests."""
|
4 | 4 |
|
| 5 | +import itertools |
5 | 6 |
|
6 | 7 | import pytest
|
7 | 8 |
|
8 | 9 | import ciscosparkapi
|
9 |
| -from tests.utils import create_string |
| 10 | +from tests.conftest import TEST_FILE_URL |
| 11 | +from tests.utils import create_string, download_file |
10 | 12 |
|
11 | 13 |
|
12 | 14 | # Helper Functions
|
13 | 15 |
|
14 |
| -def send_direct_message_to_email(api, email, message=None): |
15 |
| - msg_text = message if message else create_string("Message") |
16 |
| - return api.messages.create(toPersonEmail=email, text=msg_text) |
| 16 | +def create_message(api, **message_attributes): |
| 17 | + return api.messages.create(**message_attributes) |
| 18 | + |
| 19 | + |
| 20 | +def get_message_by_id(api, id): |
| 21 | + return api.messages.get(id) |
17 | 22 |
|
18 | 23 |
|
19 | 24 | def delete_message(api, message):
|
20 | 25 | api.messages.delete(message.id)
|
21 | 26 |
|
22 | 27 |
|
23 |
| -def delete_messages(api, messages): |
24 |
| - for message in messages: |
| 28 | +def delete_messages(api, iterable): |
| 29 | + for message in iterable: |
25 | 30 | delete_message(api, message)
|
26 | 31 |
|
27 | 32 |
|
| 33 | +def list_messages(api, roomId, **query_parameters): |
| 34 | + return list(api.messages.list(roomId, **query_parameters)) |
| 35 | + |
| 36 | + |
| 37 | +def is_valid_message(obj): |
| 38 | + return isinstance(obj, ciscosparkapi.Message) and obj.id is not None |
| 39 | + |
| 40 | + |
| 41 | +def are_valid_messages(iterable): |
| 42 | + return all([is_valid_message(obj) for obj in iterable]) |
| 43 | + |
| 44 | + |
| 45 | +def message_exists(api, message): |
| 46 | + try: |
| 47 | + api.messages.get(message.id) |
| 48 | + except ciscosparkapi.SparkApiError: |
| 49 | + return False |
| 50 | + else: |
| 51 | + return True |
| 52 | + |
| 53 | + |
28 | 54 | # pytest Fixtures
|
29 | 55 |
|
30 | 56 | @pytest.fixture(scope="session")
|
31 |
| -def direct_messages(api, additional_group_room_memberships, test_people): |
32 |
| - # Using additional_group_room_memberships to ensure some test_people |
33 |
| - # have been created |
34 |
| - direct_messages = [] |
35 |
| - for person in test_people: |
36 |
| - message = send_direct_message_to_email(api, person.emails[0]) |
37 |
| - direct_messages.append(message) |
| 57 | +def direct_message_by_email(api, test_people): |
| 58 | + person = test_people["member_added_by_email"] |
| 59 | + message = create_message(api, toPersonEmail=person.emails[0], |
| 60 | + text=create_string("Message")) |
38 | 61 |
|
39 |
| - yield direct_messages |
| 62 | + yield message |
40 | 63 |
|
41 |
| - for message in direct_messages: |
42 |
| - delete_message(api, message) |
| 64 | + delete_message(api, message) |
43 | 65 |
|
44 | 66 |
|
45 | 67 | @pytest.fixture(scope="session")
|
46 |
| -def send_direct_message(api): |
| 68 | +def direct_message_by_id(api, test_people): |
| 69 | + person = test_people["member_added_by_id"] |
| 70 | + message = create_message(api, toPersonId=person.id, |
| 71 | + text=create_string("Message")) |
| 72 | + |
| 73 | + yield message |
47 | 74 |
|
48 |
| - def inner_function(email_address, message=None): |
49 |
| - send_direct_message_to_email(api, email_address, message=message) |
| 75 | + delete_message(api, message) |
50 | 76 |
|
51 |
| - return inner_function |
| 77 | + |
| 78 | +@pytest.fixture(scope="session") |
| 79 | +def send_group_room_message(api): |
| 80 | + messages = [] |
| 81 | + |
| 82 | + def inner_function(roomId, **message_attributes): |
| 83 | + message = create_message(api, roomId=roomId, **message_attributes) |
| 84 | + messages.append(message) |
| 85 | + return message |
| 86 | + |
| 87 | + yield inner_function |
| 88 | + |
| 89 | + for message in messages: |
| 90 | + try: |
| 91 | + delete_message(api, message) |
| 92 | + except ciscosparkapi.SparkApiError as e: |
| 93 | + pass |
| 94 | + |
| 95 | + |
| 96 | +@pytest.fixture(scope="session") |
| 97 | +def group_room_text_message(group_room, send_group_room_message): |
| 98 | + text = create_string("Message") |
| 99 | + return send_group_room_message(group_room.id, text=text) |
| 100 | + |
| 101 | + |
| 102 | +@pytest.fixture(scope="session") |
| 103 | +def group_room_markdown_message(group_room, send_group_room_message, me, |
| 104 | + group_room_member_added_by_email, |
| 105 | + group_room_text_message): |
| 106 | + # Uses / depends on group_room_text_message to ensure this message is |
| 107 | + # created after group_room_text_message, so that we can be sure that a |
| 108 | + # message exists 'before' this one - used to test 'before' list filters. |
| 109 | + mention_email = me.emails[0] |
| 110 | + markdown = create_string("<personEmail:{}>, This is **markdown** with a " |
| 111 | + "mention.".format(mention_email)) |
| 112 | + return send_group_room_message(group_room.id, markdown=markdown) |
| 113 | + |
| 114 | + |
| 115 | +@pytest.fixture(scope="session") |
| 116 | +def group_room_file_by_URL_message(group_room, send_group_room_message): |
| 117 | + text = "File posted via URL" |
| 118 | + return send_group_room_message(group_room.id, text=text, |
| 119 | + files=[TEST_FILE_URL]) |
| 120 | + |
| 121 | + |
| 122 | +@pytest.fixture(scope="session") |
| 123 | +def group_room_file_by_local_upload_message(api, group_room, local_file, |
| 124 | + send_group_room_message): |
| 125 | + text = "File posted via URL" |
| 126 | + return send_group_room_message(group_room.id, text=text, |
| 127 | + files=[local_file]) |
| 128 | + |
| 129 | + |
| 130 | +@pytest.fixture(scope="session") |
| 131 | +def group_room_messages(api, group_room, |
| 132 | + group_room_text_message, |
| 133 | + group_room_markdown_message, |
| 134 | + group_room_file_by_URL_message, |
| 135 | + group_room_file_by_local_upload_message): |
| 136 | + return list(list_messages(api, group_room.id)) |
| 137 | + |
| 138 | + |
| 139 | +@pytest.fixture(scope="session") |
| 140 | +def direct_messages(api, direct_message_by_email, direct_message_by_id): |
| 141 | + return [direct_message_by_email, direct_message_by_id] |
| 142 | + |
| 143 | + |
| 144 | +# Tests |
| 145 | + |
| 146 | +class TestMessagesAPI(object): |
| 147 | + """Test MessagesAPI methods.""" |
| 148 | + |
| 149 | + def test_create_direct_messages_by_email(self, direct_message_by_email): |
| 150 | + assert is_valid_message(direct_message_by_email) |
| 151 | + |
| 152 | + def test_create_direct_messages_by_id(self, direct_message_by_id): |
| 153 | + assert is_valid_message(direct_message_by_id) |
| 154 | + |
| 155 | + def test_create_text_message(self, group_room_text_message): |
| 156 | + assert is_valid_message(group_room_text_message) |
| 157 | + |
| 158 | + def test_create_markdown_message(self, group_room_markdown_message): |
| 159 | + assert is_valid_message(group_room_markdown_message) |
| 160 | + |
| 161 | + def test_post_file_by_url(self, group_room_file_by_URL_message): |
| 162 | + assert is_valid_message(group_room_file_by_URL_message) |
| 163 | + |
| 164 | + def test_post_file_by_local_upload(self, group_room_file_by_local_upload_message): |
| 165 | + assert is_valid_message(group_room_file_by_local_upload_message) |
| 166 | + |
| 167 | + def test_get_message_by_id(self, api, group_room_text_message): |
| 168 | + message = get_message_by_id(api, group_room_text_message.id) |
| 169 | + assert is_valid_message(message) |
| 170 | + |
| 171 | + def test_delete_message(self, api, group_room, send_group_room_message): |
| 172 | + text = create_string("Message") |
| 173 | + message = create_message(api, roomId=group_room.id, text=text) |
| 174 | + assert is_valid_message(message) |
| 175 | + delete_message(api, message) |
| 176 | + assert not message_exists(api, message) |
| 177 | + |
| 178 | + def test_list_all_messages_in_room(self, group_room_messages): |
| 179 | + assert len(group_room_messages) >= 1 |
| 180 | + assert are_valid_messages(group_room_messages) |
| 181 | + |
| 182 | + def test_list_messages_before(self, api, group_room, |
| 183 | + group_room_markdown_message): |
| 184 | + message_list = list_messages(api, group_room.id, |
| 185 | + before=group_room_markdown_message.created) |
| 186 | + assert len(message_list) >= 1 |
| 187 | + assert are_valid_messages(message_list) |
| 188 | + |
| 189 | + def test_list_messages_before_message(self, api, group_room, |
| 190 | + group_room_markdown_message): |
| 191 | + message_list = list_messages(api, group_room.id, |
| 192 | + beforeMessage=group_room_markdown_message.id) |
| 193 | + assert len(message_list) >= 1 |
| 194 | + assert are_valid_messages(message_list) |
| 195 | + |
| 196 | + def test_list_messages_with_paging(self, api, group_room, |
| 197 | + group_room_messages): |
| 198 | + page_size = 1 |
| 199 | + pages = 3 |
| 200 | + num_messages = pages * page_size |
| 201 | + assert len(group_room_messages) >= num_messages |
| 202 | + messages = list_messages(api, group_room.id, max=page_size) |
| 203 | + messages_list = list(itertools.islice(messages, num_messages)) |
| 204 | + assert len(messages_list) == num_messages |
| 205 | + assert are_valid_messages(messages_list) |
| 206 | + |
| 207 | + # TODO: Investigate API list messages with 'me' mentions not working |
| 208 | + # def test_list_messages_with_me_mention(self, api, group_room, me): |
| 209 | + # messages = list_messages(api, group_room.id, mentionedPeople=["me"]) |
| 210 | + # messages_list = list(messages) |
| 211 | + # assert len(messages_list) >= 1 |
| 212 | + # assert are_valid_messages(messages_list) |
0 commit comments