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

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

Issue 2895953004: Add initial Controller to DownloadService (Closed)
Patch Set: Rebased 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 55
56 model_->Initialize(); 56 model_->Initialize(&client_);
57 EXPECT_TRUE(store_->init_called()); 57 EXPECT_TRUE(store_->init_called());
58 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>()); 58 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>());
59 } 59 }
60 60
61 TEST_F(DownloadServiceModelImplTest, SuccessfulInitWithEntries) { 61 TEST_F(DownloadServiceModelImplTest, SuccessfulInitWithEntries) {
62 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 62 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
63 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 63 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
64 std::vector<Entry> entries = {entry1, entry2}; 64 std::vector<Entry> entries = {entry1, entry2};
65 65
66 InSequence sequence; 66 InSequence sequence;
67 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 67 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
68 68
69 model_->Initialize(); 69 model_->Initialize(&client_);
70 EXPECT_TRUE(store_->init_called()); 70 EXPECT_TRUE(store_->init_called());
71 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 71 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
72 72
73 EXPECT_TRUE(test::CompareEntry(&entry1, model_->Get(entry1.guid))); 73 EXPECT_TRUE(test::CompareEntry(&entry1, model_->Get(entry1.guid)));
74 EXPECT_TRUE(test::CompareEntry(&entry2, model_->Get(entry2.guid))); 74 EXPECT_TRUE(test::CompareEntry(&entry2, model_->Get(entry2.guid)));
75 } 75 }
76 76
77 TEST_F(DownloadServiceModelImplTest, BadInit) { 77 TEST_F(DownloadServiceModelImplTest, BadInit) {
78 EXPECT_CALL(client_, OnInitialized(false)).Times(1); 78 EXPECT_CALL(client_, OnModelReady(false)).Times(1);
79 79
80 model_->Initialize(); 80 model_->Initialize(&client_);
81 EXPECT_TRUE(store_->init_called()); 81 EXPECT_TRUE(store_->init_called());
82 store_->TriggerInit(false, base::MakeUnique<std::vector<Entry>>()); 82 store_->TriggerInit(false, base::MakeUnique<std::vector<Entry>>());
83 } 83 }
84 84
85 TEST_F(DownloadServiceModelImplTest, Add) { 85 TEST_F(DownloadServiceModelImplTest, Add) {
86 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 86 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
87 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 87 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
88 88
89 InSequence sequence; 89 InSequence sequence;
90 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 90 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
91 EXPECT_CALL(client_, OnItemAdded(true, entry1.client, entry1.guid)).Times(1); 91 EXPECT_CALL(client_, OnItemAdded(true, entry1.client, entry1.guid)).Times(1);
92 EXPECT_CALL(client_, OnItemAdded(false, entry2.client, entry2.guid)).Times(1); 92 EXPECT_CALL(client_, OnItemAdded(false, entry2.client, entry2.guid)).Times(1);
93 93
94 model_->Initialize(); 94 model_->Initialize(&client_);
95 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>()); 95 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>());
96 96
97 model_->Add(entry1); 97 model_->Add(entry1);
98 EXPECT_TRUE(test::CompareEntry(&entry1, model_->Get(entry1.guid))); 98 EXPECT_TRUE(test::CompareEntry(&entry1, model_->Get(entry1.guid)));
99 EXPECT_TRUE(test::CompareEntry(&entry1, store_->LastUpdatedEntry())); 99 EXPECT_TRUE(test::CompareEntry(&entry1, store_->LastUpdatedEntry()));
100 store_->TriggerUpdate(true); 100 store_->TriggerUpdate(true);
101 101
102 model_->Add(entry2); 102 model_->Add(entry2);
103 EXPECT_TRUE(test::CompareEntry(&entry2, model_->Get(entry2.guid))); 103 EXPECT_TRUE(test::CompareEntry(&entry2, model_->Get(entry2.guid)));
104 EXPECT_TRUE(test::CompareEntry(&entry2, store_->LastUpdatedEntry())); 104 EXPECT_TRUE(test::CompareEntry(&entry2, store_->LastUpdatedEntry()));
105 105
106 store_->TriggerUpdate(false); 106 store_->TriggerUpdate(false);
107 EXPECT_EQ(nullptr, model_->Get(entry2.guid)); 107 EXPECT_EQ(nullptr, model_->Get(entry2.guid));
108 } 108 }
109 109
110 TEST_F(DownloadServiceModelImplTest, Update) { 110 TEST_F(DownloadServiceModelImplTest, Update) {
111 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 111 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
112 112
113 Entry entry2(entry1); 113 Entry entry2(entry1);
114 entry2.state = Entry::State::AVAILABLE; 114 entry2.state = Entry::State::AVAILABLE;
115 115
116 Entry entry3(entry1); 116 Entry entry3(entry1);
117 entry3.state = Entry::State::ACTIVE; 117 entry3.state = Entry::State::ACTIVE;
118 118
119 std::vector<Entry> entries = {entry1}; 119 std::vector<Entry> entries = {entry1};
120 120
121 InSequence sequence; 121 InSequence sequence;
122 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 122 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
123 EXPECT_CALL(client_, OnItemUpdated(true, entry1.client, entry1.guid)) 123 EXPECT_CALL(client_, OnItemUpdated(true, entry1.client, entry1.guid))
124 .Times(1); 124 .Times(1);
125 EXPECT_CALL(client_, OnItemUpdated(false, entry1.client, entry1.guid)) 125 EXPECT_CALL(client_, OnItemUpdated(false, entry1.client, entry1.guid))
126 .Times(1); 126 .Times(1);
127 127
128 model_->Initialize(); 128 model_->Initialize(&client_);
129 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 129 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
130 130
131 model_->Update(entry2); 131 model_->Update(entry2);
132 EXPECT_TRUE(test::CompareEntry(&entry2, model_->Get(entry2.guid))); 132 EXPECT_TRUE(test::CompareEntry(&entry2, model_->Get(entry2.guid)));
133 EXPECT_TRUE(test::CompareEntry(&entry2, store_->LastUpdatedEntry())); 133 EXPECT_TRUE(test::CompareEntry(&entry2, store_->LastUpdatedEntry()));
134 store_->TriggerUpdate(true); 134 store_->TriggerUpdate(true);
135 135
136 model_->Update(entry3); 136 model_->Update(entry3);
137 EXPECT_TRUE(test::CompareEntry(&entry3, model_->Get(entry3.guid))); 137 EXPECT_TRUE(test::CompareEntry(&entry3, model_->Get(entry3.guid)));
138 EXPECT_TRUE(test::CompareEntry(&entry3, store_->LastUpdatedEntry())); 138 EXPECT_TRUE(test::CompareEntry(&entry3, store_->LastUpdatedEntry()));
139 139
140 store_->TriggerUpdate(false); 140 store_->TriggerUpdate(false);
141 EXPECT_TRUE(test::CompareEntry(&entry3, model_->Get(entry3.guid))); 141 EXPECT_TRUE(test::CompareEntry(&entry3, model_->Get(entry3.guid)));
142 } 142 }
143 143
144 TEST_F(DownloadServiceModelImplTest, Remove) { 144 TEST_F(DownloadServiceModelImplTest, Remove) {
145 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 145 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
146 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 146 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
147 std::vector<Entry> entries = {entry1, entry2}; 147 std::vector<Entry> entries = {entry1, entry2};
148 148
149 InSequence sequence; 149 InSequence sequence;
150 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 150 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
151 EXPECT_CALL(client_, OnItemRemoved(true, entry1.client, entry1.guid)) 151 EXPECT_CALL(client_, OnItemRemoved(true, entry1.client, entry1.guid))
152 .Times(1); 152 .Times(1);
153 EXPECT_CALL(client_, OnItemRemoved(false, entry2.client, entry2.guid)) 153 EXPECT_CALL(client_, OnItemRemoved(false, entry2.client, entry2.guid))
154 .Times(1); 154 .Times(1);
155 155
156 model_->Initialize(); 156 model_->Initialize(&client_);
157 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 157 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
158 158
159 model_->Remove(entry1.guid); 159 model_->Remove(entry1.guid);
160 EXPECT_EQ(entry1.guid, store_->LastRemovedEntry()); 160 EXPECT_EQ(entry1.guid, store_->LastRemovedEntry());
161 EXPECT_EQ(nullptr, model_->Get(entry1.guid)); 161 EXPECT_EQ(nullptr, model_->Get(entry1.guid));
162 store_->TriggerRemove(true); 162 store_->TriggerRemove(true);
163 163
164 model_->Remove(entry2.guid); 164 model_->Remove(entry2.guid);
165 EXPECT_EQ(entry2.guid, store_->LastRemovedEntry()); 165 EXPECT_EQ(entry2.guid, store_->LastRemovedEntry());
166 EXPECT_EQ(nullptr, model_->Get(entry2.guid)); 166 EXPECT_EQ(nullptr, model_->Get(entry2.guid));
167 store_->TriggerRemove(false); 167 store_->TriggerRemove(false);
168 } 168 }
169 169
170 TEST_F(DownloadServiceModelImplTest, Get) { 170 TEST_F(DownloadServiceModelImplTest, Get) {
171 Entry entry = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 171 Entry entry = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
172 172
173 std::vector<Entry> entries = {entry}; 173 std::vector<Entry> entries = {entry};
174 174
175 InSequence sequence; 175 InSequence sequence;
176 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 176 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
177 177
178 model_->Initialize(); 178 model_->Initialize(&client_);
179 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 179 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
180 180
181 EXPECT_TRUE(test::CompareEntry(&entry, model_->Get(entry.guid))); 181 EXPECT_TRUE(test::CompareEntry(&entry, model_->Get(entry.guid)));
182 EXPECT_EQ(nullptr, model_->Get(base::GenerateGUID())); 182 EXPECT_EQ(nullptr, model_->Get(base::GenerateGUID()));
183 } 183 }
184 184
185 TEST_F(DownloadServiceModelImplTest, PeekEntries) { 185 TEST_F(DownloadServiceModelImplTest, PeekEntries) {
186 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 186 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
187 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 187 Entry entry2 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
188 std::vector<Entry> entries = {entry1, entry2}; 188 std::vector<Entry> entries = {entry1, entry2};
189 189
190 InSequence sequence; 190 InSequence sequence;
191 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 191 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
192 192
193 model_->Initialize(); 193 model_->Initialize(&client_);
194 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 194 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
195 195
196 std::vector<Entry*> expected_peek = {&entry1, &entry2}; 196 std::vector<Entry*> expected_peek = {&entry1, &entry2};
197 197
198 EXPECT_TRUE(test::CompareEntryList(expected_peek, model_->PeekEntries())); 198 EXPECT_TRUE(test::CompareEntryList(expected_peek, model_->PeekEntries()));
199 } 199 }
200 200
201 TEST_F(DownloadServiceModelImplTest, TestRemoveAfterAdd) { 201 TEST_F(DownloadServiceModelImplTest, TestRemoveAfterAdd) {
202 Entry entry = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 202 Entry entry = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
203 203
204 InSequence sequence; 204 InSequence sequence;
205 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 205 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
206 EXPECT_CALL(client_, OnItemAdded(_, _, _)).Times(0); 206 EXPECT_CALL(client_, OnItemAdded(_, _, _)).Times(0);
207 EXPECT_CALL(client_, OnItemRemoved(true, entry.client, entry.guid)).Times(1); 207 EXPECT_CALL(client_, OnItemRemoved(true, entry.client, entry.guid)).Times(1);
208 208
209 model_->Initialize(); 209 model_->Initialize(&client_);
210 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>()); 210 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>());
211 211
212 model_->Add(entry); 212 model_->Add(entry);
213 EXPECT_TRUE(test::CompareEntry(&entry, model_->Get(entry.guid))); 213 EXPECT_TRUE(test::CompareEntry(&entry, model_->Get(entry.guid)));
214 214
215 model_->Remove(entry.guid); 215 model_->Remove(entry.guid);
216 EXPECT_EQ(nullptr, model_->Get(entry.guid)); 216 EXPECT_EQ(nullptr, model_->Get(entry.guid));
217 217
218 store_->TriggerUpdate(true); 218 store_->TriggerUpdate(true);
219 store_->TriggerRemove(true); 219 store_->TriggerRemove(true);
220 } 220 }
221 221
222 TEST_F(DownloadServiceModelImplTest, TestRemoveAfterUpdate) { 222 TEST_F(DownloadServiceModelImplTest, TestRemoveAfterUpdate) {
223 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID()); 223 Entry entry1 = test::BuildEntry(DownloadClient::TEST, base::GenerateGUID());
224 224
225 Entry entry2(entry1); 225 Entry entry2(entry1);
226 entry2.state = Entry::State::AVAILABLE; 226 entry2.state = Entry::State::AVAILABLE;
227 227
228 std::vector<Entry> entries = {entry1}; 228 std::vector<Entry> entries = {entry1};
229 229
230 InSequence sequence; 230 InSequence sequence;
231 EXPECT_CALL(client_, OnInitialized(true)).Times(1); 231 EXPECT_CALL(client_, OnModelReady(true)).Times(1);
232 EXPECT_CALL(client_, OnItemUpdated(_, _, _)).Times(0); 232 EXPECT_CALL(client_, OnItemUpdated(_, _, _)).Times(0);
233 EXPECT_CALL(client_, OnItemRemoved(true, entry1.client, entry1.guid)) 233 EXPECT_CALL(client_, OnItemRemoved(true, entry1.client, entry1.guid))
234 .Times(1); 234 .Times(1);
235 235
236 model_->Initialize(); 236 model_->Initialize(&client_);
237 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries)); 237 store_->TriggerInit(true, base::MakeUnique<std::vector<Entry>>(entries));
238 EXPECT_TRUE(test::CompareEntry(&entry1, model_->Get(entry1.guid))); 238 EXPECT_TRUE(test::CompareEntry(&entry1, model_->Get(entry1.guid)));
239 239
240 model_->Update(entry2); 240 model_->Update(entry2);
241 EXPECT_TRUE(test::CompareEntry(&entry2, model_->Get(entry2.guid))); 241 EXPECT_TRUE(test::CompareEntry(&entry2, model_->Get(entry2.guid)));
242 242
243 model_->Remove(entry2.guid); 243 model_->Remove(entry2.guid);
244 EXPECT_EQ(nullptr, model_->Get(entry2.guid)); 244 EXPECT_EQ(nullptr, model_->Get(entry2.guid));
245 245
246 store_->TriggerUpdate(true); 246 store_->TriggerUpdate(true);
247 store_->TriggerRemove(true); 247 store_->TriggerRemove(true);
248 } 248 }
249 249
250 } // namespace download 250 } // namespace download
OLDNEW
« no previous file with comments | « components/download/internal/model_impl.cc ('k') | components/download/internal/startup_status.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698