1/*
2 * Copyright (c) 2021-2023 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
16import common from './common.js';
17import dataShare from '@ohos.data.dataShare';
18import { afterAll, describe, expect, it } from 'deccjsunit/index';
19
20const URI_CALLLOG = 'datashare:///com.ohos.calllogability';
21const calllogUri = 'datashare:///com.ohos.calllogability/calls/calllog';
22const INDEX_TWO = 2;
23const INDEX_THREE = 3;
24const INDEX_FOUR = 4;
25const PHONE_NUM_LEN_FIVE = 5;
26const PHONE_NUM_LEN_SIX = 6;
27const PHONE_NUM_LEN_SEVEN = 7;
28const PHONE_NUM_LEN_EIGHT = 8;
29const PHONE_NUM_LEN_NINE = 9;
30const PHONE_NUM_LEN_TEN = 10;
31const PHONE_NUM_LEN_TWELVE = 12;
32const PHONE_NUM_LEN_THIRTEEN = 13;
33const PHONE_NUM_LEN_FOURTEEN = 14;
34const PHONE_NUM_LEN_FIFTEEN = 15;
35const PHONE_NUM_LEN_SEVENTEEN = 17;
36
37describe('CalllogTest', function () {
38  console.log('----------CalllogTest is starting!----------');
39
40  async function calllogQueryForALL(map, tag) {
41    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
42    console.info(tag + ': calllogQueryByInsert start ! dataShareHelper = ' + dataShareHelper);
43    let resultColumns = common.getCallLogResultColumns();
44    let condition = new dataShare.DataSharePredicates();
45    condition.equalTo('id', map.get('id'));
46    try {
47      let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
48      if (resultSet.rowCount > 0 && resultSet.goToFirstRow()) {
49        do {
50          for (let [key, value] of map) {
51            let dbresult = resultSet.getString(resultSet.getColumnIndex(key));
52            console.info(
53              tag + ' : logMessage calllogQueryByInsert key = ' + key + ' dbResult :' + dbresult + ' value : ' + value
54            );
55            console.info(tag + ' : logMessage calllogQueryByInsert value ' + (value === dbresult));
56            expect(value === dbresult).assertEqual(true);
57          }
58        } while (resultSet.goToNextRow());
59      }
60      console.info(tag + ' :logMessage calllogQueryByInsert: end');
61      resultSet.close();
62    } catch (error) {
63      console.info(tag + ' :logMessage calllogQueryByInsert: error = ' + error);
64    }
65  }
66
67  async function calllogQueryForDelete(map, tag) {
68    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
69    console.info(tag + ': calllogQueryForDelete start ! dataShareHelper = ' + dataShareHelper);
70    let resultColumns = common.getCallLogResultColumns();
71    let condition = new dataShare.DataSharePredicates();
72    condition.equalTo('id', map.get('id'));
73    try {
74      let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
75      expect(resultSet.goToFirstRow() === false).assertTrue();
76      console.info(tag + ' :logMessage calllogQueryForDelete: goToFirstRow ' + resultSet.goToFirstRow());
77      resultSet.close();
78    } catch (error) {
79      console.info(tag + ' :logMessage calllogQueryForDelete: error = ' + error);
80    }
81  }
82
83  async function calllogQueryForBatchInsert(array, tag) {
84    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
85    console.info(tag + ': calllogQueryForBatchInsert start ! dataShareHelper = ' + dataShareHelper);
86    let resultColumns = common.getCallLogResultColumns();
87    let condition = new dataShare.DataSharePredicates();
88    condition.equalTo('phone_number', array[0].get('phone_number'));
89    try {
90      let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
91      let size = array.size();
92      console.info(tag + ' : logMessage calllogQueryForBatchInsert: size' + size);
93      expect(resultSet.rowCount === size).assertEqual(true);
94      let i = 0;
95      if (resultSet.rowCount > 0 && resultSet.goToFirstRow()) {
96        do {
97          for (let [key, value] of array[i]) {
98            let dbresult = resultSet.getString(resultSet.getColumnIndex(key));
99            console.info(
100              tag + ' : logMessage calllogQueryForBatchInsert dbresult :' + dbresult + ' value : ' + value
101            );
102            console.info(tag + ' : logMessage calllogQueryForBatchInsert value ' + (value === dbresult));
103            expect(value === dbresult).assertTrue();
104          }
105          i++;
106        } while (resultSet.goToNextRow());
107      }
108      resultSet.close();
109    } catch (error) {
110      console.info(tag + ' :logMessage calllogQueryByInsert: error = ' + error);
111    }
112  }
113
114  async function calllogDelete(tag) {
115    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
116    let condition = new dataShare.DataSharePredicates();
117    condition.greaterThan('id', '0');
118    let deleteCode = await dataShareHelper.delete(calllogUri, condition);
119    console.info(tag + ': calllogDelete deleteCode = ' + deleteCode);
120    expect(deleteCode === 0).assertTrue();
121  }
122
123  /**
124   * @tc.number  calllog_insert_test_100
125   * @tc.name    Insert call log
126   * @tc.desc    Function test
127   */
128  it('calllog_insert_test_100', 0, async function (done) {
129    console.info('--------logMessage calllog_insert_test_100 is starting!------------');
130    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
131    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
132    try {
133      let calllogId = await dataShareHelper.insert(calllogUri, common.getCallLogInsert());
134      console.info('logMessage calllog_insert_test_100: calllogId = ' + calllogId);
135      expect(calllogId > 0).assertTrue();
136      let map = common.getCallLogInsertMap();
137      map.set('id', calllogId.toString());
138      await calllogQueryForALL(map, 'calllog_insert_test_100');
139      await calllogDelete('calllog_insert_test_100');
140      done();
141    } catch (error) {
142      console.info('logMessage calllog_insert_test_100: calllog insert error = ' + error);
143      done();
144    }
145  });
146
147  /**
148   * @tc.number  calllog_update_test_400
149   * @tc.name    Single call log update
150   * @tc.desc    Function test
151   */
152  it('calllog_update_test_400', 0, async function (done) {
153    console.info('--------logMessage calllog_update_test_400 is starting!------------');
154    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
155    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
156
157    try {
158      let calllogId = await dataShareHelper.insert(calllogUri, common.getCallLogInsert());
159      console.info('logMessage calllog_update_test_400: calllogId = ' + calllogId);
160      expect(calllogId > 0).assertTrue();
161      await updateOneCalllog();
162      done();
163    } catch (error) {
164      console.info('logMessage calllog_update_test_400: calllog insert error = ' + error);
165      done();
166    }
167
168    async function updateOneCalllog() {
169      try {
170        let condition = new dataShare.DataSharePredicates();
171        condition.equalTo('id', calllogId.toString());
172        let updateCode = await dataShareHelper.update(calllogUri, common.getCallLogUpdate(), condition);
173        console.info('logMessage calllog_update_test_400: updateCode = ' + updateCode);
174        expect(updateCode === 0).assertTrue();
175        let map = common.getCallLogUpdateMap();
176        map.set('id', calllogId.toString());
177        await calllogQueryForALL(map, 'calllog_update_test_400');
178        await calllogDelete('calllog_update_test_400');
179      } catch (error) {
180        console.info('logMessage calllog_update_test_400: update error = ' + error);
181        done();
182      }
183    }
184  });
185
186  /**
187   * @tc.number  calllog_update_test_500
188   * @tc.name    Update all call logs
189   * @tc.desc    Function test
190   */
191  it('calllog_update_test_500', 0, async function (done) {
192    console.info('--------logMessage calllog_update_test_500 is starting!------------');
193    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
194    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
195    let phoneNumber = randomNum(PHONE_NUM_LEN_TWELVE);
196    let insertValues = { 'phone_number': phoneNumber, 'ring_duration': '500' };
197    try {
198      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
199      console.info('logMessage calllog_update_test_500: calllogId = ' + calllogId);
200      expect(calllogId > 0).assertTrue();
201      await updateAllCalllog();
202      done();
203    } catch (error) {
204      console.info('logMessage calllog_update_test_500: calllog insert error = ' + error);
205      done();
206    }
207    async function updateAllCalllog() {
208      let updateValues = { 'answer_state': '1' };
209      let condition = new dataShare.DataSharePredicates();
210      condition.greaterThan('id', '0');
211      try {
212        let updateCode = await dataShareHelper.update(calllogUri, updateValues, condition);
213        console.info('logMessage calllog_update_test_500: updateCode = ' + updateCode);
214        expect(updateCode === 0).assertTrue();
215        let map = new Map([
216          ['phone_number', phoneNumber],
217          ['ring_duration', '500']
218        ]);
219        map.set('id', calllogId.toString());
220        map.set('answer_state', '1');
221        await calllogQueryForALL(map, 'calllog_update_test_500');
222        await calllogDelete('calllog_update_test_500');
223      } catch (error) {
224        console.info('logMessage calllog_update_test_500: update error = ' + error);
225        done();
226      }
227    }
228  });
229
230  /**
231   * @tc.number  calllog_delete_test_1300
232   * @tc.name    Delete call log
233   * @tc.desc    Function test
234   */
235  it('calllog_delete_test_1300', 0, async function (done) {
236    console.info('--------logMessage calllog_delete_test_1300 is starting!------------');
237    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
238    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
239    let phoneNumber = randomNum(PHONE_NUM_LEN_FIVE);
240    let insertValues = { 'phone_number': phoneNumber, 'ring_duration': '200' };
241    try {
242      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
243      console.info('logMessage calllog_delete_test_1300: calllogId = ' + calllogId);
244      expect(calllogId > 0).assertTrue();
245      await deleteOneCalllog();
246      done();
247    } catch (error) {
248      console.info('logMessage calllog_delete_test_1300: calllog insert error = ' + error);
249      done();
250    }
251
252    async function deleteOneCalllog() {
253      try {
254        let condition = new dataShare.DataSharePredicates();
255        condition.equalTo('id', calllogId.toString());
256        let deleteCode = await dataShareHelper.delete(calllogUri, condition);
257        console.info('logMessage calllog_delete_test_1300: deleteCode = ' + deleteCode);
258        expect(deleteCode === 0).assertTrue();
259        let map = new Map();
260        map.set('id', calllogId.toString());
261        await calllogQueryForDelete(map, 'calllog_delete_test_1300');
262      } catch (error) {
263        console.info('logMessage calllog_delete_test_1300: delete error = ' + error);
264        done();
265      }
266    }
267  });
268
269  /**
270   * @tc.number  calllog_batchInset_test_1600
271   * @tc.name    Insert call logs in batches
272   * @tc.desc    Function test
273   */
274  it('calllog_batchInset_test_1600', 0, async function (done) {
275    console.info('--------logMessage calllog_batchInset_test_1600 is starting!------------');
276    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
277    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
278    let phoneNumber = randomNum(PHONE_NUM_LEN_THIRTEEN);
279    let addBulkValue1 = { 'phone_number': phoneNumber, 'ring_duration': '333' };
280    let addBulkValue2 = { 'phone_number': phoneNumber, 'ring_duration': '600' };
281    let addBulkValue3 = { 'phone_number': phoneNumber, 'ring_duration': '600' };
282    let addBulkValue4 = { 'phone_number': phoneNumber, 'ring_duration': '600' };
283    let addBulkValue5 = { 'phone_number': phoneNumber, 'ring_duration': '600' };
284    let listAddBluk = [];
285    listAddBluk[0] = addBulkValue1;
286    listAddBluk[1] = addBulkValue2;
287    listAddBluk[INDEX_TWO] = addBulkValue3;
288    listAddBluk[INDEX_THREE] = addBulkValue4;
289    listAddBluk[INDEX_FOUR] = addBulkValue5;
290    try {
291      let batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk);
292      console.info('logMessage calllog_batchInset_test_1600: batchInsertCode = ' + batchInsertCode);
293      expect(batchInsertCode === 0).assertTrue();
294      await calllogQueryForBatchInsert(common.getCallLogBatchInsert(), 'calllog_batchInset_test_1600');
295      await calllogDelete('calllog_batchInset_test_1600');
296      done();
297    } catch (error) {
298      console.info('logMessage calllog_batchInset_test_1600: error = ' + error);
299      done();
300    }
301  });
302
303  /**
304   * @tc.number  calllog_query_test_1200
305   * @tc.name    Query all call logs
306   * @tc.desc    Function test
307   */
308  it('calllog_query_test_1200', 0, async function (done) {
309    console.info('------------calllog_query_test_1200  is starting!-----------');
310    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
311    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
312    let phoneNumber = randomNum(PHONE_NUM_LEN_FIVE);
313    let insertValues = { 'phone_number': phoneNumber, 'ring_duration': '200' };
314    try {
315      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
316      console.info('logMessage calllog_query_test_1200: calllogId = ' + calllogId);
317      expect(calllogId > 0).assertTrue();
318      let map = new Map([
319        ['phone_number', phoneNumber],
320        ['ring_duration', '200']
321      ]);
322      map.set('id', calllogId.toString());
323      await calllogQueryForALL(map, 'calllog_query_test_1200');
324      await calllogDelete('calllog_query_test_1200');
325      done();
326    } catch (error) {
327      console.info('logMessage calllog_query_test_1200: calllog insert error = ' + error);
328    }
329  });
330
331  /**
332   * @tc.number  calllog_query_test_1100
333   * @tc.name    Query call logs of combined conditions
334   * @tc.desc    Function test
335   */
336  it('calllog_query_test_1100', 0, async function (done) {
337    console.info('------------calllog_query_test_1100 is starting!-----------');
338    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
339    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
340    let phoneNumber = randomNum(PHONE_NUM_LEN_SEVEN);
341    let insertValues = { 'phone_number': phoneNumber, 'ring_duration': '100' };
342    try {
343      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
344      console.info('logMessage calllog_query_test_1100: calllogId = ' + calllogId);
345      expect(calllogId > 0).assertTrue();
346      await queryCalllog();
347      await calllogDelete('calllog_query_test_1100');
348      done();
349    } catch (error) {
350      console.info('logMessage calllog_query_test_1100: calllog insert error = ' + error);
351      done();
352    }
353
354    async function queryCalllog() {
355      let resultColumns = ['id', 'phone_number'];
356      let condition = new dataShare.DataSharePredicates();
357      condition.greaterThan('id', '0');
358      condition.and();
359      condition.lessThan('ring_duration', '200').orderByAsc('id');
360      try {
361        let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
362        if (resultSet.goToFirstRow()) {
363          do {
364            console.info('logMessage calllog_query_test_1100: columnNames:' + resultSet.columnNames);
365            console.info('logMessage calllog_query_test_1100: columnCount:' + resultSet.columnCount);
366            console.info('logMessage calllog_query_test_1100: id = ' + resultSet.getString(0));
367            expect(resultSet.getString(0) === calllogId.toString()).assertTrue();
368            console.info('logMessage calllog_query_test_1100: phone_number = ' + resultSet.getString(1));
369            expect(resultSet.getString(1) === phoneNumber).assertTrue();
370          } while (resultSet.goToNextRow());
371        }
372        resultSet.close();
373      } catch (error) {
374        console.info('logMessage calllog_query_test_1100: query error:' + error);
375        done();
376      }
377    }
378  });
379
380  /**
381   * @tc.number  calllog_query_test_800
382   * @tc.name    Query a single call log
383   * @tc.desc    Function test
384   */
385  it('calllog_query_test_800', 0, async function (done) {
386    console.info('------------calllog_query_test_800 is starting!-----------');
387    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
388    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
389    let phoneNumber = randomNum(PHONE_NUM_LEN_TEN);
390    let insertValues = { 'phone_number': phoneNumber, 'ring_duration': '100' };
391    try {
392      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
393      console.info('logMessage calllog_query_test_800: calllogId = ' + calllogId);
394      expect(calllogId > 0).assertTrue();
395      await queryOneCalllog();
396      await calllogDelete('calllog_query_test_800');
397      done();
398    } catch (error) {
399      console.info('logMessage calllog_query_test_800: calllog insert error = ' + error);
400      done();
401    }
402
403    async function queryOneCalllog() {
404      let resultColumns = ['id', 'phone_number'];
405      let condition = new dataShare.DataSharePredicates();
406      condition.equalTo('id', calllogId.toString());
407      try {
408        let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
409        if (resultSet.goToFirstRow()) {
410          do {
411            console.info('logMessage calllog_query_test_800: columnNames:' + resultSet.columnNames);
412            console.info('logMessage calllog_query_test_800: columnCount:' + resultSet.columnCount);
413            console.info('logMessage calllog_query_test_800: id = ' + resultSet.getString(0));
414            expect(resultSet.getString(0) === calllogId.toString()).assertTrue();
415            console.info('logMessage calllog_query_test_800: phone_number = ' + resultSet.getString(1));
416            expect(resultSet.getString(1) === phoneNumber).assertTrue();
417          } while (resultSet.goToNextRow());
418        }
419        resultSet.close();
420      } catch (error) {
421        console.info('logMessage calllog_query_test_800: query error = ' + error);
422        done();
423      }
424    }
425  });
426
427  /**
428   * @tc.number  calllog_fuzzyquery_test_100
429   * @tc.name    Fuzzy query ability based on mobile phone number (beginning of a certain field)
430   * @tc.desc    Function test
431   */
432  it('calllog_fuzzyquery_test_100', 0, async function (done) {
433    console.info('------------calllog_fuzzyquery_test_100 is starting!-----------');
434    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
435    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
436    let phoneNumber = randomNum(PHONE_NUM_LEN_EIGHT);
437    let phoneNumberTest = phoneNumber.substring(0, INDEX_THREE);
438    let insertValues = { 'phone_number': phoneNumber };
439    try {
440      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
441      console.info('logMessage calllog_fuzzyquery_test_100: calllogId = ' + calllogId);
442      expect(calllogId > 0).assertTrue();
443      await queryByStartsWithPhoneNumber();
444      await calllogDelete('calllog_fuzzyquery_test_100');
445      done();
446    } catch (error) {
447      console.info('logMessage calllog_fuzzyquery_test_100: calllog insert error = ' + error);
448      done();
449    }
450
451    async function queryByStartsWithPhoneNumber() {
452      let resultColumns = ['id', 'phone_number'];
453      let condition = new dataShare.DataSharePredicates();
454      condition.like('phone_number', phoneNumberTest + '%');
455      try {
456        let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
457        if (resultSet.goToFirstRow()) {
458          do {
459            console.info('logMessage calllog_fuzzyquery_test_100: columnNames:' + resultSet.columnNames);
460            console.info('logMessage calllog_fuzzyquery_test_100: columnCount:' + resultSet.columnCount);
461            console.info('logMessage calllog_fuzzyquery_test_100: id = ' + resultSet.getString(0));
462            expect(resultSet.getString(0) === calllogId.toString()).assertTrue();
463            console.info('logMessage calllog_fuzzyquery_test_100: phone_number = ' + resultSet.getString(1));
464            expect(resultSet.getString(1) === phoneNumber).assertTrue();
465          } while (resultSet.goToNextRow());
466        }
467        resultSet.close();
468      } catch (error) {
469        console.info('logMessage calllog_fuzzyquery_test_100: query error = ' + error);
470        done();
471      }
472    }
473  });
474
475  /**
476   * @tc.number  calllog_fuzzyquery_test_200
477   * @tc.name    Fuzzy query ability based on mobile phone number (at the end of a certain field)
478   * @tc.desc    Function test
479   */
480  it('calllog_fuzzyquery_test_200', 0, async function (done) {
481    console.info('------------calllog_fuzzyquery_test_200 is starting!-----------');
482    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
483    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
484    let phoneNumberIndexSix = 6;
485    let phoneNumberIndexNine = 9;
486    let phoneNumber = randomNum(PHONE_NUM_LEN_EIGHT);
487    let phoneNumberTest = phoneNumber.substring(phoneNumberIndexSix, phoneNumberIndexNine);
488    let insertValues = { 'phone_number': phoneNumber };
489    try {
490      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
491      console.info('logMessage calllog_fuzzyquery_test_200: calllogId = ' + calllogId);
492      expect(calllogId > 0).assertTrue();
493      await queryByEndWithPhoneNumber();
494      await calllogDelete('calllog_fuzzyquery_test_200');
495      done();
496    } catch (error) {
497      console.info('logMessage calllog_fuzzyquery_test_200: calllog insert error = ' + error);
498      done();
499    }
500
501    async function queryByEndWithPhoneNumber() {
502      let resultColumns = ['id', 'phone_number'];
503      let condition = new dataShare.DataSharePredicates();
504      condition.like('phone_number', '%' + phoneNumberTest);
505      try {
506        let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
507        if (resultSet.goToFirstRow()) {
508          do {
509            console.info('logMessage calllog_fuzzyquery_test_200: columnNames:' + resultSet.columnNames);
510            console.info('logMessage calllog_fuzzyquery_test_200: columnCount:' + resultSet.columnCount);
511            console.info('logMessage calllog_fuzzyquery_test_200: id = ' + resultSet.getString(0));
512            expect(resultSet.getString(0) === calllogId.toString()).assertTrue();
513            console.info('logMessage calllog_fuzzyquery_test_200: phone_number = ' + resultSet.getString(1));
514            expect(resultSet.getString(1) === phoneNumber).assertTrue();
515          } while (resultSet.goToNextRow());
516        }
517        resultSet.close();
518      } catch (error) {
519        console.info('logMessage calllog_fuzzyquery_test_200: query error = ' + error);
520        done();
521      }
522    }
523  });
524
525  /**
526   * @tc.number  calllog_fuzzyquery_test_300
527   * @tc.name    Fuzzy query ability based on mobile phone number (including a certain field)
528   * @tc.desc    Function test
529   */
530  it('calllog_fuzzyquery_test_300', 0, async function (done) {
531    console.info('------------calllog_fuzzyquery_test_300 is starting!-----------');
532    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
533    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
534    let phoneNumber = randomNum(PHONE_NUM_LEN_FIFTEEN);
535    let insertValues = { 'phone_number': phoneNumber };
536    try {
537      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
538      console.info('logMessage calllog_fuzzyquery_test_300: calllogId = ' + calllogId);
539      expect(calllogId > 0).assertTrue();
540      await queryByPhoneNumberContainsField();
541      await calllogDelete('calllog_fuzzyquery_test_300');
542      done();
543    } catch (error) {
544      console.info('logMessage calllog_fuzzyquery_test_300: calllog insert error = ' + error);
545      done();
546    }
547
548    async function queryByPhoneNumberContainsField() {
549      let phoneNumberIndexSeven = 7;
550      let phoneNumberIndexTen = 10;
551      let resultColumns = ['id', 'phone_number'];
552      let condition = new dataShare.DataSharePredicates();
553      let phoneNumberTest = phoneNumber.substring(phoneNumberIndexSeven, phoneNumberIndexTen);
554      condition.like('phone_number', '%' + phoneNumberTest + '%');
555      try {
556        let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
557        if (resultSet.goToFirstRow()) {
558          do {
559            console.info('logMessage calllog_fuzzyquery_test_300: columnNames:' + resultSet.columnNames);
560            console.info('logMessage calllog_fuzzyquery_test_300: columnCount:' + resultSet.columnCount);
561            console.info('logMessage calllog_fuzzyquery_test_300: id = ' + resultSet.getString(0));
562            expect(resultSet.getString(0) === calllogId.toString()).assertTrue();
563            console.info('logMessage calllog_fuzzyquery_test_300: phone_number = ' + resultSet.getString(1));
564            expect(resultSet.getString(1) === phoneNumber).assertTrue();
565          } while (resultSet.goToNextRow());
566        }
567        resultSet.close();
568      } catch (error) {
569        console.info('logMessage calllog_fuzzyquery_test_300: query error = ' + error);
570        done();
571      }
572    }
573  });
574
575  /**
576   * @tc.number  abnormal_calllog_insert_test_200
577   * @tc.name    Abnormal use case, an incorrect field is passed in when inserting data
578   * @tc.desc    Function test
579   */
580  it('abnormal_calllog_insert_test_200', 0, async function (done) {
581    console.info('------------abnormal_calllog_insert_test_200 is starting!-----------');
582    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
583    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
584    let phoneNumber = randomNum(PHONE_NUM_LEN_NINE);
585    let insertValues = { 'phone_numbers': phoneNumber };
586    try {
587      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
588      console.info('logMessage abnormal_calllog_insert_test_200: calllogId = ' + calllogId);
589      expect(calllogId === -1).assertTrue();
590      done();
591    } catch (error) {
592      console.info('logMessage abnormal_calllog_insert_test_200: calllog insert error = ' + error);
593      done();
594    }
595  });
596
597  /**
598   * @tc.number  abnormal_calllog_insert_test_300
599   * @tc.name    Abnormal use case, an incorrect table name is passed in when inserting data
600   * @tc.desc    Function test
601   */
602  it('abnormal_calllog_insert_test_300', 0, async function (done) {
603    console.info('------------abnormal_calllog_insert_test_300 is starting!-----------');
604    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
605    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
606    let errorUri = 'datashare:///com.ohos.calllogability/calls/calllogs';
607    let phoneNumber = randomNum(PHONE_NUM_LEN_EIGHT);
608    let insertValues = { 'phone_number': phoneNumber };
609    try {
610      let calllogId = await dataShareHelper.insert(errorUri, insertValues);
611      console.info('logMessage abnormal_calllog_insert_test_300: calllogId = ' + calllogId);
612      expect(calllogId === -1).assertTrue();
613      done();
614    } catch (error) {
615      console.info('logMessage abnormal_calllog_insert_test_300: calllog insert error = ' + error);
616      done();
617    }
618  });
619
620  /**
621   * @tc.number  abnormal_calllog_update_test_600
622   * @tc.name    Abnormal use case, passing in a wrong field when updating data
623   * @tc.desc    Function test
624   */
625  it('abnormal_calllog_update_test_600', 0, async function (done) {
626    console.info('------------abnormal_calllog_update_test_600 is starting!-----------');
627    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
628    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
629    let phoneNumber = randomNum(PHONE_NUM_LEN_NINE);
630    let insertValues = { 'phone_number': phoneNumber };
631    try {
632      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
633      console.info('logMessage abnormal_calllog_update_test_600: calllogId = ' + calllogId);
634      expect(calllogId > 0).assertTrue();
635      await abnormalUpdate();
636      await calllogDelete('abnormal_calllog_update_test_600');
637      done();
638    } catch (error) {
639      console.info('logMessage abnormal_calllog_update_test_600: calllog insert error = ' + error);
640      done();
641    }
642
643    async function abnormalUpdate() {
644      let phoneNumberTest = randomNum(PHONE_NUM_LEN_SEVEN);
645      let updateValues = { 'phone_numbers': phoneNumberTest };
646      let condition = new dataShare.DataSharePredicates();
647      condition.equalTo('ids', calllogId.toString());
648      try {
649        let updataCode = await dataShareHelper.update(calllogUri, updateValues, condition);
650        console.info('logMessage abnormal_calllog_update_test_600: updataCode = ' + updataCode);
651        expect(updataCode === -1).assertTrue();
652        let map = new Map();
653        map.set('id', calllogId.toString());
654        map.set('phone_number', phoneNumber);
655        await calllogQueryForALL(map, 'abnormal_calllog_update_test_600');
656      } catch (error) {
657        console.info('logMessage abnormal_calllog_update_test_600: update error = ' + error);
658        done();
659      }
660    }
661  });
662
663  /**
664   * @tc.number  abnormal_calllog_update_test_700
665   * @tc.name    Abnormal use case, an incorrect table name is passed in when updating data
666   * @tc.desc    Function test
667   */
668  it('abnormal_calllog_update_test_700', 0, async function (done) {
669    console.info('------------abnormal_calllog_update_test_700 is starting!-----------');
670    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
671    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
672    let errorUri = 'datashare:///com.ohos.calllogability/calls/calllogs';
673    let phoneNumber = randomNum(PHONE_NUM_LEN_SIX);
674    let insertValues = { 'phone_number': phoneNumber };
675    try {
676      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
677      console.info('logMessage abnormal_calllog_update_test_700: calllogId = ' + calllogId);
678      expect(calllogId > 0).assertTrue();
679      await abnormalUpdate();
680      await calllogDelete('abnormal_calllog_update_test_700');
681      done();
682    } catch (error) {
683      console.info('logMessage abnormal_calllog_update_test_700: calllog insert error = ' + error);
684      done();
685    }
686
687    async function abnormalUpdate() {
688      let phoneNumberTest = randomNum(PHONE_NUM_LEN_SEVEN);
689      let updateValues = { 'phone_numbers': phoneNumberTest };
690      let condition = new dataShare.DataSharePredicates();
691      condition.equalTo('id', calllogId.toString());
692      try {
693        let updataCode = await dataShareHelper.update(errorUri, updateValues, condition);
694        console.info('logMessage abnormal_calllog_update_test_700: updataCode = ' + updataCode);
695        expect(updataCode === -1).assertTrue();
696        let map = new Map();
697        map.set('id', calllogId.toString());
698        map.set('phone_number', phoneNumber);
699        await calllogQueryForALL(map, 'abnormal_calllog_update_test_700');
700        done();
701      } catch (error) {
702        console.info('logMessage abnormal_calllog_update_test_700: update error = ' + error);
703        done();
704      }
705    }
706  });
707
708  /**
709   * @tc.number  abnormal_calllog_delete_test_1400
710   * @tc.name    Abnormal use case, passing in a wrong field when deleting data
711   * @tc.desc    Function test
712   */
713  it('abnormal_calllog_delete_test_1400', 0, async function (done) {
714    console.info('------------abnormal_calllog_delete_test_1400 is starting!-----------');
715    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
716    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
717    let phoneNumber = randomNum(PHONE_NUM_LEN_FIVE);
718    let insertValues = { 'phone_number': phoneNumber };
719    try {
720      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
721      console.info('logMessage abnormal_calllog_delete_test_1400: calllogId = ' + calllogId);
722      expect(calllogId > 0).assertTrue();
723      await abnormalDelete();
724      await calllogDelete('abnormal_calllog_delete_test_1400');
725      done();
726    } catch (error) {
727      console.info('logMessage abnormal_calllog_delete_test_1400: calllog insert error = ' + error);
728      done();
729    }
730
731    async function abnormalDelete() {
732      let condition = new dataShare.DataSharePredicates();
733      condition.equalTo('ids', calllogId.toString());
734      try {
735        let deleteCode = await dataShareHelper.delete(calllogUri, condition);
736        console.info('logMessage abnormal_calllog_delete_test_1400: deleteCode = ' + deleteCode);
737        expect(deleteCode === -1).assertTrue();
738        let map = new Map();
739        map.set('id', calllogId.toString());
740        map.set('phone_number', phoneNumber);
741        await calllogQueryForALL(map, 'abnormal_calllog_delete_test_1400');
742      } catch (error) {
743        console.info('logMessage abnormal_calllog_delete_test_1400: delete error = ' + error);
744        done();
745      }
746    }
747  });
748
749  /**
750   * @tc.number  abnormal_calllog_delete_test_1500
751   * @tc.name    Abnormal use case, passing in an incorrect table name when deleting data
752   * @tc.desc    Function test
753   */
754  it('abnormal_calllog_delete_test_1500', 0, async function (done) {
755    console.info('------------abnormal_calllog_delete_test_1500 is starting!-----------');
756    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
757    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
758    let errorUri = 'datashare:///com.ohos.calllogability/calls/calllogs';
759    let phoneNumber = randomNum(PHONE_NUM_LEN_SIX);
760    let insertValues = { 'phone_number': phoneNumber };
761    try {
762      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
763      console.info('logMessage abnormal_calllog_delete_test_1500: calllogId = ' + calllogId);
764      expect(calllogId > 0).assertTrue();
765      await abnormalDelete();
766      await calllogDelete('abnormal_calllog_delete_test_1500');
767      done();
768    } catch (error) {
769      console.info('logMessage abnormal_calllog_delete_test_1500: calllog insert error = ' + error);
770      done();
771    }
772
773    async function abnormalDelete() {
774      let condition = new dataShare.DataSharePredicates();
775      condition.equalTo('id', calllogId.toString());
776      try {
777        let deleteCode = await dataShareHelper.delete(errorUri, condition);
778        console.info('logMessage abnormal_calllog_delete_test_1500: deleteCode = ' + deleteCode);
779        expect(deleteCode === -1).assertTrue();
780        done();
781        let map = new Map();
782        map.set('id', calllogId.toString());
783        map.set('phone_number', phoneNumber);
784        await calllogQueryForALL(map, 'abnormal_calllog_delete_test_1500');
785      } catch (error) {
786        console.info('logMessage abnormal_calllog_delete_test_1500: delete error = ' + error);
787        done();
788      }
789    }
790  });
791
792  /**
793   * @tc.number  abnormal_calllog_query_test_900
794   * @tc.name    Abnormal use case, an incorrect field is passed in when querying
795   * @tc.desc    Function test
796   */
797  it('abnormal_calllog_query_test_900', 0, async function (done) {
798    console.info('------------abnormal_calllog_query_test_900 is starting!-----------');
799    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
800    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
801    let phoneNumber = randomNum(PHONE_NUM_LEN_SIX);
802    let insertValues = { 'phone_number': phoneNumber };
803    try {
804      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
805      console.info('logMessage abnormal_calllog_query_test_900: calllogId = ' + calllogId);
806      expect(calllogId > 0).assertTrue();
807      await abnormalQuery();
808      await calllogDelete('abnormal_calllog_query_test_900');
809      done();
810    } catch (error) {
811      console.info('logMessage abnormal_calllog_query_test_900: calllog insert error = ' + error);
812      done();
813    }
814
815    async function abnormalQuery() {
816      let resultColumns = ['id', 'phone_number'];
817      let condition = new dataShare.DataSharePredicates();
818      condition.equalTo('ids', calllogId.toString());
819      try {
820        let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
821        console.info('logMessage abnormal_calllog_query_test_900: goToFirstRow' + resultSet.goToFirstRow());
822        expect(resultSet.goToFirstRow()).assertEqual(false);
823        resultSet.close();
824      } catch (error) {
825        console.info('logMessage abnormal_calllog_query_test_900:query error = ' + error);
826        done();
827      }
828    }
829  });
830
831  /**
832   * @tc.number  abnormal_calllog_batchinsert_test_1700
833   * @tc.name    abnormal_batchinsert
834   * @tc.desc    Function test
835   */
836  it('abnormal_calllog_batchinsert_test_1700', 0, async function (done) {
837    console.info('--------logMessage abnormal_calllog_batchinsert_test_1700 is starting!------------');
838    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
839    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
840    let phoneNumber = randomNum(PHONE_NUM_LEN_NINE);
841    let phoneNumberTest = randomNum(PHONE_NUM_LEN_SIX);
842    let addBulkValue1 = { 'phone_number': phoneNumber, 'ring_duration': '500' };
843    let addBulkValue2 = { 'phone_number': phoneNumberTest, 'ring_duration': '100' };
844    let addBulkValue3 = { 'phone_numbers': phoneNumberTest, 'ring_duration': '100' };
845    let addBulkValue4 = { 'phone_number': phoneNumberTest, 'ring_durations': '100' };
846    let addBulkValue5 = { 'phone_number': phoneNumberTest, 'ring_duration': '100' };
847    let listAddBluk = [];
848    listAddBluk[0] = addBulkValue1;
849    listAddBluk[1] = addBulkValue2;
850    listAddBluk[INDEX_TWO] = addBulkValue3;
851    listAddBluk[INDEX_THREE] = addBulkValue4;
852    listAddBluk[INDEX_FOUR] = addBulkValue5;
853    try {
854      let batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk);
855      console.info('logMessage abnormal_calllog_batchinsert_test_1700: batchInsertCode = ' + batchInsertCode);
856      expect(batchInsertCode === -1).assertTrue();
857      done();
858    } catch (error) {
859      console.info('logMessage abnormal_calllog_batchinsert_test_1700: batchInsert error = ' + error);
860      done();
861    }
862  });
863
864  /**
865   * @tc.number  calllog_delete_test_1800
866   * @tc.name    batchDelete
867   * @tc.desc    Function test
868   */
869  it('calllog_delete_test_1800', 0, async function (done) {
870    console.info('--------logMessage calllog_delete_test_1800 is starting!------------');
871    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
872    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
873    try {
874      let calllogId = await dataShareHelper.insert(calllogUri, common.getCallLogInsert());
875      console.info('logMessage calllog_delete_test_1800: calllogId = ' + calllogId);
876      expect(calllogId > 0).assertTrue();
877      let map = common.getCallLogInsertMap();
878      map.set('id', calllogId.toString());
879      await calllogQueryForALL(map, 'calllog_delete_test_1800');
880      await executeBatch();
881    } catch (error) {
882      console.info('logMessage calllog_delete_test_1800: calllog insert error = ' + error);
883      done();
884    }
885
886    async function executeBatch() {
887      console.info('logMessage calllog_delete_test_1800:  executeBatch start ');
888      let condition = new dataShare.DataSharePredicates();
889      condition.equalTo('id', calllogId.toString());
890      dataShareHelper.executeBatch(
891        URI_CALLLOG,
892        [
893          {
894            uri: calllogUri,
895            type: featureAbility.DataAbilityOperationType.TYPE_DELETE,
896            predicates: condition,
897            expectedCount: 0,
898            PredicatesBackReferences: {},
899            interrupted: true
900          }
901        ],
902        (error, data) => {
903          console.info('logMessage calllog_delete_test_1800: executeBatch data = ' + JSON.stringify(data));
904          console.info('logMessage calllog_delete_test_1800: data_3 = ' + data);
905          console.info('logMessage calllog_delete_test_1800:  data_1= ' + data[0].count);
906          expect(data[0].count === 0).assertTrue();
907          done();
908        }
909      );
910    }
911  });
912
913  /**
914   * @tc.number  calllog_update_test_1900
915   * @tc.name    batchUpdate
916   * @tc.desc    Function test
917   */
918  it('calllog_update_test_1900', 0, async function (done) {
919    console.info('--------logMessage calllog_update_test_1900 is starting!------------');
920    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
921    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
922    try {
923      let calllogId = await dataShareHelper.insert(calllogUri, common.getCallLogInsert());
924      console.info('logMessage calllog_update_test_1900: calllogId = ' + calllogId);
925      expect(calllogId > 0).assertTrue();
926      let map = common.getCallLogInsertMap();
927      map.set('id', calllogId.toString());
928      await calllogQueryForALL(map, 'calllog_update_test_1900');
929      await executeBatch();
930    } catch (error) {
931      console.info('logMessage calllog_update_test_1900: calllog insert error = ' + error);
932      done();
933    }
934
935    async function executeBatch() {
936      let phoneNumber = randomNum(PHONE_NUM_LEN_EIGHT);
937      let updateValues = { 'phone_number': phoneNumber };
938      let condition = new dataShare.DataSharePredicates();
939      condition.equalTo('id', calllogId.toString());
940      dataShareHelper.executeBatch(
941        URI_CALLLOG,
942        [
943          {
944            uri: calllogUri,
945            type: featureAbility.DataAbilityOperationType.TYPE_UPDATE,
946            valuesBucket: updateValues,
947            predicates: condition,
948            expectedCount: 0,
949            PredicatesBackReferences: {},
950            interrupted: true
951          }
952        ],
953        (error, data) => {
954          console.info('logMessage calllog_update_test_1900: executeBatch data = ' + JSON.stringify(data));
955          console.info('logMessage calllog_update_test_1900: data_3 = ' + data);
956          console.info('logMessage calllog_update_test_1900:  data_1= ' + data[0].count);
957          expect(data[0].count === 0).assertTrue();
958          done();
959        }
960      );
961    }
962  });
963
964  /**
965   * @tc.number  calllog_Delete_test_2000
966   * @tc.name    calllog Delete
967   * @tc.desc    Function test
968   */
969  it('calllog_Delete_test_2000', 0, async function (done) {
970    console.info('--------logMessage calllog_Delete_test_2000 is starting!------------');
971    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
972    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
973    let phoneNumber = randomNum(PHONE_NUM_LEN_FIVE);
974    let insertValues = { 'phone_number': phoneNumber, 'ring_duration': '200' };
975    try {
976      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
977      let calllogIdTwo = await dataShareHelper.insert(calllogUri, insertValues);
978      let calllogIdThree = await dataShareHelper.insert(calllogUri, insertValues);
979      expect(calllogId > 0).assertTrue();
980      expect(calllogIdTwo > 0).assertTrue();
981      expect(calllogIdThree > 0).assertTrue();
982      await deleteCalllog();
983      done();
984    } catch (error) {
985      console.info('logMessage calllog_Delete_test_2000: calllog insert error = ' + error);
986      done();
987    }
988
989    async function deleteCalllog() {
990      try {
991        let condition = new dataShare.DataSharePredicates();
992        condition.equalTo('id', calllogId.toString());
993        condition.or();
994        condition.equalTo('id', calllogIdTwo.toString());
995        condition.or();
996        condition.equalTo('id', calllogIdThree.toString());
997        let deleteCode = await dataShareHelper.delete(calllogUri, condition);
998        console.info('logMessage calllog_Delete_test_2000: deleteCode = ' + deleteCode);
999        expect(deleteCode === 0).assertTrue();
1000        let resultColumns = [];
1001        let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
1002        expect(resultSet.rowCount === 0).assertTrue();
1003        resultSet.close();
1004      } catch (error) {
1005        console.info('logMessage calllog_Delete_test_2000: delete error = ' + error);
1006        done();
1007      }
1008    }
1009  });
1010
1011  /**
1012   * @tc.number  calllog_Delete_test_2100
1013   * @tc.name    calllog Delete
1014   * @tc.desc    Function test
1015   */
1016  it('calllog_Delete_test_2100', 0, async function (done) {
1017    console.info('--------logMessage calllog_Delete_test_2100 is starting!------------');
1018    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
1019    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
1020    try {
1021      let calllogId = await dataShareHelper.insert(calllogUri, common.getCallLogInsert());
1022      console.info('logMessage calllog_Delete_test_2100: calllogId = ' + calllogId);
1023      expect(calllogId > 0).assertTrue();
1024      let map = common.getCallLogInsertMap();
1025      map.set('id', calllogId.toString());
1026      await calllogQueryForALL(map, 'calllog_Delete_test_2100');
1027      await calllogDelete('calllog_Delete_test_2100');
1028      let condition = new dataShare.DataSharePredicates();
1029      condition.equalTo('id', calllogId);
1030      let resultColumns = [];
1031      let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
1032      expect(resultSet.rowCount === 0).assertTrue();
1033      resultSet.close();
1034      done();
1035    } catch (error) {
1036      console.info('logMessage calllog_Delete_test_2100: calllog insert error = ' + error);
1037      done();
1038    }
1039  });
1040
1041  /**
1042   * @tc.number  calllog_queryContains_test_2200
1043   * @tc.name    calllog Delete
1044   * @tc.desc    Function test
1045   */
1046  it('calllog_queryContains_test_2200', 0, async function (done) {
1047    console.info('--------logMessage calllog_queryContains_test_2200 is starting!------------');
1048    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
1049    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
1050    let phoneNumberIndexThirteen = 13;
1051    let phoneNumberIndexEighteen = 18;
1052    let phoneNumber = randomNum(PHONE_NUM_LEN_SEVENTEEN);
1053    let phoneNumberTest = phoneNumber.substring(phoneNumberIndexThirteen, phoneNumberIndexEighteen);
1054    let insertValues = { 'phone_number': phoneNumber };
1055    try {
1056      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
1057      console.info('logMessage calllog_queryContains_test_2200: calllogId = ' + calllogId);
1058      expect(calllogId > 0).assertTrue();
1059
1060      let resultColumns = ['phone_number'];
1061      let condition = new dataShare.DataSharePredicates();
1062      condition.contains('phone_number', phoneNumberTest);
1063      let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
1064      if (resultSet.rowCount > 0) {
1065        if (resultSet.goToFirstRow()) {
1066          do {
1067            let phone = resultSet.getString(resultSet.getColumnIndex('phone_number'));
1068            console.info('logMessage calllog_queryContains_test_2200: phone is = ' + phone);
1069            expect(phone === phoneNumber).assertEqual(true);
1070          } while (resultSet.goToNextRow());
1071        }
1072      }
1073      resultSet.close();
1074      await calllogDelete();
1075      done();
1076    } catch (error) {
1077      console.info('logMessage calllog_queryContains_test_2200: calllog insert error = ' + error);
1078      done();
1079    }
1080  });
1081
1082  /**
1083   * @tc.number  abnormal_calllog_update_test_2300
1084   * @tc.name    Update all call records, pass in a field that does not exist
1085   * @tc.desc    Function test
1086   */
1087  it('abnormal_calllog_update_test_2300', 0, async function (done) {
1088    console.info('--------logMessage abnormal_calllog_update_test_2300 is starting!------------');
1089    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
1090    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
1091    let phoneNumber = randomNum(PHONE_NUM_LEN_TEN);
1092    let insertValues = { 'phone_number': phoneNumber, 'display_name': 'name2300' };
1093    try {
1094      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
1095      let calllogIdTwo = await dataShareHelper.insert(calllogUri, insertValues);
1096      expect(calllogId > 0).assertTrue();
1097      expect(calllogIdTwo > 0).assertTrue();
1098      await updateOneCalllog();
1099      done();
1100    } catch (error) {
1101      console.info('logMessage abnormal_calllog_update_test_2300: calllog insert error = ' + error);
1102      done();
1103    }
1104    async function updateOneCalllog() {
1105      try {
1106        let insertValues = { 'phone_number': phoneNumber, 'display_names': 'nameUpdateError2300' };
1107        let condition = new dataShare.DataSharePredicates();
1108        let updateCode = await dataShareHelper.update(calllogUri, insertValues, condition);
1109        console.info('logMessage abnormal_calllog_update_test_2300: updateCode = ' + updateCode);
1110        expect(updateCode === -1).assertTrue();
1111        let map = new Map();
1112        map.set('id', calllogId.toString());
1113        map.set('display_name', 'name2300');
1114        await calllogQueryForALL(map, 'abnormal_calllog_update_test_2300');
1115        map.set('id', calllogIdTwo.toString());
1116        await calllogQueryForALL(map, 'abnormal_calllog_update_test_2300');
1117        await calllogDelete('calllog_update_test_2300');
1118      } catch (error) {
1119        console.info('logMessage abnormal_calllog_update_test_2300: update error = ' + error);
1120        done();
1121      }
1122    }
1123  });
1124
1125  /**
1126   * @tc.number  abnormal_calllog_query_test_2400
1127   * @tc.name    When querying call records based on combined conditions, incorrect field
1128   *             names and non-existent data are passed in
1129   * @tc.desc    Function test
1130   */
1131  it('abnormal_calllog_query_test_2400', 0, async function (done) {
1132    console.info('--------logMessage abnormal_calllog_query_test_2400 is starting!------------');
1133    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
1134    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
1135    let phoneNumber = randomNum(PHONE_NUM_LEN_TEN);
1136    let insertValues = { 'phone_number': phoneNumber, 'display_name': 'name2300' };
1137    try {
1138      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
1139      let calllogIdTwo = await dataShareHelper.insert(calllogUri, insertValues);
1140      expect(calllogId > 0).assertTrue();
1141      expect(calllogIdTwo > 0).assertTrue();
1142      let condition = new dataShare.DataSharePredicates();
1143      condition.equalTo('id', calllogId.toString() + 'ksks');
1144      let resultColumns = ['display_names'];
1145      let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
1146      console.info('abnormal_calllog_query_test_2400: resultSet.rowCount = ' + resultSet.rowCount);
1147      expect(resultSet.rowCount === -1).assertTrue();
1148      resultSet.close();
1149      await calllogDelete('abnormal_calllog_query_test_2400');
1150      done();
1151    } catch (error) {
1152      console.info('logMessage abnormal_calllog_query_test_2400: calllog insert error = ' + error);
1153      done();
1154    }
1155  });
1156
1157  /**
1158   * @tc.number  abnormal_calllog_query_test_2500
1159   * @tc.name    When querying all call records based on combined conditions, incorrect field
1160   *             names and non-existent data are passed in
1161   * @tc.desc    Function test
1162   */
1163  it('abnormal_calllog_query_test_2500', 0, async function (done) {
1164    console.info('--------logMessage abnormal_calllog_query_test_2500 is starting!------------');
1165    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
1166    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
1167    let phoneNumber = randomNum(PHONE_NUM_LEN_TEN);
1168    let insertValues = { 'phone_number': phoneNumber, 'display_name': 'name2300' };
1169    try {
1170      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
1171      console.info('abnormal_calllog_query_test_2500 calllogId = ' + calllogId);
1172      let calllogIdTwo = await dataShareHelper.insert(calllogUri, insertValues);
1173      console.info('abnormal_calllog_query_test_2500 calllogIdTwo = ' + calllogIdTwo);
1174      expect(calllogId > 0).assertTrue();
1175      expect(calllogIdTwo > 0).assertTrue();
1176      let condition = new dataShare.DataSharePredicates();
1177      let resultColumns = ['display_names'];
1178      let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
1179      console.info('abnormal_calllog_query_test_2500 resultSet.goToFirstRow() = ' + resultSet.goToFirstRow());
1180      console.info('abnormal_calllog_query_test_2500 resultSet.rowCount = ' + resultSet.rowCount);
1181      expect(resultSet.goToFirstRow() === false).assertTrue();
1182      resultSet.close();
1183      await calllogDelete('abnormal_calllog_query_test_2500');
1184      done();
1185    } catch (error) {
1186      console.info('logMessage abnormal_calllog_query_test_2500: calllog insert error = ' + error);
1187      done();
1188    }
1189  });
1190
1191  /**
1192   * @tc.number  abnormal_calllog_delete_test_2600
1193   * @tc.name    Batch call records are added, and some of them fail, depending on the processing logic
1194   * @tc.desc    Function test
1195   */
1196  it('abnormal_calllog_delete_test_2600', 0, async function (done) {
1197    console.info('--------logMessage abnormal_calllog_delete_test_2600 is starting!------------');
1198    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
1199    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
1200    let phoneNumber = randomNum(PHONE_NUM_LEN_TEN);
1201    let insertValues = { 'phone_number': phoneNumber, 'display_name': 'name2300' };
1202    try {
1203      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
1204      let calllogIdTwo = await dataShareHelper.insert(calllogUri, insertValues);
1205      expect(calllogId > 0).assertTrue();
1206      expect(calllogIdTwo > 0).assertTrue();
1207    } catch (error) {
1208      console.info('logMessage abnormal_calllog_delete_test_2600: calllog insert error = ' + error);
1209      done();
1210    }
1211    let condition = new dataShare.DataSharePredicates();
1212    condition.equalTo('ids', calllogIdTwo.toString());
1213    condition.or();
1214    condition.equalTo('id', calllogId.toString());
1215    let code = await dataShareHelper.delete(calllogUri, condition);
1216    console.info('logMessage abnormal_calllog_delete_test_2600: code = ' + code);
1217    expect(code === -1).assertTrue();
1218    condition.clear();
1219    let resultColumns = [];
1220    let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
1221    let count = 2;
1222    expect(resultSet.rowCount === count).assertTrue();
1223    resultSet.close();
1224    await calllogDelete('abnormal_calllog_delete_test_2600');
1225    done();
1226  });
1227
1228  /**
1229   * @tc.number  abnormal_calllog_delete_test_2700
1230   * @tc.name    When batch call records are modified, the wrong field or table name is passed in
1231   * @tc.desc    Function test
1232   */
1233  it('abnormal_calllog_delete_test_2700', 0, async function (done) {
1234    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
1235    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
1236    let phoneNumber = randomNum(PHONE_NUM_LEN_FOURTEEN);
1237    let insertValues = { 'phone_number': phoneNumber, 'display_name': 'name2700' };
1238    try {
1239      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
1240      let calllogIdTwo = await dataShareHelper.insert(calllogUri, insertValues);
1241      expect(calllogId > 0).assertTrue();
1242      expect(calllogIdTwo > 0).assertTrue();
1243      await updateOneCalllog();
1244      done();
1245    } catch (error) {
1246      console.info('logMessage abnormal_calllog_delete_test_2700: calllog insert error = ' + error);
1247      done();
1248    }
1249    async function updateOneCalllog() {
1250      try {
1251        let insertValues = { 'phone_number': phoneNumber, 'display_names': 'nameUpdateError2700' };
1252        let condition = new dataShare.DataSharePredicates();
1253        condition.equalTo('ids', calllogIdTwo.toString());
1254        condition.or();
1255        condition.equalTo('id', calllogId.toString());
1256        let updateCode = await dataShareHelper.update(calllogUri, insertValues, condition);
1257        console.info('logMessage abnormal_calllog_delete_test_2700: updateCode = ' + updateCode);
1258        expect(updateCode === -1).assertTrue();
1259        let map = new Map();
1260        map.set('id', calllogId.toString());
1261        map.set('display_name', 'name2700');
1262        await calllogQueryForALL(map, 'abnormal_calllog_delete_test_2700');
1263        map.set('id', calllogIdTwo.toString());
1264        await calllogQueryForALL(map, 'abnormal_calllog_delete_test_2700');
1265        await calllogDelete('abnormal_calllog_delete_test_2700');
1266      } catch (error) {
1267        console.info('logMessage abnormal_calllog_delete_test_2700: update error = ' + error);
1268        done();
1269      }
1270    }
1271  });
1272
1273  /**
1274   * @tc.number  abnormal_calllog_query_test_2800
1275   * @tc.name    Fuzzy search query based on mobile phone number
1276   * @tc.desc    Function test
1277   */
1278  it('abnormal_calllog_query_test_2800', 0, async function (done) {
1279    console.info('------------abnormal_calllog_query_test_2800 is starting!-----------');
1280    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
1281    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
1282    let phoneNumber = randomNum(PHONE_NUM_LEN_EIGHT);
1283    let phoneNumberTest = phoneNumber.substring(0, INDEX_THREE);
1284    let insertValues = { 'phone_number': phoneNumber };
1285    try {
1286      let calllogId = await dataShareHelper.insert(calllogUri, insertValues);
1287      console.info('logMessage abnormal_calllog_query_test_2800: calllogId = ' + calllogId);
1288      expect(calllogId > 0).assertTrue();
1289      await queryByStartsWithPhoneNumberError();
1290      await calllogDelete('abnormal_calllog_query_test_2800');
1291      done();
1292    } catch (error) {
1293      console.info('logMessage abnormal_calllog_query_test_2800: calllog insert error = ' + error);
1294      done();
1295    }
1296
1297    async function queryByStartsWithPhoneNumberError() {
1298      let resultColumns = ['id', 'phone_number'];
1299      let condition = new dataShare.DataSharePredicates();
1300      condition.like('phone_numbers', phoneNumberTest + '%');
1301      try {
1302        let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition);
1303        console.info('logMessage abnormal_calllog_query_test_2800: resultSet.rowCount = ' + resultSet.rowCount);
1304        expect(resultSet.rowCount === -1).assertTrue();
1305        resultSet.close();
1306      } catch (error) {
1307        console.info('logMessage abnormal_calllog_query_test_2800: query error = ' + error);
1308        done();
1309      }
1310    }
1311  });
1312
1313  afterAll(async function () {
1314    let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG);
1315    console.info('callllog afterAll logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
1316    let condition = new dataShare.DataSharePredicates();
1317    condition.greaterThan('id', '0');
1318    let deleteCode = await dataShareHelper.delete(calllogUri, condition);
1319    console.info('callllog afterAll end logMessage deleteCode = ' + deleteCode);
1320  });
1321
1322  function randomNum(num) {
1323    let number = toString(Math.floor(Math.random() * (PHONE_NUM_LEN_NINE * Math.pow(PHONE_NUM_LEN_TEN, num))) + 1 *
1324      Math.pow(PHONE_NUM_LEN_TEN, num));
1325    return number;
1326  }
1327});
1328