Пример #1
0
def test_docs_with_labels():
    document_1 = Document(title="Test title 1",
                          base_path="/test-1", 
                          content="This is a test document - one")
    document_2 = Document(title="Test title 2",
                          base_path="/test-2", 
                          content="This is a test document - two")

    topic_1 = Topic(
        title='Label 1',
        base_path='/topic/working-sea',
        description='List of information about Topic.'
    )
    topic_2 = Topic(
        title='Label 2',
        base_path='/topic/working-sea-2',
        description='List of information about Topic. 2'
    )

    subtopic_1 = Subtopic(
        title='Subtopic',
        base_path='/topic/working-sea',
        description='List of information about Subtopic.'
    )
    subtopic_2 = Subtopic(
        title='Subtopic 2',
        base_path='/topic/working-sea-2',
        description='List of information about Subtopic. 2'
    )

    topic_1.subtopics = [subtopic_1]
    topic_2.subtopics = [subtopic_2]
    subtopic_1.documents = [document_1]
    subtopic_2.documents = [document_2]

    DBH = DBHandler(db_name=database_name, echo=False)
    session = DBH.session
    session.add_all([topic_1, topic_2, subtopic_1, subtopic_2, document_1, document_2])
    session.commit()

    doc_op = DocumentOperator(db_name = database_name)

    docs_with_labels = doc_op.docs_with_labels
    first_set = docs_with_labels[0]
    second_set = docs_with_labels[1]

    assert [document_1.title, [topic_1.title]] in [[first_set[0].title, first_set[1]], [second_set[0].title, second_set[1]]]
    assert [document_2.title, [topic_2.title]] in [[first_set[0].title, first_set[1]], [second_set[0].title, second_set[1]]]
Пример #2
0
def test_db():
    database_name = "test_klassify"

    DBH = DBHandler(database_name, echo=False)
    session = DBH.session
    # create a topic, subtopic and document
    test_topic = Topic(title="HMRC", base_path="/hmrc")
    test_subtopic_1 = Subtopic(title="HMRC payments", base_path="/payments")
    test_subtopic_2 = Subtopic(title="HMRC refunds", base_path="/refunds")
    test_document_1 = Document(
        title="Self assessment deadlines", base_path="/self-assessment", html="<strong>PAY NOW</strong>"
    )
    test_document_2 = Document(
        title="Starting a business", base_path="/start-business", html="<strong>START NOW</strong>"
    )
    test_document_3 = Document(
        title="Payment and refunds", base_path="/payments-and-refunds", html="<h1>payments and refunds</h1>"
    )

    # create relationships
    test_topic.subtopics = [test_subtopic_1, test_subtopic_2]
    test_subtopic_1.documents = [test_document_1, test_document_2]
    test_document_3.subtopics = [test_subtopic_1, test_subtopic_2]

    # add topic to session
    session.add_all([test_topic, test_subtopic_1, test_subtopic_2, test_document_1, test_document_2, test_document_3])

    session.commit()

    # Table properties
    assert session.query(Topic).get(test_topic.id).title == test_topic.title
    assert session.query(Topic).get(test_topic.id).base_path == test_topic.base_path
    assert session.query(Subtopic).get(test_subtopic_1.id).title == test_subtopic_1.title
    assert session.query(Subtopic).get(test_subtopic_1.id).base_path == test_subtopic_1.base_path
    assert session.query(Document).get(test_document_1.id).title == test_document_1.title
    assert session.query(Document).get(test_document_1.id).base_path == test_document_1.base_path

    # test relationships
    topics_and_subtopics = session.query(Topic).get(test_topic.id).subtopics
    subtopics_titles = [subtopic.title for subtopic in topics_and_subtopics]
    assert test_subtopic_1.title in subtopics_titles
    assert test_subtopic_2.title in subtopics_titles

    subtopics_and_documents = session.query(Subtopic).get(test_subtopic_1.id).documents
    documents_titles = [document.title for document in subtopics_and_documents]
    assert test_document_1.title in documents_titles
    assert test_document_2.title in documents_titles

    documents_and_subtopics = session.query(Document).get(test_document_3.id).subtopics
    subtopics_titles = [subtopic.title for subtopic in documents_and_subtopics]
    assert test_subtopic_1.title in subtopics_titles
    assert test_subtopic_2.title in subtopics_titles

    # Test Document->Topics relation
    doc = session.query(Document).get(test_document_1.id)
    topic = session.query(Topic).get(test_topic.id)
    assert topic in doc.topics()
    assert topic.title in doc.topic_titles()

    # Test Topic->Documents relation
    doc = session.query(Document).get(test_document_1.id)
    topic = session.query(Topic).get(test_topic.id)
    assert doc in topic.documents()
    assert doc, topic.title in topic.documents_with_labels()

    # test unique constraint on basepath
    clone_topic = Topic(title="Clone topic", base_path="/hmrc")
    clone_subtopic = Subtopic(title="Clone subtopic", base_path="/refunds")
    clone_document = Document(
        title="Clone document", base_path="/payments-and-refunds", html="<h1>payments and refunds</h1>"
    )
    clones = [clone_topic, clone_subtopic, clone_document]
    for clone in clones:
        with pytest.raises(sqlalchemy.exc.IntegrityError):
            session.rollback()
            session.add_all([clone])
            session.commit()

    # terminate session and delete test db
    session.close()
    DBH.destroy_db_if_present()