def get_advising_notes(sid): benchmark = get_benchmarker(f'get_advising_notes {sid}') benchmark('begin') notes_by_id = {} benchmark('begin SIS advising notes query') notes_by_id.update(get_sis_advising_notes(sid)) benchmark('begin ASC advising notes query') notes_by_id.update(get_asc_advising_notes(sid)) benchmark('begin Data Science advising notes query') notes_by_id.update(get_data_science_advising_notes(sid)) benchmark('begin E&I advising notes query') notes_by_id.update(get_e_i_advising_notes(sid)) benchmark('begin History Dept advising notes query') notes_by_id.update(get_history_dept_advising_notes(sid)) benchmark('begin non legacy advising notes query') notes_by_id.update(get_non_legacy_advising_notes(sid)) benchmark('begin SIS late drop eforms query') notes_by_id.update(get_sis_late_drop_eforms(sid)) if not notes_by_id.values(): return None notes_read = NoteRead.get_notes_read_by_user(current_user.get_id(), notes_by_id.keys()) for note_read in notes_read: note_feed = notes_by_id.get(note_read.note_id) if note_feed: note_feed['read'] = True else: app.logger.error( f'DB query mismatch for note id {note_read.note_id}') benchmark('end') return list(notes_by_id.values())
def test_batch_note_creation_with_sids(self, app, client, fake_auth, mock_note_template): """Batch note creation with list of SIDs.""" fake_auth.login(coe_advisor_uid) base_dir = app.config['BASE_DIR'] advisor = AuthorizedUser.find_by_uid(coe_advisor_uid) subject = f'Elevate Me Later {datetime.now().timestamp()}' # Curated group curated_group_ids, sids_in_curated_groups = _get_curated_groups_ids_and_sids(advisor) # We need at least one curated_group SID that is NOT in the list o' sids above. sid_expected_in_curated_group = '7890123456' assert sid_expected_in_curated_group in sids_in_curated_groups assert sid_expected_in_curated_group not in self.sids # Cohort cohort_ids, sids_in_cohorts = _get_cohorts_ids_and_sids(advisor) # We need at least one cohort SID that is NOT in the list o' sids above. expected_sid_in_cohort = '9000000000' assert expected_sid_in_cohort not in self.sids assert expected_sid_in_cohort in sids_in_cohorts # List above has duplicates - verify that it is de-duped. distinct_sids = set(self.sids + sids_in_curated_groups + sids_in_cohorts) topics = ['Slanted', 'Enchanted'] _api_batch_note_create( app, client, author_id=advisor.id, subject=subject, body='Well you greet the tokens and stamps, beneath the fake oil burnin\' lamps', sids=self.sids, curated_group_ids=curated_group_ids, cohort_ids=cohort_ids, topics=topics, attachments=[ f'{base_dir}/fixtures/mock_advising_note_attachment_1.txt', f'{base_dir}/fixtures/mock_advising_note_attachment_2.txt', ], template_attachment_ids=list(map(lambda a: a.id, mock_note_template.attachments)), ) notes = Note.query.filter(Note.subject == subject).all() assert len(notes) == len(distinct_sids) matching_notes_read = NoteRead.get_notes_read_by_user(viewer_id=advisor.id, note_ids=[str(n.id) for n in notes]) assert len(notes) == len(matching_notes_read) template_attachment_count = len(mock_note_template.attachments) assert template_attachment_count expected_attachment_count = template_attachment_count + 2 for sid in distinct_sids: note = next((n for n in notes if n.sid == sid), None) assert note assert note.subject == subject assert note.author_uid == advisor.uid assert len(note.topics) == 2 topics = [t.topic for t in note.topics] assert 'Slanted' in topics assert 'Enchanted' in topics assert len(note.attachments) == expected_attachment_count
def test_batch_note_creation_with_sids(self, app, client, fake_auth): """Batch note creation with list of SIDs.""" fake_auth.login(coe_advisor_uid) base_dir = app.config['BASE_DIR'] advisor = AuthorizedUser.find_by_uid(coe_advisor_uid) subject = f'Elevate Me Later {datetime.now().timestamp()}' sids = [ '960759268', '856024035', '370048698', '709706581', '518777297', '912902626', '466030628', '695508833', '729680066', '534614253', '329221239', '882981218', '734373851', '968319871', '824231751', '904338427', '849739234', '310798157', '301806363', '352212185', '3456789012', '5678901234', '11667051', '8901234567', '3456789012', '11667051', ] # Curated group curated_group_ids, sids_in_curated_groups = _get_curated_groups_ids_and_sids( advisor) # We need at least one curated_group SID that is NOT in the list o' sids above. sid_expected_in_curated_group = '7890123456' assert sid_expected_in_curated_group in sids_in_curated_groups assert sid_expected_in_curated_group not in sids # Cohort cohort_ids, sids_in_cohorts = _get_cohorts_ids_and_sids(advisor) # We need at least one cohort SID that is NOT in the list o' sids above. expected_sid_in_cohort = '9000000000' assert expected_sid_in_cohort not in sids assert expected_sid_in_cohort in sids_in_cohorts # List above has duplicates - verify that it is de-duped. distinct_sids = set(sids + sids_in_curated_groups + sids_in_cohorts) topics = ['Slanted', 'Enchanted'] _api_batch_note_create( app, client, author_id=advisor.id, subject=subject, body= 'Well you greet the tokens and stamps, beneath the fake oil burnin\' lamps', sids=sids, curated_group_ids=curated_group_ids, cohort_ids=cohort_ids, topics=topics, attachments=[ f'{base_dir}/fixtures/mock_advising_note_attachment_1.txt', f'{base_dir}/fixtures/mock_advising_note_attachment_2.txt', ], ) notes = Note.query.filter(Note.subject == subject).all() assert len(notes) == len(distinct_sids) matching_notes_read = NoteRead.get_notes_read_by_user( viewer_id=advisor.id, note_ids=[str(n.id) for n in notes]) assert len(notes) == len(matching_notes_read) for sid in distinct_sids: note = next((n for n in notes if n.sid == sid), None) assert note assert note.subject == subject assert note.author_uid == advisor.uid assert len(note.topics) == 2 topics = [t.topic for t in note.topics] assert 'Slanted' in topics assert 'Enchanted' in topics assert len(note.attachments) == 2