Пример #1
0
    def setUp(self):
        """ Set up a user for testing """

        self.user, self.info = Factory.create_user()
        self.user.is_staff = True
        self.user.save()

        Factory.create_set_of_submissions(self.user)

        # Login
        self.client.login(username=self.user.username, password=Factory.default_password)
    def setUp(self):
        """ Set up submission data in an organization for testing """

        # Admin account without leaduserinfo
        self.admin = Factory.create_admin()

        # Create an organization with three sessions
        self.org = Factory.create_organization(self.admin)
        self.session1 = Factory.create_session(self.org, self.admin)
        self.session2 = Factory.create_session(self.org, self.admin)
        self.session3 = Factory.create_session(self.org, self.admin)
        self.sessions = [self.session1, self.session2, self.session3]

        # Attach an explicit, non staff user, to the organization
        self.user, self.info = Factory.create_user(self.session1)

        # Generate data (3 sets of submissions) for each session
        for session in self.sessions:
            for i in range(0, 3):
                user, info = Factory.create_user(session)
                Factory.create_set_of_submissions(user)
    def test_enough_data(self):
        """ Metrics are returned correctly if enough data exists
            Independent of whether or not user is staff.
        """

        # Generate the 10th set of data
        Factory.create_set_of_submissions(self.user)

        # Generate the data for a non staff
        data = generate_data_from_sessions(self.sessions, self.user)

        # Verify non staff do not have access to analysis
        self.assertIn('submission_counts', data)
        self.assertNotIn('metrics_analysis', data)
        self.assertIn('users', data)

        # Set staff to check for analysis
        self.user.is_staff = True
        self.user.save()

        # Load the data
        data = generate_data_from_sessions(self.sessions, self.user)

        # Verify staff have all data
        self.assertIn('submission_counts', data)
        self.assertIn('metrics_analysis', data)
        self.assertIn('users', data)

        # Verify each submission has a submission count
        self.assertEqual(6, len(data['submission_counts']))

        # Verify the submission count is correct
        for submission in data['submission_counts']:
            correct_count = Submission.objects.filter(inventory_id=submission['inventory_id']).count()
            self.assertEqual(submission['count'], correct_count)

        # Verify that there is a metric analysis for each metric
        # That does not belong to Via.
        correct_count = Metric.objects.exclude(
            submission__inventory_id=Via.inventory_id
        ).distinct('key', 'submission__inventory_id').count()
        self.assertEqual(len(data['metrics_analysis']), correct_count)

        # Verify that the metric analysis for each inventory is correct
        for analysis in data['metrics_analysis']:
            correct_analysis = Metric.objects.filter(
                key=analysis['key'],
                submission__inventory_id=analysis['submission__inventory_id']
            ).values(
                'key', 'submission__inventory_id'
            ).annotate(
                min=Min('value'),
                max=Max('value'),
                mean=Avg('value'),
                standard_deviation=StdDev('value')
            )

            self.assertDictEqual(analysis, correct_analysis[0])

        # Verify that the user data is correct
        for user in data['users']:
            # The correct number of submissions has been attached
            num_submissions = Submission.objects.filter(user=user).count()
            self.assertEqual(len(user.submissions), num_submissions)

            # For each user submission
            for submission in user.submissions:
                # The submission belongs to the user
                self.assertEqual(user, submission.user)

                # The correct metrics exist in the submission
                num_metrics = Metric.objects.filter(submission=submission).count()
                self.assertEqual(len(submission.metrics), num_metrics)

                # For each submission metric
                for metric in submission.metrics:
                    # The metric belongs to the submission
                    self.assertEqual(submission, metric.submission)
Пример #4
0
    def add_user(self, session, inventory_cls_list):
        user, info = Factory.create_user(session)
        Factory.create_set_of_submissions(user, inventory_cls_list)

        print('.', end='')
        sys.stdout.flush()