예제 #1
0
    def test_multiple_context_hints_w_multiple_select_related_multiple_prefetch_related(
            self):
        source = N(models.Source, id=1)
        source2 = N(models.Source, id=2)
        qsets = context_loader.get_querysets_for_context_hints({
            source: {
                'key': {
                    'app_name': 'tests',
                    'model_name': 'TestModel',
                    'select_related': ['fk'],
                    'prefetch_related': ['fk_m2m'],
                },
            },
            source2: {
                'key2': {
                    'app_name': 'tests',
                    'model_name': 'TestModel',
                    'select_related': ['fk2'],
                },
            }
        })

        # Create objects to query in order to test optimal number of queries
        fk = G(test_models.TestFKModel)
        fk2 = G(test_models.TestFKModel2)
        o = G(test_models.TestModel, fk=fk, fk2=fk2)
        m2ms = [G(test_models.TestFKModel), G(test_models.TestFKModel)]
        o.fk_m2m.add(*m2ms)

        with self.assertNumQueries(2):
            v = qsets[test_models.TestModel].get(id=o.id)
            self.assertEquals(v.fk, fk)
            self.assertEquals(v.fk2, fk2)
            self.assertEquals(set(v.fk_m2m.all()), set(m2ms))
예제 #2
0
    def test_multiple_context_hints_w_multiple_select_related(self):
        source = N(models.Source, id=1)
        source2 = N(models.Source, id=2)
        qsets = context_loader.get_querysets_for_context_hints({
            source: {
                'key': {
                    'app_name': 'tests',
                    'model_name': 'TestModel',
                    'select_related': ['fk'],
                },
            },
            source2: {
                'key2': {
                    'app_name': 'tests',
                    'model_name': 'TestModel',
                    'select_related': ['fk2'],
                },
            }
        })
        # Verify the raw sql to ensure select relateds will happen
        expected_sql = (
            'SELECT "tests_testmodel"."id", "tests_testmodel"."value", "tests_testmodel"."fk_id", '
            '"tests_testmodel"."fk2_id", '
            '"tests_testfkmodel"."id", "tests_testfkmodel"."value", '
            '"tests_testfkmodel2"."id", "tests_testfkmodel2"."value" FROM "tests_testmodel" INNER JOIN '
            '"tests_testfkmodel" ON ("tests_testmodel"."fk_id" = "tests_testfkmodel"."id") '
            'INNER JOIN "tests_testfkmodel2" ON ("tests_testmodel"."fk2_id" = "tests_testfkmodel2"."id")'
        )

        actual_sql = str(qsets[test_models.TestModel].query)

        # Django < 1.7 and 1.8 have spaces before/after parentheses
        actual_sql = actual_sql.replace('( ', '(').replace(' )', ')')

        self.assertEquals(actual_sql, expected_sql)
예제 #3
0
    def test_result_monitor_get_data_contains_serialised_result(self):
        log_frame = N(LogFrame, id=1)

        result = N(Result, ignore_fields=['log_frame', 'parent', 'rating', 'risk_rating'])
        result.log_frame = log_frame

        result_monitor_view = ResultMonitor()
        result_monitor_view.object = result

        expected_data = {
            'id': result.id,
            'name': result.name,
            'description': result.description,
            'order': result.order,
            'parent': None,
            'level': result.level,
            'contribution_weighting': result.contribution_weighting,
            'risk_rating': None,
            'rating': None,
            'log_frame': log_frame.id,
            'indicators': [],
            'activities': [],
            'assumptions': []
        }

        actual_data = result_monitor_view.get_data(log_frame, {})

        assert expected_data == actual_data['result']
예제 #4
0
 def test_one_context_renderer(self, mock_get_sources):
     source = N(models.Source, id=1)
     mock_get_sources.return_value = [source]
     res = context_loader.get_context_hints_per_source([
         N(models.ContextRenderer,
           source=source,
           context_hints={
               'key': {
                   'app_name': 'entity_event.tests',
                   'model_name': 'TestModel',
                   'select_related': ['fk'],
               },
           })
     ])
     self.assertEquals(
         res, {
             source: {
                 'key': {
                     'app_name': 'entity_event.tests',
                     'model_name': 'TestModel',
                     'select_related': set(['fk']),
                     'prefetch_related': set(),
                 }
             }
         })
 def test_group(self, subscribed_mock):
     source = N(Source)
     medium = N(Medium)
     entity = N(Entity)
     ct = N(ContentType)
     Subscription.objects.is_subscribed(source, medium, entity, ct)
     self.assertEqual(len(subscribed_mock.mock_calls), 1)
