Chromium Code Reviews| Index: components/offline_pages/background/remove_requests_task_unittest.cc |
| diff --git a/components/offline_pages/background/remove_requests_task_unittest.cc b/components/offline_pages/background/remove_requests_task_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..dde255dc2852891d8bc91a697233c73fc9bb2322 |
| --- /dev/null |
| +++ b/components/offline_pages/background/remove_requests_task_unittest.cc |
| @@ -0,0 +1,145 @@ |
| +// Copyright 2016 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 "components/offline_pages/background/remove_requests_task.h" |
| + |
| +#include <memory> |
| + |
| +#include "base/bind.h" |
| +#include "base/test/test_simple_task_runner.h" |
| +#include "base/threading/thread_task_runner_handle.h" |
| +#include "components/offline_pages/background/request_queue_in_memory_store.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace offline_pages { |
| +namespace { |
| +const int64_t kRequestId1 = 42; |
| +const int64_t kRequestId2 = 43; |
| +const GURL kUrl1("http://example.com"); |
| +const ClientId kClientId1("bookmark", "1234"); |
| +} // namespace |
| + |
| +class RemoveRequestsTaskTest : public testing::Test { |
| + public: |
| + RemoveRequestsTaskTest(); |
| + ~RemoveRequestsTaskTest() override; |
| + |
| + void PumpLoop(); |
| + |
| + void SetUpStore(RequestQueueStore* store); |
| + |
| + void AddRequestDone(ItemActionStatus status); |
| + |
| + void RemoveRequestsCallback(std::unique_ptr<UpdateRequestsResult> result); |
| + |
| + UpdateRequestsResult* last_result() const { return result_.get(); } |
| + |
| + private: |
| + std::unique_ptr<UpdateRequestsResult> result_; |
| + scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| + base::ThreadTaskRunnerHandle task_runner_handle_; |
| +}; |
| + |
| +RemoveRequestsTaskTest::RemoveRequestsTaskTest() |
| + : task_runner_(new base::TestSimpleTaskRunner), |
| + task_runner_handle_(task_runner_) {} |
| + |
| +RemoveRequestsTaskTest::~RemoveRequestsTaskTest() {} |
| + |
| +void RemoveRequestsTaskTest::PumpLoop() { |
| + task_runner_->RunUntilIdle(); |
| +} |
| + |
| +void RemoveRequestsTaskTest::SetUpStore(RequestQueueStore* store) { |
|
Pete Williamson
2016/09/30 18:03:53
A better name might be "AddARequestToStore". This
fgorski
2016/10/04 17:18:23
Done.
|
| + base::Time creation_time = base::Time::Now(); |
| + SavePageRequest original_request(kRequestId1, kUrl1, kClientId1, |
| + creation_time, true); |
| + store->AddRequest(original_request, |
| + base::Bind(&RemoveRequestsTaskTest::AddRequestDone, |
| + base::Unretained(this))); |
| + PumpLoop(); |
| +} |
| + |
| +void RemoveRequestsTaskTest::AddRequestDone(ItemActionStatus status) { |
| + ASSERT_EQ(ItemActionStatus::SUCCESS, status); |
| +} |
| + |
| +void RemoveRequestsTaskTest::RemoveRequestsCallback( |
| + std::unique_ptr<UpdateRequestsResult> result) { |
| + result_ = std::move(result); |
| +} |
| + |
| +TEST_F(RemoveRequestsTaskTest, RemoveWhenStoreEmpty) { |
| + RequestQueueInMemoryStore store; |
| + std::vector<int64_t> request_ids{kRequestId1}; |
| + RemoveRequestsTask task( |
| + &store, request_ids, |
| + base::Bind(&RemoveRequestsTaskTest::RemoveRequestsCallback, |
| + base::Unretained(this))); |
| + task.Run(); |
| + PumpLoop(); |
| + ASSERT_TRUE(last_result()); |
| + EXPECT_EQ(1UL, last_result()->item_statuses.size()); |
| + EXPECT_EQ(kRequestId1, last_result()->item_statuses.at(0).first); |
| + EXPECT_EQ(ItemActionStatus::NOT_FOUND, |
| + last_result()->item_statuses.at(0).second); |
| + EXPECT_EQ(0UL, last_result()->updated_items.size()); |
| +} |
| + |
| +TEST_F(RemoveRequestsTaskTest, RemoveSingleItem) { |
|
Pete Williamson
2016/09/30 18:03:53
Maybe add a test for removing multiple items.
fgorski
2016/10/04 17:18:23
Done.
|
| + RequestQueueInMemoryStore store; |
| + SetUpStore(&store); |
| + std::vector<int64_t> request_ids{kRequestId1}; |
| + RemoveRequestsTask task( |
| + &store, request_ids, |
| + base::Bind(&RemoveRequestsTaskTest::RemoveRequestsCallback, |
| + base::Unretained(this))); |
| + task.Run(); |
| + PumpLoop(); |
| + ASSERT_TRUE(last_result()); |
| + EXPECT_EQ(1UL, last_result()->item_statuses.size()); |
| + EXPECT_EQ(kRequestId1, last_result()->item_statuses.at(0).first); |
| + EXPECT_EQ(ItemActionStatus::SUCCESS, |
| + last_result()->item_statuses.at(0).second); |
| + EXPECT_EQ(1UL, last_result()->updated_items.size()); |
| + EXPECT_EQ(kRequestId1, last_result()->updated_items.at(0).request_id()); |
| +} |
| + |
| +TEST_F(RemoveRequestsTaskTest, DeleteWithEmptyIdList) { |
| + RequestQueueInMemoryStore store; |
| + std::vector<int64_t> request_ids; |
| + RemoveRequestsTask task( |
| + &store, request_ids, |
| + base::Bind(&RemoveRequestsTaskTest::RemoveRequestsCallback, |
| + base::Unretained(this))); |
| + task.Run(); |
| + PumpLoop(); |
| + ASSERT_TRUE(last_result()); |
| + EXPECT_EQ(0UL, last_result()->item_statuses.size()); |
| + EXPECT_EQ(0UL, last_result()->updated_items.size()); |
| +} |
| + |
| +TEST_F(RemoveRequestsTaskTest, RemoveMissingItem) { |
| + RequestQueueInMemoryStore store; |
| + SetUpStore(&store); |
| + std::vector<int64_t> request_ids{kRequestId1, kRequestId2}; |
| + RemoveRequestsTask task( |
| + &store, request_ids, |
| + base::Bind(&RemoveRequestsTaskTest::RemoveRequestsCallback, |
| + base::Unretained(this))); |
| + task.Run(); |
| + PumpLoop(); |
| + ASSERT_TRUE(last_result()); |
| + EXPECT_EQ(2UL, last_result()->item_statuses.size()); |
| + EXPECT_EQ(kRequestId1, last_result()->item_statuses.at(0).first); |
| + EXPECT_EQ(ItemActionStatus::SUCCESS, |
| + last_result()->item_statuses.at(0).second); |
| + EXPECT_EQ(kRequestId2, last_result()->item_statuses.at(1).first); |
| + EXPECT_EQ(ItemActionStatus::NOT_FOUND, |
| + last_result()->item_statuses.at(1).second); |
| + EXPECT_EQ(1UL, last_result()->updated_items.size()); |
| + EXPECT_EQ(kRequestId1, last_result()->updated_items.at(0).request_id()); |
| +} |
| + |
| +} // namespace offline_pages |