blob: 7cc33bf844133e8207621a47ec7da47cfebeefbf [file] [log] [blame]
// Copyright 2021 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 "google_apis/calendar/calendar_api_requests.h"
#include "base/run_loop.h"
#include "base/strings/stringprintf.h"
#include "base/test/task_environment.h"
#include "google_apis/calendar/calendar_api_response_types.h"
#include "google_apis/common/dummy_auth_service.h"
#include "google_apis/common/request_sender.h"
#include "google_apis/common/test_util.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
#include "services/network/test/test_shared_url_loader_factory.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace google_apis {
namespace calendar {
namespace {
const char kTestUserAgent[] = "test-user-agent";
}
class CalendarApiRequestsTest : public testing::Test {
public:
CalendarApiRequestsTest()
: test_shared_loader_factory_(
base::MakeRefCounted<network::TestSharedURLLoaderFactory>(
nullptr /* network_service */,
true /* is_trusted */)) {}
void SetUp() override {
request_sender_ = std::make_unique<RequestSender>(
std::make_unique<DummyAuthService>(), test_shared_loader_factory_,
task_environment_.GetMainThreadTaskRunner(), kTestUserAgent,
TRAFFIC_ANNOTATION_FOR_TESTS);
test_server_.RegisterRequestHandler(
base::BindRepeating(&CalendarApiRequestsTest::HandleDataFileRequest,
base::Unretained(this)));
ASSERT_TRUE(test_server_.Start());
url_generator_ = std::make_unique<CalendarApiUrlGenerator>();
url_generator_->SetBaseUrlForTesting(test_server_.base_url().spec());
}
void TearDown() override {
// Deleting the sender here will delete all request objects.
request_sender_.reset();
// Wait for any DeleteSoon tasks to run.
task_environment_.RunUntilIdle();
}
base::test::TaskEnvironment task_environment_{
base::test::TaskEnvironment::MainThreadType::IO};
net::EmbeddedTestServer test_server_;
std::unique_ptr<RequestSender> request_sender_;
std::unique_ptr<CalendarApiUrlGenerator> url_generator_;
scoped_refptr<network::TestSharedURLLoaderFactory>
test_shared_loader_factory_;
net::test_server::HttpRequest http_request_;
// Returns the mock calendar event list.
std::unique_ptr<net::test_server::HttpResponse> HandleDataFileRequest(
const net::test_server::HttpRequest& request) {
http_request_ = request;
// Return the response from the event json file.
return test_util::CreateHttpResponseFromFile(
test_util::GetTestFilePath("calendar/events.json"));
}
};
// Tests the CalendarApiRequestsTest can generate the correct url and get the
// correct response.
TEST_F(CalendarApiRequestsTest, GetEventListRequest) {
ApiErrorCode error = OTHER_ERROR;
std::unique_ptr<EventList> events;
base::Time start;
base::Time end;
EXPECT_TRUE(base::Time::FromString("13 Jun 2021 10:00 GMT", &start));
EXPECT_TRUE(base::Time::FromString("16 Jun 2021 10:00 GMT", &end));
{
base::RunLoop run_loop;
auto request = std::make_unique<CalendarApiEventsRequest>(
request_sender_.get(), *url_generator_,
test_util::CreateQuitCallback(
&run_loop, test_util::CreateCopyResultCallback(&error, &events)),
start, end);
request_sender_->StartRequestWithAuthRetry(std::move(request));
run_loop.Run();
}
EXPECT_EQ(HTTP_SUCCESS, error);
EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
EXPECT_EQ(
"/calendar/v3/calendars/primary/"
"events?timeMin=2021-06-13T10%3A00%3A00.000Z&timeMax=2021-06-16T10%3A00%"
"3A00.000Z&singleEvents=true&fields=timeZone%2Cetag%2Ckind%2Citems(id%"
"2Csummary%2CcolorId%2C+status%2Cstart(dateTime)%2Cend(dateTime)%"
"2ChtmlLink)",
http_request_.relative_url);
ASSERT_TRUE(events.get());
EXPECT_EQ(events->time_zone(), "America/Los_Angeles");
base::Time::Exploded exploded;
events->items()[0]->start_time().date_time().LocalExplode(&exploded);
EXPECT_EQ(exploded.month, 11);
}
} // namespace calendar
} // namespace google_apis