blob: a864120022446dab2cb7821a174c4c0e858f90e2 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/lacros/metrics_reporting_observer.h"
#include "base/memory/raw_ptr.h"
#include "chrome/browser/metrics/metrics_reporting_state.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
class MockMetricsServiceProxy
: public MetricsReportingObserver::MetricsServiceProxy {
public:
MOCK_METHOD(void, SetReportingEnabled, (bool enabled), (override));
MOCK_METHOD(void, SetExternalClientId, (const std::string&), (override));
MOCK_METHOD(void, RecreateClientIdIfNecessary, (), (override));
};
class MetricsReportingObserverTest : public ::testing::Test {
public:
void SetUp() override {
std::unique_ptr<MetricsReportingObserver::MetricsServiceProxy>
metrics_service = std::make_unique<MockMetricsServiceProxy>();
mock_metrics_service_ =
static_cast<MockMetricsServiceProxy*>(metrics_service.get());
observer_ =
std::make_unique<MetricsReportingObserver>(std::move(metrics_service));
}
MetricsReportingObserver* observer() { return observer_.get(); }
MockMetricsServiceProxy* mock_metrics_service() {
return mock_metrics_service_;
}
private:
raw_ptr<MockMetricsServiceProxy> mock_metrics_service_;
std::unique_ptr<MetricsReportingObserver> observer_;
};
TEST_F(MetricsReportingObserverTest, EnablingMetricsReporting) {
std::string test_id = "my little id";
EXPECT_CALL(*mock_metrics_service(),
SetExternalClientId(testing::StrEq(test_id)));
EXPECT_CALL(*mock_metrics_service(), SetReportingEnabled(testing::IsTrue()));
EXPECT_CALL(*mock_metrics_service(), RecreateClientIdIfNecessary);
observer()->OnMetricsReportingChanged(true, test_id);
}
TEST_F(MetricsReportingObserverTest, DisablingMetricsReporting) {
EXPECT_CALL(*mock_metrics_service(), SetExternalClientId).Times(0);
EXPECT_CALL(*mock_metrics_service(), SetReportingEnabled(testing::IsFalse()));
EXPECT_CALL(*mock_metrics_service(), RecreateClientIdIfNecessary).Times(0);
observer()->OnMetricsReportingChanged(false, absl::nullopt);
}
TEST_F(MetricsReportingObserverTest, DisablingMetricsReportingWithClientId) {
// Attempting to set the client id on disable should result in a noop.
EXPECT_CALL(*mock_metrics_service(), SetExternalClientId).Times(0);
EXPECT_CALL(*mock_metrics_service(), SetReportingEnabled(testing::IsFalse()));
EXPECT_CALL(*mock_metrics_service(), RecreateClientIdIfNecessary).Times(0);
observer()->OnMetricsReportingChanged(false, absl::nullopt);
}