def assert_judge_feature_filter(self, name, options, field): context = AnalyzeJudgingContext(type="judge", name=name, read_count=1, options=options) judge_with_panels = [ _judge_with_panel(context, field, option) for option in options ] count = len(options) context.add_applications(context.scenario.panel_size * count) for counter, app in enumerate(context.applications): (option, judge, panel) = judge_with_panels[counter % count] context.add_feedback(application=app, judge=judge, panel=panel) example = judge_with_panels[0] new_judge = ExpertFactory(**{field: example.option}) context.add_judge(assigned=False, complete=False, judge=new_judge) with self.login(email=self.basic_user().email): url = reverse(AllocateApplicationsView.view_name, args=[context.judging_round.id, new_judge.id]) self.client.get(url) example_apps = example.judge.judgepanelassignment_set.values_list( "panel__applicationpanelassignment__application_id", flat=True) new_judge_apps = new_judge.judgepanelassignment_set.values_list( "panel__applicationpanelassignment__application_id", flat=True) assert set(example_apps).intersection(new_judge_apps) == set()
def test_get_program_filter(self): context = AnalyzeJudgingContext(type="matching", name="program", read_count=1) count = 4 options = ProgramFactory.create_batch(count, cycle=context.cycle) context.add_applications(context.scenario.panel_size * count, programs=options) judge_option = options[0].program_family judge = ExpertFactory(profile__home_program_family=judge_option) context.add_judge(assigned=False, complete=False, judge=judge) field = "startup__startupprograminterest__program__program_family" apps = Application.objects.filter(**{ field: judge_option }).values_list("id", flat=True) self.assert_matching_allocation(context.judging_round, judge, apps)
def test_allocator_does_not_reassign_conflicted_apps_to_same_judge(self): context = AnalyzeJudgingContext() AllocatorFactory(judging_round=context.judging_round, scenario=context.scenario) context.add_applications(20) panel = context.add_panel() for app in context.applications[-10:]: ApplicationPanelAssignmentFactory(application=app, panel=panel, scenario=context.scenario) judge = context.add_judge(assigned=True, complete=True, panel=panel) for app in context.applications[-10:]: JudgeApplicationFeedbackFactory( application=app, form_type=context.judging_round.judging_form, judge=judge, panel=panel, judging_status=JUDGING_STATUS_CONFLICT, feedback_status=JUDGING_FEEDBACK_STATUS_CONFLICT) judge.set_password("password") judge.save() with self.login(email=judge.email): response = self.client.get( self._url(context.judging_round.id, judge.id)) assignments = response.json() assigned_ids = [app.id for app in context.applications[-10:]] reassigned_apps = set(assignments).intersection(assigned_ids) assert 0 == len(reassigned_apps)
def test_get(self): context = AnalyzeJudgingContext() judging_round = context.judging_round judge = context.add_judge() with self.login(email=self.basic_user().email): response = self.client.get(self._url(judging_round.id, judge.id)) assert response.status_code == 200
def test_get_industry_filter_with_child_industry(self): context = AnalyzeJudgingContext(type="matching", name="industry", read_count=1) child_industry = IndustryFactory() child_industry.parent = IndustryFactory() child_industry.save() field = "startup__primary_industry" context.add_applications(context.scenario.panel_size, field=field, options=[child_industry]) parent_industry = child_industry.parent judge = ExpertFactory(profile__primary_industry=parent_industry) context.add_judge(assigned=False, complete=False, judge=judge) apps = Application.objects.filter(**{ field: child_industry }).values_list("id", flat=True) self.assert_matching_allocation(context.judging_round, judge, apps)
def test_get_industry_filter(self): context = AnalyzeJudgingContext(type="matching", name="industry", read_count=1) options = [ app.startup.primary_industry for app in context.applications ] count = len(options) assert (count > 1) field = "startup__primary_industry" context.add_applications(context.scenario.panel_size * count, field=field, options=options) judge_option = options[0] judge = ExpertFactory(profile__primary_industry=judge_option) context.add_judge(assigned=False, complete=False, judge=judge) apps = Application.objects.filter(**{ field: judge_option }).values_list("id", flat=True) self.assert_matching_allocation(context.judging_round, judge, apps)
def test_get_by_judge_succeeds(self): context = AnalyzeJudgingContext() judging_round = context.judging_round judge = context.add_judge() judge.set_password("password") judge.save() with self.login(email=judge.email): url = reverse(AllocateApplicationsView.view_name, args=[judging_round.id, judge.id]) response = self.client.get(url) assert response.status_code == 200
def test_allocator_respects_completed_assignments(self): context = AnalyzeJudgingContext() AllocatorFactory(judging_round=context.judging_round, scenario=context.scenario) context.add_applications(20) panel = context.add_panel() for app in context.applications[-10:]: ApplicationPanelAssignmentFactory(application=app, panel=panel, scenario=context.scenario) context.add_judge(assigned=True, complete=True, panel=panel) new_judge = context.add_judge(assigned=False, complete=False) new_judge.set_password("password") new_judge.save() with self.login(email=new_judge.email): response = self.client.get( self._url(context.judging_round.id, new_judge.id)) assignments = response.json() assigned_ids = [app.id for app in context.applications[-10:]] reassigned_apps = set(assignments).intersection(assigned_ids) assert 0 == len(reassigned_apps)
def test_get_judging_round_inactive(self): context = AnalyzeJudgingContext(is_active=False) judging_round = context.judging_round judge = context.add_judge() with self.login(email=self.basic_user().email): url = reverse(AllocateApplicationsView.view_name, args=[judging_round.id, judge.id]) response = self.client.get(url) assert response.status_code == 403 assert [ JUDGING_ROUND_INACTIVE_ERROR.format(judging_round.id) in response.data ]
def test_get_program_filter_multiple_startup_interests(self): context = AnalyzeJudgingContext(type="matching", name="program", read_count=1) count = 4 options = ProgramFactory.create_batch(count, cycle=context.cycle) panel_size = context.scenario.panel_size context.add_applications(panel_size * count, programs=options) judge_option = options[0].program_family judge = ExpertFactory(profile__home_program_family=judge_option) context.add_judge(assigned=False, complete=False, judge=judge) programs = chain(options[1:], options * panel_size) for app, program in zip(context.applications, programs): StartupProgramInterestFactory(startup=app.startup, program=program, order=2) spis = StartupProgramInterest.objects.filter(order=1, program__in=options) app_filter = {"startup__startupprograminterest__in": spis} apps = Application.objects.filter(**app_filter).values_list("id", flat=True) self.assert_matching_allocation(context.judging_round, judge, apps)
def test_get_already_assigned(self): context = AnalyzeJudgingContext() judging_round = context.judging_round judge = context.add_judge() with self.login(email=self.basic_user().email): url = reverse(AllocateApplicationsView.view_name, args=[judging_round.id, judge.id]) response = self.client.get(url) assert response.status_code == 200 count = len(response.data) response = self.client.get(url) assert response.status_code == 403 assert [ ALREADY_ASSIGNED_ERROR.format(judge=judge.email, count=count) in response.data ]