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)
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()