def test_retrieve_mixed_signals(self): # A bunch of normal signals that should never be retrieved by this filter SignalFactory.create_batch(5) now = timezone.now() with freeze_time(now - timedelta(hours=1)): parents_with_changes = SignalFactory.create_batch(3) parents_without_changes = SignalFactory.create_batch(2) with freeze_time(now): for parent_signal in parents_with_changes: SignalFactory(parent=parent_signal) for parent_signal in parents_without_changes: SignalFactory(parent=parent_signal) with freeze_time(now + timedelta(hours=1)): for parent_signal in parents_without_changes: parent_signal.save() filter_params = {'has_changed_children': True} ids = self._request_filter_signals(filter_params) self.assertEqual(len(ids), len(parents_with_changes)) self.assertEqual( set(ids), set([parent_signal.id for parent_signal in parents_with_changes])) filter_params = {'has_changed_children': False} ids = self._request_filter_signals(filter_params) self.assertEqual(len(ids), len(parents_without_changes)) self.assertEqual( set(ids), set([ parent_signal.id for parent_signal in parents_without_changes ]))
def test_retrieve_all_parents_with_changes_in_children(self): now = timezone.now() with freeze_time(now - timedelta(hours=1)): parent_signal = SignalFactory() with freeze_time(now): SignalFactory(parent=parent_signal) filter_params = {'has_changed_children': True} ids = self._request_filter_signals(filter_params) self.assertEqual(len(ids), 1) self.assertEqual(ids, [parent_signal.id])
def setUp(self): self.keyword = 'KEYWORD' text_no_keyword = 'blah blah blah' text_with_keyword = f'blah blah blah {self.keyword} blah blah blah' self.signal_with_keyword = SignalFactory() NoteFactory(_signal=self.signal_with_keyword, text=text_no_keyword) NoteFactory(_signal=self.signal_with_keyword, text=text_no_keyword) NoteFactory(_signal=self.signal_with_keyword, text=text_with_keyword) NoteFactory(_signal=self.signal_with_keyword, text=text_with_keyword) self.signal_no_keyword = SignalFactory() NoteFactory(_signal=self.signal_with_keyword, text=text_no_keyword)
def setUp(self) -> None: self.signal = SignalFactory() self.reporter = ReporterFactory( _signal=self.signal, email='*****@*****.**', email_anonymized=False, phone_anonymized=False, )
def test_retrieve_multiple(self): now = timezone.now() with freeze_time(now - timedelta(hours=1)): parents_with_changes = SignalFactory.create_batch(3) parents_without_changes = SignalFactory.create_batch(2) with freeze_time(now): for parent_signal in parents_with_changes: SignalFactory(parent=parent_signal) for parent_signal in parents_without_changes: SignalFactory(parent=parent_signal) with freeze_time(now + timedelta(hours=1)): for parent_signal in parents_without_changes: parent_signal.save() filter_params = {'has_changed_children': ['true', 0]} ids = self._request_filter_signals(filter_params) self.assertEqual( len(ids), len(parents_with_changes) + len(parents_without_changes))
def setUp(self): self.signal = SignalFactory(id=1, location__id=1, status__id=1, category_assignment__id=1, reporter__id=1, priority__id=1) self.sia_read_write_user.user_permissions.add( Permission.objects.get(codename='sia_can_view_all_categories')) # Forcing authentication self.client.force_authenticate(user=self.sia_read_write_user) # Add one note to the signal self.note = NoteFactory(id=1, _signal=self.signal)
def setUp(self): self.signal = SignalFactory() self.category = CategoryFactory() self.category_assignment = CategoryAssignment.objects.create( category=self.category, _signal_id=self.signal.id) self.link_category = '/signals/v1/public/terms/categories/{}/sub_categories/{}'.format( self.category.parent.slug, self.category.slug) geometry = MultiPolygon( [Polygon.from_bbox([4.877157, 52.357204, 4.929686, 52.385239])], srid=4326) self.pt_in_center = Point(4.88, 52.36) self.pt_out_center = Point(6, 53) self.area = AreaFactory.create(geometry=geometry, name='Centrum', code='centrum', _type__code='district')
def test_feedback_received_action_context(self): text = 'my text' text_extra = 'my extra text' signal = SignalFactory() feedback = FeedbackFactory.create(text=text, text_extra=text_extra, allows_contact=True, is_satisfied=False, token=uuid.uuid4(), _signal=signal) action = MailService._system_actions.get('feedback_received')() action(signal=signal, feedback=feedback) result = action.get_additional_context(signal) self.assertIn('feedback_text', result) self.assertIn('feedback_text_extra', result) self.assertIn('feedback_allows_contact', result) self.assertIn('feedback_is_satisfied', result) self.assertEqual(result['feedback_text'], text) self.assertEqual(result['feedback_text_extra'], text_extra) self.assertTrue(result['feedback_allows_contact']) self.assertFalse(result['feedback_is_satisfied'])
def test_from_signal_and_category(self): """ Call into the deadline calculation service using Django ORM objects. """ tzinfo = get_default_timezone() start = datetime(2021, 2, 19, 12, 0, 0, tzinfo=tzinfo) true_deadline = datetime(2021, 2, 22, 12, 0, 0, tzinfo=tzinfo) true_deadline_factor_3 = datetime(2021, 2, 24, 12, 0, 0, tzinfo=tzinfo) cat = CategoryFactory.create() ServiceLevelObjectiveFactory.create(n_days=1, use_calendar_days=False, category=cat) with freeze_time(start): signal = SignalFactory(category_assignment__category=cat) deadline, deadline_factor_3 = DeadlineCalculationService.from_signal_and_category( signal, cat) self.assertEqual(deadline, true_deadline) self.assertEqual(deadline_factor_3, true_deadline_factor_3) self.assertTrue(is_aware(deadline)) self.assertTrue(is_aware(deadline_factor_3))
def test_send_system_email_dry_run(self): action = MailService._system_actions.get('feedback_received')() signal = SignalFactory() feedback = FeedbackFactory.create(token=uuid.uuid4(), _signal=signal) self.assertTrue(action(signal=signal, dry_run=True, feedback=feedback))