Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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()],
        },
    })
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
 def render_n2_json(n: Note) -> str:
     return escape(json.dumps(n.as_json(include_domains=True), indent=2))
Ejemplo n.º 11
0
def test_note_constructor():
    note = Note()
    assert note