From 2149728abb2ca24a41df0cda5d0f15aad913c8df Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Mon, 16 Oct 2017 20:06:15 +0300 Subject: [PATCH] Test ugc to send --- ugc/storage.cpp | 12 ++++----- ugc/ugc_tests/storage_tests.cpp | 44 +++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/ugc/storage.cpp b/ugc/storage.cpp index caacee9383..6de192aa5f 100644 --- a/ugc/storage.cpp +++ b/ugc/storage.cpp @@ -28,7 +28,7 @@ string const kIndexFileName = "index.json"; string const kUGCUpdateFileName = "ugc.update.bin"; string const kTmpFileExtension = ".tmp"; -using Sink = MemWriter>; +using Sink = MemWriter; string GetUGCFilePath() { return my::JoinPath(GetPlatform().WritableDir(), kUGCUpdateFileName); } @@ -56,15 +56,14 @@ string SerializeUGCIndex(vector const & indexes) auto array = my::NewJSONArray(); for (auto const & index : indexes) { - vector data; + string data; { Sink sink(data); SerializerJson ser(sink); ser(index); } - data.push_back('\0'); - my::Json node(data.data()); + my::Json node(data); json_array_append_new(array.get(), node.get_deep_copy()); } @@ -285,15 +284,14 @@ string Storage::GetUGCToSend() const UGCUpdate update; Deserialize(source, update); - vector data; + string data; { Sink sink(data); SerializerJson ser(sink); ser(update); } - data.push_back('\0'); - my::Json serializedUgc(data.data()); + my::Json serializedUgc(data); auto embeddedNode = my::NewJSONObject(); ToJSONObject(*embeddedNode.get(), "data_version", index.m_dataVersion); ToJSONObject(*embeddedNode.get(), "mwm_name", index.m_mwmName); diff --git a/ugc/ugc_tests/storage_tests.cpp b/ugc/ugc_tests/storage_tests.cpp index 84219e734f..f1e38ecb73 100644 --- a/ugc/ugc_tests/storage_tests.cpp +++ b/ugc/ugc_tests/storage_tests.cpp @@ -4,6 +4,7 @@ #include "generator/generator_tests_support/test_mwm_builder.hpp" #include "ugc/api.hpp" +#include "ugc/serdes_json.hpp" #include "ugc/ugc_tests/utils.hpp" #include "storage/country_info_getter.hpp" @@ -17,15 +18,19 @@ #include "coding/file_name_utils.hpp" #include "coding/internal/file_data.hpp" +#include "coding/writer.hpp" #include "platform/local_country_file_utils.hpp" #include "platform/platform.hpp" #include #include +#include #include #include +#include "3party/jansson/myjansson.hpp" + using namespace std; using namespace generator::tests_support; using namespace ugc; @@ -259,3 +264,42 @@ UNIT_TEST(StorageTest_LoadIndex) TEST(DeleteIndexFile(), ()); TEST(DeleteUGCFile(), ()); } + +UNIT_TEST(StorageTest_ContentTest) +{ + auto & builder = MwmBuilder::Builder(); + m2::PointD const cafePoint(1.0, 1.0); + builder.Build({TestCafe(cafePoint)}); + auto const cafeId = builder.FeatureIdForCafeAtPoint(cafePoint); + auto const oldUGC = MakeTestUGCUpdate(Time(chrono::hours(24 * 10))); + auto const newUGC = MakeTestUGCUpdate(Time(chrono::hours(24 * 300))); + Storage storage(builder.GetIndex()); + storage.Load(); + storage.SetUGCUpdate(cafeId, oldUGC); + storage.SetUGCUpdate(cafeId, newUGC); + TEST_EQUAL(storage.GetIndexesForTesting().size(), 2, ()); + auto const toSendActual = storage.GetUGCToSend(); + + auto array = my::NewJSONArray(); + string data; + { + using Sink = MemWriter; + Sink sink(data); + SerializerJson ser(sink); + ser(newUGC); + } + + my::Json ugcNode(data); + auto embeddedNode = my::NewJSONObject(); + ToJSONObject(*embeddedNode.get(), "data_version", cafeId.GetMwmVersion() ); + ToJSONObject(*embeddedNode.get(), "mwm_name", cafeId.GetMwmName()); + ToJSONObject(*embeddedNode.get(), "feature_id", cafeId.m_index); + ToJSONObject(*ugcNode.get(), "feature", *embeddedNode.release()); + json_array_append_new(array.get(), ugcNode.get_deep_copy()); + auto reviewsNode = my::NewJSONObject(); + ToJSONObject(*reviewsNode.get(), "reviews", *array.release()); + unique_ptr buffer(json_dumps(reviewsNode.get(), JSON_COMPACT | JSON_ENSURE_ASCII)); + string const toSendExpected(buffer.get()); + TEST_EQUAL(toSendActual, toSendExpected, ()); + TEST(DeleteUGCFile(), ()); +}