local_page_entities_metadata_provider_unittest.cc 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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 "components/optimization_guide/core/local_page_entities_metadata_provider.h"
  5. #include "base/memory/raw_ptr.h"
  6. #include "base/test/task_environment.h"
  7. #include "components/leveldb_proto/testing/fake_db.h"
  8. #include "components/optimization_guide/core/optimization_guide_features.h"
  9. #include "testing/gtest/include/gtest/gtest.h"
  10. namespace optimization_guide {
  11. class LocalPageEntitiesMetadataProviderTest : public testing::Test {
  12. public:
  13. LocalPageEntitiesMetadataProviderTest() = default;
  14. ~LocalPageEntitiesMetadataProviderTest() override = default;
  15. void SetUp() override {
  16. auto db = std::make_unique<
  17. leveldb_proto::test::FakeDB<proto::EntityMetadataStorage>>(&db_store_);
  18. db_ = db.get();
  19. provider_ = std::make_unique<LocalPageEntitiesMetadataProvider>();
  20. provider_->InitializeForTesting(
  21. std::move(db), task_environment_.GetMainThreadTaskRunner());
  22. }
  23. LocalPageEntitiesMetadataProvider* provider() { return provider_.get(); }
  24. leveldb_proto::test::FakeDB<proto::EntityMetadataStorage>* db() {
  25. return db_;
  26. }
  27. std::map<std::string, proto::EntityMetadataStorage>* store() {
  28. return &db_store_;
  29. }
  30. private:
  31. base::test::TaskEnvironment task_environment_;
  32. std::unique_ptr<LocalPageEntitiesMetadataProvider> provider_;
  33. raw_ptr<leveldb_proto::test::FakeDB<proto::EntityMetadataStorage>> db_;
  34. std::map<std::string, proto::EntityMetadataStorage> db_store_;
  35. };
  36. TEST_F(LocalPageEntitiesMetadataProviderTest, NonInitReturnsNullOpt) {
  37. LocalPageEntitiesMetadataProvider provider;
  38. absl::optional<EntityMetadata> md;
  39. bool callback_ran = false;
  40. provider.GetMetadataForEntityId(
  41. "entity_id",
  42. base::BindOnce(
  43. [](bool* callback_ran_flag, absl::optional<EntityMetadata>* md_out,
  44. const absl::optional<EntityMetadata>& md_in) {
  45. *callback_ran_flag = true;
  46. *md_out = md_in;
  47. },
  48. &callback_ran, &md));
  49. ASSERT_TRUE(callback_ran);
  50. EXPECT_EQ(absl::nullopt, md);
  51. }
  52. TEST_F(LocalPageEntitiesMetadataProviderTest, EmptyStoreReturnsNullOpt) {
  53. absl::optional<EntityMetadata> md;
  54. bool callback_ran = false;
  55. provider()->GetMetadataForEntityId(
  56. "entity_id",
  57. base::BindOnce(
  58. [](bool* callback_ran_flag, absl::optional<EntityMetadata>* md_out,
  59. const absl::optional<EntityMetadata>& md_in) {
  60. *callback_ran_flag = true;
  61. *md_out = md_in;
  62. },
  63. &callback_ran, &md));
  64. db()->GetCallback(/*success=*/true);
  65. ASSERT_TRUE(callback_ran);
  66. EXPECT_EQ(absl::nullopt, md);
  67. }
  68. TEST_F(LocalPageEntitiesMetadataProviderTest, PopulatedSuccess) {
  69. proto::EntityMetadataStorage stored_proto;
  70. stored_proto.set_entity_name("chip");
  71. store()->emplace("chocolate", stored_proto);
  72. EntityMetadata want_md;
  73. want_md.entity_id = "chocolate";
  74. want_md.human_readable_name = "chip";
  75. absl::optional<EntityMetadata> md;
  76. bool callback_ran = false;
  77. provider()->GetMetadataForEntityId(
  78. "chocolate",
  79. base::BindOnce(
  80. [](bool* callback_ran_flag, absl::optional<EntityMetadata>* md_out,
  81. const absl::optional<EntityMetadata>& md_in) {
  82. *callback_ran_flag = true;
  83. *md_out = md_in;
  84. },
  85. &callback_ran, &md));
  86. db()->GetCallback(/*success=*/true);
  87. ASSERT_TRUE(callback_ran);
  88. EXPECT_EQ(absl::make_optional(want_md), md);
  89. }
  90. TEST_F(LocalPageEntitiesMetadataProviderTest, PopulatedFailure) {
  91. proto::EntityMetadataStorage stored_proto;
  92. stored_proto.set_entity_name("chip");
  93. store()->emplace("chocolate", stored_proto);
  94. absl::optional<EntityMetadata> md;
  95. bool callback_ran = false;
  96. provider()->GetMetadataForEntityId(
  97. "chocolate",
  98. base::BindOnce(
  99. [](bool* callback_ran_flag, absl::optional<EntityMetadata>* md_out,
  100. const absl::optional<EntityMetadata>& md_in) {
  101. *callback_ran_flag = true;
  102. *md_out = md_in;
  103. },
  104. &callback_ran, &md));
  105. db()->GetCallback(/*success=*/false);
  106. ASSERT_TRUE(callback_ran);
  107. EXPECT_EQ(absl::nullopt, md);
  108. }
  109. } // namespace optimization_guide