calendar_api_requests_unittest.cc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "google_apis/calendar/calendar_api_requests.h"
  5. #include "base/run_loop.h"
  6. #include "base/strings/stringprintf.h"
  7. #include "base/test/task_environment.h"
  8. #include "base/time/time.h"
  9. #include "google_apis/calendar/calendar_api_response_types.h"
  10. #include "google_apis/common/dummy_auth_service.h"
  11. #include "google_apis/common/request_sender.h"
  12. #include "google_apis/common/test_util.h"
  13. #include "net/test/embedded_test_server/embedded_test_server.h"
  14. #include "net/test/embedded_test_server/http_request.h"
  15. #include "net/test/embedded_test_server/http_response.h"
  16. #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
  17. #include "services/network/test/test_shared_url_loader_factory.h"
  18. #include "testing/gtest/include/gtest/gtest.h"
  19. namespace google_apis {
  20. namespace calendar {
  21. namespace {
  22. const char kTestUserAgent[] = "test-user-agent";
  23. }
  24. class CalendarApiRequestsTest : public testing::Test {
  25. public:
  26. CalendarApiRequestsTest()
  27. : test_shared_loader_factory_(
  28. base::MakeRefCounted<network::TestSharedURLLoaderFactory>(
  29. nullptr /* network_service */,
  30. true /* is_trusted */)) {}
  31. void SetUp() override {
  32. request_sender_ = std::make_unique<RequestSender>(
  33. std::make_unique<DummyAuthService>(), test_shared_loader_factory_,
  34. task_environment_.GetMainThreadTaskRunner(), kTestUserAgent,
  35. TRAFFIC_ANNOTATION_FOR_TESTS);
  36. test_server_.RegisterRequestHandler(
  37. base::BindRepeating(&CalendarApiRequestsTest::HandleDataFileRequest,
  38. base::Unretained(this)));
  39. ASSERT_TRUE(test_server_.Start());
  40. url_generator_ = std::make_unique<CalendarApiUrlGenerator>();
  41. url_generator_->SetBaseUrlForTesting(test_server_.base_url().spec());
  42. }
  43. void TearDown() override {
  44. // Deleting the sender here will delete all request objects.
  45. request_sender_.reset();
  46. // Wait for any DeleteSoon tasks to run.
  47. task_environment_.RunUntilIdle();
  48. }
  49. base::test::TaskEnvironment task_environment_{
  50. base::test::TaskEnvironment::MainThreadType::IO};
  51. net::EmbeddedTestServer test_server_;
  52. std::unique_ptr<RequestSender> request_sender_;
  53. std::unique_ptr<CalendarApiUrlGenerator> url_generator_;
  54. scoped_refptr<network::TestSharedURLLoaderFactory>
  55. test_shared_loader_factory_;
  56. net::test_server::HttpRequest http_request_;
  57. // Returns the mock calendar event list.
  58. std::unique_ptr<net::test_server::HttpResponse> HandleDataFileRequest(
  59. const net::test_server::HttpRequest& request) {
  60. http_request_ = request;
  61. // Return the response from the event json file.
  62. return test_util::CreateHttpResponseFromFile(
  63. test_util::GetTestFilePath("calendar/events.json"));
  64. }
  65. };
  66. // Tests the CalendarApiRequestsTest can generate the correct url and get the
  67. // correct response.
  68. TEST_F(CalendarApiRequestsTest, GetEventListRequest) {
  69. ApiErrorCode error = OTHER_ERROR;
  70. std::unique_ptr<EventList> events;
  71. base::Time start;
  72. base::Time end;
  73. EXPECT_TRUE(base::Time::FromString("13 Jun 2021 10:00 GMT", &start));
  74. EXPECT_TRUE(base::Time::FromString("16 Jun 2021 10:00 GMT", &end));
  75. {
  76. base::RunLoop run_loop;
  77. auto request = std::make_unique<CalendarApiEventsRequest>(
  78. request_sender_.get(), *url_generator_,
  79. test_util::CreateQuitCallback(
  80. &run_loop, test_util::CreateCopyResultCallback(&error, &events)),
  81. start, end);
  82. request_sender_->StartRequestWithAuthRetry(std::move(request));
  83. run_loop.Run();
  84. }
  85. EXPECT_EQ(HTTP_SUCCESS, error);
  86. EXPECT_EQ(net::test_server::METHOD_GET, http_request_.method);
  87. EXPECT_EQ(
  88. "/calendar/v3/calendars/primary/events"
  89. "?timeMin=2021-06-13T10%3A00%3A00.000Z"
  90. "&timeMax=2021-06-16T10%3A00%3A00.000Z"
  91. "&singleEvents=true"
  92. "&maxAttendees=1"
  93. "&fields=timeZone%2Cetag%2Ckind%2Citems(id%2Ckind%"
  94. "2Csummary%2CcolorId%2Cstatus%"
  95. "2Cstart(date)%2Cend(date)%"
  96. "2Cstart(dateTime)%2Cend(dateTime)%"
  97. "2ChtmlLink%2Cattendees(responseStatus%2Cself)%2CattendeesOmitted%"
  98. "2Ccreator(self))",
  99. http_request_.relative_url);
  100. ASSERT_TRUE(events.get());
  101. EXPECT_EQ(events->time_zone(), "America/Los_Angeles");
  102. base::Time::Exploded exploded;
  103. events->items()[0]->start_time().date_time().LocalExplode(&exploded);
  104. EXPECT_EQ(exploded.month, 11);
  105. }
  106. } // namespace calendar
  107. } // namespace google_apis