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