Commit 9a3f5d0b authored by llin@chromium.org's avatar llin@chromium.org Committed by Commit Bot

Add unit tests for SearchResultLoader.

Bug: b/144800297
Test: unit tests
Change-Id: I28694447360b12592ebf7fcd5a701d56a687d951
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2040235
Commit-Queue: Li Lin <llin@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#739050}
parent 10015671
...@@ -39,6 +39,7 @@ source_set("unit_tests") { ...@@ -39,6 +39,7 @@ source_set("unit_tests") {
sources = [ sources = [
"quick_answers_client_unittest.cc", "quick_answers_client_unittest.cc",
"search_result_loader_unittest.cc",
"search_result_parsers/definition_result_parser_unittest.cc", "search_result_parsers/definition_result_parser_unittest.cc",
"search_result_parsers/result_parser_unittest.cc", "search_result_parsers/result_parser_unittest.cc",
"search_result_parsers/search_response_parser_unittest.cc", "search_result_parsers/search_response_parser_unittest.cc",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/components/quick_answers/search_result_loader.h"
#include <memory>
#include <string>
#include "base/test/task_environment.h"
#include "chromeos/components/quick_answers/quick_answers_model.h"
#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
#include "services/network/test/test_url_loader_factory.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
namespace quick_answers {
namespace {
const char kURL[] =
"https://www.google.com/httpservice/web/KnowledgeApiService/Search?fmt=json"
"&reqpld=%7B%22clientId%22%3A%7B%22clientType%22%3A%22QUICK_ANSWERS_CROS%"
"22%7D%2C%22query%22%3A%7B%22rawQuery%22%3A%2223cm%22%7D%7D";
constexpr char kValidResponse[] = R"()]}'
{
"results": [
{
"oneNamespaceType": 13668,
"unitConversionResult": {
"source": {
"valueAndUnit": {
"rawText": "23 centimeters"
}
},
"destination": {
"valueAndUnit": {
"rawText": "9.055 inches"
}
}
}
}
]
}
)";
class MockSearchResultLoaderDelegate
: public SearchResultLoader::SearchResultLoaderDelegate {
public:
MockSearchResultLoaderDelegate() = default;
MockSearchResultLoaderDelegate(const MockSearchResultLoaderDelegate&) =
delete;
MockSearchResultLoaderDelegate& operator=(
const MockSearchResultLoaderDelegate&) = delete;
// SearchResultLoader::SearchResultLoaderDelegate:
MOCK_METHOD0(OnNetworkError, void());
MOCK_METHOD1(OnQuickAnswerReceived, void(std::unique_ptr<QuickAnswer>));
};
MATCHER_P(QuickAnswerEqual, quick_answer, "") {
return (arg->primary_answer == quick_answer.primary_answer);
}
} // namespace
class SearchResultLoaderTest : public testing::Test {
public:
SearchResultLoaderTest() = default;
SearchResultLoaderTest(const SearchResultLoaderTest&) = delete;
SearchResultLoaderTest& operator=(const SearchResultLoaderTest&) = delete;
// testing::Test:
void SetUp() override {
mock_delegate_ = std::make_unique<MockSearchResultLoaderDelegate>();
loader_ = std::make_unique<SearchResultLoader>(&test_url_loader_factory_,
mock_delegate_.get());
}
void TearDown() override { loader_.reset(); }
protected:
std::unique_ptr<SearchResultLoader> loader_;
std::unique_ptr<MockSearchResultLoaderDelegate> mock_delegate_;
base::test::SingleThreadTaskEnvironment task_environment_;
data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
network::TestURLLoaderFactory test_url_loader_factory_;
};
TEST_F(SearchResultLoaderTest, Success) {
std::unique_ptr<QuickAnswer> expected_quick_answer =
std::make_unique<QuickAnswer>();
expected_quick_answer->primary_answer = "9.055 inches";
test_url_loader_factory_.AddResponse(kURL, kValidResponse);
EXPECT_CALL(*mock_delegate_,
OnQuickAnswerReceived(QuickAnswerEqual(*expected_quick_answer)));
EXPECT_CALL(*mock_delegate_, OnNetworkError()).Times(0);
loader_->Fetch("23cm");
base::RunLoop().RunUntilIdle();
}
TEST_F(SearchResultLoaderTest, NetworkError) {
test_url_loader_factory_.AddResponse(
GURL(kURL), network::mojom::URLResponseHead::New(), std::string(),
network::URLLoaderCompletionStatus(net::HTTP_NOT_FOUND));
EXPECT_CALL(*mock_delegate_, OnNetworkError());
EXPECT_CALL(*mock_delegate_, OnQuickAnswerReceived(testing::_)).Times(0);
loader_->Fetch("23cm");
base::RunLoop().RunUntilIdle();
}
TEST_F(SearchResultLoaderTest, EmptyResponse) {
test_url_loader_factory_.AddResponse(kURL, std::string());
EXPECT_CALL(*mock_delegate_, OnQuickAnswerReceived(testing::Eq(nullptr)));
EXPECT_CALL(*mock_delegate_, OnNetworkError()).Times(0);
loader_->Fetch("23cm");
base::RunLoop().RunUntilIdle();
}
} // namespace quick_answers
} // namespace chromeos
\ 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