예제 #6
0
 def test_multiple_context_renderers_over_multiple_source(self):
     source1 = N(models.Source, id=1)
     source2 = N(models.Source, id=2)
     res = context_loader.get_context_hints_per_source([
         N(models.ContextRenderer,
           source=source1,
           context_hints={
               'key': {
                   'app_name': 'entity_event.tests',
                   'model_name': 'TestModel',
                   'select_related': ['fk'],
                   'prefetch_related': ['prefetch1', 'prefetch2'],
               },
           }),
         N(models.ContextRenderer,
           source=source1,
           context_hints={
               'key': {
                   'app_name': 'entity_event.tests',
                   'model_name': 'TestModel',
                   'select_related': ['fk1'],
                   'prefetch_related': ['prefetch2', 'prefetch3'],
               },
           }),
         N(models.ContextRenderer,
           source=source2,
           context_hints={
               'key2': {
                   'app_name': 'entity_event.tests2',
                   'model_name': 'TestModel2',
                   'select_related': ['fk2'],
                   'prefetch_related': ['prefetch5', 'prefetch6'],
               },
           })
     ])
     self.assertEquals(
         res, {
             source1: {
                 'key': {
                     'app_name':
                     'entity_event.tests',
                     'model_name':
                     'TestModel',
                     'select_related':
                     set(['fk', 'fk1']),
                     'prefetch_related':
                     set(['prefetch1', 'prefetch2', 'prefetch3']),
                 }
             },
             source2: {
                 'key2': {
                     'app_name': 'entity_event.tests2',
                     'model_name': 'TestModel2',
                     'select_related': set(['fk2']),
                     'prefetch_related': set(['prefetch5', 'prefetch6']),
                 }
             },
         })
예제 #7
0
    def setUp(self):
        person_kind = G(EntityKind, name='person', display_name='person')
        superentity = G(Entity)
        sub1, sub2 = G(Entity, entity_kind=person_kind), G(Entity, entity_kind=person_kind)
        G(EntityRelationship, super_entity=superentity, sub_entity=sub1)
        G(EntityRelationship, super_entity=superentity, sub_entity=sub2)

        self.group_sub = N(Subscription, entity=superentity, sub_entity_kind=person_kind)
        self.indiv_sub = N(Subscription, entity=superentity, sub_entity_kind=None)
예제 #8
0
 def test_message_required_if_user_not_already_observing(self):
     user_1 = N(User, id=1)
     decision = N(Decision, author=user_1, editor=user_1, id=1)
     
     self.assertTrue(
         additional_message_required(
             user_1, decision, FEEDBACK_MAJOR_CHANGES
         )
     )
예제 #9
0
 def test_message_not_required_if_feedback_major_notification_user_watches_adds_comment(self):
     user_1 = N(User, id=1)
     decision = N(Decision, author=user_1, editor=user_1, id=1)
     
     self.assertFalse(
         additional_message_required(
             user_1, decision, FEEDBACK_MAJOR_CHANGES
         )
     )
예제 #10
0
 def test_message_required_if_major_changes_only_user_watches_adds_comment(self):
     user_1 = N(User, id=1)
     decision = N(Decision, author=user_1, editor=user_1, id=1)
     decision.watchers = []
     self.assertTrue(
         additional_message_required(
             user_1, decision, FEEDBACK_MAJOR_CHANGES
         )
     )
예제 #11
0
 def test_unicode(self):
     """
     Tests the model's unicode method
     """
     tag_value = N(TagValue,
                   tag=N(Tag,
                         name='test tag',
                         game=N(Game, name='test game')),
                   name='test tag value')
     self.assertEqual('test tag: test tag value (test game)',
                      unicode(tag_value))
예제 #12
0
    def test_remove_watcher_view_removes_observer_from_item(
            self, notifications):
        decision = N(Decision)
        user = N(User)

        mock_view = MagicMock(spec=RemoveWatcher)
        mock_view.get_object = lambda: decision
        mock_view.get_user = lambda: user
        mock_view.get = RemoveWatcher.get

        mock_view.get(mock_view, RequestFactory().get('/', {'next': '/'}))
        notifications.stop_observing.assert_called_with(decision, user)
