Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Side by Side Diff: components/download/internal/model_impl_unittest.cc

Issue 2895953004: Add initial Controller to DownloadService (Closed)
Patch Set: Moved stats out Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/download/internal/model_impl.h" 5 #include "components/download/internal/model_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 17 matching lines...) Expand all
28 28
29 class DownloadServiceModelImplTest : public testing::Test { 29 class DownloadServiceModelImplTest : public testing::Test {
30 public: 30 public:
31 DownloadServiceModelImplTest() : store_(nullptr) {} 31 DownloadServiceModelImplTest() : store_(nullptr) {}
32 32
33 ~DownloadServiceModelImplTest() override = default; 33 ~DownloadServiceModelImplTest() override = default;
34 34
35 void SetUp() override { 35 void SetUp() override {
36 auto store = base::MakeUnique<test::TestStore>(); 36 auto store = base::MakeUnique<test::TestStore>();
37 store_ = store.get(); 37 store_ = store.get();
38 model_ = base::MakeUnique<ModelImpl>(&client_, std::move(store)); 38 model_ = base::MakeUnique<ModelImpl>(std::move(store));
39 } 39 }
40 40
41 protected: 41 protected:
42 test::MockModelClient client_; 42 test::MockModelClient client_;
43 test::TestStore* store_; 43 test::TestStore* store_;
44 std::unique_ptr<ModelImpl> model_; 44 std::unique_ptr<ModelImpl> model_;
45 45
46 private: 46 private:
47 DISALLOW_COPY_AND_ASSIGN(DownloadServiceModelImplTest); 47 DISALLOW_COPY_AND_ASSIGN(DownloadServiceModelImplTest);
48 }; 48 };
49 49
50 } // namespace 50 } // namespace
51 51
52 TEST_F(DownloadServiceModelImplTest, SuccessfulLifecycle) { 52 TEST_F(DownloadServiceModelImplTest, SuccessfulLifecycle) {
53 InSequence sequence; 53 InSequence sequence;
54 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 54 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
55 EXPECT_CALL(client_, OnDestroyed(true)).Times(1); 55 EXPECT_CALL(client_, OnModelDestroyed(true)).Times(1);
56 56
57 model_->Initialize(); 57 model_->Initialize(&client_);
58 EXPECT_TRUE(store_->init_called()); 58 EXPECT_TRUE(store_->init_called());
59 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>()); 59 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>());
60 60
61 model_->Destroy(); 61 model_->Destroy();
62 EXPECT_TRUE(store_->destroy_called()); 62 EXPECT_TRUE(store_->destroy_called());
63 store_->TriggerDestroy(true); 63 store_->TriggerDestroy(true);
64 } 64 }
65 65
66 TEST_F(DownloadServiceModelImplTest, SuccessfulInitWithEntries) { 66 TEST_F(DownloadServiceModelImplTest, SuccessfulInitWithEntries) {
67 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 67 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
68 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 68 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
69 std::vector<Entry> entries = {entry1, entry2}; 69 std::vector<Entry> entries = {entry1, entry2};
70 70
71 InSequence sequence; 71 InSequence sequence;
72 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 72 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
73 73
74 model_->Initialize(); 74 model_->Initialize(&client_);
75 EXPECT_TRUE(store_->init_called()); 75 EXPECT_TRUE(store_->init_called());
76 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 76 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
77 77
78 EXPECT_TRUE(test::SuperficialEntryCompare(&entry1, model_->Get(entry1.guid))); 78 EXPECT_TRUE(test::SuperficialEntryCompare(&entry1, model_->Get(entry1.guid)));
79 EXPECT_TRUE(test::SuperficialEntryCompare(&entry2, model_->Get(entry2.guid))); 79 EXPECT_TRUE(test::SuperficialEntryCompare(&entry2, model_->Get(entry2.guid)));
80 } 80 }
81 81
82 TEST_F(DownloadServiceModelImplTest, BadInit) { 82 TEST_F(DownloadServiceModelImplTest, BadInit) {
83 EXPECT_CALL(client_, OnInitialized(false)).Times(1); 83 EXPECT_CALL(client_, OnModelReady(false)).Times(1);
84 84
85 model_->Initialize(); 85 model_->Initialize(&client_);
86 EXPECT_TRUE(store_->init_called()); 86 EXPECT_TRUE(store_->init_called());
87 store_->TriggerInit(false, base::MakeUnique<std::vector<Entry>>()); 87 store_->TriggerInit(false, base::MakeUnique<std::vector<Entry>>());
88 } 88 }
89 89
90 TEST_F(DownloadServiceModelImplTest, BadDestroy) { 90 TEST_F(DownloadServiceModelImplTest, BadDestroy) {
91 InSequence sequence; 91 InSequence sequence;
92 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 92 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
93 EXPECT_CALL(client_, OnDestroyed(false)).Times(1); 93 EXPECT_CALL(client_, OnModelDestroyed(false)).Times(1);
94 94
95 model_->Initialize(); 95 model_->Initialize(&client_);
96 EXPECT_TRUE(store_->init_called()); 96 EXPECT_TRUE(store_->init_called());
97 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>()); 97 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>());
98 98
99 model_->Destroy(); 99 model_->Destroy();
100 EXPECT_TRUE(store_->destroy_called()); 100 EXPECT_TRUE(store_->destroy_called());
101 store_->TriggerDestroy(false); 101 store_->TriggerDestroy(false);
102 } 102 }
103 103
104 TEST_F(DownloadServiceModelImplTest, Add) { 104 TEST_F(DownloadServiceModelImplTest, Add) {
105 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 105 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
106 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 106 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
107 107
108 InSequence sequence; 108 InSequence sequence;
109 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 109 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
110 EXPECT_CALL(client_, OnItemAdded(true, entry1.client, entry1.guid)).Times(1); 110 EXPECT_CALL(client_, OnItemAdded(true, entry1.client, entry1.guid)).Times(1);
111 EXPECT_CALL(client_, OnItemAdded(false, entry2.client, entry2.guid)).Times(1); 111 EXPECT_CALL(client_, OnItemAdded(false, entry2.client, entry2.guid)).Times(1);
112 112
113 model_->Initialize(); 113 model_->Initialize(&client_);
114 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>()); 114 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>());
115 115
116 model_->Add(entry1); 116 model_->Add(entry1);
117 EXPECT_TRUE(test::SuperficialEntryCompare(&entry1, model_->Get(entry1.guid))); 117 EXPECT_TRUE(test::SuperficialEntryCompare(&entry1, model_->Get(entry1.guid)));
118 EXPECT_TRUE( 118 EXPECT_TRUE(
119 test::SuperficialEntryCompare(&entry1, store_->LastUpdatedEntry())); 119 test::SuperficialEntryCompare(&entry1, store_->LastUpdatedEntry()));
120 store_->TriggerUpdate(true); 120 store_->TriggerUpdate(true);
121 121
122 model_->Add(entry2); 122 model_->Add(entry2);
123 EXPECT_TRUE(test::SuperficialEntryCompare(&entry2, model_->Get(entry2.guid))); 123 EXPECT_TRUE(test::SuperficialEntryCompare(&entry2, model_->Get(entry2.guid)));
124 EXPECT_TRUE( 124 EXPECT_TRUE(
125 test::SuperficialEntryCompare(&entry2, store_->LastUpdatedEntry())); 125 test::SuperficialEntryCompare(&entry2, store_->LastUpdatedEntry()));
126 126
127 store_->TriggerUpdate(false); 127 store_->TriggerUpdate(false);
128 EXPECT_EQ(nullptr, model_->Get(entry2.guid)); 128 EXPECT_EQ(nullptr, model_->Get(entry2.guid));
129 } 129 }
130 130
131 TEST_F(DownloadServiceModelImplTest, Update) { 131 TEST_F(DownloadServiceModelImplTest, Update) {
132 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 132 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
133 133
134 Entry entry2(entry1); 134 Entry entry2(entry1);
135 entry2.state = Entry::State::AVAILABLE; 135 entry2.state = Entry::State::AVAILABLE;
136 136
137 Entry entry3(entry1); 137 Entry entry3(entry1);
138 entry3.state = Entry::State::ACTIVE; 138 entry3.state = Entry::State::ACTIVE;
139 139
140 std::vector<Entry> entries = {entry1}; 140 std::vector<Entry> entries = {entry1};
141 141
142 InSequence sequence; 142 InSequence sequence;
143 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 143 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
144 EXPECT_CALL(client_, OnItemUpdated(true, entry1.client, entry1.guid)) 144 EXPECT_CALL(client_, OnItemUpdated(true, entry1.client, entry1.guid))
145 .Times(1); 145 .Times(1);
146 EXPECT_CALL(client_, OnItemUpdated(false, entry1.client, entry1.guid)) 146 EXPECT_CALL(client_, OnItemUpdated(false, entry1.client, entry1.guid))
147 .Times(1); 147 .Times(1);
148 148
149 model_->Initialize(); 149 model_->Initialize(&client_);
150 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 150 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
151 151
152 model_->Update(entry2); 152 model_->Update(entry2);
153 EXPECT_TRUE(test::SuperficialEntryCompare(&entry2, model_->Get(entry2.guid))); 153 EXPECT_TRUE(test::SuperficialEntryCompare(&entry2, model_->Get(entry2.guid)));
154 EXPECT_TRUE( 154 EXPECT_TRUE(
155 test::SuperficialEntryCompare(&entry2, store_->LastUpdatedEntry())); 155 test::SuperficialEntryCompare(&entry2, store_->LastUpdatedEntry()));
156 store_->TriggerUpdate(true); 156 store_->TriggerUpdate(true);
157 157
158 model_->Update(entry3); 158 model_->Update(entry3);
159 EXPECT_TRUE(test::SuperficialEntryCompare(&entry3, model_->Get(entry3.guid))); 159 EXPECT_TRUE(test::SuperficialEntryCompare(&entry3, model_->Get(entry3.guid)));
160 EXPECT_TRUE( 160 EXPECT_TRUE(
161 test::SuperficialEntryCompare(&entry3, store_->LastUpdatedEntry())); 161 test::SuperficialEntryCompare(&entry3, store_->LastUpdatedEntry()));
162 162
163 store_->TriggerUpdate(false); 163 store_->TriggerUpdate(false);
164 EXPECT_TRUE(test::SuperficialEntryCompare(&entry3, model_->Get(entry3.guid))); 164 EXPECT_TRUE(test::SuperficialEntryCompare(&entry3, model_->Get(entry3.guid)));
165 } 165 }
166 166
167 TEST_F(DownloadServiceModelImplTest, Remove) { 167 TEST_F(DownloadServiceModelImplTest, Remove) {
168 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 168 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
169 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 169 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
170 std::vector<Entry> entries = {entry1, entry2}; 170 std::vector<Entry> entries = {entry1, entry2};
171 171
172 InSequence sequence; 172 InSequence sequence;
173 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 173 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
174 EXPECT_CALL(client_, OnItemRemoved(true, entry1.client, entry1.guid)) 174 EXPECT_CALL(client_, OnItemRemoved(true, entry1.client, entry1.guid))
175 .Times(1); 175 .Times(1);
176 EXPECT_CALL(client_, OnItemRemoved(false, entry2.client, entry2.guid)) 176 EXPECT_CALL(client_, OnItemRemoved(false, entry2.client, entry2.guid))
177 .Times(1); 177 .Times(1);
178 178
179 model_->Initialize(); 179 model_->Initialize(&client_);
180 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 180 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
181 181
182 model_->Remove(entry1.guid); 182 model_->Remove(entry1.guid);
183 EXPECT_EQ(entry1.guid, store_->LastRemovedEntry()); 183 EXPECT_EQ(entry1.guid, store_->LastRemovedEntry());
184 EXPECT_EQ(nullptr, model_->Get(entry1.guid)); 184 EXPECT_EQ(nullptr, model_->Get(entry1.guid));
185 store_->TriggerRemove(true); 185 store_->TriggerRemove(true);
186 186
187 model_->Remove(entry2.guid); 187 model_->Remove(entry2.guid);
188 EXPECT_EQ(entry2.guid, store_->LastRemovedEntry()); 188 EXPECT_EQ(entry2.guid, store_->LastRemovedEntry());
189 EXPECT_EQ(nullptr, model_->Get(entry2.guid)); 189 EXPECT_EQ(nullptr, model_->Get(entry2.guid));
190 store_->TriggerRemove(false); 190 store_->TriggerRemove(false);
191 } 191 }
192 192
193 TEST_F(DownloadServiceModelImplTest, Get) { 193 TEST_F(DownloadServiceModelImplTest, Get) {
194 Entry entry = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 194 Entry entry = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
195 195
196 std::vector<Entry> entries = {entry}; 196 std::vector<Entry> entries = {entry};
197 197
198 InSequence sequence; 198 InSequence sequence;
199 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 199 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
200 200
201 model_->Initialize(); 201 model_->Initialize(&client_);
202 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 202 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
203 203
204 EXPECT_TRUE(test::SuperficialEntryCompare(&entry, model_->Get(entry.guid))); 204 EXPECT_TRUE(test::SuperficialEntryCompare(&entry, model_->Get(entry.guid)));
205 EXPECT_EQ(nullptr, model_->Get(base::GenerateGUID())); 205 EXPECT_EQ(nullptr, model_->Get(base::GenerateGUID()));
206 } 206 }
207 207
208 TEST_F(DownloadServiceModelImplTest, PeekEntries) { 208 TEST_F(DownloadServiceModelImplTest, PeekEntries) {
209 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 209 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
210 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 210 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
211 std::vector<Entry> entries = {entry1, entry2}; 211 std::vector<Entry> entries = {entry1, entry2};
212 212
213 InSequence sequence; 213 InSequence sequence;
214 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 214 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
215 215
216 model_->Initialize(); 216 model_->Initialize(&client_);
217 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 217 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
218 218
219 std::vector<Entry*> expected_peek = {&entry1, &entry2}; 219 std::vector<Entry*> expected_peek = {&entry1, &entry2};
220 220
221 EXPECT_TRUE( 221 EXPECT_TRUE(
222 test::SuperficialEntryListCompare(expected_peek, model_->PeekEntries())); 222 test::SuperficialEntryListCompare(expected_peek, model_->PeekEntries()));
223 } 223 }
224 224
225 TEST_F(DownloadServiceModelImplTest, TestRemoveAfterAdd) { 225 TEST_F(DownloadServiceModelImplTest, TestRemoveAfterAdd) {
226 Entry entry = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 226 Entry entry = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
227 227
228 InSequence sequence; 228 InSequence sequence;
229 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 229 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
230 EXPECT_CALL(client_, OnItemAdded(_, _, _)).Times(0); 230 EXPECT_CALL(client_, OnItemAdded(_, _, _)).Times(0);
231 EXPECT_CALL(client_, OnItemRemoved(true, entry.client, entry.guid)).Times(1); 231 EXPECT_CALL(client_, OnItemRemoved(true, entry.client, entry.guid)).Times(1);
232 232
233 model_->Initialize(); 233 model_->Initialize(&client_);
234 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>()); 234 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>());
235 235
236 model_->Add(entry); 236 model_->Add(entry);
237 EXPECT_TRUE(test::SuperficialEntryCompare(&entry, model_->Get(entry.guid))); 237 EXPECT_TRUE(test::SuperficialEntryCompare(&entry, model_->Get(entry.guid)));
238 238
239 model_->Remove(entry.guid); 239 model_->Remove(entry.guid);
240 EXPECT_EQ(nullptr, model_->Get(entry.guid)); 240 EXPECT_EQ(nullptr, model_->Get(entry.guid));
241 241
242 store_->TriggerUpdate(true); 242 store_->TriggerUpdate(true);
243 store_->TriggerRemove(true); 243 store_->TriggerRemove(true);
244 } 244 }
245 245
246 TEST_F(DownloadServiceModelImplTest, TestRemoveAfterUpdate) { 246 TEST_F(DownloadServiceModelImplTest, TestRemoveAfterUpdate) {
247 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 247 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
248 248
249 Entry entry2(entry1); 249 Entry entry2(entry1);
250 entry2.state = Entry::State::AVAILABLE; 250 entry2.state = Entry::State::AVAILABLE;
251 251
252 std::vector<Entry> entries = {entry1}; 252 std::vector<Entry> entries = {entry1};
253 253
254 InSequence sequence; 254 InSequence sequence;
255 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 255 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
256 EXPECT_CALL(client_, OnItemUpdated(_, _, _)).Times(0); 256 EXPECT_CALL(client_, OnItemUpdated(_, _, _)).Times(0);
257 EXPECT_CALL(client_, OnItemRemoved(true, entry1.client, entry1.guid)) 257 EXPECT_CALL(client_, OnItemRemoved(true, entry1.client, entry1.guid))
258 .Times(1); 258 .Times(1);
259 259
260 model_->Initialize(); 260 model_->Initialize(&client_);
261 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 261 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
262 EXPECT_TRUE(test::SuperficialEntryCompare(&entry1, model_->Get(entry1.guid))); 262 EXPECT_TRUE(test::SuperficialEntryCompare(&entry1, model_->Get(entry1.guid)));
263 263
264 model_->Update(entry2); 264 model_->Update(entry2);
265 EXPECT_TRUE(test::SuperficialEntryCompare(&entry2, model_->Get(entry2.guid))); 265 EXPECT_TRUE(test::SuperficialEntryCompare(&entry2, model_->Get(entry2.guid)));
266 266
267 model_->Remove(entry2.guid); 267 model_->Remove(entry2.guid);
268 EXPECT_EQ(nullptr, model_->Get(entry2.guid)); 268 EXPECT_EQ(nullptr, model_->Get(entry2.guid));
269 269
270 store_->TriggerUpdate(true); 270 store_->TriggerUpdate(true);
271 store_->TriggerRemove(true); 271 store_->TriggerRemove(true);
272 } 272 }
273 273
274 } // namespace download 274 } // namespace download
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698