108 lines
4.2 KiB
Python
108 lines
4.2 KiB
Python
import uuid
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from company.models.company import Company
|
|
from incident.models import Incident
|
|
from ncircc.enums.notifications import EventTypeEnum
|
|
from ncircc.models.comments import Comment
|
|
from ncircc.models.notification import Notification
|
|
from ncircc.services.comments import CommentSenderService, CommentSuccessDataResponse, CommentsUpdaterService
|
|
from ncircc.tests.utils import mock_comments_request_post_status_200, mocked_notification_requests_post_status_400, \
|
|
mock_comments_request_get_all_200
|
|
|
|
|
|
@pytest.mark.django_db
|
|
class TestCommentsServices:
|
|
message = 'Test text'
|
|
uuid = 'dd6dda3b-68ee-4885-9186-b5fc56ab3f03'
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def setup_test(self, add_user_with_permissions) -> None:
|
|
self.user = add_user_with_permissions(username='username1', password='PasSwor1d1', is_superuser=True)
|
|
self.company = Company.objects.create(name='Test_name', api_key='test_api_key', city='Moscow')
|
|
self.incident = Incident.objects.create(title='test_inc_1', importance=10, event_count=10, events='')
|
|
|
|
self.notification = Notification.objects.create(
|
|
incident=self.incident,
|
|
affected_system_name='affected_system_name_test',
|
|
event_description='event_description_test',
|
|
type=EventTypeEnum.INVOLVING_INTO_MALWARE_INFRASTRUCTURE.value,
|
|
uuid=self.uuid
|
|
)
|
|
|
|
@pytest.mark.unit
|
|
def test_get_payload_for_comments(self):
|
|
sender = CommentSenderService(self.message, self.notification.pk, self.user)
|
|
payload = sender.get_payload()
|
|
assert isinstance(payload, dict)
|
|
assert 'incident.uuid' in payload
|
|
assert isinstance(payload['incident.uuid'], str)
|
|
assert 'data' in payload
|
|
assert 'comment' in payload['data']
|
|
assert payload['data']['comment'] == self.message
|
|
|
|
@pytest.mark.unit
|
|
@patch('requests.post', side_effect=mock_comments_request_post_status_200)
|
|
def test_send_valid_comment(self, *args):
|
|
before_comments_count = Comment.objects.count()
|
|
assert not before_comments_count
|
|
|
|
sender = CommentSenderService(self.message, self.notification.pk, self.user)
|
|
msg, status = sender.send()
|
|
|
|
assert status == 200
|
|
assert isinstance(msg, dict)
|
|
assert 'id' in msg
|
|
assert 'text' in msg
|
|
assert msg['text'] == self.message
|
|
assert 'create_time' in msg
|
|
assert 'login' in msg
|
|
assert 'notification' in msg
|
|
assert msg['notification'] == self.notification.pk
|
|
assert 'id_in_ncircc' in msg
|
|
assert 'from_console' in msg
|
|
assert msg['from_console']
|
|
assert 'is_read' in msg
|
|
assert msg['is_read']
|
|
after_comments_count = Comment.objects.count()
|
|
assert after_comments_count == 1
|
|
|
|
@pytest.mark.unit
|
|
@patch('requests.post', side_effect=mocked_notification_requests_post_status_400)
|
|
def test_send_not_valid_comment(self, *args):
|
|
sender = CommentSenderService(self.message, self.notification.pk, self.user)
|
|
msg, status = sender.send()
|
|
assert status == 400
|
|
assert msg == 'Error'
|
|
|
|
@pytest.mark.unit
|
|
def test_save(self):
|
|
message = 'Test text'
|
|
sender = CommentSenderService(message, self.notification.pk, self.user)
|
|
data = mock_comments_request_post_status_200().json()
|
|
sender._save(CommentSuccessDataResponse(**data.get('data', {})))
|
|
comment = Comment.objects.last()
|
|
assert comment
|
|
assert comment.text == message
|
|
assert comment.login == self.user.username
|
|
assert comment.create_time
|
|
assert comment.from_console
|
|
|
|
@pytest.mark.unit
|
|
@patch('requests.get', side_effect=mock_comments_request_get_all_200)
|
|
def test_comments_updater(self, *args):
|
|
""" Test CommentsUpdaterService"""
|
|
count_count_before = Comment.objects.count()
|
|
assert not count_count_before
|
|
updater = CommentsUpdaterService()
|
|
updater.send()
|
|
comments = Comment.objects.all()
|
|
assert len(comments) == 3
|
|
for comment in comments:
|
|
assert comment.notification.pk == self.notification.pk
|
|
assert not comment.from_console
|
|
|
|
|
|
|