Commit ff6af108 authored by Dan Harrington's avatar Dan Harrington Committed by Commit Bot

feedv2: add test case ClearAllWhileLoadingMore

Bug: 1044139
Change-Id: If241abe46b91d8fa63706d0262a8c7c3f1b56a76
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2353027
Auto-Submit: Dan H <harringtond@chromium.org>
Reviewed-by: default avatarIan Wells <iwells@chromium.org>
Commit-Queue: Ian Wells <iwells@chromium.org>
Cr-Commit-Position: refs/heads/master@{#797473}
parent dbae543a
...@@ -347,27 +347,28 @@ class TestWireResponseTranslator : public FeedStream::WireResponseTranslator { ...@@ -347,27 +347,28 @@ class TestWireResponseTranslator : public FeedStream::WireResponseTranslator {
feedwire::Response response, feedwire::Response response,
StreamModelUpdateRequest::Source source, StreamModelUpdateRequest::Source source,
base::Time current_time) const override { base::Time current_time) const override {
if (injected_response_) { if (!injected_responses_.empty()) {
if (injected_response_->model_update_request) if (injected_responses_[0].model_update_request)
injected_response_->model_update_request->source = source; injected_responses_[0].model_update_request->source = source;
RefreshResponseData result = std::move(*injected_response_); RefreshResponseData result = std::move(injected_responses_[0]);
injected_response_.reset(); injected_responses_.erase(injected_responses_.begin());
return result; return result;
} }
return FeedStream::WireResponseTranslator::TranslateWireResponse( return FeedStream::WireResponseTranslator::TranslateWireResponse(
std::move(response), source, current_time); std::move(response), source, current_time);
} }
void InjectResponse(std::unique_ptr<StreamModelUpdateRequest> response) { void InjectResponse(std::unique_ptr<StreamModelUpdateRequest> response) {
injected_response_ = RefreshResponseData(); RefreshResponseData data;
injected_response_->model_update_request = std::move(response); data.model_update_request = std::move(response);
InjectResponse(std::move(data));
} }
void InjectResponse(RefreshResponseData response_data) { void InjectResponse(RefreshResponseData response_data) {
injected_response_ = std::move(response_data); injected_responses_.push_back(std::move(response_data));
} }
bool InjectedResponseConsumed() const { return !injected_response_; } bool InjectedResponseConsumed() const { return injected_responses_.empty(); }
private: private:
mutable base::Optional<RefreshResponseData> injected_response_; mutable std::vector<RefreshResponseData> injected_responses_;
}; };
class FakeRefreshTaskScheduler : public RefreshTaskScheduler { class FakeRefreshTaskScheduler : public RefreshTaskScheduler {
...@@ -1398,6 +1399,23 @@ TEST_F(FeedStreamTest, ClearAllWithNoSurfacesAttachedDoesNotReload) { ...@@ -1398,6 +1399,23 @@ TEST_F(FeedStreamTest, ClearAllWithNoSurfacesAttachedDoesNotReload) {
EXPECT_EQ("loading -> 2 slices", surface.DescribeUpdates()); EXPECT_EQ("loading -> 2 slices", surface.DescribeUpdates());
} }
TEST_F(FeedStreamTest, ClearAllWhileLoadingMore) {
response_translator_.InjectResponse(MakeTypicalInitialModelState());
TestSurface surface(stream_.get());
WaitForIdleTaskQueue();
stream_->LoadMore(surface.GetSurfaceId(), base::DoNothing());
response_translator_.InjectResponse(MakeTypicalNextPageState(2));
response_translator_.InjectResponse(MakeTypicalInitialModelState());
stream_->OnCacheDataCleared(); // triggers ClearAll().
WaitForIdleTaskQueue();
EXPECT_EQ(
"loading -> 2 slices -> 2 slices +spinner -> 4 slices -> loading -> 2 "
"slices",
surface.DescribeUpdates());
}
TEST_F(FeedStreamTest, ClearAllWipesAllState) { TEST_F(FeedStreamTest, ClearAllWipesAllState) {
// Trigger saving a consistency token, so it can be cleared later. // Trigger saving a consistency token, so it can be cleared later.
network_.consistency_token = "token-11"; network_.consistency_token = "token-11";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment