def test_two_courses_with_overlapping_content_and_no_project_or_content_progress( self, ): generate_all_content_cards_for_user(self.user) for content in self.unflavoured_content: count = len(models.AgileCard.objects.filter(content_item=content)) self.assertEqual(count, 1) for content in self.flavoured_content: cards = models.AgileCard.objects.filter(content_item=content) self.assertEqual(len(cards), 2) # for card in cards: options = [card.flavour_names for card in cards] option_counts = [len(l) for l in options] self.assertEqual(option_counts, [1, 1]) flat_options = sorted([s for l in options for s in l]) self.assertEqual(flat_options, [JAVASCRIPT, TYPESCRIPT]) # [o.content_options for o in models.AgileCard.objects.filter(content_item=content) cards = models.AgileCard.objects.all() self.assertEqual( len(cards), 9 ) # 3 for each course + 3 for the stuff that overlaps
def test_generate_cards_twice_for_one_course(self): registration = CourseRegistrationFactory(curriculum=self.js_curriculum) user = registration.user generate_all_content_cards_for_user(user) self.assertEqual( models.AgileCard.objects.filter(assignees__in=[user]).count(), 3) generate_all_content_cards_for_user(user) self.assertEqual( models.AgileCard.objects.filter(assignees__in=[user]).count(), 3)
def handle(self, *args, **options): user = User.objects.get(email=options["email"]) AgileCard.objects.filter(assignees__in=[user]).delete() CourseRegistration.objects.filter(user=user).delete() name = options["curriculum"] curriculum = Curriculum.objects.get(Q(short_name=name) | Q(name=name)) CourseRegistration.objects.create(user=user, curriculum=curriculum) generate_all_content_cards_for_user(user)
def test_card_prerequisites_take_options_into_account(self): models.ContentItemOrder.objects.create(post=self.project1, pre=self.topic1) models.ContentItemOrder.objects.create(post=self.project1, pre=self.topic2) models.ContentItemOrder.objects.create(post=self.project2, pre=self.topic2) generate_all_content_cards_for_user(self.user) # project 2 has no options. So there will only be one and it will have only one prereq project2_card = models.AgileCard.objects.get( content_item=self.project2) project2_requirement = project2_card.requires_cards.get() # self.assertEqual(len(project2_requirement), 1) self.assertEqual(project2_requirement.content_item, self.topic2) self.assertEqual(project2_card.content_flavour_names, []) self.assertEqual(project2_requirement.content_flavour_names, []) # project 1 has pre-req and two different flavours project1_cards = models.AgileCard.objects.filter( content_item=self.project1) for card in project1_cards: # they both require topic 1, topic1 has no options so it's the same card self.assertTrue(project2_requirement in card.requires_cards.all()) ts_project_card = [ card for card in project1_cards if TYPESCRIPT in card.content_flavour_names ][0] js_project_card = [ card for card in project1_cards if JAVASCRIPT in card.content_flavour_names ][0] ts_required_card = ts_project_card.requires_cards.filter( content_item=self.topic1).get() self.assertEqual(ts_required_card.content_flavour_names, [TYPESCRIPT]) js_required_card = js_project_card.requires_cards.filter( content_item=self.topic1).get() self.assertEqual(js_required_card.content_flavour_names, [JAVASCRIPT])