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 {
feedwire::Response response,
StreamModelUpdateRequest::Source source,
base::Time current_time) const override {
if (injected_response_) {
if (injected_response_->model_update_request)
injected_response_->model_update_request->source = source;
RefreshResponseData result = std::move(*injected_response_);
injected_response_.reset();
if (!injected_responses_.empty()) {
if (injected_responses_[0].model_update_request)
injected_responses_[0].model_update_request->source = source;
RefreshResponseData result = std::move(injected_responses_[0]);
injected_responses_.erase(injected_responses_.begin());
return result;
}
return FeedStream::WireResponseTranslator::TranslateWireResponse(
std::move(response), source, current_time);
}
void InjectResponse(std::unique_ptr<StreamModelUpdateRequest> response) {
injected_response_ = RefreshResponseData();
injected_response_->model_update_request = std::move(response);
RefreshResponseData data;
data.model_update_request = std::move(response);
InjectResponse(std::move(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:
mutable base::Optional<RefreshResponseData> injected_response_;
mutable std::vector<RefreshResponseData> injected_responses_;
};
class FakeRefreshTaskScheduler : public RefreshTaskScheduler {
......@@ -1398,6 +1399,23 @@ TEST_F(FeedStreamTest, ClearAllWithNoSurfacesAttachedDoesNotReload) {
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) {
// Trigger saving a consistency token, so it can be cleared later.
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