1
0

testnotebookdatabase.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #include "testnotebookdatabase.h"
  2. #include <QtTest>
  3. #include "dummynode.h"
  4. #include "dummynotebook.h"
  5. using namespace tests;
  6. using namespace vnotex;
  7. TestNotebookDatabase::TestNotebookDatabase()
  8. {
  9. QVERIFY(m_testDir.isValid());
  10. m_notebook.reset(new DummyNotebook("test_notebook"));
  11. m_dbAccess.reset(new NotebookDatabaseAccess(m_notebook.data(), m_testDir.filePath("test.db")));
  12. m_dbAccess->initialize(0);
  13. QVERIFY(m_dbAccess->isFresh());
  14. QVERIFY(m_dbAccess->isValid());
  15. }
  16. TestNotebookDatabase::~TestNotebookDatabase()
  17. {
  18. m_dbAccess->close();
  19. m_dbAccess.reset();
  20. }
  21. void TestNotebookDatabase::test()
  22. {
  23. testNode();
  24. }
  25. void TestNotebookDatabase::testNode()
  26. {
  27. // Invlaid node.
  28. {
  29. auto nodeRec = m_dbAccess->queryNode(1);
  30. QVERIFY(nodeRec == nullptr);
  31. }
  32. // Root node.
  33. QScopedPointer<DummyNode> rootNode(new DummyNode(Node::Flag::Container, 0, "", m_notebook.data(), nullptr));
  34. addAndQueryNode(rootNode.data(), true);
  35. // Node 1.
  36. QScopedPointer<DummyNode> node1(new DummyNode(Node::Flag::Content, 10, "a", m_notebook.data(), rootNode.data()));
  37. addAndQueryNode(node1.data(), true);
  38. // Node 2, respect id.
  39. QScopedPointer<DummyNode> node2(new DummyNode(Node::Flag::Content, 50, "b", m_notebook.data(), rootNode.data()));
  40. addAndQueryNode(node2.data(), false);
  41. QCOMPARE(node2->getId(), 50);
  42. // Node 3, respect id with invalid id.
  43. QScopedPointer<DummyNode> node3(new DummyNode(Node::Flag::Container, 0, "c", m_notebook.data(), rootNode.data()));
  44. addAndQueryNode(node3.data(), false);
  45. QVERIFY(node3->getId() != 0);
  46. // Node 4, deep level.
  47. QScopedPointer<DummyNode> node4(new DummyNode(Node::Flag::Content, 11, "ca", m_notebook.data(), node3.data()));
  48. addAndQueryNode(node4.data(), false);
  49. // Node 5, deep level.
  50. QScopedPointer<DummyNode> node5(new DummyNode(Node::Flag::Content, 60, "caa", m_notebook.data(), node4.data()));
  51. addAndQueryNode(node5.data(), false);
  52. // Node 6, deep level.
  53. QScopedPointer<DummyNode> node6(new DummyNode(Node::Flag::Content, 5, "cab", m_notebook.data(), node4.data()));
  54. addAndQueryNode(node6.data(), false);
  55. // queryNodePath().
  56. {
  57. testQueryNodePath(rootNode.data());
  58. testQueryNodePath(node1.data());
  59. testQueryNodePath(node2.data());
  60. testQueryNodePath(node3.data());
  61. testQueryNodePath(node4.data());
  62. testQueryNodePath(node5.data());
  63. testQueryNodePath(node6.data());
  64. }
  65. // updateNode().
  66. {
  67. node6->setParent(node5.data());
  68. node6->setName("caaa");
  69. bool ret = m_dbAccess->updateNode(node6.data());
  70. QVERIFY(ret);
  71. queryAndVerifyNode(node6.data());
  72. }
  73. // removeNode().
  74. {
  75. QVERIFY(m_dbAccess->existsNode(node6.data()));
  76. bool ret = m_dbAccess->removeNode(node6->getId());
  77. QVERIFY(ret);
  78. QVERIFY(!m_dbAccess->existsNode(node6.data()));
  79. // DELETE CASCADE.
  80. QVERIFY(m_dbAccess->existsNode(node3.data()));
  81. QVERIFY(m_dbAccess->existsNode(node4.data()));
  82. QVERIFY(m_dbAccess->existsNode(node5.data()));
  83. ret = m_dbAccess->removeNode(node3->getId());
  84. QVERIFY(ret);
  85. QVERIFY(!m_dbAccess->existsNode(node3.data()));
  86. QVERIFY(!m_dbAccess->existsNode(node4.data()));
  87. QVERIFY(!m_dbAccess->existsNode(node5.data()));
  88. // Add back nodes.
  89. addAndQueryNode(node3.data(), false);
  90. addAndQueryNode(node4.data(), false);
  91. addAndQueryNode(node5.data(), false);
  92. addAndQueryNode(node6.data(), false);
  93. }
  94. }
  95. void TestNotebookDatabase::addAndQueryNode(Node *p_node, bool p_ignoreId)
  96. {
  97. bool ret = m_dbAccess->addNode(p_node, p_ignoreId);
  98. QVERIFY(ret);
  99. QVERIFY(p_node->getId() != NotebookDatabaseAccess::InvalidId);
  100. queryAndVerifyNode(p_node);
  101. QVERIFY(m_dbAccess->existsNode(p_node));
  102. }
  103. void TestNotebookDatabase::queryAndVerifyNode(const vnotex::Node *p_node)
  104. {
  105. auto nodeRec = m_dbAccess->queryNode(p_node->getId());
  106. QVERIFY(nodeRec);
  107. QCOMPARE(nodeRec->m_id, p_node->getId());
  108. QCOMPARE(nodeRec->m_name, p_node->getName());
  109. QCOMPARE(nodeRec->m_signature, p_node->getSignature());
  110. QCOMPARE(nodeRec->m_parentId, p_node->getParent() ? p_node->getParent()->getId() : NotebookDatabaseAccess::InvalidId);
  111. }
  112. void TestNotebookDatabase::testQueryNodePath(const vnotex::Node *p_node)
  113. {
  114. auto nodePath = m_dbAccess->queryNodePath(p_node->getId());
  115. auto node = p_node;
  116. for (int i = nodePath.size() - 1; i >= 0; --i) {
  117. QVERIFY(node);
  118. QCOMPARE(nodePath[i], node->getName());
  119. node = node->getParent();
  120. }
  121. QVERIFY(m_dbAccess->checkNodePath(p_node, nodePath));
  122. }