# Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
# For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
import time
import pytest
from harness.api.contacts import AddContact, DeleteContactById
from harness.api.messages import AddMessage, DeleteMessageById
from harness.api.outbox import NotificationEntry, NotificationType, NotificationChange, GetNotifications, \
DeleteNotifications
from harness.request import TransactionError
class OutboxTester:
def __init__(self, harness):
self.harness = harness
def get_notifications(self):
try:
notifications = GetNotifications().run(self.harness).entries
except TransactionError:
return False
else:
return True, notifications
def delete_notifications(self, entries: list):
try:
DeleteNotifications(entries).run(self.harness)
except TransactionError:
return False
else:
return True
def add_message(self, message_number, message_body):
try:
message = AddMessage(message_number, message_body).run(self.harness).message
except TransactionError:
return False
else:
return True, message
def delete_message_by_id(self, message_record_id):
try:
DeleteMessageById(message_record_id).run(self.harness)
except TransactionError:
return False
else:
return True
def add_contact(self, contact_record):
try:
contact_id = AddContact(contact_record).run(self.harness).id
except TransactionError:
return False
else:
return True, contact_id
def delete_contact_by_id(self, contact_record_id):
try:
DeleteContactById(contact_record_id).run(self.harness)
except TransactionError:
return False
else:
return True
@pytest.mark.service_desktop_test
@pytest.mark.usefixtures("phone_unlocked")
def test_getting_notifications(harness):
outbox_tester = OutboxTester(harness)
result, received_notifications = outbox_tester.get_notifications()
assert result, "Failed to get notifications!"
assert not received_notifications, "Notification list is not empty at the beginning of the test!"
# Add message to generate "message created" and "thread created" notifications
message_number = "123456789"
message_body = "Hello, how are you?"
result, message_record = outbox_tester.add_message(message_number, message_body)
assert result, "Failed to add message!"
# Add contact to generate "contact created" notification
contact_record = {
"address": "6 Czeczota St.\n02600 Warsaw",
"altName": "Smith",
"email": "john.smith@mudita.com",
"blocked": False,
"favourite": False,
"ice": False,
"numbers": [
"123456789"
],
"speedDial": "1",
"priName": "John",
"note": "Some note"
}
result, contact_id = outbox_tester.add_contact(contact_record)
assert result, "Failed to add contact!"
result, received_notifications = outbox_tester.get_notifications()
assert result, "Failed to get notifications!"
# Check if all notifications are present
found_message_notification = False
for notification in received_notifications:
if notification.type == NotificationType.MESSAGE and notification.change == NotificationChange.CREATED \
and notification.record_id == message_record["messageID"]:
found_message_notification = True
break
found_thread_notification = False
for notification in received_notifications:
if notification.type == NotificationType.THREAD and notification.change == NotificationChange.CREATED:
found_thread_notification = True
break
found_contacts_notification = False
for notification in received_notifications:
if notification.type == NotificationType.CONTACT and notification.change == NotificationChange.CREATED \
and notification.record_id == contact_id:
found_contacts_notification = True
break
assert found_message_notification and found_thread_notification and found_contacts_notification
# Wait for 20 seconds to be sure that notifications are cleaned by timer
time.sleep(20)
result, received_notifications = outbox_tester.get_notifications()
assert result, "Failed to get notifications!"
assert not received_notifications, "Notification list is not empty after timeout!"
assert outbox_tester.delete_message_by_id(message_record["messageID"]), "Failed to delete a message!"
assert outbox_tester.delete_contact_by_id(contact_id), "Failed to delete a contact!"
@pytest.mark.service_desktop_test
@pytest.mark.usefixtures("phone_unlocked")
def test_deleting_notifications(harness):
outbox_tester = OutboxTester(harness)
result, received_notifications = outbox_tester.get_notifications()
assert result, "Failed to get notifications!"
assert not received_notifications, "Notification list is not empty at the beginning of the test!"
# Add message to generate "message created" and "thread created" notifications
message_number = "123456789"
message_body = "Hello, how are you?"
result, message_record = outbox_tester.add_message(message_number, message_body)
assert result, "Failed to add message!"
# Add contact to generate "contact created" notification
contact_record = {
"address": "6 Czeczota St.\n02600 Warsaw",
"altName": "Smith",
"email": "john.smith@mudita.com",
"blocked": False,
"favourite": False,
"ice": False,
"numbers": [
"123456789"
],
"speedDial": "1",
"priName": "John",
"note": "Some note"
}
result, contact_id = outbox_tester.add_contact(contact_record)
assert result, "Failed to add contact!"
result, received_notifications = outbox_tester.get_notifications()
assert result, "Failed to get notifications!"
uids_of_notifications_to_be_deleted = []
for notification in received_notifications:
uids_of_notifications_to_be_deleted.append(notification.uid)
result = outbox_tester.delete_notifications(uids_of_notifications_to_be_deleted)
assert result, "Failed to get notifications!"
# Check if all generated notifications are deleted
result, received_notifications = outbox_tester.get_notifications()
assert result, "Failed to get notifications!"
for notification in received_notifications:
assert notification.uid not in uids_of_notifications_to_be_deleted, "Notification not deleted!"
assert outbox_tester.delete_message_by_id(message_record["messageID"]), "Failed to delete a message!"
assert outbox_tester.delete_contact_by_id(contact_id), "Failed to delete a contact!"