예제 #13
0
 def test_w_one_event_one_context_hint_list_pks(self):
     source = N(models.Source, id=1)
     hints = {
         source: {
             'key': {
                 'app_name': 'tests',
                 'model_name': 'TestModel',
             },
         },
     }
     e = N(models.Event, context={'key': [2, 3, 5]}, source=source)
     self.assertEquals(context_loader.get_model_ids_to_fetch([e], hints),
                       {test_models.TestModel: set([2, 3, 5])})
예제 #14
0
 def setUp(self):
     self.medium = N(Medium, display_name='Test Medium')
     self.source = N(Source, display_name='Test Source')
     self.source_group = N(SourceGroup, display_name='Test Source Group')
     self.entity = N(Entity, display_name='Test Entity')
     self.entity_string = text_type(self.entity)
     self.unsubscription = N(Unsubscription, entity=self.entity, medium=self.medium, source=self.source)
     self.subscription = N(Subscription, entity=self.entity, source=self.source, medium=self.medium)
     self.event = N(Event, source=self.source, context={}, id=1)
     self.event_actor = N(EventActor, event=self.event, entity=self.entity)
     self.event_seen = N(EventSeen, event=self.event, medium=self.medium, time_seen=datetime(2014, 1, 2))
예제 #15
0
    def test_result_data(self):
        result = G(Result, manifest=MANIFEST())
        testjob = N(TestJob, result=result, status='Complete')
        test_results = [
            {
                'benchmark_name':
                'bar',
                'subscore': [
                    {
                        'name': 'test1',
                        'measurement': 1
                    },
                    {
                        'name': 'test1',
                        'measurement': 2
                    },
                ]
            },
        ]
        store_testjob_data(testjob, test_results)

        self.assertEqual(TestJob.objects.count(), 1)
        self.assertEqual(Benchmark.objects.count(), 1)
        self.assertEqual(ResultData.objects.count(), 1)

        result_data = ResultData.objects.order_by('id').last()
        self.assertEqual(result_data.values, [1, 2])
        self.assertEqual(result_data.benchmark.name, 'bar')
예제 #16
0
 def setUp(self):
     self.medium = N(Medium)
     self.superentity = G(Entity)
     self.sub1, self.sub2 = G(Entity), G(Entity)
     self.random_entity = G(Entity)
     G(EntityRelationship, super_entity=self.superentity, sub_entity=self.sub1)
     G(EntityRelationship, super_entity=self.superentity, sub_entity=self.sub2)
 def test_text_path(self, open_mock):
     open_mock.return_value.__enter__.return_value.read.return_value = 'Hi {{ name }}'
     template = G(EmailTemplate, text_template_path='NotNothing')
     email = N(Email, template=template, context={'name': 'Mr. T'})
     rendered_text, rendered_html = tasks.render_templates(email)
     self.assertEqual(rendered_text, 'Hi Mr. T')
     self.assertEqual(rendered_html, '')
예제 #18
0
 def test_random(self):
     instance = N('django_dynamic_fixture.ModelWithNumbers',
                  data_fixture='random')
     assert instance is not None
     instance = G('django_dynamic_fixture.ModelWithNumbers',
                  data_fixture='random')
     assert instance is not None
 def test_test_textfield(self):
     temp = '<html>Hi {{ name }}</html>'
     template = G(EmailTemplate, html_template=temp)
     email = N(Email, template=template, context={'name': 'Mr. T'})
     rendered_text, rendered_html = tasks.render_templates(email)
     self.assertEqual(rendered_text, '')
     self.assertEqual(rendered_html, '<html>Hi Mr. T</html>')
예제 #20
0
    def test_bulk_create_update(self):
        es = [N(Entity, is_active=True) for i in range(3)]
        t1 = datetime.utcnow()
        Entity.objects.bulk_create(es)
        t2 = datetime.utcnow()
        es = list(Entity.objects.order_by('id'))

        Entity.objects.update(is_active=False)
        t3 = datetime.utcnow()

        events = list(EntityActivationEvent.objects.all())
        self.assertTrue(len(events), 6)
        for i in range(3):
            self.assertEquals(events[i].entity, es[i])
            self.assertTrue(t1 <= events[i].time <= t2)
            self.assertTrue(events[i].was_activated)

        # The entities deactivation order is dependent on the DB. Populate
        # all deactivated entities and verify they are the same as the entities
        deactivated = []
        for i in range(3, 6):
            self.assertTrue(t2 <= events[i].time <= t3)
            self.assertFalse(events[i].was_activated)
            deactivated.append(events[i].entity)
        self.assertEquals(set(deactivated), set(es))
