blob: 5c0ee59b42ebf96e7aec72863e9d3e5c74805a0b [file]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/contextual_search/contextual_search_session_entry.h"
#include <memory>
#include "base/memory/ptr_util.h"
#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "base/test/mock_callback.h"
#include "base/unguessable_token.h"
#include "components/contextual_search/contextual_search_context_controller.h"
#include "components/contextual_search/mock_contextual_search_context_controller.h"
#include "components/contextual_search/contextual_search_metrics_recorder.h"
#include "components/lens/lens_overlay_mime_type.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace contextual_search {
class TestContextualSearchContextController
: public MockContextualSearchContextController {
public:
TestContextualSearchContextController() = default;
~TestContextualSearchContextController() override = default;
void TriggerFileUploadStatusChanged(
const base::UnguessableToken& file_token,
lens::MimeType mime_type,
contextual_search::FileUploadStatus file_upload_status,
const std::optional<contextual_search::FileUploadErrorType>& error_type) {
for (auto& observer : observers_) {
observer.OnFileUploadStatusChanged(file_token, mime_type,
file_upload_status, error_type);
}
}
void AddObserver(FileUploadStatusObserver* obs) override {
observers_.AddObserver(obs);
}
void RemoveObserver(FileUploadStatusObserver* obs) override {
observers_.RemoveObserver(obs);
}
private:
base::ObserverList<FileUploadStatusObserver> observers_;
};
class MockContextualSearchMetricsRecorder
: public ContextualSearchMetricsRecorder {
public:
MockContextualSearchMetricsRecorder()
: ContextualSearchMetricsRecorder(ContextualSearchSource::kUnknown) {}
~MockContextualSearchMetricsRecorder() override = default;
MOCK_METHOD(void,
OnFileUploadStatusChanged,
(lens::MimeType,
contextual_search::FileUploadStatus,
const std::optional<contextual_search::FileUploadErrorType>&),
(override));
};
class ContextualSearchSessionEntryTest : public testing::Test {
public:
ContextualSearchSessionEntryTest() = default;
~ContextualSearchSessionEntryTest() override = default;
void SetUp() override {
auto controller = std::make_unique<TestContextualSearchContextController>();
controller_ptr_ = controller.get();
auto metrics_recorder =
std::make_unique<MockContextualSearchMetricsRecorder>();
metrics_recorder_ptr_ = metrics_recorder.get();
session_entry_ = base::WrapUnique(new ContextualSearchSessionEntry(
std::move(controller), std::move(metrics_recorder)));
}
void TearDown() override {
controller_ptr_ = nullptr;
metrics_recorder_ptr_ = nullptr;
session_entry_.reset();
testing::Test::TearDown();
}
protected:
raw_ptr<TestContextualSearchContextController> controller_ptr_;
raw_ptr<MockContextualSearchMetricsRecorder> metrics_recorder_ptr_;
std::unique_ptr<ContextualSearchSessionEntry> session_entry_;
};
TEST_F(ContextualSearchSessionEntryTest, ForwardsFileUploadStatusChanged) {
base::UnguessableToken file_token = base::UnguessableToken::Create();
lens::MimeType mime_type = lens::MimeType::kPdf;
contextual_search::FileUploadStatus status =
contextual_search::FileUploadStatus::kUploadSuccessful;
std::optional<contextual_search::FileUploadErrorType> error_type = std::nullopt;
EXPECT_CALL(*metrics_recorder_ptr_,
OnFileUploadStatusChanged(mime_type, status, error_type))
.Times(1);
controller_ptr_->TriggerFileUploadStatusChanged(file_token, mime_type, status,
error_type);
}
} // namespace contextual_search