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 #include "contactpinyin_test.h"
17 
18 #include "construction_name.h"
19 #include "test_common.h"
20 
21 namespace Contacts {
22 namespace Test {
ContactPinyinTest()23 ContactPinyinTest::ContactPinyinTest()
24 {
25 }
26 
~ContactPinyinTest()27 ContactPinyinTest::~ContactPinyinTest()
28 {
29 }
30 
RawContactInsert(std::string displayName, OHOS::DataShare::DataShareValuesBucket &rawContactValues)31 int64_t ContactPinyinTest::RawContactInsert(std::string displayName,
32     OHOS::DataShare::DataShareValuesBucket &rawContactValues)
33 {
34     OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT);
35     rawContactValues.Put("display_name", displayName);
36     int64_t code = contactsDataAbility.Insert(uriRawContact, rawContactValues);
37     return code;
38 }
39 
ContactDataInsert(int64_t rawContactId, std::string contentType, std::string detailInfo, std::string position, OHOS::DataShare::DataShareValuesBucket &contactDataValues)40 int64_t ContactPinyinTest::ContactDataInsert(int64_t rawContactId, std::string contentType, std::string detailInfo,
41     std::string position, OHOS::DataShare::DataShareValuesBucket &contactDataValues)
42 {
43     OHOS::Uri uriContactData(ContactsUri::CONTACT_DATA);
44     contactDataValues.Put("raw_contact_id", rawContactId);
45     contactDataValues.Put("content_type", contentType);
46     contactDataValues.Put("detail_info", detailInfo);
47     contactDataValues.Put("position", position);
48     int64_t code = contactsDataAbility.Insert(uriContactData, contactDataValues);
49     return code;
50 }
51 
ContactQuery( const std::string &tableName, std::vector<std::string> columns, OHOS::DataShare::DataSharePredicates predicates)52 std::shared_ptr<OHOS::DataShare::DataShareResultSet> ContactPinyinTest::ContactQuery(
53     const std::string &tableName, std::vector<std::string> columns, OHOS::DataShare::DataSharePredicates predicates)
54 {
55     std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet;
56     if (tableName == ContactTabName::RAW_CONTACT) {
57         OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT);
58         resultSet = contactsDataAbility.Query(uriRawContact, predicates, columns);
59     } else if (tableName == ContactTabName::CONTACT_DATA) {
60         OHOS::Uri uriContactData(ContactsUri::CONTACT_DATA);
61         resultSet = contactsDataAbility.Query(uriContactData, predicates, columns);
62     } else if (tableName == ContactTabName::CONTACT) {
63         OHOS::Uri uriContact(ContactsUri::CONTACT);
64         resultSet = contactsDataAbility.Query(uriContact, predicates, columns);
65     } else if (tableName == ContactTabName::GROUPS) {
66         OHOS::Uri uriGroups(ContactsUri::GROUPS);
67         resultSet = contactsDataAbility.Query(uriGroups, predicates, columns);
68     } else if (tableName == ContactTabName::CONTACT_BLOCKLIST) {
69         OHOS::Uri uriBlocklist(ContactsUri::BLOCKLIST);
70         resultSet = contactsDataAbility.Query(uriBlocklist, predicates, columns);
71     } else if (tableName == ContactTabName::DELETED_RAW_CONTACT) {
72         OHOS::Uri uriDeletedRawContact(ContactsUri::DELETED_RAW_CONTACT);
73         resultSet = contactsDataAbility.Query(uriDeletedRawContact, predicates, columns);
74     } else if (tableName == ContactTabName::SEARCH_CONTACT) {
75         OHOS::Uri uriSearchContact(ContactsUri::SEARCH);
76         resultSet = contactsDataAbility.Query(uriSearchContact, predicates, columns);
77     } else {
78         HILOG_ERROR("ContactsDataAbility ====>no match uri action");
79     }
80     return resultSet;
81 }
82 
QueryAndExpectResult(std::string &tableName, OHOS::DataShare::DataSharePredicates predicates, OHOS::DataShare::DataShareValuesBucket &values, std::string testName)83 void ContactPinyinTest::QueryAndExpectResult(std::string &tableName, OHOS::DataShare::DataSharePredicates predicates,
84     OHOS::DataShare::DataShareValuesBucket &values, std::string testName)
85 {
86     std::vector<std::string> columns;
87     std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet = ContactQuery(tableName, columns, predicates);
88     CheckResultSet(values, resultSet, testName);
89 }
90 
ClearData()91 void ContactPinyinTest::ClearData()
92 {
93     OHOS::DataShare::DataSharePredicates predicates;
94     OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT);
95     predicates.NotEqualTo("id", "0");
96     predicates.And();
97     predicates.EqualTo("is_deleted", "0");
98     contactsDataAbility.Delete(uriRawContact, predicates);
99     int time = 1000;
100     std::chrono::milliseconds dura(time);
101     std::this_thread::sleep_for(dura);
102     OHOS::DataShare::DataSharePredicates predicates2;
103     OHOS::Uri uriRawContactComplete(ContactsUri::DELETED_RAW_CONTACT);
104     predicates2.NotEqualTo("id", "0");
105     contactsDataAbility.Delete(uriRawContactComplete, predicates2);
106 }
107 
108 /*
109  * @tc.number  name_convert_to_pinyin_test_100
110  * @tc.name    Insert a simplified Chinese name to view the converted Pinyin
111  * @tc.desc    Contacts name conversion pinyin ability
112  * @tc.level   Level1
113  * @tc.size    MediumTest
114  * @tc.type    Function
115  */
HWTEST_F(ContactPinyinTest, pinyin_conversion_Insert_test_100, testing::ext::TestSize.Level1)116 HWTEST_F(ContactPinyinTest, pinyin_conversion_Insert_test_100, testing::ext::TestSize.Level1)
117 {
118     HILOG_INFO("-------pinyin_conversion_Insert_test_100 is starting!------");
119     std::string tag("pinyin_conversion_Insert_test_100");
120     OHOS::Contacts::ConstructionName::local = "zh-CN";
121     OHOS::DataShare::DataShareValuesBucket rawContactValues;
122     int64_t rawContactId = RawContactInsert("李想", rawContactValues);
123     EXPECT_GT(rawContactId, 0);
124 
125     OHOS::DataShare::DataShareValuesBucket values;
126     int64_t contactDataId = ContactDataInsert(rawContactId, "name", "李想", "", values);
127     EXPECT_GT(contactDataId, 0);
128 
129     OHOS::DataShare::DataSharePredicates predicates;
130     predicates.EqualTo("raw_contact_id", std::to_string(rawContactId));
131     std::string searchContact = ContactTabName::SEARCH_CONTACT;
132     QueryAndExpectResult(searchContact, predicates, values, "pinyin_conversion_Insert_test_100");
133     ClearData();
134 }
135 
136 /*
137  * @tc.number  pinyin_conversion_Insert_test_200
138  * @tc.name    Insert a traditional Chinese name and view the converted Pinyin
139  * @tc.desc    Contacts name conversion pinyin ability
140  * @tc.level   Level1
141  * @tc.size    MediumTest
142  * @tc.type    Function
143  */
HWTEST_F(ContactPinyinTest, pinyin_conversion_Insert_test_200, testing::ext::TestSize.Level1)144 HWTEST_F(ContactPinyinTest, pinyin_conversion_Insert_test_200, testing::ext::TestSize.Level1)
145 {
146     HILOG_INFO("-------pinyin_conversion_Insert_test_200 is starting!------");
147     std::string tag("pinyin_conversion_Insert_test_200");
148     OHOS::Contacts::ConstructionName::local = "zh-CN";
149     OHOS::DataShare::DataShareValuesBucket rawContactValues;
150     int64_t rawContactId = RawContactInsert("張三", rawContactValues);
151     EXPECT_GT(rawContactId, 0);
152 
153     OHOS::DataShare::DataShareValuesBucket values;
154     int64_t contactDataId = ContactDataInsert(rawContactId, "name", "張三", "", values);
155     EXPECT_GT(contactDataId, 0);
156 
157     OHOS::DataShare::DataSharePredicates predicates;
158     predicates.EqualTo("raw_contact_id", std::to_string(rawContactId));
159     std::string searchContact = ContactTabName::SEARCH_CONTACT;
160     QueryAndExpectResult(searchContact, predicates, values, "pinyin_conversion_Insert_test_200");
161     ClearData();
162 }
163 
164 /*
165  * @tc.number  pinyin_conversion_Insert_test_300
166  * @tc.name    Insert an English name to view the converted Pinyin
167  * @tc.desc    Contacts name conversion pinyin ability
168  * @tc.level   Level1
169  * @tc.size    MediumTest
170  * @tc.type    Function
171  */
HWTEST_F(ContactPinyinTest, pinyin_conversion_Insert_test_300, testing::ext::TestSize.Level1)172 HWTEST_F(ContactPinyinTest, pinyin_conversion_Insert_test_300, testing::ext::TestSize.Level1)
173 {
174     HILOG_INFO("-------pinyin_conversion_Insert_test_300 is starting!------");
175     OHOS::Contacts::ConstructionName::local = "other";
176     OHOS::DataShare::DataShareValuesBucket rawContactValues;
177     int64_t rawContactId = RawContactInsert("Tom", rawContactValues);
178     EXPECT_GT(rawContactId, 0);
179 
180     OHOS::DataShare::DataShareValuesBucket values;
181     int64_t contactDataId = ContactDataInsert(rawContactId, "name", "Tom", "", values);
182     HILOG_INFO("pinyin_conversion_Insert_test_300 : contactDataId = %{public}ld", contactDataId);
183     EXPECT_GT(contactDataId, 0);
184 
185     OHOS::DataShare::DataSharePredicates predicates;
186     predicates.EqualTo("raw_contact_id", std::to_string(rawContactId));
187     std::string searchContact = ContactTabName::SEARCH_CONTACT;
188     QueryAndExpectResult(searchContact, predicates, values, "Tom||Tom||Tom");
189     ClearData();
190 }
191 
192 /*
193  * @tc.number  abnormal_pinyin_conversion_Insert_test_400
194  * @tc.name    Insert a name with special characters to view the converted Pinyin
195  * @tc.desc    Exception use case
196  * @tc.level   Level1
197  * @tc.size    MediumTest
198  * @tc.type    Function
199  */
HWTEST_F(ContactPinyinTest, abnormal_pinyin_conversion_Insert_test_400, testing::ext::TestSize.Level1)200 HWTEST_F(ContactPinyinTest, abnormal_pinyin_conversion_Insert_test_400, testing::ext::TestSize.Level1)
201 {
202     HILOG_INFO("-------abnormal_pinyin_conversion_Insert_test_400 is starting!------");
203     OHOS::Contacts::ConstructionName::local = "zh-CN";
204     OHOS::DataShare::DataShareValuesBucket rawContactValues;
205     int64_t rawContactId = RawContactInsert("李%^玉@成", rawContactValues);
206     EXPECT_GT(rawContactId, 0);
207 
208     OHOS::DataShare::DataShareValuesBucket values;
209     int64_t contactDataId = ContactDataInsert(rawContactId, "name", "李%^玉@成", "", values);
210     EXPECT_GT(contactDataId, 0);
211 
212     OHOS::DataShare::DataSharePredicates predicates;
213     predicates.EqualTo("raw_contact_id", std::to_string(rawContactId));
214     std::string searchContact = ContactTabName::SEARCH_CONTACT;
215     QueryAndExpectResult(searchContact, predicates, values, "李%^玉@成||li%^yu@cheng||l%^y@c");
216     ClearData();
217 }
218 
219 /*
220  * @tc.number  abnormal_pinyin_conversion_Insert_test_500
221  * @tc.name    Insert a name in multiple languages and view the converted Pinyin
222  * @tc.desc    Exception use case
223  * @tc.level   Level1
224  * @tc.size    MediumTest
225  * @tc.type    Function
226  */
HWTEST_F(ContactPinyinTest, abnormal_pinyin_conversion_Insert_test_500, testing::ext::TestSize.Level1)227 HWTEST_F(ContactPinyinTest, abnormal_pinyin_conversion_Insert_test_500, testing::ext::TestSize.Level1)
228 {
229     HILOG_INFO("-------abnormal_pinyin_conversion_Insert_test_500 is starting!------");
230     OHOS::Contacts::ConstructionName::local = "zh-CN";
231     OHOS::DataShare::DataShareValuesBucket rawContactValues;
232     int64_t rawContactId = RawContactInsert("李bp玉成욱", rawContactValues);
233     EXPECT_GT(rawContactId, 0);
234 
235     OHOS::DataShare::DataShareValuesBucket values;
236     int64_t contactDataId = ContactDataInsert(rawContactId, "name", "李bp玉成욱", "", values);
237     EXPECT_GT(contactDataId, 0);
238 
239     OHOS::DataShare::DataSharePredicates predicates;
240     predicates.EqualTo("raw_contact_id", std::to_string(rawContactId));
241     std::string searchContact = ContactTabName::SEARCH_CONTACT;
242     QueryAndExpectResult(searchContact, predicates, values, "李bp玉成욱||libpyucheng욱||lbpyc욱");
243     ClearData();
244 }
245 } // namespace Test
246 } // namespace Contacts