1 /*
2 * Copyright (C) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #define MLOG_TAG "AlbumAccurateRefreshTest"
17
18 #include "album_accurate_refresh_test.h"
19
20 #include <chrono>
21 #include <thread>
22
23 #include "medialibrary_rdbstore.h"
24 #include "medialibrary_unistore_manager.h"
25 #include "medialibrary_data_manager.h"
26 #include "medialibrary_unittest_utils.h"
27 #include "userfile_manager_types.h"
28 #include "values_bucket.h"
29 #include "uri.h"
30 #include "medialibrary_rdb_transaction.h"
31
32 #include "media_log.h"
33 #define protected public
34 #define private public
35 #include "album_accurate_refresh.h"
36 #undef protected
37 #undef private
38
39 #include "album_change_info.h"
40 #include "result_set_utils.h"
41 #include "abs_rdb_predicates.h"
42 #include "accurate_common_data.h"
43 #include "accurate_debug_log.h"
44 #include "accurate_refresh_test_util.h"
45
46 namespace OHOS {
47 namespace Media {
48
49 using namespace std;
50 using namespace testing::ext;
51 using namespace OHOS::NativeRdb;
52 using namespace AccurateRefresh;
53
54 static shared_ptr<MediaLibraryRdbStore> g_rdbStore;
55
56 static constexpr int32_t SLEEP_FIVE_SECONDS = 5;
57 static constexpr int32_t NUMBER_TWO = 2;
58
59 namespace {
60
61
62 const string insertSql = "INSERT INTO " + PhotoAlbumColumns::TABLE + "( \
63 album_id, album_type, album_subtype, count, image_count, video_count, cover_uri, hidden_count, \
64 hidden_cover, cover_date_time, hidden_cover_date_time, dirty) \
65 VALUES (" +
66 to_string(FAVORITE_ALBUM_INFO.albumId_) + " , " +
67 to_string(PhotoAlbumType::SYSTEM) + " , " +
68 to_string(PhotoAlbumSubType::FAVORITE) + " , " +
69 to_string(FAVORITE_ALBUM_INFO.count_) + " , " +
70 to_string(FAVORITE_ALBUM_INFO.imageCount_) + " , " +
71 to_string(FAVORITE_ALBUM_INFO.videoCount_) + " , '" +
72 FAVORITE_ALBUM_INFO.coverUri_ + "' , " +
73 to_string(FAVORITE_ALBUM_INFO.hiddenCount_) + " , '" +
74 FAVORITE_ALBUM_INFO.hiddenCoverUri_ + "' , " +
75 to_string(FAVORITE_ALBUM_INFO.coverDateTime_) + " , " +
76 to_string(FAVORITE_ALBUM_INFO.hiddenCoverDateTime_) + " , " +
77 to_string(FAVORITE_ALBUM_INFO.dirty_) + " )";
78 const string insertSqlWithArgs = "INSERT INTO " + PhotoAlbumColumns::TABLE + "( \
79 album_id, album_type, album_subtype, count, image_count, video_count, cover_uri, hidden_count, \
80 hidden_cover, cover_date_time, hidden_cover_date_time, dirty) \
81 VALUES (" +
82 to_string(FAVORITE_ALBUM_INFO.albumId_) + " , " +
83 to_string(PhotoAlbumType::SYSTEM) + " , " +
84 to_string(PhotoAlbumSubType::FAVORITE) + " , " +
85 "?" + " , " +
86 to_string(FAVORITE_ALBUM_INFO.imageCount_) + " , " +
87 to_string(FAVORITE_ALBUM_INFO.videoCount_) + " , '" +
88 FAVORITE_ALBUM_INFO.coverUri_ + "' , " +
89 to_string(FAVORITE_ALBUM_INFO.hiddenCount_) + " , '" +
90 FAVORITE_ALBUM_INFO.hiddenCoverUri_ + "' , " +
91 to_string(FAVORITE_ALBUM_INFO.coverDateTime_) + " , " +
92 to_string(FAVORITE_ALBUM_INFO.hiddenCoverDateTime_) + " , " +
93 to_string(FAVORITE_ALBUM_INFO.dirty_) + " )";
94
GetBatchInsertValues()95 vector<ValuesBucket> GetBatchInsertValues()
96 {
97 vector<ValuesBucket> values;
98 values.push_back(GetFavoriteInsertAlbum());
99 values.push_back(GetTrashInsertAlbum());
100 return values;
101 }
102
GetPhotoAlbumTotalCount()103 int32_t GetPhotoAlbumTotalCount()
104 {
105 RdbPredicates queryPredicates(PhotoAlbumColumns::TABLE);
106
107 int32_t count;
108 auto resultSet = g_rdbStore->QueryByStep(queryPredicates, { "COUNT(1)" });
109 while (resultSet->GoToNextRow() == NativeRdb::E_OK) {
110 int colIndex = 0;
111 resultSet->GetInt(colIndex, count);
112 ACCURATE_DEBUG("count: %{public}d", count);
113 }
114 return count;
115 }
116
PrepareAlbumData()117 void PrepareAlbumData()
118 {
119 auto values = GetBatchInsertValues();
120 int64_t insertNums = 0;
121 auto ret = g_rdbStore->BatchInsert(insertNums, PhotoAlbumColumns::TABLE, values);
122 ACCURATE_DEBUG("ret: %{public}d, insert values: %{public}" PRId64, ret, insertNums);
123 }
124
PrepareHiddenData()125 void PrepareHiddenData()
126 {
127 auto values = GetHiddenInsertAlbum();
128 int64_t insertNums = 0;
129 auto ret = g_rdbStore->Insert(insertNums, PhotoAlbumColumns::TABLE, values);
130 ACCURATE_DEBUG("ret: %{public}d, insert values: %{public}" PRId64, ret, insertNums);
131 }
132
CheckInsertChangeData(const map<int32_t,AlbumChangeData> albumChangeDatas,const AlbumChangeInfo & albumInfo)133 bool CheckInsertChangeData(const map<int32_t, AlbumChangeData> albumChangeDatas, const AlbumChangeInfo &albumInfo)
134 {
135 auto iter = albumChangeDatas.find(albumInfo.albumId_);
136 if (iter == albumChangeDatas.end()) {
137 MEDIA_ERR_LOG("no album ID");
138 return false;
139 }
140
141 auto dataManagerChangeData = iter->second;
142 return CheckAlbumChangeData(dataManagerChangeData, RDB_OPERATION_ADD, AlbumChangeInfo(), albumInfo);
143 }
144
CheckInsertResult(const AlbumAccurateRefresh & albumRefresh,const AlbumChangeInfo & albumInfo)145 bool CheckInsertResult(const AlbumAccurateRefresh &albumRefresh, const AlbumChangeInfo &albumInfo)
146 {
147 auto dataManagerPtr = albumRefresh.dataManager_;
148 auto &albumChangeDatas = dataManagerPtr.changeDatas_;
149 if (albumChangeDatas.size() != 1) {
150 MEDIA_ERR_LOG("data size error");
151 return false;
152 }
153 if (!CheckInsertChangeData(albumChangeDatas, albumInfo)) {
154 MEDIA_ERR_LOG("changeData wrong");
155 return false;
156 }
157 return true;
158 }
159
CheckInsertNotify(const AlbumAccurateRefresh & albumRefresh,const AlbumChangeInfo & albumInfo)160 bool CheckInsertNotify(const AlbumAccurateRefresh &albumRefresh, const AlbumChangeInfo &albumInfo)
161 {
162 auto notifyInfos = albumRefresh.notifyExe_.notifyInfos_;
163 if (notifyInfos.size() != 1) {
164 MEDIA_ERR_LOG("notify size error.");
165 return false;
166 }
167
168 auto iter = notifyInfos.begin();
169 if (iter->first != Notification::AlbumRefreshOperation::ALBUM_OPERATION_ADD) {
170 MEDIA_ERR_LOG("operation type error.");
171 return false;
172 }
173
174 auto albumChangeDatas = iter->second;
175 if (albumChangeDatas.size() != 1) {
176 MEDIA_ERR_LOG("albumChangeDatas size error.");
177 return false;
178 }
179
180 return CheckAlbumChangeData(albumChangeDatas[0], RDB_OPERATION_ADD, AlbumChangeInfo(), albumInfo);
181 }
182
CheckBatchInsertResult(const AlbumAccurateRefresh & albumRefresh,const AlbumChangeInfo & favoriteAlbumInfo,const AlbumChangeInfo & trashAlbumInfo)183 bool CheckBatchInsertResult(const AlbumAccurateRefresh &albumRefresh, const AlbumChangeInfo &favoriteAlbumInfo,
184 const AlbumChangeInfo &trashAlbumInfo)
185 {
186 auto dataManagerPtr = albumRefresh.dataManager_;
187 auto &albumChangeDatas = dataManagerPtr.changeDatas_;
188 if (albumChangeDatas.size() != NUMBER_TWO) {
189 MEDIA_ERR_LOG("data size error");
190 return false;
191 }
192
193 if (!CheckInsertChangeData(albumChangeDatas, favoriteAlbumInfo)) {
194 MEDIA_ERR_LOG("favorite album changeData wrong");
195 return false;
196 }
197
198 if (!CheckInsertChangeData(albumChangeDatas, trashAlbumInfo)) {
199 MEDIA_ERR_LOG("trash album changeData wrong");
200 return false;
201 }
202 return true;
203 }
204
CheckUpdateResult(const AlbumAccurateRefresh & albumRefresh,const AlbumChangeInfo & infoBefore,const AlbumChangeInfo & infoAfter)205 bool CheckUpdateResult(const AlbumAccurateRefresh &albumRefresh, const AlbumChangeInfo &infoBefore,
206 const AlbumChangeInfo &infoAfter)
207 {
208 auto dataManagerPtr = albumRefresh.dataManager_;
209 auto &albumChangeDatas = dataManagerPtr.changeDatas_;
210 if (albumChangeDatas.size() != 1) {
211 MEDIA_ERR_LOG("data size error");
212 return false;
213 }
214 auto iter = albumChangeDatas.begin();
215 return CheckAlbumChangeData(iter->second, RDB_OPERATION_UPDATE, infoBefore, infoAfter);
216 }
217
CheckDeleteResult(const AlbumAccurateRefresh & albumRefresh,RdbOperation operation,const AlbumChangeInfo & infoBefore,const AlbumChangeInfo & infoAfter)218 bool CheckDeleteResult(const AlbumAccurateRefresh &albumRefresh, RdbOperation operation,
219 const AlbumChangeInfo &infoBefore, const AlbumChangeInfo &infoAfter)
220 {
221 auto dataManagerPtr = albumRefresh.dataManager_;
222 auto &albumChangeDatas = dataManagerPtr.changeDatas_;
223 if (albumChangeDatas.size() != 1) {
224 MEDIA_ERR_LOG("data size error");
225 return false;
226 }
227 auto iter = albumChangeDatas.begin();
228 return CheckAlbumChangeData(iter->second, operation, infoBefore, infoAfter, operation == RDB_OPERATION_REMOVE);
229 }
230
CheckBatchInsertNotify(const AlbumAccurateRefresh & albumRefresh,const AlbumChangeInfo & favoriteAlbumInfo,const AlbumChangeInfo & trashAlbumInfo)231 bool CheckBatchInsertNotify(const AlbumAccurateRefresh &albumRefresh, const AlbumChangeInfo &favoriteAlbumInfo,
232 const AlbumChangeInfo &trashAlbumInfo)
233 {
234 auto notifyInfos = albumRefresh.notifyExe_.notifyInfos_;
235 if (notifyInfos.size() != 1) {
236 MEDIA_ERR_LOG("notify size error.");
237 return false;
238 }
239
240 auto iter = notifyInfos.begin();
241 if (iter->first != Notification::AlbumRefreshOperation::ALBUM_OPERATION_ADD) {
242 MEDIA_ERR_LOG("operation type error.");
243 return false;
244 }
245
246 auto albumChangeDatas = iter->second;
247 if (albumChangeDatas.size() != NUMBER_TWO) {
248 MEDIA_ERR_LOG("albumChangeDatas size error.");
249 return false;
250 }
251
252 for (auto const &changeData : albumChangeDatas) {
253 if (changeData.infoAfterChange_.albumId_ == favoriteAlbumInfo.albumId_) {
254 if (!CheckAlbumChangeData(changeData, RDB_OPERATION_ADD, AlbumChangeInfo(), favoriteAlbumInfo)) {
255 MEDIA_ERR_LOG("favorite album info error.");
256 return false;
257 }
258 } else if (changeData.infoAfterChange_.albumId_ == trashAlbumInfo.albumId_) {
259 if (!CheckAlbumChangeData(changeData, RDB_OPERATION_ADD, AlbumChangeInfo(), trashAlbumInfo)) {
260 MEDIA_ERR_LOG("trash album info error.");
261 return false;
262 }
263 } else {
264 MEDIA_ERR_LOG("no album Id.");
265 return false;
266 }
267 }
268 return true;
269 }
270
CheckUpdateNotify(const AlbumAccurateRefresh & albumRefresh,Notification::AlbumRefreshOperation operation,const AlbumChangeInfo & infoBefore,const AlbumChangeInfo & infoAfter)271 bool CheckUpdateNotify(const AlbumAccurateRefresh &albumRefresh, Notification::AlbumRefreshOperation operation,
272 const AlbumChangeInfo &infoBefore, const AlbumChangeInfo &infoAfter)
273 {
274 auto notifyInfos = albumRefresh.notifyExe_.notifyInfos_;
275 if (notifyInfos.size() != 1) {
276 MEDIA_ERR_LOG("notify size error.");
277 return false;
278 }
279
280 auto iter = notifyInfos.begin();
281 if (iter->first != operation) {
282 MEDIA_ERR_LOG("operation type error.");
283 return false;
284 }
285
286 auto albumChangeDatas = iter->second;
287 if (albumChangeDatas.size() != 1) {
288 MEDIA_ERR_LOG("albumChangeDatas size error.");
289 return false;
290 }
291
292 return CheckAlbumChangeData(albumChangeDatas[0], RDB_OPERATION_UPDATE, infoBefore, infoAfter);
293 }
294
CheckDeleteNotify(const AlbumAccurateRefresh & albumRefresh,Notification::AlbumRefreshOperation operation,const AlbumChangeInfo & infoBefore,const AlbumChangeInfo & infoAfter)295 bool CheckDeleteNotify(const AlbumAccurateRefresh &albumRefresh, Notification::AlbumRefreshOperation operation,
296 const AlbumChangeInfo &infoBefore, const AlbumChangeInfo &infoAfter)
297 {
298 auto notifyInfos = albumRefresh.notifyExe_.notifyInfos_;
299 if (notifyInfos.size() != 1) {
300 MEDIA_ERR_LOG("notify size error.");
301 return false;
302 }
303
304 auto iter = notifyInfos.begin();
305 if (iter->first != operation) {
306 MEDIA_ERR_LOG("operation type error.");
307 return false;
308 }
309
310 auto albumChangeDatas = iter->second;
311 if (albumChangeDatas.size() != 1) {
312 MEDIA_ERR_LOG("albumChangeDatas size error.");
313 return false;
314 }
315
316 return CheckAlbumChangeData(albumChangeDatas[0], RDB_OPERATION_UNDEFINED, infoBefore, infoAfter, true);
317 }
318
SetTables()319 void SetTables()
320 {
321 // 创建Album表
322 vector<string> createTableSqlList = {
323 CREATE_PHOTO_ALBUM_TABLE
324 };
325 for (auto &createTableSql : createTableSqlList) {
326 if (g_rdbStore == nullptr) {
327 MEDIA_ERR_LOG("can not get g_rdbstore");
328 return;
329 }
330 int32_t ret = g_rdbStore->ExecuteSql(createTableSql);
331 if (ret != E_OK) {
332 MEDIA_ERR_LOG("Execute sql %{private}s failed", createTableSql.c_str());
333 return;
334 }
335 MEDIA_INFO_LOG("Execute sql %{private}s success", createTableSql.c_str());
336 }
337 MEDIA_INFO_LOG("SetTables");
338 }
339
CleanTestTables()340 void CleanTestTables()
341 {
342 vector<string> dropTableList = {
343 PhotoAlbumColumns::TABLE,
344 };
345 for (auto &dropTable : dropTableList) {
346 string dropSql = "DROP TABLE " + dropTable + ";";
347 int32_t ret = g_rdbStore->ExecuteSql(dropSql);
348 if (ret != E_OK) {
349 MEDIA_ERR_LOG("Drop %{public}s table failed", dropTable.c_str());
350 return;
351 }
352 MEDIA_INFO_LOG("Drop %{public}s table success", dropTable.c_str());
353 }
354 }
355
GetAlbumCount(PhotoAlbumSubType subType)356 int32_t GetAlbumCount(PhotoAlbumSubType subType)
357 {
358 return AccurateRefresh::GetAlbumCount(subType, g_rdbStore);
359 }
360
GetAlbumDirtyType(PhotoAlbumSubType subType)361 int32_t GetAlbumDirtyType(PhotoAlbumSubType subType)
362 {
363 return AccurateRefresh::GetAlbumDirtyType(subType, g_rdbStore);
364 }
365
GetAlbumInfo(PhotoAlbumSubType subType)366 AlbumChangeInfo GetAlbumInfo(PhotoAlbumSubType subType)
367 {
368 return AccurateRefresh::GetAlbumInfo(subType, g_rdbStore);
369 }
370
ClearAndRestart()371 void ClearAndRestart()
372 {
373 if (!MediaLibraryUnitTestUtils::IsValid()) {
374 MediaLibraryUnitTestUtils::Init();
375 }
376
377 system("rm -rf /storage/cloud/files/*");
378 system("rm -rf /storage/cloud/files/.thumbs");
379 system("rm -rf /storage/cloud/files/.editData");
380 system("rm -rf /storage/cloud/files/.cache");
381 for (const auto &dir : TEST_ROOT_DIRS) {
382 string ROOT_PATH = "/storage/cloud/100/files/";
383 bool ret = MediaFileUtils::CreateDirectory(ROOT_PATH + dir + "/");
384 CHECK_AND_PRINT_LOG(ret, "make %{public}s dir failed, ret=%{public}d", dir.c_str(), ret);
385 }
386 CleanTestTables();
387 SetTables();
388 }
389
390 } // namespace
391
SetUpTestCase()392 void AlbumAccurateRefreshTest::SetUpTestCase()
393 {
394 MediaLibraryUnitTestUtils::Init();
395 g_rdbStore = MediaLibraryUnistoreManager::GetInstance().GetRdbStore();
396 if (g_rdbStore == nullptr) {
397 MEDIA_ERR_LOG("Start MediaLibraryPhotoOperationsTest failed, can not get rdbstore");
398 exit(1);
399 }
400 SetTables();
401 }
402
SetUp()403 void AlbumAccurateRefreshTest::SetUp()
404 {
405 ClearAndRestart();
406 }
407
TearDownTestCase()408 void AlbumAccurateRefreshTest::TearDownTestCase()
409 {
410 CleanTestTables();
411 g_rdbStore = nullptr;
412 MediaLibraryDataManager::GetInstance()->ClearMediaLibraryMgr();
413 this_thread::sleep_for(chrono::seconds(SLEEP_FIVE_SECONDS));
414 MEDIA_INFO_LOG("Clean is finish");
415 }
416
TearDown()417 void AlbumAccurateRefreshTest::TearDown()
418 {
419 MEDIA_INFO_LOG("TearDown start");
420 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
421 predicates.NotEqualTo(PhotoAlbumColumns::ALBUM_ID, to_string(0));
422
423 int deleteRows = 0;
424 g_rdbStore->Delete(deleteRows, predicates);
425 MEDIA_INFO_LOG("TearDown end");
426 }
427
428 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Init_001, TestSize.Level2)
429 {
430 std::shared_ptr<TransactionOperations> trans =
431 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Init_001");
432 AlbumAccurateRefresh albumRefresh(trans);
433 EXPECT_TRUE(albumRefresh.trans_ != nullptr);
434 EXPECT_TRUE(albumRefresh.dataManager_.trans_ != nullptr);
435 }
436
437 // 测试用例初始化运行时,创建PhotoAlbum表,里面包含系统相册、用户相册、来源相册内容
438 // Init查询PhotoAlbum表中的数据,进行判断
439 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Insert_cmd_002, TestSize.Level2)
440 {
441 Uri uri("");
442 MediaLibraryCommand cmd(uri);
443 cmd.SetTableName(PhotoAlbumColumns::TABLE);
444 ValuesBucket values;
445 cmd.SetValueBucket(GetFavoriteInsertAlbum());
446 AlbumAccurateRefresh albumRefresh;
447 int64_t changeRow = 0;
448 auto ret = albumRefresh.Insert(cmd, changeRow);
449
450 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
451 EXPECT_TRUE(changeRow == 1);
452
453 // 数据库执行结果
454 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
455 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
456 // 操作前后数据结果
457 EXPECT_TRUE(CheckInsertResult(albumRefresh, albumInfo));
458
459 // 通知结果
460 albumRefresh.Notify();
461 EXPECT_TRUE(CheckInsertNotify(albumRefresh, albumInfo));
462 }
463
464 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Insert_Trans_cmd_003, TestSize.Level2)
465 {
466 Uri uri("");
467 MediaLibraryCommand cmd(uri);
468 cmd.SetTableName(PhotoAlbumColumns::TABLE);
469 cmd.SetValueBucket(GetTrashInsertAlbum());
470
471 std::shared_ptr<TransactionOperations> trans =
472 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Insert_Trans_cmd_003");
473 AlbumAccurateRefresh albumRefresh(trans);
474 int64_t changeRow = 0;
__anon02825efe0202()475 std::function<int(void)> transFunc = [&]()->int {
476 albumRefresh.Insert(cmd, changeRow);
477 return ACCURATE_REFRESH_RET_OK;
478 };
479 // trans查询
480 auto ret = trans->RetryTrans(transFunc);
481 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
482
483 // 数据库执行结果
484 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
485 MEDIA_INFO_LOG("albulmInfo: %{public}s", albumInfo.ToString().c_str());
486 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, TRASH_ALBUM_INFO));
487
488 // 操作前后数据结果
489 EXPECT_TRUE(CheckInsertResult(albumRefresh, albumInfo));
490
491 // 通知结果
492 albumRefresh.Notify();
493 EXPECT_TRUE(CheckInsertNotify(albumRefresh, albumInfo));
494 }
495
496 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Insert_004, TestSize.Level2)
497 {
498 ValuesBucket values = GetFavoriteInsertAlbum();
499 AlbumAccurateRefresh albumRefresh;
500 int64_t changeRow = 0;
501 auto ret = albumRefresh.Insert(changeRow, PhotoAlbumColumns::TABLE, values);
502 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
503
504 // 数据库执行结果
505 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
506 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
507 // 操作前后数据结果
508 EXPECT_TRUE(CheckInsertResult(albumRefresh, albumInfo));
509
510 // 通知结果
511 albumRefresh.Notify();
512 EXPECT_TRUE(CheckInsertNotify(albumRefresh, albumInfo));
513 }
514
515 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Insert_Trans_005, TestSize.Level2)
516 {
517 std::shared_ptr<TransactionOperations> trans =
518 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Insert_Trans_005");
519 AlbumAccurateRefresh albumRefresh(trans);
520 int64_t changeRow = 0;
521 ValuesBucket values = GetFavoriteInsertAlbum();
__anon02825efe0302()522 std::function<int(void)> transFunc = [&]()->int {
523 auto ret = albumRefresh.Insert(changeRow, PhotoAlbumColumns::TABLE, values);
524 return ret;
525 };
526 // trans查询
527 auto ret = trans->RetryTrans(transFunc);
528 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
529 // 数据库执行结果
530 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
531 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO));
532 // 操作前后数据结果
533 EXPECT_TRUE(CheckInsertResult(albumRefresh, favoriteAlbumInfo));
534 // 通知结果
535 albumRefresh.Notify();
536 EXPECT_TRUE(CheckInsertNotify(albumRefresh, favoriteAlbumInfo));
537 }
538
539 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_BatchInsert_cmd_006, TestSize.Level2)
540 {
541 Uri uri("");
542 MediaLibraryCommand cmd(uri);
543 cmd.SetTableName(PhotoAlbumColumns::TABLE);
544 int64_t insertNums = 0;
545 AlbumAccurateRefresh albumRefresh;
546 auto values = GetBatchInsertValues();
547 auto ret = albumRefresh.BatchInsert(cmd, insertNums, values);
548 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
549 EXPECT_TRUE(insertNums == values.size());
550
551 // 数据库执行结果
552 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
553 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO));
554 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
555 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, TRASH_ALBUM_INFO));
556 // 操作前后数据结果
557 EXPECT_TRUE(CheckBatchInsertResult(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
558
559 // 通知结果
560 albumRefresh.Notify();
561
562 EXPECT_TRUE(CheckBatchInsertNotify(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
563 }
564
565 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_BatchInsert_Trans_cmd_007, TestSize.Level2)
566 {
567 Uri uri("");
568 MediaLibraryCommand cmd(uri);
569 cmd.SetTableName(PhotoAlbumColumns::TABLE);
570 int64_t insertNums = 0;
571 std::shared_ptr<TransactionOperations> trans =
572 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_BatchInsert_Trans_cmd_007");
573 AlbumAccurateRefresh albumRefresh(trans);
574 auto values = GetBatchInsertValues();
__anon02825efe0402()575 std::function<int(void)> transFunc = [&]()->int {
576 auto ret = albumRefresh.BatchInsert(cmd, insertNums, values);
577 return ret;
578 };
579 // trans查询
580 auto ret = trans->RetryTrans(transFunc);
581
582 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
583 EXPECT_TRUE(insertNums == values.size());
584 // 数据库执行结果
585 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
586 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO));
587 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
588 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, TRASH_ALBUM_INFO));
589 // 操作前后数据结果
590 EXPECT_TRUE(CheckBatchInsertResult(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
591
592 // 通知结果
593 albumRefresh.Notify();
594
595 EXPECT_TRUE(CheckBatchInsertNotify(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
596 }
597
598 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_BatchInsert_008, TestSize.Level2)
599 {
600 int64_t insertNums = 0;
601 AlbumAccurateRefresh albumRefresh;
602 auto values = GetBatchInsertValues();
603 auto ret = albumRefresh.BatchInsert(insertNums, PhotoAlbumColumns::TABLE, values);
604 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
605 EXPECT_TRUE(insertNums == values.size());
606 // 数据库执行结果
607 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
608 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO));
609 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
610 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, TRASH_ALBUM_INFO));
611 // 操作前后数据结果
612 EXPECT_TRUE(CheckBatchInsertResult(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
613
614 // 通知结果
615 albumRefresh.Notify();
616
617 EXPECT_TRUE(CheckBatchInsertNotify(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
618 }
619
620 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_BatchInsert_Trans_009, TestSize.Level2)
621 {
622 int64_t insertNums = 0;
623 std::shared_ptr<TransactionOperations> trans =
624 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_BatchInsert_Trans_009");
625 AlbumAccurateRefresh albumRefresh(trans);
626 auto values = GetBatchInsertValues();
__anon02825efe0502()627 std::function<int(void)> transFunc = [&]()->int {
628 auto ret = albumRefresh.BatchInsert(insertNums, PhotoAlbumColumns::TABLE, values);
629 return ret;
630 };
631 auto ret = trans->RetryTrans(transFunc);
632
633 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
634 EXPECT_TRUE(insertNums == values.size());
635 // 数据库执行结果
636 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
637 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO));
638 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
639 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, TRASH_ALBUM_INFO));
640 // 操作前后数据结果
641 EXPECT_TRUE(CheckBatchInsertResult(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
642
643 // 通知结果
644 albumRefresh.Notify();
645
646 EXPECT_TRUE(CheckBatchInsertNotify(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
647 }
648
649 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_cmd_010, TestSize.Level2)
650 {
651 PrepareAlbumData();
652 Uri uri("");
653 MediaLibraryCommand cmd(uri);
654 cmd.SetTableName(PhotoAlbumColumns::TABLE);
655 auto predicates = cmd.GetAbsRdbPredicates();
656 predicates->SetWhereClause(PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?");
657 predicates->SetWhereArgs({ to_string(PhotoAlbumSubType::FAVORITE) });
658 ValuesBucket value;
659 auto newCount = FAVORITE_ALBUM_COUNT - 1;
660 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
661 auto imageCount = FAVORITE_ALBUM_IMAGE_COUNT - 1;
662 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
663 cmd.SetValueBucket(value);
664
665 AlbumAccurateRefresh albumRefreshUpdate;
666 int32_t changeRows = 0;
667 auto ret = albumRefreshUpdate.Update(cmd, changeRows);
668 ACCURATE_DEBUG("ret: %{public}d", ret);
669 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
670 EXPECT_TRUE(changeRows == 1);
671 // 数据库执行结果
672 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
673 AlbumChangeInfo updateAlbumInfo = FAVORITE_ALBUM_INFO;
674 updateAlbumInfo.count_ = newCount;
675 updateAlbumInfo.imageCount_ = imageCount;
676 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
677 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == newCount);
678
679 // 操作前后数据结果
680 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, FAVORITE_ALBUM_INFO, favoriteAlbumInfo));
681
682 // 通知结果
683 albumRefreshUpdate.Notify();
684
685 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE, FAVORITE_ALBUM_INFO,
686 favoriteAlbumInfo));
687 }
688
689 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Trans_cmd_011, TestSize.Level2)
690 {
691 PrepareAlbumData();
692 Uri uri("");
693 MediaLibraryCommand cmd(uri);
694 cmd.SetTableName(PhotoAlbumColumns::TABLE);
695 auto predicates = cmd.GetAbsRdbPredicates();
696 predicates->SetWhereClause(PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?");
697 predicates->SetWhereArgs({ to_string(PhotoAlbumSubType::FAVORITE) });
698 ValuesBucket value;
699 auto newCount = FAVORITE_ALBUM_COUNT - 1;
700 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
701 auto imageCount = FAVORITE_ALBUM_IMAGE_COUNT - 1;
702 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
703 cmd.SetValueBucket(value);
704
705 std::shared_ptr<TransactionOperations> trans =
706 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Update_Trans_cmd_011");
707 AlbumAccurateRefresh albumRefreshUpdate(trans);
708 int32_t changeRows = 0;
__anon02825efe0602()709 std::function<int(void)> transFunc = [&]()->int {
710 auto ret = albumRefreshUpdate.Update(cmd, changeRows);
711 return ret;
712 };
713 auto ret = trans->RetryTrans(transFunc);
714 ACCURATE_DEBUG("ret: %{public}d", ret);
715 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
716 EXPECT_TRUE(changeRows == 1);
717 // 数据库执行结果
718 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
719 AlbumChangeInfo updateAlbumInfo = FAVORITE_ALBUM_INFO;
720 updateAlbumInfo.count_ = newCount;
721 updateAlbumInfo.imageCount_ = imageCount;
722 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
723 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == newCount);
724
725 // 操作前后数据结果
726 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, FAVORITE_ALBUM_INFO, favoriteAlbumInfo));
727
728 // 通知结果
729 albumRefreshUpdate.Notify();
730
731 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE, FAVORITE_ALBUM_INFO,
732 favoriteAlbumInfo));
733 }
734
735
736 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_012, TestSize.Level2)
737 {
738 PrepareAlbumData();
739 ValuesBucket value;
740 auto newCount = TRASH_ALBUM_COUNT - 1;
741 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
742 auto imageCount = TRASH_ALBUM_IMAGE_COUNT - 1;
743 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
744 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
745 vector<string> args = { to_string(PhotoAlbumSubType::TRASH) };
746
747 AlbumAccurateRefresh albumRefreshUpdate;
748 int32_t changeRows = 0;
749 auto ret = albumRefreshUpdate.Update(changeRows, PhotoAlbumColumns::TABLE, value, whereClause, args);
750 ACCURATE_DEBUG("ret: %{public}d", ret);
751 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
752 EXPECT_TRUE(changeRows == 1);
753 // 数据库执行结果
754 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
755 AlbumChangeInfo updateAlbumInfo = TRASH_ALBUM_INFO;
756 updateAlbumInfo.count_ = newCount;
757 updateAlbumInfo.imageCount_ = imageCount;
758 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, updateAlbumInfo));
759 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::TRASH) == newCount);
760
761 // 操作前后数据结果
762 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, TRASH_ALBUM_INFO, trashAlbumInfo));
763
764 // 通知结果
765 albumRefreshUpdate.Notify();
766
767 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE_TRASH, TRASH_ALBUM_INFO,
768 trashAlbumInfo));
769 }
770
771 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Trans_013, TestSize.Level2)
772 {
773 PrepareAlbumData();
774 ValuesBucket value;
775 auto newCount = TRASH_ALBUM_COUNT - 1;
776 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
777 auto imageCount = TRASH_ALBUM_IMAGE_COUNT - 1;
778 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
779 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
780 vector<string> args = { to_string(PhotoAlbumSubType::TRASH) };
781
782 std::shared_ptr<TransactionOperations> trans =
783 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Update_Trans_cmd_011");
784 AlbumAccurateRefresh albumRefreshUpdate(trans);
785 int32_t changeRows = 0;
__anon02825efe0702()786 std::function<int(void)> transFunc = [&]()->int {
787 auto ret = albumRefreshUpdate.Update(changeRows, PhotoAlbumColumns::TABLE, value, whereClause, args);
788 return ret;
789 };
790
791 auto ret = trans->RetryTrans(transFunc);
792 ACCURATE_DEBUG("ret: %{public}d", ret);
793 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
794 EXPECT_TRUE(changeRows == 1);
795 // 数据库执行结果
796 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
797 AlbumChangeInfo updateAlbumInfo = TRASH_ALBUM_INFO;
798 updateAlbumInfo.count_ = newCount;
799 updateAlbumInfo.imageCount_ = imageCount;
800 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, updateAlbumInfo));
801 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::TRASH) == newCount);
802
803 // 操作前后数据结果
804 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, TRASH_ALBUM_INFO, trashAlbumInfo));
805
806 // 通知结果
807 albumRefreshUpdate.Notify();
808
809 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE_TRASH, TRASH_ALBUM_INFO,
810 trashAlbumInfo));
811 }
812
813 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_014, TestSize.Level2)
814 {
815 PrepareHiddenData();
816 ValuesBucket value;
817 auto newCount = HIDDEN_ALBUM_COUNT - 1;
818 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
819 auto imageCount = HIDDEN_ALBUM_IMAGE_COUNT - 1;
820 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
821 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
822 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::HIDDEN));
823
824 AlbumAccurateRefresh albumRefreshUpdate;
825 int32_t changeRows = 0;
826 auto ret = albumRefreshUpdate.Update(changeRows, value, predicates);
827 ACCURATE_DEBUG("ret: %{public}d", ret);
828 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
829 EXPECT_TRUE(changeRows == 1);
830 // 数据库执行结果
831 AlbumChangeInfo hiddenAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::HIDDEN);
832 AlbumChangeInfo updateAlbumInfo = HIDDEN_ALBUM_INFO;
833 updateAlbumInfo.count_ = newCount;
834 updateAlbumInfo.imageCount_ = imageCount;
835 EXPECT_TRUE(IsEqualAlbumInfo(hiddenAlbumInfo, updateAlbumInfo));
836 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::HIDDEN) == newCount);
837
838 // 操作前后数据结果
839 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, HIDDEN_ALBUM_INFO, hiddenAlbumInfo));
840
841 // 通知结果
842 albumRefreshUpdate.Notify();
843
844 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE_HIDDEN,
845 HIDDEN_ALBUM_INFO, hiddenAlbumInfo));
846 }
847
848 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Trans_015, TestSize.Level2)
849 {
850 PrepareHiddenData();
851 ValuesBucket value;
852 auto newCount = HIDDEN_ALBUM_COUNT - 1;
853 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
854 auto imageCount = HIDDEN_ALBUM_IMAGE_COUNT - 1;
855 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
856 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
857 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::HIDDEN));
858
859 std::shared_ptr<TransactionOperations> trans =
860 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Update_Trans_015");
861 AlbumAccurateRefresh albumRefreshUpdate(trans);
862 int32_t changeRows = 0;
__anon02825efe0802()863 std::function<int(void)> transFunc = [&]()->int {
864 auto ret = albumRefreshUpdate.Update(changeRows, value, predicates);
865 return ret;
866 };
867
868 auto ret = trans->RetryTrans(transFunc);
869 ACCURATE_DEBUG("ret: %{public}d", ret);
870 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
871 EXPECT_TRUE(changeRows == 1);
872
873 // 数据库执行结果
874 AlbumChangeInfo hiddenAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::HIDDEN);
875 AlbumChangeInfo updateAlbumInfo = HIDDEN_ALBUM_INFO;
876 updateAlbumInfo.count_ = newCount;
877 updateAlbumInfo.imageCount_ = imageCount;
878 EXPECT_TRUE(IsEqualAlbumInfo(hiddenAlbumInfo, updateAlbumInfo));
879 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::HIDDEN) == newCount);
880
881 // 操作前后数据结果
882 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, HIDDEN_ALBUM_INFO, hiddenAlbumInfo));
883
884 // 通知结果
885 albumRefreshUpdate.Notify();
886
887 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE_HIDDEN, HIDDEN_ALBUM_INFO,
888 hiddenAlbumInfo));
889 }
890
891 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_cmd_016, TestSize.Level2)
892 {
893 PrepareAlbumData();
894 Uri uri("");
895 MediaLibraryCommand cmd(uri);
896 cmd.SetTableName(PhotoAlbumColumns::TABLE);
897 auto predicates = cmd.GetAbsRdbPredicates();
898 predicates->SetWhereClause(PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?");
899 predicates->SetWhereArgs({ to_string(PhotoAlbumSubType::FAVORITE) });
900
901 AlbumAccurateRefresh albumRefreshDel;
902 int32_t changeRows = 0;
903 auto ret = albumRefreshDel.LogicalDeleteReplaceByUpdate(cmd, changeRows);
904 ACCURATE_DEBUG("ret: %{public}d", ret);
905 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
906 EXPECT_TRUE(changeRows == 1);
907
908 // 数据库执行结果
909 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
910 auto updateAlbumInfo = FAVORITE_ALBUM_INFO;
911 updateAlbumInfo.dirty_ = static_cast<int32_t>(DirtyType::TYPE_DELETED);
912 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
913
914 // 操作前后数据结果
915 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
916
917 // 通知结果
918 albumRefreshDel.Notify();
919 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
920 AlbumChangeInfo()));
921 }
922
923 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_Trans_cmd_017, TestSize.Level2)
924 {
925 ACCURATE_DEBUG("");
926 PrepareAlbumData();
927 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
928 EXPECT_TRUE(GetAlbumDirtyType(PhotoAlbumSubType::FAVORITE) == static_cast<int32_t>(DirtyType::TYPE_NEW));
929 Uri uri("");
930 MediaLibraryCommand cmd(uri);
931 cmd.SetTableName(PhotoAlbumColumns::TABLE);
932 auto predicates = cmd.GetAbsRdbPredicates();
933 predicates->SetWhereClause(PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?");
934 predicates->SetWhereArgs({ to_string(PhotoAlbumSubType::FAVORITE) });
935
936 std::shared_ptr<TransactionOperations> trans =
937 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Delete_Trans_cmd_017");
938 AlbumAccurateRefresh albumRefreshDel(trans);
939 int32_t changeRows = 0;
__anon02825efe0902() 940 function<int32_t()> transFunc = [&] () -> int32_t {
941 auto ret = albumRefreshDel.LogicalDeleteReplaceByUpdate(cmd, changeRows);
942 return ret;
943 };
944
945 auto ret = trans->RetryTrans(transFunc);
946 ACCURATE_DEBUG("ret: %{public}d", ret);
947 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
948 EXPECT_TRUE(changeRows == 1);
949 // 数据库执行结果
950 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
951 auto updateAlbumInfo = FAVORITE_ALBUM_INFO;
952 updateAlbumInfo.dirty_ = static_cast<int32_t>(DirtyType::TYPE_DELETED);
953 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
954
955 // 操作前后数据结果
956 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
957
958 // 通知结果
959 albumRefreshDel.Notify();
960 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
961 AlbumChangeInfo()));
962 }
963
964 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_018, TestSize.Level2)
965 {
966 PrepareAlbumData();
967 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
968 EXPECT_TRUE(GetAlbumDirtyType(PhotoAlbumSubType::FAVORITE) == static_cast<int32_t>(DirtyType::TYPE_NEW));
969 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
970 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::FAVORITE));
971
972 AlbumAccurateRefresh albumRefreshDel;
973 int32_t changeRows = 0;
974 auto ret = albumRefreshDel.LogicalDeleteReplaceByUpdate(predicates, changeRows);
975 ACCURATE_DEBUG("ret: %{public}d", ret);
976 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
977 EXPECT_TRUE(changeRows == 1);
978 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
979
980 // 数据库执行结果
981 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
982 auto updateAlbumInfo = FAVORITE_ALBUM_INFO;
983 updateAlbumInfo.dirty_ = static_cast<int32_t>(DirtyType::TYPE_DELETED);
984 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
985
986 // 操作前后数据结果
987 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
988
989 // 通知结果
990 albumRefreshDel.Notify();
991 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
992 AlbumChangeInfo()));
993 }
994
995 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_Trans_019, TestSize.Level2)
996 {
997 PrepareAlbumData();
998 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
999 EXPECT_TRUE(GetAlbumDirtyType(PhotoAlbumSubType::FAVORITE) == static_cast<int32_t>(DirtyType::TYPE_NEW));
1000 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
1001 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::FAVORITE));
1002
1003 std::shared_ptr<TransactionOperations> trans =
1004 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Delete_Trans_019");
1005 AlbumAccurateRefresh albumRefreshDel(trans);
1006 int32_t changeRows = 0;
__anon02825efe0a02() 1007 function<int32_t()> transFunc = [&] () -> int32_t {
1008 auto ret = albumRefreshDel.LogicalDeleteReplaceByUpdate(predicates, changeRows);
1009 return ret;
1010 };
1011
1012 auto ret = trans->RetryTrans(transFunc);
1013 ACCURATE_DEBUG("ret: %{public}d", ret);
1014 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1015 EXPECT_TRUE(changeRows == 1);
1016 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
1017
1018 // 数据库执行结果
1019 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1020 auto updateAlbumInfo = FAVORITE_ALBUM_INFO;
1021 updateAlbumInfo.dirty_ = static_cast<int32_t>(DirtyType::TYPE_DELETED);
1022 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
1023
1024 // 操作前后数据结果
1025 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
1026
1027 // 通知结果
1028 albumRefreshDel.Notify();
1029 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
1030 AlbumChangeInfo()));
1031 }
1032
1033 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_020, TestSize.Level2)
1034 {
1035 PrepareAlbumData();
1036 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
1037
1038 AlbumAccurateRefresh albumRefreshDel;
1039 int32_t changeRows = 0;
1040 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
1041 vector<string> args = { to_string(PhotoAlbumSubType::FAVORITE) };
1042 auto ret = albumRefreshDel.Delete(changeRows, PhotoAlbumColumns::TABLE, whereClause, args);
1043 ACCURATE_DEBUG("ret: %{public}d", ret);
1044 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1045 EXPECT_TRUE(changeRows == 1);
1046 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1047
1048 // 操作前后数据结果
1049 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
1050
1051 // 通知结果
1052 albumRefreshDel.Notify();
1053 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
1054 AlbumChangeInfo()));
1055 }
1056
1057 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_Trans_021, TestSize.Level2)
1058 {
1059 PrepareAlbumData();
1060 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
1061
1062 std::shared_ptr<TransactionOperations> trans =
1063 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Delete_Trans_021");
1064 AlbumAccurateRefresh albumRefreshDel(trans);
1065 int32_t changeRows = 0;
1066 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
1067 vector<string> args = { to_string(PhotoAlbumSubType::FAVORITE) };
__anon02825efe0b02() 1068 function<int32_t()> transFunc = [&] () -> int32_t {
1069 auto ret = albumRefreshDel.Delete(changeRows, PhotoAlbumColumns::TABLE, whereClause, args);
1070 return ret;
1071 };
1072
1073 auto ret = trans->RetryTrans(transFunc);
1074 ACCURATE_DEBUG("ret: %{public}d", ret);
1075 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1076 EXPECT_TRUE(changeRows == 1);
1077 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1078 // 操作前后数据结果
1079 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
1080
1081 // 通知结果
1082 albumRefreshDel.Notify();
1083 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
1084 AlbumChangeInfo()));
1085 }
1086
1087 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_022, TestSize.Level2)
1088 {
1089 PrepareAlbumData();
1090 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
1091
1092 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
1093 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::FAVORITE));
1094
1095 AlbumAccurateRefresh albumRefreshDel;
1096 int32_t changeRows = 0;
1097 auto ret = albumRefreshDel.Delete(changeRows, predicates);
1098 ACCURATE_DEBUG("ret: %{public}d", ret);
1099 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1100 EXPECT_TRUE(changeRows == 1);
1101 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1102
1103 // 操作前后数据结果
1104 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
1105
1106 // 通知结果
1107 albumRefreshDel.Notify();
1108 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
1109 AlbumChangeInfo()));
1110 }
1111
1112 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_Trans_023, TestSize.Level2)
1113 {
1114 PrepareAlbumData();
1115 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
1116
1117 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
1118 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::FAVORITE));
1119
1120 std::shared_ptr<TransactionOperations> trans =
1121 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Delete_Trans_023");
1122 AlbumAccurateRefresh albumRefreshDel(trans);
1123 int32_t changeRows = 0;
1124 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
1125 vector<string> args = { to_string(PhotoAlbumSubType::FAVORITE) };
__anon02825efe0c02() 1126 function<int32_t()> transFunc = [&] () -> int32_t {
1127 auto ret = albumRefreshDel.Delete(changeRows, predicates);
1128 return ret;
1129 };
1130
1131 auto ret = trans->RetryTrans(transFunc);
1132 ACCURATE_DEBUG("ret: %{public}d", ret);
1133 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1134 EXPECT_TRUE(changeRows == 1);
1135 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1136 // 操作前后数据结果
1137 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
1138 // 通知结果
1139 albumRefreshDel.Notify();
1140 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
1141 AlbumChangeInfo()));
1142 }
1143
1144 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_024, TestSize.Level2)
1145 {
1146 AlbumAccurateRefresh albumRefreshExe;
1147 albumRefreshExe.Init();
1148 auto ret = albumRefreshExe.ExecuteSql(insertSql, RdbOperation::RDB_OPERATION_ADD);
1149 ACCURATE_DEBUG("ret: %{public}d", ret);
1150 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1151 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1152 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
1153
1154 // 数据库执行结果
1155 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1156 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
1157 // 操作前后数据结果
1158 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
1159
1160 // 通知结果
1161 albumRefreshExe.Notify();
1162 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
1163 }
1164
1165 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_Trans_025, TestSize.Level2)
1166 {
1167 std::shared_ptr<TransactionOperations> trans =
1168 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Exe_Trans_024");
1169 AlbumAccurateRefresh albumRefreshExe(trans);
1170 albumRefreshExe.Init();
__anon02825efe0d02() 1171 function<int32_t()> transFunc = [&]() -> int32_t {
1172 return albumRefreshExe.ExecuteSql(insertSql, RdbOperation::RDB_OPERATION_ADD);
1173 };
1174 auto ret = trans->RetryTrans(transFunc);
1175 ACCURATE_DEBUG("ret: %{public}d", ret);
1176 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1177 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1178 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
1179
1180 // 数据库执行结果
1181 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1182 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
1183 // 操作前后数据结果
1184 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
1185
1186 // 通知结果
1187 albumRefreshExe.Notify();
1188 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
1189 }
1190
1191 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_026, TestSize.Level2)
1192 {
1193 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
1194
1195 AlbumAccurateRefresh albumRefreshExe;
1196 albumRefreshExe.Init();
1197 auto changedRowId =
1198 albumRefreshExe.ExecuteForLastInsertedRowId(insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
1199 ACCURATE_DEBUG("changedRowId: %{public}d", changedRowId);
1200 EXPECT_TRUE(changedRowId > 0);
1201 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1202 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
1203
1204 // 数据库执行结果
1205 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1206 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
1207 // 操作前后数据结果
1208 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
1209
1210 // 通知结果
1211 albumRefreshExe.Notify();
1212 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
1213 }
1214
1215 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_027, TestSize.Level2)
1216 {
1217 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
1218
1219 std::shared_ptr<TransactionOperations> trans =
1220 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Exe_Trans_024");
1221 AlbumAccurateRefresh albumRefreshExe(trans);
1222 albumRefreshExe.Init();
1223 int32_t changedRowId = 0;
__anon02825efe0e02() 1224 function<int32_t()> transFunc = [&]() -> int32_t {
1225 changedRowId =
1226 albumRefreshExe.ExecuteForLastInsertedRowId(insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
1227 if (changedRowId != E_HAS_DB_ERROR) {
1228 return ACCURATE_REFRESH_RET_OK;
1229 } else {
1230 return E_HAS_DB_ERROR;
1231 }
1232 };
1233 auto ret = trans->RetryTrans(transFunc);
1234
1235 ACCURATE_DEBUG("changedRowId: %{public}d", changedRowId);
1236 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1237 EXPECT_TRUE(changedRowId > 0);
1238 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1239 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
1240 // 数据库执行结果
1241 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1242 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
1243 // 操作前后数据结果
1244 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
1245
1246 // 通知结果
1247 albumRefreshExe.Notify();
1248 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
1249 }
1250
1251 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_028, TestSize.Level2)
1252 {
1253 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
1254
1255 AlbumAccurateRefresh albumRefreshExe;
1256 albumRefreshExe.Init();
1257 auto ret = albumRefreshExe.ExecuteSql(insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
1258 ACCURATE_DEBUG("ret: %{public}d", ret);
1259 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1260 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1261 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
1262 // 数据库执行结果
1263 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1264 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
1265 // 操作前后数据结果
1266 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
1267
1268 // 通知结果
1269 albumRefreshExe.Notify();
1270 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
1271 }
1272
1273 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_029, TestSize.Level2)
1274 {
1275 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
1276
1277 std::shared_ptr<TransactionOperations> trans =
1278 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Exe_Trans_024");
1279 AlbumAccurateRefresh albumRefreshExe(trans);
1280 albumRefreshExe.Init();
1281
__anon02825efe0f02() 1282 function<int32_t()> transFunc = [&]() -> int32_t {
1283 auto ret = albumRefreshExe.ExecuteSql(insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
1284 return ret;
1285 };
1286 auto ret = trans->RetryTrans(transFunc);
1287
1288 ACCURATE_DEBUG("ret: %{public}d", ret);
1289 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1290 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1291 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
1292 // 数据库执行结果
1293 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1294 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
1295 // 操作前后数据结果
1296 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
1297
1298 // 通知结果
1299 albumRefreshExe.Notify();
1300 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
1301 }
1302
1303 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_030, TestSize.Level2)
1304 {
1305 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
1306
1307 AlbumAccurateRefresh albumRefreshExe;
1308 albumRefreshExe.Init();
1309 int64_t outValue = 0;
1310 auto ret =
1311 albumRefreshExe.ExecuteForChangedRowCount(outValue, insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
1312 ACCURATE_DEBUG("ret: %{public}d", ret);
1313 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1314 EXPECT_TRUE(outValue == 1);
1315 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1316 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
1317 // 数据库执行结果
1318 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1319 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
1320 // 操作前后数据结果
1321 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
1322
1323 // 通知结果
1324 albumRefreshExe.Notify();
1325 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
1326 }
1327
1328 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_031, TestSize.Level2)
1329 {
1330 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
1331
1332 std::shared_ptr<TransactionOperations> trans =
1333 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Exe_Trans_024");
1334 AlbumAccurateRefresh albumRefreshExe(trans);
1335 albumRefreshExe.Init();
1336 int64_t outValue = 0;
__anon02825efe1002() 1337 function<int32_t()> transFunc = [&]() -> int32_t {
1338 auto ret =albumRefreshExe.ExecuteForChangedRowCount(outValue, insertSqlWithArgs, args,
1339 RdbOperation::RDB_OPERATION_ADD);
1340 return ret;
1341 };
1342 auto ret = trans->RetryTrans(transFunc);
1343
1344 ACCURATE_DEBUG("ret: %{public}d", ret);
1345 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1346 EXPECT_TRUE(outValue == 1);
1347 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
1348 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
1349 // 数据库执行结果
1350 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1351 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
1352 // 操作前后数据结果
1353 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
1354
1355 // 通知结果
1356 albumRefreshExe.Notify();
1357 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
1358 }
1359
1360 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Exceed_032, TestSize.Level2)
1361 {
1362 PrepareHiddenData();
1363 ValuesBucket value;
1364 auto newCount = HIDDEN_ALBUM_COUNT - 1;
1365 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1366 auto imageCount = HIDDEN_ALBUM_IMAGE_COUNT - 1;
1367 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1368 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
1369 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::HIDDEN));
1370
1371 AlbumAccurateRefresh albumRefreshUpdate;
1372 int32_t changeRows = 0;
1373 auto ret = albumRefreshUpdate.Update(changeRows, value, predicates);
1374 ACCURATE_DEBUG("ret: %{public}d", ret);
1375 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1376 EXPECT_TRUE(changeRows == 1);
1377 auto &changeDatasMap = albumRefreshUpdate.dataManager_.changeDatas_;
1378 AlbumChangeData changeData;
1379 // 总共1000条
1380 for (int i = 0; i < 999; ++i) {
1381 changeDatasMap.insert_or_assign(1000000 + i, changeData);
1382 }
1383
1384 ValuesBucket newValue;
1385 newCount = HIDDEN_ALBUM_COUNT;
1386 newValue.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1387 imageCount = HIDDEN_ALBUM_IMAGE_COUNT;
1388 newValue.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1389 ret = albumRefreshUpdate.Update(changeRows, value, predicates);
1390 ACCURATE_DEBUG("ret: %{public}d", ret);
1391 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1392 EXPECT_TRUE(changeRows == 1);
1393 // 总共1000条
1394 EXPECT_TRUE(albumRefreshUpdate.dataManager_.CheckIsExceed());
1395 EXPECT_TRUE(albumRefreshUpdate.dataManager_.changeDatas_.empty());
1396 EXPECT_TRUE(albumRefreshUpdate.Notify() == ACCURATE_REFRESH_RET_OK);
1397 }
1398
1399 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Exceed_033, TestSize.Level2)
1400 {
1401 PrepareHiddenData();
1402 ValuesBucket value;
1403 auto newCount = HIDDEN_ALBUM_COUNT - 1;
1404 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1405 auto imageCount = HIDDEN_ALBUM_IMAGE_COUNT - 1;
1406 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1407 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
1408 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::HIDDEN));
1409
1410 AlbumAccurateRefresh albumRefreshUpdate;
1411 int32_t changeRows = 0;
1412 auto ret = albumRefreshUpdate.Update(changeRows, value, predicates);
1413 ACCURATE_DEBUG("ret: %{public}d", ret);
1414 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1415 EXPECT_TRUE(changeRows == 1);
1416 auto &changeDatasMap = albumRefreshUpdate.dataManager_.changeDatas_;
1417 AlbumChangeData changeData;
1418 // 总共999条
1419 for (int i = 0; i < 998; ++i) {
1420 changeDatasMap.insert_or_assign(1000000 + i, changeData);
1421 }
1422
1423 ValuesBucket newValue;
1424 newCount = HIDDEN_ALBUM_COUNT;
1425 newValue.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1426 imageCount = HIDDEN_ALBUM_IMAGE_COUNT;
1427 newValue.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1428 ret = albumRefreshUpdate.Update(changeRows, value, predicates);
1429 ACCURATE_DEBUG("ret: %{public}d", ret);
1430 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1431 EXPECT_TRUE(changeRows == 1);
1432 // 总共999条
1433 EXPECT_TRUE(!albumRefreshUpdate.dataManager_.CheckIsExceed());
1434 }
1435
1436 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Init_034, TestSize.Level2)
1437 {
1438 std::shared_ptr<TransactionOperations> trans =
1439 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Init_034");
1440 AlbumAccurateRefresh albumRefresh("AlbumAccurateRefreshTest_Init_034", trans);
1441 EXPECT_TRUE(albumRefresh.trans_ != nullptr);
1442 EXPECT_TRUE(albumRefresh.dataManager_.trans_ != nullptr);
1443 }
1444
1445 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Insert_cmd_35, TestSize.Level2)
1446 {
1447 Uri uri("");
1448 MediaLibraryCommand cmd(uri);
1449 cmd.SetTableName(PhotoAlbumColumns::TABLE);
1450 ValuesBucket values;
1451 cmd.SetValueBucket(GetPhotoAlbumInsertValue(FAVORITE_ALBUM_INFO_TOW));
1452 AlbumAccurateRefresh albumRefresh("AlbumAccurateRefreshTest_Insert_cmd_35");
1453 int64_t changeRow = 0;
1454 auto ret = albumRefresh.Insert(cmd, changeRow);
1455
1456 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1457 EXPECT_TRUE(changeRow == 101);
1458
1459 // 数据库执行结果
1460 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1461 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO_TOW));
1462 // 操作前后数据结果
1463 EXPECT_TRUE(CheckInsertResult(albumRefresh, albumInfo));
1464
1465 // 通知结果
1466 albumRefresh.Notify();
1467 EXPECT_TRUE(CheckInsertNotify(albumRefresh, albumInfo));
1468 }
1469
1470 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Insert_Trans_cmd_036, TestSize.Level2)
1471 {
1472 Uri uri("");
1473 MediaLibraryCommand cmd(uri);
1474 cmd.SetTableName(PhotoAlbumColumns::TABLE);
1475 cmd.SetValueBucket(GetPhotoAlbumInsertValue(TRASH_ALBUM_INFO_TOW));
1476
1477 std::shared_ptr<TransactionOperations> trans =
1478 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Insert_Trans_cmd_036");
1479 AlbumAccurateRefresh albumRefresh("AlbumAccurateRefreshTest_Insert_Trans_cmd_036", trans);
1480 int64_t changeRow = 0;
__anon02825efe1102()1481 std::function<int(void)> transFunc = [&]()->int {
1482 albumRefresh.Insert(cmd, changeRow);
1483 return ACCURATE_REFRESH_RET_OK;
1484 };
1485 // trans查询
1486 auto ret = trans->RetryTrans(transFunc);
1487 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1488
1489 // 数据库执行结果
1490 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
1491 MEDIA_INFO_LOG("albulmInfo: %{public}s", albumInfo.ToString().c_str());
1492 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, TRASH_ALBUM_INFO_TOW));
1493
1494 // 操作前后数据结果
1495 EXPECT_TRUE(CheckInsertResult(albumRefresh, albumInfo));
1496
1497 // 通知结果
1498 albumRefresh.Notify();
1499 EXPECT_TRUE(CheckInsertNotify(albumRefresh, albumInfo));
1500 }
1501
1502 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Insert_037, TestSize.Level2)
1503 {
1504 ValuesBucket values = GetPhotoAlbumInsertValue(FAVORITE_ALBUM_INFO_TOW);
1505 AlbumAccurateRefresh albumRefresh("AlbumAccurateRefreshTest_Insert_037");
1506 int64_t changeRow = 0;
1507 auto ret = albumRefresh.Insert(changeRow, PhotoAlbumColumns::TABLE, values);
1508 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1509
1510 // 数据库执行结果
1511 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1512 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO_TOW));
1513 // 操作前后数据结果
1514 EXPECT_TRUE(CheckInsertResult(albumRefresh, albumInfo));
1515
1516 // 通知结果
1517 albumRefresh.Notify();
1518 EXPECT_TRUE(CheckInsertNotify(albumRefresh, albumInfo));
1519 }
1520
1521 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Insert_Trans_038, TestSize.Level2)
1522 {
1523 std::shared_ptr<TransactionOperations> trans =
1524 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Insert_Trans_038");
1525 AlbumAccurateRefresh albumRefresh("AlbumAccurateRefreshTest_Insert_Trans_038", trans);
1526 int64_t changeRow = 0;
1527 ValuesBucket values = GetPhotoAlbumInsertValue(FAVORITE_ALBUM_INFO_TOW);
__anon02825efe1202()1528 std::function<int(void)> transFunc = [&]()->int {
1529 auto ret = albumRefresh.Insert(changeRow, PhotoAlbumColumns::TABLE, values);
1530 return ret;
1531 };
1532 // trans查询
1533 auto ret = trans->RetryTrans(transFunc);
1534 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1535 // 数据库执行结果
1536 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1537 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO_TOW));
1538 // 操作前后数据结果
1539 EXPECT_TRUE(CheckInsertResult(albumRefresh, favoriteAlbumInfo));
1540 // 通知结果
1541 albumRefresh.Notify();
1542 EXPECT_TRUE(CheckInsertNotify(albumRefresh, favoriteAlbumInfo));
1543 }
1544
1545 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_BatchInsert_cmd_039, TestSize.Level2)
1546 {
1547 Uri uri("");
1548 MediaLibraryCommand cmd(uri);
1549 cmd.SetTableName(PhotoAlbumColumns::TABLE);
1550 int64_t insertNums = 0;
1551 AlbumAccurateRefresh albumRefresh("AlbumAccurateRefreshTest_BatchInsert_cmd_039");
1552 vector<ValuesBucket> values;
1553 values.push_back(GetPhotoAlbumInsertValue(FAVORITE_ALBUM_INFO_TOW));
1554 values.push_back(GetPhotoAlbumInsertValue(TRASH_ALBUM_INFO_TOW));
1555 auto ret = albumRefresh.BatchInsert(cmd, insertNums, values);
1556 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1557 EXPECT_TRUE(insertNums == values.size());
1558
1559 // 数据库执行结果
1560 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1561 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO_TOW));
1562 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
1563 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, TRASH_ALBUM_INFO_TOW));
1564 // 操作前后数据结果
1565 EXPECT_TRUE(CheckBatchInsertResult(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
1566
1567 // 通知结果
1568 albumRefresh.Notify();
1569
1570 EXPECT_TRUE(CheckBatchInsertNotify(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
1571 }
1572
1573 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_BatchInsert_Trans_cmd_040, TestSize.Level2)
1574 {
1575 Uri uri("");
1576 MediaLibraryCommand cmd(uri);
1577 cmd.SetTableName(PhotoAlbumColumns::TABLE);
1578 int64_t insertNums = 0;
1579 std::shared_ptr<TransactionOperations> trans =
1580 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_BatchInsert_Trans_cmd_040");
1581 AlbumAccurateRefresh albumRefresh("AlbumAccurateRefreshTest_BatchInsert_Trans_cmd_040", trans);
1582 vector<ValuesBucket> values;
1583 values.push_back(GetPhotoAlbumInsertValue(FAVORITE_ALBUM_INFO_TOW));
1584 values.push_back(GetPhotoAlbumInsertValue(TRASH_ALBUM_INFO_TOW));
__anon02825efe1302()1585 std::function<int(void)> transFunc = [&]()->int {
1586 auto ret = albumRefresh.BatchInsert(cmd, insertNums, values);
1587 return ret;
1588 };
1589 // trans查询
1590 auto ret = trans->RetryTrans(transFunc);
1591
1592 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1593 EXPECT_TRUE(insertNums == values.size());
1594 // 数据库执行结果
1595 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1596 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO_TOW));
1597 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
1598 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, TRASH_ALBUM_INFO_TOW));
1599 // 操作前后数据结果
1600 EXPECT_TRUE(CheckBatchInsertResult(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
1601
1602 // 通知结果
1603 albumRefresh.Notify();
1604
1605 EXPECT_TRUE(CheckBatchInsertNotify(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
1606 }
1607
1608 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_BatchInsert_041, TestSize.Level2)
1609 {
1610 int64_t insertNums = 0;
1611 AlbumAccurateRefresh albumRefresh("AlbumAccurateRefreshTest_BatchInsert_041");
1612 vector<ValuesBucket> values;
1613 values.push_back(GetPhotoAlbumInsertValue(FAVORITE_ALBUM_INFO_TOW));
1614 values.push_back(GetPhotoAlbumInsertValue(TRASH_ALBUM_INFO_TOW));
1615 auto ret = albumRefresh.BatchInsert(insertNums, PhotoAlbumColumns::TABLE, values);
1616 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1617 EXPECT_TRUE(insertNums == values.size());
1618 // 数据库执行结果
1619 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1620 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO_TOW));
1621 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
1622 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, TRASH_ALBUM_INFO_TOW));
1623 // 操作前后数据结果
1624 EXPECT_TRUE(CheckBatchInsertResult(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
1625
1626 // 通知结果
1627 albumRefresh.Notify();
1628
1629 EXPECT_TRUE(CheckBatchInsertNotify(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
1630 }
1631
1632 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_BatchInsert_Trans_042, TestSize.Level2)
1633 {
1634 int64_t insertNums = 0;
1635 std::shared_ptr<TransactionOperations> trans =
1636 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_BatchInsert_Trans_042");
1637 AlbumAccurateRefresh albumRefresh("AlbumAccurateRefreshTest_BatchInsert_Trans_042", trans);
1638 vector<ValuesBucket> values;
1639 values.push_back(GetPhotoAlbumInsertValue(FAVORITE_ALBUM_INFO_TOW));
1640 values.push_back(GetPhotoAlbumInsertValue(TRASH_ALBUM_INFO_TOW));
__anon02825efe1402()1641 std::function<int(void)> transFunc = [&]()->int {
1642 auto ret = albumRefresh.BatchInsert(insertNums, PhotoAlbumColumns::TABLE, values);
1643 return ret;
1644 };
1645 auto ret = trans->RetryTrans(transFunc);
1646
1647 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1648 EXPECT_TRUE(insertNums == values.size());
1649 // 数据库执行结果
1650 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1651 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, FAVORITE_ALBUM_INFO_TOW));
1652 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
1653 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, TRASH_ALBUM_INFO_TOW));
1654 // 操作前后数据结果
1655 EXPECT_TRUE(CheckBatchInsertResult(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
1656
1657 // 通知结果
1658 albumRefresh.Notify();
1659
1660 EXPECT_TRUE(CheckBatchInsertNotify(albumRefresh, favoriteAlbumInfo, trashAlbumInfo));
1661 }
1662
1663 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_cmd_043, TestSize.Level2)
1664 {
1665 PrepareAlbumData();
1666 Uri uri("");
1667 MediaLibraryCommand cmd(uri);
1668 cmd.SetTableName(PhotoAlbumColumns::TABLE);
1669 auto predicates = cmd.GetAbsRdbPredicates();
1670 predicates->SetWhereClause(PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?");
1671 predicates->SetWhereArgs({ to_string(PhotoAlbumSubType::FAVORITE) });
1672 ValuesBucket value;
1673 auto newCount = FAVORITE_ALBUM_COUNT - 1;
1674 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1675 auto imageCount = FAVORITE_ALBUM_IMAGE_COUNT - 1;
1676 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1677 cmd.SetValueBucket(value);
1678
1679 AlbumAccurateRefresh albumRefreshUpdate("AlbumAccurateRefreshTest_Update_cmd_043");
1680 int32_t changeRows = 0;
1681 auto ret = albumRefreshUpdate.Update(cmd, changeRows);
1682 ACCURATE_DEBUG("ret: %{public}d", ret);
1683 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1684 EXPECT_TRUE(changeRows == 1);
1685 // 数据库执行结果
1686 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1687 AlbumChangeInfo updateAlbumInfo = FAVORITE_ALBUM_INFO;
1688 updateAlbumInfo.count_ = newCount;
1689 updateAlbumInfo.imageCount_ = imageCount;
1690 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
1691 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == newCount);
1692
1693 // 操作前后数据结果
1694 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, FAVORITE_ALBUM_INFO, favoriteAlbumInfo));
1695
1696 // 通知结果
1697 albumRefreshUpdate.Notify();
1698
1699 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE, FAVORITE_ALBUM_INFO,
1700 favoriteAlbumInfo));
1701 }
1702
1703 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Trans_cmd_044, TestSize.Level2)
1704 {
1705 PrepareAlbumData();
1706 Uri uri("");
1707 MediaLibraryCommand cmd(uri);
1708 cmd.SetTableName(PhotoAlbumColumns::TABLE);
1709 auto predicates = cmd.GetAbsRdbPredicates();
1710 predicates->SetWhereClause(PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?");
1711 predicates->SetWhereArgs({ to_string(PhotoAlbumSubType::FAVORITE) });
1712 ValuesBucket value;
1713 auto newCount = FAVORITE_ALBUM_COUNT - 1;
1714 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1715 auto imageCount = FAVORITE_ALBUM_IMAGE_COUNT - 1;
1716 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1717 cmd.SetValueBucket(value);
1718
1719 std::shared_ptr<TransactionOperations> trans =
1720 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Update_Trans_cmd_044");
1721 AlbumAccurateRefresh albumRefreshUpdate("AlbumAccurateRefreshTest_Update_Trans_cmd_044", trans);
1722 int32_t changeRows = 0;
__anon02825efe1502()1723 std::function<int(void)> transFunc = [&]()->int {
1724 auto ret = albumRefreshUpdate.Update(cmd, changeRows);
1725 return ret;
1726 };
1727 auto ret = trans->RetryTrans(transFunc);
1728 ACCURATE_DEBUG("ret: %{public}d", ret);
1729 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1730 EXPECT_TRUE(changeRows == 1);
1731 // 数据库执行结果
1732 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1733 AlbumChangeInfo updateAlbumInfo = FAVORITE_ALBUM_INFO;
1734 updateAlbumInfo.count_ = newCount;
1735 updateAlbumInfo.imageCount_ = imageCount;
1736 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
1737 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == newCount);
1738
1739 // 操作前后数据结果
1740 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, FAVORITE_ALBUM_INFO, favoriteAlbumInfo));
1741
1742 // 通知结果
1743 albumRefreshUpdate.Notify();
1744 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE, FAVORITE_ALBUM_INFO,
1745 favoriteAlbumInfo));
1746 }
1747
1748
1749 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_045, TestSize.Level2)
1750 {
1751 PrepareAlbumData();
1752 ValuesBucket value;
1753 auto newCount = TRASH_ALBUM_COUNT - 1;
1754 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1755 auto imageCount = TRASH_ALBUM_IMAGE_COUNT - 1;
1756 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1757 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
1758 vector<string> args = { to_string(PhotoAlbumSubType::TRASH) };
1759
1760 AlbumAccurateRefresh albumRefreshUpdate("AlbumAccurateRefreshTest_Update_045");
1761 int32_t changeRows = 0;
1762 auto ret = albumRefreshUpdate.Update(changeRows, PhotoAlbumColumns::TABLE, value, whereClause, args);
1763 ACCURATE_DEBUG("ret: %{public}d", ret);
1764 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1765 EXPECT_TRUE(changeRows == 1);
1766 // 数据库执行结果
1767 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
1768 AlbumChangeInfo updateAlbumInfo = TRASH_ALBUM_INFO;
1769 updateAlbumInfo.count_ = newCount;
1770 updateAlbumInfo.imageCount_ = imageCount;
1771 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, updateAlbumInfo));
1772 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::TRASH) == newCount);
1773
1774 // 操作前后数据结果
1775 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, TRASH_ALBUM_INFO, trashAlbumInfo));
1776
1777 // 通知结果
1778 albumRefreshUpdate.Notify();
1779
1780 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE_TRASH, TRASH_ALBUM_INFO,
1781 trashAlbumInfo));
1782 }
1783
1784 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Trans_046, TestSize.Level2)
1785 {
1786 PrepareAlbumData();
1787 ValuesBucket value;
1788 auto newCount = TRASH_ALBUM_COUNT - 1;
1789 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1790 auto imageCount = TRASH_ALBUM_IMAGE_COUNT - 1;
1791 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1792 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
1793 vector<string> args = { to_string(PhotoAlbumSubType::TRASH) };
1794
1795 std::shared_ptr<TransactionOperations> trans =
1796 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Update_Trans_046");
1797 AlbumAccurateRefresh albumRefreshUpdate("AlbumAccurateRefreshTest_Update_Trans_046", trans);
1798 int32_t changeRows = 0;
__anon02825efe1602()1799 std::function<int(void)> transFunc = [&]()->int {
1800 auto ret = albumRefreshUpdate.Update(changeRows, PhotoAlbumColumns::TABLE, value, whereClause, args);
1801 return ret;
1802 };
1803
1804 auto ret = trans->RetryTrans(transFunc);
1805 ACCURATE_DEBUG("ret: %{public}d", ret);
1806 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1807 EXPECT_TRUE(changeRows == 1);
1808 // 数据库执行结果
1809 AlbumChangeInfo trashAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::TRASH);
1810 AlbumChangeInfo updateAlbumInfo = TRASH_ALBUM_INFO;
1811 updateAlbumInfo.count_ = newCount;
1812 updateAlbumInfo.imageCount_ = imageCount;
1813 EXPECT_TRUE(IsEqualAlbumInfo(trashAlbumInfo, updateAlbumInfo));
1814 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::TRASH) == newCount);
1815
1816 // 操作前后数据结果
1817 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, TRASH_ALBUM_INFO, trashAlbumInfo));
1818
1819 // 通知结果
1820 albumRefreshUpdate.Notify();
1821 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE_TRASH, TRASH_ALBUM_INFO,
1822 trashAlbumInfo));
1823 }
1824
1825 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_047, TestSize.Level2)
1826 {
1827 PrepareHiddenData();
1828 ValuesBucket value;
1829 auto newCount = HIDDEN_ALBUM_COUNT - 1;
1830 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1831 auto imageCount = HIDDEN_ALBUM_IMAGE_COUNT - 1;
1832 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1833 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
1834 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::HIDDEN));
1835
1836 AlbumAccurateRefresh albumRefreshUpdate("AlbumAccurateRefreshTest_Update_047");
1837 int32_t changeRows = 0;
1838 auto ret = albumRefreshUpdate.Update(changeRows, value, predicates);
1839 ACCURATE_DEBUG("ret: %{public}d", ret);
1840 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1841 EXPECT_TRUE(changeRows == 1);
1842 // 数据库执行结果
1843 AlbumChangeInfo hiddenAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::HIDDEN);
1844 AlbumChangeInfo updateAlbumInfo = HIDDEN_ALBUM_INFO;
1845 updateAlbumInfo.count_ = newCount;
1846 updateAlbumInfo.imageCount_ = imageCount;
1847 EXPECT_TRUE(IsEqualAlbumInfo(hiddenAlbumInfo, updateAlbumInfo));
1848 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::HIDDEN) == newCount);
1849
1850 // 操作前后数据结果
1851 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, HIDDEN_ALBUM_INFO, hiddenAlbumInfo));
1852
1853 // 通知结果
1854 albumRefreshUpdate.Notify();
1855
1856 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE_HIDDEN,
1857 HIDDEN_ALBUM_INFO, hiddenAlbumInfo));
1858 }
1859
1860 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Trans_048, TestSize.Level2)
1861 {
1862 PrepareHiddenData();
1863 ValuesBucket value;
1864 auto newCount = HIDDEN_ALBUM_COUNT - 1;
1865 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
1866 auto imageCount = HIDDEN_ALBUM_IMAGE_COUNT - 1;
1867 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
1868 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
1869 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::HIDDEN));
1870
1871 std::shared_ptr<TransactionOperations> trans =
1872 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Update_Trans_048");
1873 AlbumAccurateRefresh albumRefreshUpdate("AlbumAccurateRefreshTest_Update_Trans_048", trans);
1874 int32_t changeRows = 0;
__anon02825efe1702()1875 std::function<int(void)> transFunc = [&]()->int {
1876 auto ret = albumRefreshUpdate.Update(changeRows, value, predicates);
1877 return ret;
1878 };
1879
1880 auto ret = trans->RetryTrans(transFunc);
1881 ACCURATE_DEBUG("ret: %{public}d", ret);
1882 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1883 EXPECT_TRUE(changeRows == 1);
1884
1885 // 数据库执行结果
1886 AlbumChangeInfo hiddenAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::HIDDEN);
1887 AlbumChangeInfo updateAlbumInfo = HIDDEN_ALBUM_INFO;
1888 updateAlbumInfo.count_ = newCount;
1889 updateAlbumInfo.imageCount_ = imageCount;
1890 EXPECT_TRUE(IsEqualAlbumInfo(hiddenAlbumInfo, updateAlbumInfo));
1891 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::HIDDEN) == newCount);
1892
1893 // 操作前后数据结果
1894 EXPECT_TRUE(CheckUpdateResult(albumRefreshUpdate, HIDDEN_ALBUM_INFO, hiddenAlbumInfo));
1895
1896 // 通知结果
1897 albumRefreshUpdate.Notify();
1898
1899 EXPECT_TRUE(CheckUpdateNotify(albumRefreshUpdate, Notification::ALBUM_OPERATION_UPDATE_HIDDEN, HIDDEN_ALBUM_INFO,
1900 hiddenAlbumInfo));
1901 }
1902
1903 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_cmd_049, TestSize.Level2)
1904 {
1905 PrepareAlbumData();
1906 Uri uri("");
1907 MediaLibraryCommand cmd(uri);
1908 cmd.SetTableName(PhotoAlbumColumns::TABLE);
1909 auto predicates = cmd.GetAbsRdbPredicates();
1910 predicates->SetWhereClause(PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?");
1911 predicates->SetWhereArgs({ to_string(PhotoAlbumSubType::FAVORITE) });
1912
1913 AlbumAccurateRefresh albumRefreshDel("AlbumAccurateRefreshTest_Delete_cmd_049");
1914 int32_t changeRows = 0;
1915 auto ret = albumRefreshDel.LogicalDeleteReplaceByUpdate(cmd, changeRows);
1916 ACCURATE_DEBUG("ret: %{public}d", ret);
1917 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1918 EXPECT_TRUE(changeRows == 1);
1919
1920 // 数据库执行结果
1921 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1922 auto updateAlbumInfo = FAVORITE_ALBUM_INFO;
1923 updateAlbumInfo.dirty_ = static_cast<int32_t>(DirtyType::TYPE_DELETED);
1924 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
1925
1926 // 操作前后数据结果
1927 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
1928
1929 // 通知结果
1930 albumRefreshDel.Notify();
1931 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
1932 AlbumChangeInfo()));
1933 }
1934
1935 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_Trans_cmd_050, TestSize.Level2)
1936 {
1937 ACCURATE_DEBUG("");
1938 PrepareAlbumData();
1939 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
1940 EXPECT_TRUE(GetAlbumDirtyType(PhotoAlbumSubType::FAVORITE) == static_cast<int32_t>(DirtyType::TYPE_NEW));
1941 Uri uri("");
1942 MediaLibraryCommand cmd(uri);
1943 cmd.SetTableName(PhotoAlbumColumns::TABLE);
1944 auto predicates = cmd.GetAbsRdbPredicates();
1945 predicates->SetWhereClause(PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?");
1946 predicates->SetWhereArgs({ to_string(PhotoAlbumSubType::FAVORITE) });
1947
1948 std::shared_ptr<TransactionOperations> trans =
1949 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Delete_Trans_cmd_050");
1950 AlbumAccurateRefresh albumRefreshDel("AlbumAccurateRefreshTest_Delete_Trans_cmd_050", trans);
1951 int32_t changeRows = 0;
__anon02825efe1802() 1952 function<int32_t()> transFunc = [&] () -> int32_t {
1953 auto ret = albumRefreshDel.LogicalDeleteReplaceByUpdate(cmd, changeRows);
1954 return ret;
1955 };
1956
1957 auto ret = trans->RetryTrans(transFunc);
1958 ACCURATE_DEBUG("ret: %{public}d", ret);
1959 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1960 EXPECT_TRUE(changeRows == 1);
1961 // 数据库执行结果
1962 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1963 auto updateAlbumInfo = FAVORITE_ALBUM_INFO;
1964 updateAlbumInfo.dirty_ = static_cast<int32_t>(DirtyType::TYPE_DELETED);
1965 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
1966
1967 // 操作前后数据结果
1968 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
1969
1970 // 通知结果
1971 albumRefreshDel.Notify();
1972 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
1973 AlbumChangeInfo()));
1974 }
1975
1976 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_051, TestSize.Level2)
1977 {
1978 PrepareAlbumData();
1979 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
1980 EXPECT_TRUE(GetAlbumDirtyType(PhotoAlbumSubType::FAVORITE) == static_cast<int32_t>(DirtyType::TYPE_NEW));
1981 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
1982 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::FAVORITE));
1983
1984 AlbumAccurateRefresh albumRefreshDel("AlbumAccurateRefreshTest_Delete_051");
1985 int32_t changeRows = 0;
1986 auto ret = albumRefreshDel.LogicalDeleteReplaceByUpdate(predicates, changeRows);
1987 ACCURATE_DEBUG("ret: %{public}d", ret);
1988 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
1989 EXPECT_TRUE(changeRows == 1);
1990 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
1991
1992 // 数据库执行结果
1993 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
1994 auto updateAlbumInfo = FAVORITE_ALBUM_INFO;
1995 updateAlbumInfo.dirty_ = static_cast<int32_t>(DirtyType::TYPE_DELETED);
1996 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
1997
1998 // 操作前后数据结果
1999 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
2000
2001 // 通知结果
2002 albumRefreshDel.Notify();
2003 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
2004 AlbumChangeInfo()));
2005 }
2006
2007 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_Trans_052, TestSize.Level2)
2008 {
2009 PrepareAlbumData();
2010 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
2011 EXPECT_TRUE(GetAlbumDirtyType(PhotoAlbumSubType::FAVORITE) == static_cast<int32_t>(DirtyType::TYPE_NEW));
2012 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
2013 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::FAVORITE));
2014
2015 std::shared_ptr<TransactionOperations> trans =
2016 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Delete_Trans_052");
2017 AlbumAccurateRefresh albumRefreshDel("AlbumAccurateRefreshTest_Delete_Trans_052", trans);
2018 int32_t changeRows = 0;
__anon02825efe1902() 2019 function<int32_t()> transFunc = [&] () -> int32_t {
2020 auto ret = albumRefreshDel.LogicalDeleteReplaceByUpdate(predicates, changeRows);
2021 return ret;
2022 };
2023
2024 auto ret = trans->RetryTrans(transFunc);
2025 ACCURATE_DEBUG("ret: %{public}d", ret);
2026 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2027 EXPECT_TRUE(changeRows == 1);
2028 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
2029
2030 // 数据库执行结果
2031 AlbumChangeInfo favoriteAlbumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
2032 auto updateAlbumInfo = FAVORITE_ALBUM_INFO;
2033 updateAlbumInfo.dirty_ = static_cast<int32_t>(DirtyType::TYPE_DELETED);
2034 EXPECT_TRUE(IsEqualAlbumInfo(favoriteAlbumInfo, updateAlbumInfo));
2035
2036 // 操作前后数据结果
2037 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
2038
2039 // 通知结果
2040 albumRefreshDel.Notify();
2041 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
2042 AlbumChangeInfo()));
2043 }
2044
2045 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_053, TestSize.Level2)
2046 {
2047 PrepareAlbumData();
2048 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
2049
2050 AlbumAccurateRefresh albumRefreshDel("AlbumAccurateRefreshTest_Delete_053");
2051 int32_t changeRows = 0;
2052 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
2053 vector<string> args = { to_string(PhotoAlbumSubType::FAVORITE) };
2054 auto ret = albumRefreshDel.Delete(changeRows, PhotoAlbumColumns::TABLE, whereClause, args);
2055 ACCURATE_DEBUG("ret: %{public}d", ret);
2056 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2057 EXPECT_TRUE(changeRows == 1);
2058 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2059
2060 // 操作前后数据结果
2061 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
2062
2063 // 通知结果
2064 albumRefreshDel.Notify();
2065 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
2066 AlbumChangeInfo()));
2067 }
2068
2069 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_Trans_054, TestSize.Level2)
2070 {
2071 PrepareAlbumData();
2072 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
2073
2074 std::shared_ptr<TransactionOperations> trans =
2075 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Delete_Trans_054");
2076 AlbumAccurateRefresh albumRefreshDel("AlbumAccurateRefreshTest_Delete_Trans_054", trans);
2077 int32_t changeRows = 0;
2078 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
2079 vector<string> args = { to_string(PhotoAlbumSubType::FAVORITE) };
__anon02825efe1a02() 2080 function<int32_t()> transFunc = [&] () -> int32_t {
2081 auto ret = albumRefreshDel.Delete(changeRows, PhotoAlbumColumns::TABLE, whereClause, args);
2082 return ret;
2083 };
2084
2085 auto ret = trans->RetryTrans(transFunc);
2086 ACCURATE_DEBUG("ret: %{public}d", ret);
2087 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2088 EXPECT_TRUE(changeRows == 1);
2089 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2090 // 操作前后数据结果
2091 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
2092
2093 // 通知结果
2094 albumRefreshDel.Notify();
2095 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
2096 AlbumChangeInfo()));
2097 }
2098
2099 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_055, TestSize.Level2)
2100 {
2101 PrepareAlbumData();
2102 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
2103
2104 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
2105 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::FAVORITE));
2106
2107 AlbumAccurateRefresh albumRefreshDel("AlbumAccurateRefreshTest_Delete_055");
2108 int32_t changeRows = 0;
2109 auto ret = albumRefreshDel.Delete(changeRows, predicates);
2110 ACCURATE_DEBUG("ret: %{public}d", ret);
2111 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2112 EXPECT_TRUE(changeRows == 1);
2113 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2114
2115 // 操作前后数据结果
2116 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
2117
2118 // 通知结果
2119 albumRefreshDel.Notify();
2120 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
2121 AlbumChangeInfo()));
2122 }
2123
2124 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Delete_Trans_056, TestSize.Level2)
2125 {
2126 PrepareAlbumData();
2127 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 2);
2128
2129 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
2130 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::FAVORITE));
2131
2132 std::shared_ptr<TransactionOperations> trans =
2133 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Delete_Trans_056");
2134 AlbumAccurateRefresh albumRefreshDel("AlbumAccurateRefreshTest_Delete_Trans_056", trans);
2135 int32_t changeRows = 0;
2136 string whereClause = PhotoAlbumColumns::ALBUM_SUBTYPE + " = ?";
2137 vector<string> args = { to_string(PhotoAlbumSubType::FAVORITE) };
__anon02825efe1b02() 2138 function<int32_t()> transFunc = [&] () -> int32_t {
2139 auto ret = albumRefreshDel.Delete(changeRows, predicates);
2140 return ret;
2141 };
2142
2143 auto ret = trans->RetryTrans(transFunc);
2144 ACCURATE_DEBUG("ret: %{public}d", ret);
2145 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2146 EXPECT_TRUE(changeRows == 1);
2147 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2148 // 操作前后数据结果
2149 EXPECT_TRUE(CheckDeleteResult(albumRefreshDel, RDB_OPERATION_REMOVE, FAVORITE_ALBUM_INFO, AlbumChangeInfo()));
2150 // 通知结果
2151 albumRefreshDel.Notify();
2152 EXPECT_TRUE(CheckDeleteNotify(albumRefreshDel, Notification::ALBUM_OPERATION_REMOVE, FAVORITE_ALBUM_INFO,
2153 AlbumChangeInfo()));
2154 }
2155
2156 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_057, TestSize.Level2)
2157 {
2158 AlbumAccurateRefresh albumRefreshExe("AlbumAccurateRefreshTest_Exe_057");
2159 albumRefreshExe.Init();
2160 auto ret = albumRefreshExe.ExecuteSql(insertSql, RdbOperation::RDB_OPERATION_ADD);
2161 ACCURATE_DEBUG("ret: %{public}d", ret);
2162 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2163 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2164 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
2165
2166 // 数据库执行结果
2167 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
2168 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
2169 // 操作前后数据结果
2170 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
2171
2172 // 通知结果
2173 albumRefreshExe.Notify();
2174 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
2175 }
2176
2177 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_Trans_058, TestSize.Level2)
2178 {
2179 std::shared_ptr<TransactionOperations> trans =
2180 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Exe_Trans_058");
2181 AlbumAccurateRefresh albumRefreshExe("AlbumAccurateRefreshTest_Exe_Trans_058", trans);
2182 albumRefreshExe.Init();
__anon02825efe1c02() 2183 function<int32_t()> transFunc = [&]() -> int32_t {
2184 return albumRefreshExe.ExecuteSql(insertSql, RdbOperation::RDB_OPERATION_ADD);
2185 };
2186 auto ret = trans->RetryTrans(transFunc);
2187 ACCURATE_DEBUG("ret: %{public}d", ret);
2188 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2189 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2190 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
2191
2192 // 数据库执行结果
2193 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
2194 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
2195 // 操作前后数据结果
2196 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
2197
2198 // 通知结果
2199 albumRefreshExe.Notify();
2200 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
2201 }
2202
2203 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_059, TestSize.Level2)
2204 {
2205 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
2206
2207 AlbumAccurateRefresh albumRefreshExe("AlbumAccurateRefreshTest_Exe_059");
2208 albumRefreshExe.Init();
2209 auto changedRowId =
2210 albumRefreshExe.ExecuteForLastInsertedRowId(insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
2211 ACCURATE_DEBUG("changedRowId: %{public}d", changedRowId);
2212 EXPECT_TRUE(changedRowId > 0);
2213 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2214 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
2215
2216 // 数据库执行结果
2217 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
2218 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
2219 // 操作前后数据结果
2220 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
2221
2222 // 通知结果
2223 albumRefreshExe.Notify();
2224 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
2225 }
2226
2227 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_060, TestSize.Level2)
2228 {
2229 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
2230
2231 std::shared_ptr<TransactionOperations> trans =
2232 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Exe_060");
2233 AlbumAccurateRefresh albumRefreshExe("AlbumAccurateRefreshTest_Exe_060", trans);
2234 albumRefreshExe.Init();
2235 int32_t changedRowId = 0;
__anon02825efe1d02() 2236 function<int32_t()> transFunc = [&]() -> int32_t {
2237 changedRowId =
2238 albumRefreshExe.ExecuteForLastInsertedRowId(insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
2239 if (changedRowId != E_HAS_DB_ERROR) {
2240 return ACCURATE_REFRESH_RET_OK;
2241 } else {
2242 return E_HAS_DB_ERROR;
2243 }
2244 };
2245 auto ret = trans->RetryTrans(transFunc);
2246
2247 ACCURATE_DEBUG("changedRowId: %{public}d", changedRowId);
2248 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2249 EXPECT_TRUE(changedRowId > 0);
2250 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2251 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
2252 // 数据库执行结果
2253 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
2254 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
2255 // 操作前后数据结果
2256 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
2257
2258 // 通知结果
2259 albumRefreshExe.Notify();
2260 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
2261 }
2262
2263 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_061, TestSize.Level2)
2264 {
2265 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
2266
2267 AlbumAccurateRefresh albumRefreshExe("AlbumAccurateRefreshTest_Exe_061");
2268 albumRefreshExe.Init();
2269 auto ret = albumRefreshExe.ExecuteSql(insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
2270 ACCURATE_DEBUG("ret: %{public}d", ret);
2271 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2272 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2273 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
2274 // 数据库执行结果
2275 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
2276 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
2277 // 操作前后数据结果
2278 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
2279
2280 // 通知结果
2281 albumRefreshExe.Notify();
2282 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
2283 }
2284
2285 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_062, TestSize.Level2)
2286 {
2287 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
2288
2289 std::shared_ptr<TransactionOperations> trans =
2290 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Exe_062");
2291 AlbumAccurateRefresh albumRefreshExe("AlbumAccurateRefreshTest_Exe_062", trans);
2292 albumRefreshExe.Init();
2293
__anon02825efe1e02() 2294 function<int32_t()> transFunc = [&]() -> int32_t {
2295 auto ret = albumRefreshExe.ExecuteSql(insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
2296 return ret;
2297 };
2298 auto ret = trans->RetryTrans(transFunc);
2299
2300 ACCURATE_DEBUG("ret: %{public}d", ret);
2301 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2302 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2303 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
2304 // 数据库执行结果
2305 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
2306 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
2307 // 操作前后数据结果
2308 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
2309
2310 // 通知结果
2311 albumRefreshExe.Notify();
2312 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
2313 }
2314
2315 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_063, TestSize.Level2)
2316 {
2317 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
2318
2319 AlbumAccurateRefresh albumRefreshExe("AlbumAccurateRefreshTest_Exe_063");
2320 albumRefreshExe.Init();
2321 int64_t outValue = 0;
2322 auto ret =
2323 albumRefreshExe.ExecuteForChangedRowCount(outValue, insertSqlWithArgs, args, RdbOperation::RDB_OPERATION_ADD);
2324 ACCURATE_DEBUG("ret: %{public}d", ret);
2325 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2326 EXPECT_TRUE(outValue == 1);
2327 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2328 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
2329 // 数据库执行结果
2330 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
2331 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
2332 // 操作前后数据结果
2333 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
2334
2335 // 通知结果
2336 albumRefreshExe.Notify();
2337 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
2338 }
2339
2340 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Exe_064, TestSize.Level2)
2341 {
2342 vector<ValueObject> args = {to_string(FAVORITE_ALBUM_INFO.count_)};
2343
2344 std::shared_ptr<TransactionOperations> trans =
2345 make_shared<TransactionOperations>("AlbumAccurateRefreshTest_Exe_064");
2346 AlbumAccurateRefresh albumRefreshExe("AlbumAccurateRefreshTest_Exe_064", trans);
2347 albumRefreshExe.Init();
2348 int64_t outValue = 0;
__anon02825efe1f02() 2349 function<int32_t()> transFunc = [&]() -> int32_t {
2350 auto ret =albumRefreshExe.ExecuteForChangedRowCount(outValue, insertSqlWithArgs, args,
2351 RdbOperation::RDB_OPERATION_ADD);
2352 return ret;
2353 };
2354 auto ret = trans->RetryTrans(transFunc);
2355
2356 ACCURATE_DEBUG("ret: %{public}d", ret);
2357 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2358 EXPECT_TRUE(outValue == 1);
2359 EXPECT_TRUE(GetPhotoAlbumTotalCount() == 1);
2360 EXPECT_TRUE(GetAlbumCount(PhotoAlbumSubType::FAVORITE) == FAVORITE_ALBUM_INFO.count_);
2361 // 数据库执行结果
2362 AlbumChangeInfo albumInfo = GetAlbumInfo(PhotoAlbumSubType::FAVORITE);
2363 EXPECT_TRUE(IsEqualAlbumInfo(albumInfo, FAVORITE_ALBUM_INFO));
2364 // 操作前后数据结果
2365 EXPECT_TRUE(CheckInsertResult(albumRefreshExe, albumInfo));
2366
2367 // 通知结果
2368 albumRefreshExe.Notify();
2369 EXPECT_TRUE(CheckInsertNotify(albumRefreshExe, albumInfo));
2370 }
2371
2372 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Exceed_065, TestSize.Level2)
2373 {
2374 PrepareHiddenData();
2375 ValuesBucket value;
2376 auto newCount = HIDDEN_ALBUM_COUNT - 1;
2377 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
2378 auto imageCount = HIDDEN_ALBUM_IMAGE_COUNT - 1;
2379 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
2380 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
2381 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::HIDDEN));
2382
2383 AlbumAccurateRefresh albumRefreshUpdate("AlbumAccurateRefreshTest_Update_Exceed_065");
2384 int32_t changeRows = 0;
2385 auto ret = albumRefreshUpdate.Update(changeRows, value, predicates);
2386 ACCURATE_DEBUG("ret: %{public}d", ret);
2387 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2388 EXPECT_TRUE(changeRows == 1);
2389 auto &changeDatasMap = albumRefreshUpdate.dataManager_.changeDatas_;
2390 AlbumChangeData changeData;
2391 // 总共1000条
2392 for (int i = 0; i < 999; ++i) {
2393 changeDatasMap.insert_or_assign(1000000 + i, changeData);
2394 }
2395
2396 ValuesBucket newValue;
2397 newCount = HIDDEN_ALBUM_COUNT;
2398 newValue.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
2399 imageCount = HIDDEN_ALBUM_IMAGE_COUNT;
2400 newValue.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
2401 ret = albumRefreshUpdate.Update(changeRows, value, predicates);
2402 ACCURATE_DEBUG("ret: %{public}d", ret);
2403 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2404 EXPECT_TRUE(changeRows == 1);
2405 // 总共1000条
2406 EXPECT_TRUE(albumRefreshUpdate.dataManager_.CheckIsExceed());
2407 EXPECT_TRUE(albumRefreshUpdate.dataManager_.changeDatas_.empty());
2408 EXPECT_TRUE(albumRefreshUpdate.Notify() == ACCURATE_REFRESH_RET_OK);
2409 }
2410
2411 HWTEST_F(AlbumAccurateRefreshTest, AlbumAccurateRefreshTest_Update_Exceed_066, TestSize.Level2)
2412 {
2413 PrepareHiddenData();
2414 ValuesBucket value;
2415 auto newCount = HIDDEN_ALBUM_COUNT - 1;
2416 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
2417 auto imageCount = HIDDEN_ALBUM_IMAGE_COUNT - 1;
2418 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
2419 RdbPredicates predicates(PhotoAlbumColumns::TABLE);
2420 predicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(PhotoAlbumSubType::HIDDEN));
2421
2422 AlbumAccurateRefresh albumRefreshUpdate("AlbumAccurateRefreshTest_Update_Exceed_066");
2423 int32_t changeRows = 0;
2424 auto ret = albumRefreshUpdate.Update(changeRows, value, predicates);
2425 ACCURATE_DEBUG("ret: %{public}d", ret);
2426 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2427 EXPECT_TRUE(changeRows == 1);
2428 auto &changeDatasMap = albumRefreshUpdate.dataManager_.changeDatas_;
2429 AlbumChangeData changeData;
2430 // 总共999条
2431 for (int i = 0; i < 998; ++i) {
2432 changeDatasMap.insert_or_assign(1000000 + i, changeData);
2433 }
2434
2435 ValuesBucket newValue;
2436 newCount = HIDDEN_ALBUM_COUNT;
2437 newValue.PutInt(PhotoAlbumColumns::ALBUM_COUNT, newCount);
2438 imageCount = HIDDEN_ALBUM_IMAGE_COUNT;
2439 newValue.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, imageCount);
2440 ret = albumRefreshUpdate.Update(changeRows, value, predicates);
2441 ACCURATE_DEBUG("ret: %{public}d", ret);
2442 EXPECT_TRUE(ret == ACCURATE_REFRESH_RET_OK);
2443 EXPECT_TRUE(changeRows == 1);
2444 // 总共999条
2445 EXPECT_TRUE(!albumRefreshUpdate.dataManager_.CheckIsExceed());
2446 }
2447 } // namespace Media
2448 } // namespace OHOS