def test_display_entries(): entries = [ DatabaseEntry( id=1, source='SOHO', provider='SDAC', physobs='intensity', fileid='/archive/soho/...', observation_time_start=datetime(2001, 1, 1, 7, 0, 14), observation_time_end=datetime(2001, 1, 1, 7, 0, 21), instrument='EIT', size=259.0, wavemin=171.0, wavemax=171.0, tags=[Tag('foo'), Tag('bar')]), DatabaseEntry( id=2, source='GONG', provider='NSO', physobs='LOS_velocity', fileid='pptid=11010...', observation_time_start=datetime(2010, 1, 1, 0, 59), observation_time_end=datetime(2010, 1, 1, 1), download_time=datetime(2014, 6, 15, 3, 42, 55, 123456), instrument='Merged gong', size=944.0, wavemin=6768.0, wavemax=6768.0, starred=True)] columns = [ 'id', 'source', 'provider', 'physobs', 'fileid', 'download_time', 'observation_time_start', 'instrument', 'size', 'wavemin', 'path', 'starred', 'tags'] table = display_entries(entries, columns) filedir = os.path.dirname(os.path.realpath(__file__)) with open(os.path.join(filedir,'test_table.txt'), 'r') as f: stored_table = f.read() assert table.strip() == stored_table.strip()
def test_tags_unique(database): entry = DatabaseEntry() entry.tags = [Tag('foo')] database.add(entry) database.commit() entry.tags.append(Tag('foo')) with pytest.raises(sqlalchemy.orm.exc.FlushError): database.commit()
def test_getitem_exceeding_range(filled_database): entries = filled_database[7:1000] foo = Tag('foo') foo.id = 1 bar = Tag('bar') bar.id = 2 assert entries == [ DatabaseEntry(id=8, tags=[foo]), DatabaseEntry(id=9), DatabaseEntry(id=10, tags=[bar])]
def test_query(filled_database): foo = Tag('foo') foo.id = 1 bar = Tag('bar') bar.id = 2 entries = filled_database.search( attrs.Tag('foo') | attrs.Tag('bar'), sortby='id') assert len(entries) == 4 assert entries == [ DatabaseEntry(id=4, tags=[foo]), DatabaseEntry(id=5, tags=[bar]), DatabaseEntry(id=8, tags=[foo]), DatabaseEntry(id=10, tags=[bar])]
def test_remove_tag_undo_redo(filled_database): foo = Tag('foo') foo.id = 1 fourth_entry = filled_database.get_entry_by_id(4) assert foo in fourth_entry.tags filled_database.remove_tag(fourth_entry, 'foo') assert foo not in fourth_entry.tags assert foo in filled_database.tags filled_database.undo() assert foo in fourth_entry.tags assert foo in filled_database.tags filled_database.redo() assert foo not in fourth_entry.tags assert foo in filled_database.tags eighth_entry = filled_database.get_entry_by_id(8) filled_database.remove_tag(eighth_entry, 'foo') assert foo not in eighth_entry.tags assert foo not in filled_database.tags filled_database.undo() assert foo not in fourth_entry.tags assert foo in eighth_entry.tags assert foo in filled_database.tags filled_database.redo() assert foo not in eighth_entry.tags assert foo not in filled_database.tags
def test_get_existing_tag(database): entry = DatabaseEntry() database.tag(entry, 'tag') database.add(entry) expected_tag = Tag('tag') expected_tag.id = 1 assert database.get_tag('tag') == expected_tag
def test_add_tag(session): tag = Tag('tag') entry = DatabaseEntry() assert entry.tags == [] cmd = AddTag(session, entry, tag) cmd() assert tag in entry.tags
def test_getitem_negative_indices_slice(filled_database): entries = filled_database[-2:-8:-2] bar = Tag('bar') bar.id = 2 assert entries == [ DatabaseEntry(id=9), DatabaseEntry(id=7), DatabaseEntry(id=5, tags=[bar])]
def test_remove_tag_repr(session): entry = DatabaseEntry(id=8) tag = Tag('foo') expected_repr_result = ( "<RemoveTag(" "tag 'foo', " "session <sqlalchemy.orm.session.Session object at *>, " "entry id 8)>".format(id(session))) assert fnmatch.fnmatch(repr(RemoveTag(session, entry, tag)), expected_repr_result)
def test_add_removed_tag(session): entry = DatabaseEntry() tag = Tag('tag') entry.tags.append(tag) session.add(tag) session.commit() session.delete(tag) AddTag(session, entry, tag)() assert tag in entry.tags
def test_add_tag_repr(session): entry = DatabaseEntry(id=12) tag = Tag('spam') expected_repr_result = ( "<AddTag(" "tag 'spam', " "session <sqlalchemy.orm.session.Session object at *>, " "entry id 12)>".format(id(session))) assert fnmatch.fnmatch(repr(AddTag(session, entry, tag)), expected_repr_result)
def test_remove_tag_undo(session): tag = Tag('tag') entry = DatabaseEntry() entry.tags.append(tag) session.add(entry) session.commit() assert tag in entry.tags cmd = RemoveTag(session, entry, tag) cmd() assert tag not in entry.tags cmd.undo() assert tag in entry.tags
def test_remove_many_entries(filled_database): bar = Tag('bar') bar.id = 2 # required to check if `remove_many` adds any entries to undo-history filled_database.clear_histories() filled_database.remove_many(filled_database[:8]) assert len(filled_database) == 2 assert list(filled_database) == [ DatabaseEntry(id=9), DatabaseEntry(id=10, tags=[bar])] filled_database.undo() assert len(filled_database) == 10 with pytest.raises(EmptyCommandStackError): filled_database.undo()
def test_getitem_custom(filled_database): entries = filled_database[1:5:2] foo = Tag('foo') foo.id = 1 assert entries == [DatabaseEntry(id=2), DatabaseEntry(id=4, tags=[foo])]
def test_tag_inequality(): assert Tag('abc') != Tag('xyz') assert not (Tag('abc') != Tag('abc'))
def test_tag_hashability(): assert isinstance(Tag(''), Hashable)
def test_remove_nonexisting_tag(session): cmd = RemoveTag(session, DatabaseEntry(), Tag('tag')) with pytest.raises(NonRemovableTagError): cmd()