• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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