#include "../serialization/mongo/MongoReplicable.hpp"
#include <gtest/gtest.h>
struct TestStruct1
{
TestStruct1()
: vect()
{
//
}
TestStruct1(std::vector<int>&& vect_)
: vect(vect_)
{
//
}
void Serialize(sprawl::serialization::SerializerBase& s)
{
s % NAME_PROPERTY(vect);
}
std::vector<int> vect;
};
struct TestStruct2
{
TestStruct2(std::vector<TestStruct1>&& vect_)
: vect(vect_)
{
//
}
void Serialize(sprawl::serialization::SerializerBase& s)
{
s % NAME_PROPERTY(vect);
}
std::vector<TestStruct1> vect;
};
TEST(MongoReplicable, RemovingArrayWithNestedArrayInsideNestedObjectWorks)
{
TestStruct2 t( { TestStruct1({1, 2, 3}), TestStruct1({4, 5, 6}) } );
sprawl::serialization::MongoReplicableSerializer m;
m % NAME_PROPERTY(t);
m.Mark();
t.vect.pop_back();
t.vect[0].vect.pop_back();
m % NAME_PROPERTY(t);
std::vector<mongo::BSONObj> deltas = m.generateUpdateQuery();
EXPECT_EQ(size_t(3), deltas.size()) << "Test case should have returned three queries.";
if(deltas.size() >= 1)
{
EXPECT_EQ(
R"raw({ "$unset" : { "t.vect.0.vect.2" : "", "t.vect.1" : "" } })raw",
deltas[0].jsonString(mongo::TenGen)
) << "Invalid first query";
}
if(deltas.size() >= 2)
{
EXPECT_EQ(
R"raw({ "$pull" : { "t.vect.0.vect" : null } })raw",
deltas[1].jsonString(mongo::TenGen)
) << "Invalid second query";
}
if(deltas.size() >= 3)
{
EXPECT_EQ(
R"raw({ "$pull" : { "t.vect" : null } })raw",
deltas[2].jsonString(mongo::TenGen)
) << "Invalid third query";
}
}
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #3 | 14146 | ShadauxCat |
Moving a gtest-specific function out of String.hpp #review-14147 |
||
| #2 | 14144 | ShadauxCat |
Switching unit tests to gtest. 100 is a decent number of tests to start with, but it needs to be more like 400 to test the current codebase. #review-14145 |
||
| #1 | 11496 | ShadauxCat | Initial checkin: Current states for csbuild and libSprawl |