<commit_before>from unittest import mock
from django.test import TestCase, override_settings

from promgen import models
from promgen.sender.linenotify import SenderLineNotify
from promgen.tests import TEST_ALERT, TEST_SETTINGS


_MESSAGE = '''node_down foo-BETA testhost.localhost:9100 node resolved

description: testhost.localhost:9100 of job node has been down for more than 5 minutes.
summary: Instance testhost.localhost:9100 down

Prometheus: https://monitoring.promehteus.localhost/graph#%5B%7B%22expr%22%3A%22up%20%3D%3D%200%22%2C%22tab%22%3A0%7D%5D
Alert Manager: https://am.promehteus.localhost'''


class LineNotifyTest(TestCase):
    @mock.patch('django.db.models.signals.post_save', mock.Mock())
    def setUp(self):
        self.service = models.Service.objects.create(name='Service 1')
        self.project = models.Project.objects.create(name='Project 1', service=self.service)
        self.sender = models.Sender.objects.create(
            project=self.project,
            sender='promgen.sender.linenotify',
            value='hogehoge',
        )

    @override_settings(PROMGEN=TEST_SETTINGS)
    @mock.patch('requests.post')
    def test_project(self, mock_post):
        self.assertEqual(SenderLineNotify().send(TEST_ALERT), 1)
        mock_post.assert_called_once_with(
            'https://notify.example',
            data={'message': _MESSAGE},
            headers={'Authorization': 'Bearer hogehoge'},
        )<commit_msg>Convert promgen.sender.linenotify to class<commit_after>from unittest import mock

from django.contrib.contenttypes.models import ContentType
from django.test import TestCase, override_settings

from promgen import models
from promgen.sender.linenotify import SenderLineNotify
from promgen.tests import TEST_ALERT, TEST_SETTINGS


_MESSAGE = '''node_down foo-BETA testhost.localhost:9100 node resolved

description: testhost.localhost:9100 of job node has been down for more than 5 minutes.
summary: Instance testhost.localhost:9100 down

Prometheus: https://monitoring.promehteus.localhost/graph#%5B%7B%22expr%22%3A%22up%20%3D%3D%200%22%2C%22tab%22%3A0%7D%5D
Alert Manager: https://am.promehteus.localhost'''


class LineNotifyTest(TestCase):
    @mock.patch('django.db.models.signals.post_save', mock.Mock())
    def setUp(self):
        project_type = ContentType.objects.get_by_natural_key('promgen', 'Project')
        self.service = models.Service.objects.create(name='Service 1')
        self.project = models.Project.objects.create(name='Project 1', service=self.service)
        self.sender = models.Sender.objects.create(
            object_id=self.project.id,
            content_type_id=project_type.id,
            sender='promgen.sender.linenotify',
            value='hogehoge',
        )

    @override_settings(PROMGEN=TEST_SETTINGS)
    @mock.patch('requests.post')
    def test_project(self, mock_post):
        self.assertTrue(SenderLineNotify().send(TEST_ALERT))
        mock_post.assert_called_once_with(
            'https://notify.example',
            data={'message': _MESSAGE},
            headers={'Authorization': 'Bearer hogehoge'},
        )
{'fraction_non_alphanumeric': 0.11456, 'fraction_numerical': 0.0272, 'mean_word_length': 4.009615384615385, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1762953', 'n_tokens_mistral': 1018, 'n_tokens_neox': 960, 'n_words': 174}