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