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]]]
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()