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 "calllogfuzzyquery_test.h"
17 
18 #include "random_number_utils.h"
19 #include "test_common.h"
20 
21 namespace Contacts {
22 namespace Test {
CalllogFuzzyQueryTest()23 CalllogFuzzyQueryTest::CalllogFuzzyQueryTest()
24 {
25 }
26 
~CalllogFuzzyQueryTest()27 CalllogFuzzyQueryTest::~CalllogFuzzyQueryTest()
28 {
29 }
30 
CalllogDelete(OHOS::DataShare::DataSharePredicates predicates)31 int CalllogFuzzyQueryTest::CalllogDelete(OHOS::DataShare::DataSharePredicates predicates)
32 {
33     OHOS::Uri uriCalllog(CallLogUri::CALL_LOG);
34     int code = calllogAbility.Delete(uriCalllog, predicates);
35     return code;
36 }
37 
CalllogQuery( std::vector<std::string> columns, OHOS::DataShare::DataSharePredicates predicates)38 std::shared_ptr<OHOS::DataShare::DataShareResultSet> CalllogFuzzyQueryTest::CalllogQuery(
39     std::vector<std::string> columns, OHOS::DataShare::DataSharePredicates predicates)
40 {
41     OHOS::Uri uriCalllog(CallLogUri::CALL_LOG);
42     std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet =
43         calllogAbility.Query(uriCalllog, predicates, columns);
44     return resultSet;
45 }
46 
CalllogInsertValues(OHOS::DataShare::DataShareValuesBucket &values)47 int64_t CalllogFuzzyQueryTest::CalllogInsertValues(OHOS::DataShare::DataShareValuesBucket &values)
48 {
49     OHOS::Uri uriCalllog(CallLogUri::CALL_LOG);
50     int64_t code = calllogAbility.Insert(uriCalllog, values);
51     return code;
52 }
53 
ClearCallLog()54 void CalllogFuzzyQueryTest::ClearCallLog()
55 {
56     // clear all callLog data
57     OHOS::DataShare::DataSharePredicates predicates;
58     predicates.GreaterThan("id", "0");
59     int deleteCode = CalllogDelete(predicates);
60     EXPECT_EQ(deleteCode, 0);
61 }
62 
63 /**
64  * @tc.number  calllog_Query_test_100
65  * @tc.name    Fuzzy query according to the beginning of mobile phone number
66  * @tc.desc    Query call records of mobile phone numbers that start with 123
67  * @tc.level   Level1
68  * @tc.size    MediumTest
69  * @tc.type    Function
70  */
HWTEST_F(CalllogFuzzyQueryTest, calllog_Query_test_100, testing::ext::TestSize.Level1)71 HWTEST_F(CalllogFuzzyQueryTest, calllog_Query_test_100, testing::ext::TestSize.Level1)
72 {
73     HILOG_INFO("----calllog_Query_test_100 is starting!----");
74     OHOS::DataShare::DataShareValuesBucket valuesBucket;
75     OHOS::Contacts::RandomNumberUtils randomNumberUtils;
76     std::string phoneNumber = randomNumberUtils.Generating(9);
77     valuesBucket.Put("phone_number", phoneNumber);
78     int rawId = CalllogInsertValues(valuesBucket);
79     EXPECT_GT(rawId, 0);
80 
81     valuesBucket.Put("id", rawId);
82     OHOS::DataShare::DataShareValuesBucket valuesBucketTwo;
83     std::string phoneNumber_test = randomNumberUtils.Generating(10);
84     valuesBucketTwo.Put("phone_number", phoneNumber_test);
85     rawId = CalllogInsertValues(valuesBucketTwo);
86     valuesBucketTwo.Put("id", rawId);
87     EXPECT_GT(rawId, 0);
88 
89     std::vector<std::string> columns;
90     columns.push_back("id");
91     columns.push_back("phone_number");
92     OHOS::DataShare::DataSharePredicates predicates;
93     predicates.Like("phone_number", "123%");
94     predicates.OrderByAsc("id");
95     std::vector<OHOS::DataShare::DataShareValuesBucket> valuesBucketVector;
96     valuesBucketVector.push_back(valuesBucket);
97     valuesBucketVector.push_back(valuesBucketTwo);
98     std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet = CalllogQuery(columns, predicates);
99     // resultSet count 1
100     int rowCount = 0;
101     resultSet->GetRowCount(rowCount);
102     int currentCount = 1;
103     EXPECT_EQ(currentCount, rowCount);
104     CheckResultSetList(valuesBucketVector, resultSet, "calllog_Query_test_100");
105     resultSet->Close();
106     ClearCallLog();
107 }
108 
109 /**
110  * @tc.number  calllog_Query_test_200
111  * @tc.name    Fuzzy query according to the end of mobile phone number
112  * @tc.desc    Query call records with mobile phone number ending in 0
113  * @tc.level   Level1
114  * @tc.size    MediumTest
115  * @tc.type    Function
116  */
HWTEST_F(CalllogFuzzyQueryTest, calllog_Query_test_200, testing::ext::TestSize.Level1)117 HWTEST_F(CalllogFuzzyQueryTest, calllog_Query_test_200, testing::ext::TestSize.Level1)
118 {
119     HILOG_INFO("----calllog_Query_test_200 is starting!----");
120     OHOS::DataShare::DataShareValuesBucket valuesBucket;
121     OHOS::Contacts::RandomNumberUtils randomNumberUtils;
122     std::string phoneNumber = randomNumberUtils.Generating(11);
123     valuesBucket.Put("phone_number", phoneNumber);
124     int rawId = CalllogInsertValues(valuesBucket);
125     EXPECT_GT(rawId, 0);
126     valuesBucket.Put("id", rawId);
127     OHOS::DataShare::DataShareValuesBucket valuesBucketTwo;
128     valuesBucketTwo.Put("phone_number", phoneNumber);
129     rawId = CalllogInsertValues(valuesBucketTwo);
130     valuesBucketTwo.Put("id", rawId);
131     EXPECT_GT(rawId, 0);
132     std::vector<std::string> columns;
133     columns.push_back("id");
134     columns.push_back("phone_number");
135     OHOS::DataShare::DataSharePredicates predicates;
136     predicates.Like("phone_number", "%750");
137     predicates.OrderByAsc("id");
138     std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet = CalllogQuery(columns, predicates);
139     // resultSet count 1
140     int rowCount = 0;
141     resultSet->GetRowCount(rowCount);
142     int currentCount = 1;
143     EXPECT_EQ(currentCount, rowCount);
144     CheckResultSet(valuesBucket, resultSet, "calllog_Query_test_200");
145     resultSet->Close();
146     ClearCallLog();
147 }
148 
149 /**
150  * @tc.number  calllog_Query_test_300
151  * @tc.name    Fuzzy query according to the middle digits of the mobile phone number
152  * @tc.desc    Query the call history of the mobile phone number starting with 123 and ending with 8910
153  * @tc.level   Level1
154  * @tc.size    MediumTest
155  * @tc.type    Function
156  */
HWTEST_F(CalllogFuzzyQueryTest, calllog_Query_test_300, testing::ext::TestSize.Level1)157 HWTEST_F(CalllogFuzzyQueryTest, calllog_Query_test_300, testing::ext::TestSize.Level1)
158 {
159     HILOG_INFO("----calllog_Query_test_300 is starting!----");
160     OHOS::DataShare::DataShareValuesBucket valuesBucket;
161     OHOS::Contacts::RandomNumberUtils randomNumberUtils;
162     std::string phoneNumber = randomNumberUtils.Generating(11);
163     valuesBucket.Put("phone_number", phoneNumber);
164     int rawId = CalllogInsertValues(valuesBucket);
165     EXPECT_GT(rawId, 0);
166     valuesBucket.Put("id", rawId);
167     OHOS::DataShare::DataShareValuesBucket valuesBucketTwo;
168     valuesBucketTwo.Put("phone_number", phoneNumber);
169     rawId = CalllogInsertValues(valuesBucketTwo);
170     valuesBucketTwo.Put("id", rawId);
171     EXPECT_GT(rawId, 0);
172     std::vector<std::string> columns;
173     columns.push_back("id");
174     columns.push_back("phone_number");
175     OHOS::DataShare::DataSharePredicates predicates;
176     std::string phoneNumber_test = randomNumberUtils.Generating(17);
177     predicates.Like("phone_number", phoneNumber_test);
178     predicates.OrderByAsc("id");
179     std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet = CalllogQuery(columns, predicates);
180     // resultSet count 0
181     int rowCount = 0;
182     resultSet->GetRowCount(rowCount);
183     EXPECT_EQ(0, rowCount);
184     resultSet->Close();
185     ClearCallLog();
186 }
187 
188 /**
189  * @tc.number  calllog_Query_test_400
190  * @tc.name    Fuzzy query according to the fields contained in the mobile phone number
191  * @tc.desc    Query the call history of the mobile phone number starting with 123
192  * @tc.level   Level1
193  * @tc.size    MediumTest
194  * @tc.type    Function
195  */
HWTEST_F(CalllogFuzzyQueryTest, calllog_Query_test_400, testing::ext::TestSize.Level1)196 HWTEST_F(CalllogFuzzyQueryTest, calllog_Query_test_400, testing::ext::TestSize.Level1)
197 {
198     HILOG_INFO("----calllog_Query_test_400 is starting!----");
199     OHOS::DataShare::DataShareValuesBucket valuesBucket;
200     OHOS::Contacts::RandomNumberUtils randomNumberUtils;
201     std::string phoneNumber = randomNumberUtils.Generating(11);
202     valuesBucket.Put("phone_number", phoneNumber);
203     int rawId = CalllogInsertValues(valuesBucket);
204     EXPECT_GT(rawId, 0);
205     valuesBucket.Put("id", rawId);
206     OHOS::DataShare::DataShareValuesBucket valuesBucketTwo;
207     valuesBucketTwo.Put("phone_number", phoneNumber);
208     rawId = CalllogInsertValues(valuesBucketTwo);
209     valuesBucketTwo.Put("id", rawId);
210     EXPECT_GT(rawId, 0);
211     std::vector<std::string> columns;
212     columns.push_back("id");
213     columns.push_back("phone_number");
214     OHOS::DataShare::DataSharePredicates predicates;
215     predicates.Like("phone_number", "%37845%");
216     predicates.OrderByAsc("id");
217     std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet = CalllogQuery(columns, predicates);
218     // resultSet count 0
219     int rowCount = 0;
220     resultSet->GetRowCount(rowCount);
221     EXPECT_EQ(1, rowCount);
222     CheckResultSet(valuesBucketTwo, resultSet, "calllog_Query_test_400");
223     resultSet->Close();
224     ClearCallLog();
225 }
226 
227 /**
228  * @tc.number  abnormal_calllog_Query_test_500
229  * @tc.name    An error field is passed in during fuzzy query based on mobile phone number
230  * @tc.desc    Query the call history of the mobile phone number starting with 123 and ending with 8910
231  * @tc.level   Level1
232  * @tc.size    MediumTest
233  * @tc.type    Function
234  */
HWTEST_F(CalllogFuzzyQueryTest, abnormal_calllog_Query_test_500, testing::ext::TestSize.Level1)235 HWTEST_F(CalllogFuzzyQueryTest, abnormal_calllog_Query_test_500, testing::ext::TestSize.Level1)
236 {
237     HILOG_INFO("----abnormal_calllog_Query_test_500 is starting!----");
238     OHOS::DataShare::DataShareValuesBucket valuesBucket;
239     OHOS::Contacts::RandomNumberUtils randomNumberUtils;
240     std::string phoneNumber = randomNumberUtils.Generating(11);
241     valuesBucket.Put("phone_number", phoneNumber);
242     int rawId = CalllogInsertValues(valuesBucket);
243     EXPECT_GT(rawId, 0);
244 
245     valuesBucket.Put("id", rawId);
246     OHOS::DataShare::DataShareValuesBucket valuesBucketTwo;
247     valuesBucketTwo.Put("phone_number", phoneNumber);
248     rawId = CalllogInsertValues(valuesBucketTwo);
249     valuesBucketTwo.Put("id", rawId);
250     EXPECT_GT(rawId, 0);
251 
252     std::vector<std::string> columns;
253     columns.push_back("id");
254     columns.push_back("phone_number");
255     std::string phoneNumber_test = randomNumberUtils.Generating(17);
256     OHOS::DataShare::DataSharePredicates predicates;
257     predicates.Like("phone_numbers", phoneNumber_test);
258     predicates.OrderByAsc("id");
259     std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet = CalllogQuery(columns, predicates);
260     int rowCount = 0;
261     resultSet->GetRowCount(rowCount);
262     EXPECT_EQ(-1, rowCount);
263     resultSet->Close();
264     ClearCallLog();
265 }
266 } // namespace Test
267 } // namespace Contacts