def test_to_json(note_v2_session): note = Note(time_scope_id="2123-ww45.6", desc="json testing report") note_v2_session.add(note) note_v2_session.flush() note_as_json = note.as_json() assert note_as_json['note_id'] == note.note_id assert note_as_json['time_scope_id'] == note.time_scope_id assert note_as_json['desc'] == note.desc
def test_get_note(test_client, note_v2_session): n = Note(time_scope_id="2021-ww21.2", desc="shorte") note_v2_session.add(n) note_v2_session.commit() r = test_client.get('/v2/note/1') assert r.response response_json = json.loads(r.get_data()) diff = jsondiff.diff(n.as_json(include_domains=True), response_json) assert not diff
def test_stapler_endpoint(test_client, note_v2_session): n = Note(time_scope_id="2000-ww20.2", desc="stapler testing") note_v2_session.add(n) note_v2_session.commit() r = test_client.get('/v2/notes') j = json.loads(r.get_data()) assert not jsondiff.diff(j, { "2000—Q2": { "notes": [n.as_json()], }, })
def test_create(note_v2_session): note = Note(time_scope_id="2020-ww20.4", desc="status update") assert note.note_id is None note_v2_session.add(note) note_v2_session.flush() assert note.note_id is not None
def test_to_from_json(note_v2_session): note = Note(time_scope_id="2123-ww45.6", desc="json testing report") note_v2_session.add(note) note_v2_session.flush() note_dict = note.as_json() del note_dict['note_id'] note2 = Note.from_dict(note_dict) note_v2_session.add(note2) note_v2_session.commit() assert note2.note_id assert note2.time_scope_id == note.time_scope_id assert note2.sort_time == note.sort_time assert note2.source == note.source assert note2.desc == note.desc assert note2.detailed_desc == note.detailed_desc assert note2.created_at == note.created_at
def one_from_csv(session, csv_entry, expect_duplicates: bool) -> Optional[Note]: # Filter CSV file to only have valid columns present_fields = [ field for field in _valid_csv_fields if field in csv_entry.keys() ] csv_entry = { field: csv_entry[field] for field in present_fields if csv_entry[field] } if not csv_entry: return None encoded_domain_ids = None if 'domains' in csv_entry: encoded_domain_ids = csv_entry['domains'] del csv_entry['domains'] target_note = None if expect_duplicates: inexact_match_exists = session.query( Note.query.filter_by(time_scope_id=csv_entry['time_scope_id'], desc=csv_entry['desc']).exists()).scalar() if inexact_match_exists: matchmaker_dict = dict(csv_entry) for field in ['sort_time', 'created_at']: # db search needs datetime objects, not the CSV string if field in matchmaker_dict: matchmaker_dict[field] = parser.parse( matchmaker_dict[field]) thorough_match = Note.query.filter_by(**matchmaker_dict).all() if len(thorough_match) > 1: return None elif len(thorough_match) == 1: target_note = thorough_match[0] if not target_note: target_note = Note.from_dict(csv_entry) if target_note: session.add(target_note) session.flush() if encoded_domain_ids: _add_domains( session, target_note.note_id, encoded_domain_ids, expect_duplicates=expect_duplicates if target_note else False) return target_note
def one_to_csv(n: Note) -> Dict: note_as_json = n.as_json(include_domains=True) if not write_note_id: del note_as_json['note_id'] if 'domains' in note_as_json: split_domains = [ d.replace('&', '&&') for d in note_as_json['domains'] ] encoded_domain_ids = " & ".join(split_domains) note_as_json['domains'] = encoded_domain_ids return note_as_json
def test_get_domain_stats(test_client, note_v2_session): n = Note(time_scope_id="2021-ww32.2", desc="stacked note") note_v2_session.add(n) note_v2_session.flush() for d in ["domain 1", "domain 2", "d3", "d4"]: nd = NoteDomain(note_id=n.note_id, domain_id=d) note_v2_session.add(nd) note_v2_session.commit() assert len(NoteDomain.query.all()) == 4 # Test actual REST API r = test_client.get('/v2/stats/domains') j = json.loads(r.get_data()) assert "domain 1" in j
def test_to_from_json_with_datetime(note_v2_session): note1 = Note(time_scope_id="2000-ww20.2", desc="854509e8") note1.sort_time = None note1.source = "note source #68506007" note1.detailed_desc = "note detailed_description, but shortened to _desc" note1.created_at = datetime.now() note_v2_session.add(note1) note_v2_session.commit() note_dict = note1.as_json() del note_dict['note_id'] note2 = Note.from_dict(note_dict) note_v2_session.add(note2) note_v2_session.commit() assert note2.note_id assert note2.time_scope_id == note1.time_scope_id assert note2.sort_time == note1.sort_time assert note2.source == note1.source assert note2.desc == note1.desc assert note2.detailed_desc == note1.detailed_desc assert note2.created_at == note1.created_at
def render_n2_json(n: Note) -> str: return escape(json.dumps(n.as_json(include_domains=True), indent=2))
def test_note_constructor(): note = Note() assert note