예제 #21
0
    def test_add_watcher_view_adds_observer_to_item(self, notifications):
        # A watcher is only added if the item isn't already being watched so we
        # explicitly set is_observing to False
        notifications.is_observing = lambda decision, user: False

        decision = N(Decision)
        user = N(User)

        mock_view = MagicMock(spec=AddWatcher)
        mock_view.get_object = lambda: decision
        mock_view.get_user = lambda: user
        mock_view.get = AddWatcher.get

        mock_view.get(mock_view, RequestFactory().get('/', {'next': '/'}))
        notifications.observe.assert_called_with(decision, user,
                                                 DECISION_CHANGE)
예제 #22
0
 def test_static_sequential(self):
     instance = N('django_dynamic_fixture.ModelWithNumbers',
                  data_fixture='static_sequential')
     assert instance is not None
     instance = G('django_dynamic_fixture.ModelWithNumbers',
                  data_fixture='static_sequential')
     assert instance is not None
예제 #23
0
 def test_n(self):
     foo = N(Foo, char_field='foo')
     foo.char_field = 'bar'
     foo.save()
     foo.char_field = 'baz'
     foo.save()
     self.assertEqual(foo.char_field_delta_count, 1)
예제 #24
0
def test_update_session_logframe_updates_user_last_viewed_logframe():
    request = mock.Mock(user=MockUser())

    logframe = N(LogFrame, slug='test_slug')
    update_last_viewed_logframe(request.user, logframe)

    assert 'test_slug' == request.user.preferences.last_viewed_logframe.slug
예제 #25
0
    def test_result_data_with_benchmark_group(self):
        result = G(Result, manifest=MANIFEST())
        testjob = N(TestJob, result=result, status='Complete')
        test_results = [
            {
                'benchmark_group':
                'foo',
                'benchmark_name':
                'bar',
                'subscore': [
                    {
                        'name': 'test1',
                        'measurement': 1
                    },
                    {
                        'name': 'test1',
                        'measurement': 2
                    },
                ]
            },
        ]

        store_testjob_data(testjob, test_results)
        self.assertEqual(BenchmarkGroup.objects.count(), 2)  # foo + /

        benchmark_group = BenchmarkGroup.objects.order_by('id').last()
        benchmark = Benchmark.objects.order_by('id').last()
        self.assertEqual(benchmark.group, benchmark_group)
예제 #26
0
    def test_queryset(self):
        am = G(TestModel)
        am2 = G(TestModel)

        ma = N(ModelAssertion,
               model_type=ContentType.objects.get_for_model(TestModel))
        self.assertEqual(set(ma.queryset), set([am, am2]))
예제 #27
0
 def test_one_event_w_model_data(self):
     m = N(test_models.TestModel, id=2)
     s = N(models.Source, id=1)
     hints = {
         s: {
             'key': {
                 'model_name': 'TestModel',
                 'app_name': 'tests',
             }
         }
     }
     e = N(models.Event, context={'key': m.id}, source=s)
     context_loader.load_fetched_objects_into_contexts(
         [e], {test_models.TestModel: {
             m.id: m
         }}, hints)
     self.assertEquals(e.context, {'key': m})
예제 #28
0
 def test_custom_one(self):
     from django_dynamic_fixture.fixture_algorithms.sequential_fixture import SequentialDataFixture
     instance = N('django_dynamic_fixture.ModelWithNumbers',
                  data_fixture=SequentialDataFixture())
     assert instance is not None
     instance = G('django_dynamic_fixture.ModelWithNumbers',
                  data_fixture=SequentialDataFixture())
     assert instance is not None
예제 #29
0
 def test_empty_backup_exception(self):
     backup = N(Backup, fill_nullable_fields=False)
     try:
         backup.run()
     except EmptyBackupException:
         pass
     else:
         self.fail("should raise an EmptyBackupException")
예제 #30
0
    def test_get_user_looks_for_user_in_request(self):
        user = N(User)
        request = RequestFactory().get('')
        request.user = user
        view = AddWatcher()
        view.request = request

        self.assertEqual(user, view.get_user())