def test__update_monitored_sub_from_wiki_unmapped_value(self):
     config = Config(sub_monitor_exposed_config_options=['remove_repost'])
     monitored_sub = MonitoredSub(name='test', remove_repost=False)
     config_updater = self.get_config_updater(config)
     config_updater._update_monitored_sub_from_wiki(monitored_sub,
                                                    {'remove_repost': True})
     self.assertTrue(monitored_sub.remove_repost)
 def test__create_wiki_config_from_database_unmapped_value(self):
     config = Config(sub_monitor_exposed_config_options=['remove_repost'])
     monitored_sub = MonitoredSub(name='test', remove_repost=True)
     config_updater = self.get_config_updater(config)
     r = config_updater._create_wiki_config_from_database(monitored_sub)
     self.assertTrue('remove_repost' in r)
     self.assertTrue(r['remove_repost'])
 def test__create_wiki_config_from_database_mapped_value(self):
     config = Config(
         sub_monitor_exposed_config_options=['only_comment_on_repost'])
     monitored_sub = MonitoredSub(name='test', repost_only=False)
     config_updater = self.get_config_updater(config)
     r = config_updater._create_wiki_config_from_database(monitored_sub)
     self.assertTrue('only_comment_on_repost' in r)
     self.assertFalse(r['only_comment_on_repost'])
Beispiel #4
0
 def test__send_mod_mail_not_enabled(self, mock_len):
     mock_len.return_value = 5
     mock_response_handler = Mock(send_mod_mail=Mock())
     sub_monitor = SubMonitor(MagicMock(), MagicMock(), MagicMock(), MagicMock(), mock_response_handler,
                              config=MagicMock())
     monitored_sub = MonitoredSub(name='testsubreddit', send_repost_modmail=True)
     sub_monitor._send_mod_mail(monitored_sub, Mock(matches=[], checked_post=Mock(post_id='abc123')))
     expected_message_body = 'Post [https://redd.it/abc123](https://redd.it/abc123) looks like a repost. I found 5 matches'
     mock_response_handler.send_mod_mail.assert_called_with('testsubreddit', 'Repost found in r/testsubreddit', expected_message_body)
 def test__get_missing_config_values_one_missing(self):
     config = Config(sub_monitor_exposed_config_options=[
         'only_comment_on_repost', 'repost_only'
     ])
     monitored_sub = MonitoredSub(name='test', repost_only=False)
     config_updater = self.get_config_updater(config)
     r = config_updater._get_missing_config_values({'repost_only': True})
     self.assertTrue(len(r) == 1)
     self.assertTrue('only_comment_on_repost' in r)
 def test_is_already_active_true(self):
     sub_repo = MagicMock()
     uow = MagicMock()
     uowm = MagicMock()
     sub_repo.get_by_sub.return_value = MonitoredSub(name='testsub', id=123)
     type(uow).monitored_sub = mock.PropertyMock(return_value=sub_repo)
     uow.__enter__.return_value = uow
     uow.commit.return_value = None
     uowm.start.return_value = uow
     monitor = NewActivationMonitor(uowm, Mock())
     self.assertTrue(monitor.is_already_active('testsub'))
def create_monitored_sub_in_db(subreddit_name: Text,
                               uow: UnitOfWork,
                               wiki_managed: bool = False) -> MonitoredSub:

    monitored_sub = MonitoredSub(name=subreddit_name)
    for k, v in DEFAULT_CONFIG_VALUES.items():
        if hasattr(monitored_sub, k):
            setattr(monitored_sub, k, v)
    monitored_sub.wiki_managed = wiki_managed
    uow.monitored_sub.add(monitored_sub)
    try:
        uow.commit()
        log.info('Sub %s added as monitored sub', subreddit_name)
    except IntegrityError as e:
        log.error('Failed to create monitored sub for %s.  It already exists',
                  subreddit_name,
                  exc_info=True)
    except Exception as e:
        log.exception('Unknown exception saving monitored sub', exc_info=True)
        raise

    return monitored_sub
 def test__create_monitored_sub_in_db_already_exists(self):
     sub_repo = MagicMock()
     uow = MagicMock()
     uowm = MagicMock()
     sub_repo.get_by_sub.return_value = MonitoredSub(name='testsub', id=123)
     type(uow).monitored_sub = mock.PropertyMock(return_value=sub_repo)
     uow.__enter__.return_value = uow
     uow.commit.return_value = None
     uowm.start.return_value = uow
     monitor = NewActivationMonitor(uowm, Mock())
     result = monitor._create_monitored_sub_in_db(
         Mock(subreddit=Mock(display_name='testsub')))
     self.assertEqual(123, result.id)
 def test__notify_added(self):
     sub_repo = MagicMock()
     uow = MagicMock()
     uowm = MagicMock()
     sub_repo.get_by_sub.return_value = MonitoredSub(name='testsub')
     type(uow).monitored_sub = mock.PropertyMock(return_value=sub_repo)
     uow.__enter__.return_value = uow
     uow.commit.return_value = None
     uowm.start.return_value = uow
     monitor = NewActivationMonitor(uowm, Mock())
     subreddit = Mock(message=Mock(return_value=None),
                      display_name='testsub')
     monitor._notify_added(subreddit)
     subreddit.message.assert_called()
     self.assertTrue(sub_repo.get_by_sub.activation_notification_sent)
 def test_get_image_search_settings_for_monitored_sub(self):
     monitored_sub = MonitoredSub(
         target_image_match=51,
         target_image_meme_match=66,
         meme_filter=True,
         target_title_match=88,
         check_title_similarity=True,
         same_sub_only=True,
         target_days_old=44,
         filter_same_author=False,
         filter_crossposts=False
     )
     r = get_image_search_settings_for_monitored_sub(monitored_sub, target_annoy_distance=170.0)
     self.assertEqual(51, r.target_match_percent)
     self.assertEqual(66, r.target_meme_match_percent)
     self.assertTrue(r.meme_filter)
     self.assertEqual(88, r.target_title_match)
     self.assertEqual(200, r.max_matches)
     self.assertTrue(r.same_sub)
     self.assertEqual(44, r.max_days_old)
     self.assertFalse(r.filter_same_author)
     self.assertFalse(r.filter_crossposts)
Beispiel #11
0
 def _get_monitored_sub(self):
     return MonitoredSub(
         repost_response_template='This is a custom repost template. {match_count} matches',
         oc_response_template='This is a custom OC template. Random Sub {this_subreddit}'
     )