1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_USER_EDUCATION_TEST_TEST_FEATURE_PROMO_PRECONDITION_H_
#define COMPONENTS_USER_EDUCATION_TEST_TEST_FEATURE_PROMO_PRECONDITION_H_
#include <optional>
#include <string>
#include <vector>
#include "base/feature_list.h"
#include "base/memory/raw_ptr.h"
#include "components/user_education/common/feature_promo/feature_promo_controller.h"
#include "components/user_education/common/feature_promo/feature_promo_precondition.h"
#include "components/user_education/common/feature_promo/feature_promo_result.h"
#include "components/user_education/common/feature_promo/feature_promo_specification.h"
#include "components/user_education/common/feature_promo/impl/precondition_list_provider.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace user_education::test {
// Precondition list provider that forwards to a pre-generated list of caching
// preconditions (whose values can be individually set by id).
class TestPreconditionListProvider : public PreconditionListProvider {
public:
TestPreconditionListProvider();
~TestPreconditionListProvider() override;
// Sets the expected promo specification for the next query. If the next call
// does not match, or there are multiple calls, an error will be generated.
//
// To accept any value, call `ClearExpectedPromoForFutureQueries()`.
void SetExpectedPromoForNextQuery(const FeaturePromoSpecification& spec);
// Sets the expected promo specification to "don't care" for all future calls
// to `GetPreconditions()` unless `SetExpectedPromoForNextQuery()` is called
// again. This is the default.
void ClearExpectedPromoForFutureQueries();
// Adds a precondition with the specified parameters and default allowed
// state.
void Add(FeaturePromoPrecondition::Identifier identifier,
std::string description,
FeaturePromoResult initial_result);
// Sets the default `result` for a particular `id` which has already been
// added.
void SetDefault(FeaturePromoPrecondition::Identifier id,
FeaturePromoResult result);
// Sets the specific `result` for a particular `id` for `iph_feature` only.
// This overrides the default value.
void SetForFeature(const base::Feature& iph_feature,
FeaturePromoPrecondition::Identifier id,
FeaturePromoResult result);
// PreconditionListProvider:
FeaturePromoPreconditionList GetPreconditions(
const FeaturePromoSpecification& spec,
const FeaturePromoParams& params) const override;
private:
// Cache of preconditions that simulate values.
struct PreconditionData;
class TestPrecondition;
std::vector<std::unique_ptr<PreconditionData>> data_;
// Mutable so that it can be cleared out during calls to `GetPreconditions()`.
mutable std::optional<raw_ptr<const FeaturePromoSpecification>>
next_query_spec_;
};
class MockPreconditionListProvider : public PreconditionListProvider {
public:
MockPreconditionListProvider();
~MockPreconditionListProvider() override;
MOCK_METHOD(FeaturePromoPreconditionList,
GetPreconditions,
(const FeaturePromoSpecification&, const FeaturePromoParams&),
(const, override));
};
} // namespace user_education::test
#endif // COMPONENTS_USER_EDUCATION_TEST_TEST_FEATURE_PROMO_PRECONDITION_H_
|