def test_distinct_sids(self, client, fake_auth): """Get distinct SIDs across cohorts and curated groups.""" user_id = AuthorizedUser.get_id_per_uid(coe_advisor_uid) cohort_ids = [] sids = set() for cohort in CohortFilter.get_cohorts(user_id): cohort_id = cohort['id'] cohort_ids.append(cohort_id) sids.update(set(CohortFilter.get_sids(cohort_id))) assert len(sids) > 1 curated_group = CuratedGroup.create( user_id, 'Like a lemon to a lime, a lime to a lemon') curated_group_ids = [curated_group.id] # We use SIDs from cohorts (above). Therefore, we expect no increase in 'batch_distinct_student_count'. for sid in sids: CuratedGroup.add_student(curated_group.id, sid) # A specific student (SID) that is in neither cohorts nor curated groups. some_other_sid = '5678901234' assert some_other_sid not in sids # Log in as authorized user fake_auth.login(coe_advisor_uid) data = self._api_distinct_sids( client, cohort_ids=cohort_ids, curated_group_ids=curated_group_ids, sids=[some_other_sid], ) assert sids.union({some_other_sid}) == set(data['sids'])
def _create_curated_groups(): admin_user = AuthorizedUser.find_by_uid('2040') CuratedGroup.create(admin_user.id, 'My Students') asc_advisor = AuthorizedUser.find_by_uid('6446') CuratedGroup.create(asc_advisor.id, 'My Students') curated_group = CuratedGroup.create(asc_advisor.id, 'Four students') CuratedGroup.add_student(curated_group.id, '3456789012') CuratedGroup.add_student(curated_group.id, '5678901234') CuratedGroup.add_student(curated_group.id, '11667051') CuratedGroup.add_student(curated_group.id, '7890123456') coe_advisor = AuthorizedUser.find_by_uid('1133399') curated_group = CuratedGroup.create(coe_advisor.id, 'I have one student') CuratedGroup.add_student(curated_group.id, '7890123456') ce3_advisor = AuthorizedUser.find_by_uid('2525') curated_group = CuratedGroup.create( domain='admitted_students', name="My 'admitted_students' group", owner_id=ce3_advisor.id, ) CuratedGroup.add_student(curated_group.id, '7890123456') std_commit(allow_test_environment=True)
def create_curated_group(): params = request.get_json() name = params.get('name', None) if not name: raise BadRequestError('Curated group creation requires \'name\'') curated_group = CuratedGroup.create(current_user.get_id(), name) # Optionally, add students if 'sids' in params: sids = [sid for sid in set(params.get('sids')) if sid.isdigit()] CuratedGroup.add_students(curated_group_id=curated_group.id, sids=sids) return tolerant_jsonify(curated_group.to_api_json())
def create_curated_group(): params = request.get_json() domain = get_param(params, 'domain', 'default') if is_unauthorized_domain(domain): raise ForbiddenRequestError( f'You are unauthorized to use the \'{domain}\' domain') name = params.get('name', None) if not name: raise BadRequestError('Curated group creation requires \'name\'') curated_group = CuratedGroup.create(domain=domain, name=name, owner_id=current_user.get_id()) # Optionally, add students if 'sids' in params: sids = [sid for sid in set(params.get('sids')) if sid.isdigit()] CuratedGroup.add_students(curated_group_id=curated_group.id, sids=sids) return tolerant_jsonify(curated_group.to_api_json(include_students=True))
def test_update_curated_group_lists(self, app): from boac.api.cache_utils import update_curated_group_lists curated_group = CuratedGroup.create( owner_id=AuthorizedUser.find_by_uid('6446').id, name='This group has one student not in Data Loch', ) original_sids = ['3456789012', '5678901234', '7890123456'] for sid in original_sids: CuratedGroup.add_student(curated_group.id, sid) sid_not_in_data_loch = '19040616' CuratedGroup.add_student(curated_group.id, sid_not_in_data_loch) std_commit(allow_test_environment=True) revised_sids = CuratedGroupStudent.get_sids(curated_group.id) assert sid_not_in_data_loch in revised_sids update_curated_group_lists() std_commit(allow_test_environment=True) final_sids = CuratedGroupStudent.get_sids(curated_group.id) assert sid_not_in_data_loch not in final_sids assert set(final_sids) == set(original_sids)