Commit 78593311 authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Video Tutorials : Saved server response in local database

Bug: 1132703
Change-Id: I603a02f5243c173fa88c2cb21d7f94b672638d87
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2434551
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarMin Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812204}
parent 84c57c99
......@@ -108,4 +108,15 @@ void TutorialGroupFromProto(TutorialGroupProto* proto, TutorialGroup* group) {
}
}
void TutorialGroupsFromServerResponseProto(ServerResponseProto* proto,
std::vector<TutorialGroup>* groups) {
DCHECK(groups);
DCHECK(proto);
for (auto group_proto : proto->tutorial_groups()) {
TutorialGroup group;
TutorialGroupFromProto(&group_proto, &group);
groups->emplace_back(group);
}
}
} // namespace video_tutorials
......@@ -13,6 +13,7 @@ namespace video_tutorials {
using LanguageProto = video_tutorials::proto::Language;
using TutorialProto = video_tutorials::proto::VideoTutorial;
using TutorialGroupProto = video_tutorials::proto::VideoTutorialGroup;
using ServerResponseProto = video_tutorials::proto::ServerResponse;
// Convert in-memory struct Language to proto::Language.
void LanguageToProto(Language* language, LanguageProto* proto);
......@@ -32,6 +33,10 @@ void TutorialGroupToProto(TutorialGroup* group, TutorialGroupProto* proto);
// Convert proto::VideoTutorialGroup to in-memory struct TutorialGroup.
void TutorialGroupFromProto(TutorialGroupProto* proto, TutorialGroup* group);
// Convert proto::ServerResponse to a list of TutorialGroups.
void TutorialGroupsFromServerResponseProto(ServerResponseProto* proto,
std::vector<TutorialGroup>* groups);
} // namespace video_tutorials
#endif // CHROME_BROWSER_VIDEO_TUTORIALS_INTERNAL_PROTO_CONVERSIONS_H_
......@@ -9,6 +9,33 @@
namespace video_tutorials {
namespace {
// Verify round-way conversion of feature enum type.
TEST(VideoTutorialsProtoConversionsTest, FeatureConversion) {
Tutorial expected, actual;
TutorialProto intermediate;
FeatureType features[] = {FeatureType::kTest, FeatureType::kInvalid,
FeatureType::kDebug, FeatureType::kDownload,
FeatureType::kSearch};
for (FeatureType feature : features) {
expected.feature = feature;
TutorialToProto(&expected, &intermediate);
TutorialFromProto(&intermediate, &actual);
EXPECT_EQ(expected, actual);
}
}
// Verify round-way conversion of Language struct.
TEST(VideoTutorialsProtoConversionsTest, LanguageConversion) {
Language expected, actual;
expected.locale = "jp";
expected.name = "Japanese";
expected.native_name = "Japanese-Native";
LanguageProto intermediate;
LanguageToProto(&expected, &intermediate);
LanguageFromProto(&intermediate, &actual);
EXPECT_EQ(expected, actual);
}
// Verify round-way conversion of Tutorial struct.
TEST(VideoTutorialsProtoConversionsTest, TutorialConversion) {
Tutorial expected, actual;
......@@ -29,5 +56,15 @@ TEST(VideoTutorialsProtoConversionsTest, TutorialGroupConversion) {
EXPECT_EQ(expected, actual);
}
// Verify server response to client conversion.
TEST(VideoTutorialsProtoConversionsTest, ServerResponseToClientConversion) {
ServerResponseProto server_response;
std::vector<TutorialGroup> groups;
server_response.add_tutorial_groups();
server_response.add_tutorial_groups();
TutorialGroupsFromServerResponseProto(&server_response, &groups);
EXPECT_EQ(groups.size(), 2u);
}
} // namespace
} // namespace video_tutorials
......@@ -9,6 +9,7 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "chrome/browser/video_tutorials/internal/config.h"
#include "chrome/browser/video_tutorials/internal/proto_conversions.h"
#include "chrome/browser/video_tutorials/prefs.h"
namespace video_tutorials {
......@@ -61,6 +62,20 @@ void TutorialServiceImpl::OnFetchFinished(
bool success,
std::unique_ptr<std::string> response_body) {
// TODO(shaktisahu): Save tutorials to the database.
if (!success || !response_body)
return;
proto::ServerResponse response_proto;
bool parse_success = response_proto.ParseFromString(*response_body.get());
if (!parse_success)
return;
auto tutorial_groups = std::make_unique<std::vector<TutorialGroup>>();
TutorialGroupsFromServerResponseProto(&response_proto, tutorial_groups.get());
auto lambda = [](bool success) {};
tutorial_manager_->SaveGroups(std::move(tutorial_groups),
base::BindOnce(std::move(lambda)));
}
const std::vector<Language>& TutorialServiceImpl::GetSupportedLanguages() {
......
......@@ -62,3 +62,9 @@ message VideoTutorial {
// Duration of the video in seconds.
int64 video_length = 7;
}
// Response from the server containing tutorial groups for all languages.
message ServerResponse {
// Tutorials for all available languages.
repeated VideoTutorialGroup tutorial_groups = 1;
}
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment