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
21namespace Contacts {
22namespace Test {
23CalllogFuzzyQueryTest::CalllogFuzzyQueryTest()
24{
25}
26
27CalllogFuzzyQueryTest::~CalllogFuzzyQueryTest()
28{
29}
30
31int 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
38std::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
47int64_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
54void 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 */
71HWTEST_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 */
117HWTEST_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 */
157HWTEST_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 */
196HWTEST_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 */
235HWTEST_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