diff --git a/src/test/cratestorage_test.cpp b/src/test/cratestorage_test.cpp new file mode 100644 index 00000000000..036b07d869a --- /dev/null +++ b/src/test/cratestorage_test.cpp @@ -0,0 +1,67 @@ +#include "test/librarytest.h" + +#include "library/crate/cratestorage.h" + + +class CrateStorageTest : public LibraryTest { + protected: + CrateStorageTest() { + m_crateStorage.connectDatabase(dbConnection()); + } + + CrateStorage m_crateStorage; +}; + +TEST_F(CrateStorageTest, persistentLifecycle) { + const uint kNumCrates = 10; + + // Insert some crates + for (auto i = kNumCrates; i > 0; --i) { + Crate crate; + crate.setName(QString("Crate %1").arg(i)); + ASSERT_TRUE(m_crateStorage.onInsertingCrate(crate)); + } + EXPECT_EQ(kNumCrates, m_crateStorage.countCrates()); + + // Identify one of the "middle" crates by name + const auto kCrateIndex = (kNumCrates + 1) / 2; + const auto kCrateName = QString("Crate %1").arg(kCrateIndex); + CrateId crateId; + + // Find this crate by name + { + Crate crate; + ASSERT_TRUE(m_crateStorage.readCrateByName(kCrateName, &crate)); + EXPECT_EQ(kCrateName, crate.getName()); + crateId = crate.getId(); + ASSERT_TRUE(crateId.isValid()); + } + + // Find this crate crate again, but now by id + Crate crate; + { + ASSERT_TRUE(m_crateStorage.readCrateById(crateId, &crate)); + EXPECT_EQ(crateId, crate.getId()); + EXPECT_EQ(kCrateName, crate.getName()); + } + + // Update the crate's name + const auto kNewCrateName = QString("New%1").arg(kCrateName); + crate.setName(kNewCrateName); + ASSERT_TRUE(m_crateStorage.onUpdatingCrate(crate)); + // Reading the crate by its old name should fail + EXPECT_FALSE(m_crateStorage.readCrateByName(kCrateName)); + // Reading by id should reflect the updated name + { + Crate updatedCrate; + EXPECT_TRUE(m_crateStorage.readCrateById(crateId, &updatedCrate)); + EXPECT_EQ(kNewCrateName, updatedCrate.getName()); + } + + // Finally delete this crate + ASSERT_TRUE(m_crateStorage.onDeletingCrate(crateId)); + EXPECT_FALSE(m_crateStorage.readCrateById(crateId)); + EXPECT_FALSE(m_crateStorage.readCrateByName(kCrateName)); + EXPECT_FALSE(m_crateStorage.readCrateByName(kNewCrateName)); + EXPECT_EQ(kNumCrates - 1, m_crateStorage.countCrates()); +}