1 /* 2 * Copyright (c) 2021-2022 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 #ifndef CONTACTABILITY_TEST_H 17 #define CONTACTABILITY_TEST_H 18 19 #include "base_test.h" 20 #include "test_common.h" 21 22 namespace Contacts { 23 namespace Test { 24 namespace Lock { 25 std::mutex contactsMtx_; 26 } 27 28 class ContactAsync { 29 public: 30 OHOS::DataShare::DataShareValuesBucket values; 31 std::map<int, OHOS::DataShare::DataShareValuesBucket> result; 32 OHOS::DataShare::DataShareValuesBucket updateValues; 33 int predicatesId; 34 std::vector<std::shared_ptr<OHOS::DataShare::DataShareResultSet>> resultSet; 35 std::vector<int64_t> predicatesQueryId; 36 int predicatesDeleteId; ContactAsync(OHOS::DataShare::DataShareValuesBucket &values, std::map<int, OHOS::DataShare::DataShareValuesBucket> &result)37 ContactAsync(OHOS::DataShare::DataShareValuesBucket &values, std::map<int, 38 OHOS::DataShare::DataShareValuesBucket> &result) 39 { 40 this->values = values; 41 this->result = result; 42 this->predicatesId = -1; 43 this->predicatesDeleteId = -1; 44 } ContactAsync(OHOS::DataShare::DataShareValuesBucket &updateValues, int &predicatesId)45 ContactAsync(OHOS::DataShare::DataShareValuesBucket &updateValues, int &predicatesId) 46 { 47 this->updateValues = updateValues; 48 this->predicatesId = predicatesId; 49 this->predicatesDeleteId = -1; 50 } 51 ContactAsync(std::vector<std::shared_ptr<OHOS::DataShare::DataShareResultSet>> resultSet, std::vector<int64_t> predicatesQueryId)52 ContactAsync(std::vector<std::shared_ptr<OHOS::DataShare::DataShareResultSet>> resultSet, 53 std::vector<int64_t> predicatesQueryId) 54 { 55 this->resultSet = resultSet; 56 this->predicatesQueryId = predicatesQueryId; 57 this->predicatesId = -1; 58 this->predicatesDeleteId = -1; 59 } 60 ContactAsync(int &predicatesDeleteId)61 explicit ContactAsync(int &predicatesDeleteId) 62 { 63 this->predicatesId = -1; 64 this->predicatesDeleteId = predicatesDeleteId; 65 } Insert()66 void Insert() 67 { 68 OHOS::AbilityRuntime::ContactsDataAbility contactsDataAbility; 69 OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT); 70 int64_t code = contactsDataAbility.Insert(uriRawContact, this->values); 71 int rawContactId = code; 72 EXPECT_GT(rawContactId, 0); 73 Lock::contactsMtx_.lock(); 74 this->result.insert(std::map<int, OHOS::DataShare::DataShareValuesBucket>::value_type(rawContactId, 75 this->values)); 76 Lock::contactsMtx_.unlock(); 77 HILOG_INFO("--- VoicemailAsync Insert---%{public}s", ContactsUri::RAW_CONTACT); 78 } Update()79 void Update() 80 { 81 OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT); 82 OHOS::DataShare::DataSharePredicates predicates; 83 predicates.EqualTo("id", std::to_string(this->predicatesId)); 84 OHOS::AbilityRuntime::ContactsDataAbility contactsDataAbility; 85 int resultCode = contactsDataAbility.Update(uriRawContact, predicates, this->updateValues); 86 EXPECT_EQ(0, resultCode); 87 HILOG_INFO("--- VoicemailAsync Update---%{public}s", ContactsUri::RAW_CONTACT); 88 } Query()89 void Query() 90 { 91 OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT); 92 OHOS::DataShare::DataSharePredicates predicates; 93 int size = this->predicatesQueryId.size(); 94 for (int i = 0; i < size; i++) { 95 predicates.EqualTo("id", std::to_string(this->predicatesQueryId[i])); 96 if (i < size - 1) { 97 predicates.Or(); 98 } 99 } 100 OHOS::AbilityRuntime::ContactsDataAbility contactsDataAbility; 101 std::vector<std::string> columns; 102 std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet = 103 contactsDataAbility.Query(uriRawContact, predicates, columns); 104 Lock::contactsMtx_.lock(); 105 this->resultSet.push_back(resultSet); 106 Lock::contactsMtx_.unlock(); 107 HILOG_INFO("--- VoicemailAsync Query---%{public}s", ContactsUri::RAW_CONTACT); 108 } 109 Delete()110 void Delete() 111 { 112 OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT); 113 OHOS::DataShare::DataSharePredicates predicates; 114 predicates.EqualTo("id", std::to_string(this->predicatesDeleteId)); 115 OHOS::AbilityRuntime::ContactsDataAbility contactsDataAbility; 116 int resultCode = contactsDataAbility.Delete(uriRawContact, predicates); 117 EXPECT_EQ(0, resultCode); 118 HILOG_INFO("--- VoicemailAsync Delete---%{public}s", ContactsUri::RAW_CONTACT); 119 } 120 }; 121 122 class ContactAbilityTest : public BaseTest { 123 public: 124 static constexpr int SLEEP_TIME = 2; 125 126 ContactAbilityTest(); 127 ~ContactAbilityTest(); 128 int64_t RawContactInsert(std::string displayName, OHOS::DataShare::DataShareValuesBucket &alues); 129 int64_t RawContactExpandInsert( 130 std::vector<std::string> valueVector, int isFavorite, OHOS::DataShare::DataShareValuesBucket &rawContactValues); 131 int64_t RawContactLastContactedInsert( 132 std::string displayName, int lastestContactedTime, OHOS::DataShare::DataShareValuesBucket &rawContactValues); 133 int64_t ContactDataInsert(int64_t rawContactId, std::string contentType, std::string detailInfo, 134 std::string position, OHOS::DataShare::DataShareValuesBucket &contactDataValues); 135 int64_t GroupsInsert(std::string groupName, OHOS::DataShare::DataShareValuesBucket &groupValues); 136 int64_t ContactBlocklistInsert(std::string phoneNumber, OHOS::DataShare::DataShareValuesBucket &rawContactValues); 137 int ContactUpdate(const std::string &tableName, OHOS::DataShare::DataShareValuesBucket updateValues, 138 OHOS::DataShare::DataSharePredicates predicates); 139 int ContactDelete(const std::string &tableName, OHOS::DataShare::DataSharePredicates predicates); 140 std::shared_ptr<OHOS::DataShare::DataShareResultSet> ContactQuery(const std::string &tableName, 141 std::vector<std::string> &columns, OHOS::DataShare::DataSharePredicates predicates); 142 void QueryAndExpectResult(std::string &tableName, OHOS::DataShare::DataSharePredicates predicates, 143 OHOS::DataShare::DataShareValuesBucket &values, std::string testName); 144 OHOS::DataShare::DataShareValuesBucket GetAllColumnsValues( 145 std::vector<std::string> &columnsInt, std::vector<std::string> &columnsStr); 146 void GetAllRawContactColumns(std::vector<std::string> &columnsInt, std::vector<std::string> &columnsStr); 147 void GetAllContactDataColumns(std::vector<std::string> &columnInt, std::vector<std::string> &columnStr); 148 void GetAllGroupsColumns(std::vector<std::string> &columnInt, std::vector<std::string> &columnStr); 149 void GetAllContactBlocklistColumns(std::vector<std::string> &columnInt, std::vector<std::string> &columnStr); 150 void GetDetailsContactDataColumns(std::vector<std::string> &columns); 151 void MergeColumns( 152 std::vector<std::string> &columns, std::vector<std::string> &columnsInt, std::vector<std::string> &columnsStr); 153 int64_t RawContactInsertValues(OHOS::DataShare::DataShareValuesBucket &values); 154 int64_t ContactDataInsertValues(OHOS::DataShare::DataShareValuesBucket &values); 155 int64_t GroupsInsertValues(OHOS::DataShare::DataShareValuesBucket &values); 156 int64_t ContactBlocklistInsertValues(OHOS::DataShare::DataShareValuesBucket &values); 157 std::vector<OHOS::DataShare::DataShareValuesBucket> GetBatchList(int64_t rawContactId); 158 void ClearContacts(); 159 }; 160 } // namespace Test 161 } // namespace Contacts 162 #endif // CONTACTABILITY_TEST_H 163