def test_assertions_for_user(self): """ Verify that grabbing all assertions for a user behaves as expected. This function uses object IDs because for some reason Jenkins trips up on its assertCountEqual check here despite the items being equal. """ user = UserFactory() assertions = [ BadgeAssertionFactory.create(user=user).id for _i in range(3) ] course = CourseFactory.create() course_key = course.location.course_key course_badges = [ RandomBadgeClassFactory(course_id=course_key) for _i in range(3) ] course_assertions = [ BadgeAssertionFactory.create(user=user, badge_class=badge_class).id for badge_class in course_badges ] assertions.extend(course_assertions) assertions.sort() assertions_for_user = [ badge.id for badge in BadgeAssertion.assertions_for_user(user) ] assertions_for_user.sort() assert assertions_for_user == assertions course_scoped_assertions = [ badge.id for badge in BadgeAssertion.assertions_for_user( user, course_id=course_key) ] course_scoped_assertions.sort() assert course_scoped_assertions == course_assertions
def test_assertion_structure(self): """ Verify the badge assertion structure is as expected when a course is involved. """ course_key = self.course.location.course_key badge_class = BadgeClassFactory.create(course_id=course_key) assertion = BadgeAssertionFactory.create(badge_class=badge_class, user=self.user) response = self.get_json(self.url()) self.check_assertion_structure(assertion, response['results'][0])
def test_get_for_user(self): """ Make sure we can get an assertion for a user if there is one. """ user = UserFactory.create() badge_class = BadgeClassFactory.create() assert not badge_class.get_for_user(user) assertion = BadgeAssertionFactory.create(badge_class=badge_class, user=user) assert list(badge_class.get_for_user(user)) == [assertion]
def test_get_for_user(self): """ Make sure we can get an assertion for a user if there is one. """ user = UserFactory.create() badge_class = BadgeClassFactory.create() self.assertFalse(badge_class.get_for_user(user)) assertion = BadgeAssertionFactory.create(badge_class=badge_class, user=user) self.assertEqual(list(badge_class.get_for_user(user)), [assertion])
def check_badge_class_assertion(self, check_course, wildcard, badge_class): """ Given a badge class, create an assertion for the current user and fetch it, checking the structure. """ assertion = BadgeAssertionFactory.create(badge_class=badge_class, user=self.user) response = self.get_json( self.url(), data=self.get_qs_args(check_course, wildcard, badge_class), ) self.check_assertion_structure(assertion, response['results'][0])
def test_get_assertions(self, check_course, wildcard): """ Verify we can get assertions via the badge class and username. """ badge_class = self.create_badge_class(check_course) for dummy in range(3): BadgeAssertionFactory.create(user=self.user, badge_class=badge_class) if badge_class.course_id: # Also create a version of this badge under a different course. alt_class = BadgeClassFactory.create( slug=badge_class.slug, issuing_component=badge_class.issuing_component, course_id=CourseFactory.create().location.course_key) BadgeAssertionFactory.create(user=self.user, badge_class=alt_class) # Same badge class, but different user. Should not show up in the list. for dummy in range(5): BadgeAssertionFactory.create(badge_class=badge_class) # Different badge class AND different user. Certainly shouldn't show up in the list! for dummy in range(6): BadgeAssertionFactory.create() response = self.get_json( self.url(), data=self.get_qs_args(check_course, wildcard, badge_class), ) if wildcard: expected_length = 4 else: expected_length = 3 self.assertEqual(len(response['results']), expected_length) unused_class = self.create_badge_class( check_course, slug='unused_slug', issuing_component='unused_component') response = self.get_json( self.url(), data=self.get_qs_args(check_course, wildcard, unused_class), ) self.assertEqual(len(response['results']), 0)
def test_get_assertions(self): """ Verify we can get assertions via the course_id and username. """ course_key = self.course.location.course_key badge_class = BadgeClassFactory.create(course_id=course_key) for dummy in range(3): BadgeAssertionFactory.create(user=self.user, badge_class=badge_class) # Should not be included, as they don't share the target badge class. for dummy in range(3): BadgeAssertionFactory.create(user=self.user) # Also should not be included, as they don't share the same user. for dummy in range(6): BadgeAssertionFactory.create(badge_class=badge_class) response = self.get_json(self.url(), data={'course_id': str(course_key)}) self.assertEqual(len(response['results']), 3) unused_course = CourseFactory.create() response = self.get_json(self.url(), data={'course_id': str(unused_course.location.course_key)}) self.assertEqual(len(response['results']), 0)
def test_assertion_structure(self): badge_class = self.create_badge_class(False) assertion = BadgeAssertionFactory.create(user=self.user, badge_class=badge_class) response = self.get_json(self.url()) self.check_assertion_structure(assertion, response['results'][0])