Exemplo n.º 1
0
def test_paper(paper: Paper):

    assert paper.title == 'awesome paper title'
    assert paper.abstract == 'a long abstract'
    assert paper.authors == ['Dr Paul', 'Dr John', 'Dr George', 'Dr Ringo']
    assert len(paper.urls) == 1
    assert len(paper.databases) == 5

    paper.databases = set()

    with pytest.raises(ValueError):
        paper.add_database('INVALID DATABASE')

    paper.add_database('Scopus')
    paper.add_database('Scopus')
    assert len(paper.databases) == 1

    paper.add_database('ACM')
    assert len(paper.databases) == 2

    assert len(paper.urls) == 1
    paper.add_url(next(iter(paper.urls)))
    assert len(paper.urls) == 1

    paper.add_url('another://url')
    assert len(paper.urls) == 2

    another_paper_citations = 10
    another_doi = 'DOI-X'
    another_keywords = {'key-A', 'key-B', 'key-C'}
    another_comments = 'some comments'

    another_paper = Paper('another awesome title paper', 'a long abstract',
                          paper.authors, paper.publication,
                          paper.publication_date, paper.urls, another_doi,
                          another_paper_citations, another_keywords,
                          another_comments)
    another_paper.add_database('arXiv')

    paper.publication_date = None
    paper.abstract = None
    paper.authors = None
    paper.keywords = None
    paper.publication = None
    paper.doi = None
    paper.citations = 0
    paper.comments = None
    paper.number_of_pages = None
    paper.pages = None

    paper.enrich(another_paper)
    assert paper.publication_date == another_paper.publication_date
    assert paper.abstract == another_paper.abstract
    assert paper.authors == another_paper.authors
    assert paper.keywords == another_paper.keywords

    assert 'arXiv' in paper.databases
    assert len(paper.databases) == 3
    assert paper.doi == another_doi
    assert paper.citations == another_paper_citations  # 'cause another_paper_citations was higher than paper_citations
    assert paper.keywords == another_keywords
    assert paper.comments == another_comments
Exemplo n.º 2
0
def test_search(paper: Paper):

    paper.doi = None

    search = Search('this AND that', datetime.date(1969, 1, 30),
                    datetime.date(1970, 4, 8), 2)

    assert len(search.papers) == 0

    search.add_paper(paper)
    assert len(search.papers) == 1
    search.add_paper(paper)
    assert len(search.papers) == 1

    another_paper = Paper('awesome paper title 2', 'a long abstract',
                          paper.authors, paper.publication,
                          paper.publication_date, paper.urls)
    another_paper.add_database('arXiv')

    search.add_paper(another_paper)
    assert len(search.papers) == 2

    assert paper == search.get_paper(paper.title, paper.publication_date,
                                     paper.doi)
    assert paper.publication == search.get_publication(paper.publication.title,
                                                       paper.publication.issn,
                                                       paper.publication.isbn)

    search.remove_paper(another_paper)
    assert len(search.papers) == 1
    assert paper in search.papers

    search.limit_per_database = 1
    with pytest.raises(OverflowError):
        search.add_paper(another_paper)
    search.limit_per_database = 2

    search.add_paper(another_paper)
    assert len(search.papers) == 2

    another_paper_2 = copy.deepcopy(paper)
    another_paper_2.title = 'awesome paper title 3'
    another_paper_2.abstract = 'a long abstract'
    another_paper_2.databases = set()

    with pytest.raises(ValueError):
        search.add_paper(another_paper_2)

    another_paper_2.add_database('arXiv')

    with pytest.raises(OverflowError):
        search.add_paper(another_paper_2)

    search.merge_duplications()
    assert len(search.papers) == 1

    publication_title = 'FAKE-TITLE'
    publication_issn = 'FAKE-ISSN'
    publication_isbn = 'FAKE-ISBN'
    assert search.get_publication_key(
        publication_title, publication_issn,
        publication_isbn) == f'ISBN-{publication_isbn.lower()}'
    assert search.get_publication_key(
        publication_title,
        publication_issn) == f'ISSN-{publication_issn.lower()}'
    assert search.get_publication_key(
        publication_title) == f'TITLE-{publication_title.lower()}'