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 dataShare from '@ohos.data.dataShare';
17import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from 'deccjsunit/index';
18
19const URI_CONTACTS = 'datashare:///com.ohos.contactsdataability';
20const groupUri = 'datashare:///com.ohos.contactsdataability/contacts/groups';
21import common from './common.js';
22
23describe('GroupsTest', function () {
24  console.info('logMessage GroupsTest start! ');
25
26  let arrayTwo = 2;
27
28  async function groupsQuery(map, tag) {
29    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
30    console.info(tag + ': groupsQuery start ! dataShareHelper = ' + dataShareHelper);
31    let resultColumns = [];
32    let condition = new dataShare.DataSharePredicates();
33    condition.equalTo('id', map.get('id'));
34    try {
35      let resultSet = await dataShareHelper.query(groupUri, resultColumns, condition);
36      if (resultSet.rowCount > 0 && resultSet.goToFirstRow()) {
37        do {
38          for (let [key, value] of map) {
39            let dbresult = resultSet.getString(resultSet.getColumnIndex(key));
40            console.info(
41              tag + ': logMessage groupsQuery key =' + key + 'dbresult :' + dbresult + ' value : ' + value
42            );
43            expect(value === dbresult).assertTrue();
44          }
45        } while (resultSet.goToNextRow());
46      }
47      resultSet.close();
48    } catch (error) {
49      console.info(tag + ': logMessage groupsQuery: error = ' + error);
50    }
51  }
52
53  async function queryIdForDelete(map, tag) {
54    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
55    console.info(tag + ': queryIdForDelete start ! dataShareHelper = ' + dataShareHelper);
56    let resultColumns = common.getCallLogResultColumns();
57    let condition = new dataShare.DataSharePredicates();
58    condition.equalTo('id', map.get('id'));
59    try {
60      let resultSet = await dataShareHelper.query(groupUri, resultColumns, condition);
61      expect(resultSet.goToFirstRow() === false).assertTrue();
62      console.info(tag + ' :logMessage queryIdForDelete: goToFirstRow ' + resultSet.goToFirstRow());
63      resultSet.close();
64    } catch (error) {
65      console.info(tag + ' :logMessage queryIdForDelete: error = ' + error);
66    }
67  }
68
69  async function deleteAll(uri, tag) {
70    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
71    let condition = new dataShare.DataSharePredicates();
72    condition.greaterThan('id', '0');
73    let deleteCode = await dataShareHelper.delete(uri, condition);
74    console.info(tag + ': deleteAll deleteCode = ' + deleteCode);
75    expect(deleteCode === 0).assertTrue();
76  }
77
78  /**
79   * @tc.number  group_insert_test_100
80   * @tc.name    Insert group
81   * @tc.desc    Function test
82   */
83  it('group_insert_test_100', 0, async function (done) {
84    console.info('---------logMessage group_insert_test_100 is starting!----------');
85    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
86    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
87    try {
88      let groupId = await dataShareHelper.insert(groupUri, common.getProfileGroup());
89      console.info('logMessage group_insert_test_100: groupId = ' + groupId);
90      expect(groupId > 0).assertTrue();
91      let map = common.getProfileGroupMap();
92      map.set('id', groupId.toString());
93      await groupsQuery(map, 'group_insert_test_100');
94      await deleteAll(groupUri, 'group_insert_test_100');
95      done();
96    } catch (error) {
97      console.info('logMessage group_insert_test_100: group insert error = ' + error);
98      done();
99    }
100  });
101
102  /**
103   * @tc.number  group_update_test_500
104   * @tc.name    Update group
105   * @tc.desc    Function test
106   */
107  it('group_update_test_500', 0, async function (done) {
108    console.info('---------logMessage group_update_test_500 is starting!----------');
109    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
110    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
111    try {
112      let groupId = await dataShareHelper.insert(groupUri, common.getProfileGroup());
113      console.info('logMessage group_update_test_500: groupId = ' + groupId);
114      expect(groupId > 0).assertTrue();
115      await groupUpdate();
116      await deleteAll(groupUri, 'group_update_test_500');
117      done();
118    } catch (error) {
119      console.info('logMessage group_update_test_500: group insert error = ' + error);
120      done();
121    }
122
123    async function groupUpdate() {
124      let condition = new dataShare.DataSharePredicates();
125      condition.equalTo('id', groupId.toString());
126      try {
127        let updateCode = await dataShareHelper.update(groupUri, common.getProfileUpdateGroup(), condition);
128        console.info('logMessage group_update_test_500: updateCode = ' + updateCode);
129        expect(updateCode === 0).assertTrue();
130        let map = common.getProfileUpdateGroupMap();
131        map.set('id', groupId.toStirng());
132        await groupsQuery(map, 'group_update_test_500');
133      } catch (error) {
134        console.info('logMessage group_update_test_500: update error = ' + error);
135        done();
136      }
137    }
138  });
139
140  /**
141   * @tc.number  group_delete_test_200
142   * @tc.name    Delete group
143   * @tc.desc    Function test
144   */
145  it('group_delete_test_200', 0, async function (done) {
146    console.info('---------logMessage group_delete_test_200 is starting!----------');
147    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
148    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
149    try {
150      let groupId = await dataShareHelper.insert(groupUri, common.getProfileGroup());
151      console.info('logMessage group_delete_test_200: groupId = ' + groupId);
152      expect(groupId > 0).assertTrue();
153      await groupDelete();
154      done();
155    } catch (error) {
156      console.info('logMessage group_delete_test_200: group insert error = ' + error);
157      done();
158    }
159    async function groupDelete() {
160      let condition = new dataShare.DataSharePredicates();
161      condition.equalTo('id', groupId.toString());
162      try {
163        let deleteCode = await dataShareHelper.delete(groupUri, condition);
164        console.info('logMessage group_delete_test_200 : deleteCode = ' + deleteCode);
165        expect(deleteCode === 0).assertTrue();
166        let map = new Map();
167        map.set('id', groupId.toString());
168        await queryIdForDelete(map, 'group_delete_test_200');
169      } catch (error) {
170        console.info('logMessage group_delete_test_200 : delete error = ' + error);
171        done();
172      }
173    }
174  });
175
176  /**
177   * @tc.number  group_query_test_300
178   * @tc.name    Query a group
179   * @tc.desc    Function test
180   */
181  it('group_query_test_300', 0, async function (done) {
182    console.info('------------logMessage group_query_test_300 is starting!-----------');
183    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
184    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
185    try {
186      let groupId = await dataShareHelper.insert(groupUri, common.getProfileGroup());
187      console.info('logMessage group_query_test_300: groupId = ' + groupId);
188      expect(groupId > 0).assertTrue();
189      let map = common.getProfileGroupMap();
190      map.set('id', groupId.toString());
191      await groupsQuery(map, 'logMessage group_query_test_300');
192      await deleteAll(groupUri, 'group_query_test_300');
193      done();
194    } catch (error) {
195      console.info('logMessage group_query_test_300: group insert error = ' + error);
196      done();
197    }
198  });
199
200  /**
201   * @tc.number  group_query_test_400
202   * @tc.name    Query all groups
203   * @tc.desc    Function test
204   */
205  it('group_query_test_400', 0, async function (done) {
206    console.info('------------logMessage group_query_test_400 is starting!-----------');
207    console.info('---------logMessage getDbHelper start!----------');
208    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
209    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
210    console.info('logMessage uri = ' + URI_CONTACTS);
211    let groupUri = 'datashare:///com.ohos.contactsdataability/contacts/groups';
212
213    let insertValues = { 'group_name': 'ManagerSecondGroup' };
214    try {
215      let groupId = await dataShareHelper.insert(groupUri, insertValues);
216      console.info('logMessage group_query_test_400: groupId = ' + groupId);
217      expect(groupId > 0).assertTrue();
218      await groupQuery();
219      await deleteAll(groupUri, 'group_query_test_400');
220      done();
221    } catch (error) {
222      console.info('logMessage group_query_test_400: group insert error = ' + error);
223      done();
224    }
225
226    async function groupQuery() {
227      let resultColumns = ['id', 'group_name'];
228      let condition = new dataShare.DataSharePredicates();
229      condition.greaterThan('id', '0');
230      try {
231        let resultSet = await dataShareHelper.query(groupUri, resultColumns, condition);
232        console.info('logMessage group_query_test_400: resultSet.rowCount = ' + resultSet.rowCount);
233        expect(resultSet.rowCount === 1).assertTrue();
234        resultSet.close();
235      } catch (error) {
236        console.info('group_query_test_400 resultSet query error = ' + error);
237        done();
238      }
239    }
240  });
241
242  /**
243   * @tc.number  abnormal_group_insert_test_600
244   * @tc.name    abnormal insert
245   * @tc.desc    Function test
246   */
247  it('abnormal_group_insert_test_600', 0, async function (done) {
248    console.info('---------logMessage abnormal_group_insert_test_600 is starting!----------');
249    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
250    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
251    const errorUri = 'datashare:///com.ohos.contactsdataability/contacts/groupssss';
252    try {
253      let groupId = await dataShareHelper.insert(errorUri, common.getProfileGroup());
254      console.info('logMessage abnormal_group_insert_test_600: groupId = ' + groupId);
255      expect(groupId === -1).assertTrue();
256      done();
257    } catch (error) {
258      console.info('logMessage abnormal_group_insert_test_600: group insert error = ' + error);
259      done();
260    }
261  });
262
263  /**
264   * @tc.number  abnormal_group_update_test_700
265   * @tc.name    abnormal update
266   * @tc.desc    Function test
267   */
268  it('abnormal_group_update_test_700', 0, async function (done) {
269    console.info('---------logMessage abnormal_group_update_test_700 is starting!----------');
270    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
271    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
272    try {
273      let groupId = await dataShareHelper.insert(groupUri, common.getProfileGroup());
274      console.info('logMessage abnormal_group_update_test_700: groupId = ' + groupId);
275      expect(groupId > 0).assertTrue();
276      await groupUpdate();
277      await deleteAll(groupUri, 'abnormal_group_update_test_700');
278      done();
279    } catch (error) {
280      console.info('logMessage abnormal_group_update_test_700: group insert error = ' + error);
281      done();
282    }
283
284    async function groupUpdate() {
285      let condition = new dataShare.DataSharePredicates();
286      condition.equalTo('id', groupId.toString());
287      let updateValue = { 'group_notesss': '6666' };
288      try {
289        let updateCode = await dataShareHelper.update(groupUri, updateValue, condition);
290        console.info('logMessage abnormal_group_update_test_700: updateCode = ' + updateCode);
291        expect(updateCode === -1).assertTrue();
292        let map = common.getProfileUpdateGroupMap();
293        map.set('id', groupId.toStirng());
294        await groupsQuery(map, 'abnormal_group_update_test_700');
295      } catch (error) {
296        console.info('logMessage abnormal_group_update_test_700: update error = ' + error);
297        done();
298      }
299    }
300  });
301
302  /**
303   * @tc.number  abnormal_group_delete_test_800
304   * @tc.name    abnormal delete
305   * @tc.desc    Function test
306   */
307  it('abnormal_group_delete_test_800', 0, async function (done) {
308    console.info('---------logMessage abnormal_group_delete_test_800 is starting!----------');
309    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
310    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
311    try {
312      let groupId = await dataShareHelper.insert(groupUri, common.getProfileGroup());
313      console.info('logMessage abnormal_group_delete_test_800: groupId = ' + groupId);
314      expect(groupId > 0).assertTrue();
315      await groupDelete();
316      await deleteAll(groupUri, 'abnormal_group_delete_test_800');
317      done();
318    } catch (error) {
319      console.info('logMessage abnormal_group_delete_test_800: group insert error = ' + error);
320      done();
321    }
322    async function groupDelete() {
323      let condition = new dataShare.DataSharePredicates();
324      condition.equalTo('idss', groupId.toString());
325      try {
326        let deleteCode = await dataShareHelper.delete(groupUri, condition);
327        console.info('logMessage abnormal_group_delete_test_800 : deleteCode = ' + deleteCode);
328        expect(deleteCode === -1).assertTrue();
329        let map = common.getProfileUpdateGroupMap();
330        map.set('id', groupId.toStirng());
331        await groupsQuery(map, 'abnormal_group_delete_test_800');
332      } catch (error) {
333        console.info('logMessage abnormal_group_delete_test_800 : delete error = ' + error);
334        done();
335      }
336    }
337  });
338
339  /**
340   * @tc.number  abnormal_group_query_test_900
341   * @tc.name    abnormal query
342   * @tc.desc    Function test
343   */
344  it('abnormal_group_query_test_900', 0, async function (done) {
345    console.info('------------logMessage abnormal_group_query_test_900 is starting!-----------');
346    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
347    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
348
349    let insertValues = { 'group_name': 'PersonnelDepartment' };
350    try {
351      let groupId = await dataShareHelper.insert(groupUri, insertValues);
352      console.info('logMessage abnormal_group_query_test_900: groupId = ' + groupId);
353      expect(groupId > 0).assertTrue();
354      await groupQuery(dataShareHelper);
355      await deleteAll(groupUri, 'abnormal_group_query_test_900');
356      done();
357    } catch (error) {
358      console.info('logMessage abnormal_group_query_test_900: group insert error = ' + error);
359      done();
360    }
361
362    async function groupQuery(dataShareHelper) {
363      let resultColumns = ['id', 'group_namesss'];
364      let condition = new dataShare.DataSharePredicates();
365      condition.equalTo('id', groupId.toString());
366      try {
367        let resultSet = await dataShareHelper.query(groupUri, resultColumns, condition);
368        console.info('abnormal_group_query_test_900 resultSet.goToFirstRow() = ' + resultSet.goToFirstRow());
369        expect(resultSet.goToFirstRow() === false).assertTrue();
370        resultSet.close();
371      } catch (error) {
372        console.info('abnormal_group_query_test_900 query error ' + error);
373        done();
374      }
375    }
376  });
377
378  /**
379   * @tc.number  group_insert_test_1000
380   * @tc.name    Adding multiple groups
381   * @tc.desc    Function test
382   */
383  it('group_insert_test_1000', 0, async function (done) {
384    console.info('------------logMessage group_insert_test_1000 is starting!-----------');
385    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
386    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
387
388    let insertValuesOne = { 'group_name': 'test1000' };
389    let insertValuesTwo = { 'group_name': 'test1000' };
390    let insertValuesThree = { 'group_name': 'test1000' };
391    let array = [];
392    array[0] = insertValuesOne;
393    array[1] = insertValuesTwo;
394    array[arrayTwo] = insertValuesThree;
395    try {
396      let code = await dataShareHelper.batchInsert(groupUri, array);
397      console.info('logMessage group_insert_test_1000: batchInsert code = ' + code);
398      expect(code === 0).assertTrue();
399      await groupQuery(dataShareHelper);
400      await deleteAll(groupUri, 'group_insert_test_1000');
401      done();
402    } catch (error) {
403      console.info('logMessage group_insert_test_1000: group insert error = ' + error);
404      done();
405    }
406
407    async function groupQuery(dataShareHelper) {
408      let groupSize = 3;
409      let resultColumns = ['id', 'group_name'];
410      let condition = new dataShare.DataSharePredicates();
411      condition.equalTo('group_name', 'test1000');
412      try {
413        let resultSet = await dataShareHelper.query(groupUri, resultColumns, condition);
414        console.info('group_insert_test_1000 resultSet.rowCount = ' + resultSet.rowCount);
415        expect(resultSet.rowCount === groupSize).assertTrue();
416        resultSet.close();
417      } catch (error) {
418        console.info('group_insert_test_1000 query error ' + error);
419        done();
420      }
421    }
422  });
423
424  /**
425   * @tc.number  group_delete_test_1100
426   * @tc.name    delete multiple groups
427   * @tc.desc    Function test
428   */
429  it('group_delete_test_1100', 0, async function (done) {
430    console.info('------------logMessage group_delete_test_1100 is starting!-----------');
431    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
432    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
433
434    let insertValuesOne = { 'group_name': 'test1100' };
435    let insertValuesTwo = { 'group_name': 'test1100' };
436    let insertValuesThree = { 'group_name': 'test1100' };
437    let array = [];
438    array[0] = insertValuesOne;
439    array[1] = insertValuesTwo;
440    array[arrayTwo] = insertValuesThree;
441    try {
442      let code = await dataShareHelper.batchInsert(groupUri, array);
443      console.info('logMessage group_delete_test_1100: batchInsert code = ' + code);
444      expect(code === 0).assertTrue();
445      await deleteAll(groupUri, 'group_delete_test_1100');
446      await groupQuery(dataShareHelper);
447      done();
448    } catch (error) {
449      console.info('logMessage group_delete_test_1100: group insert error = ' + error);
450      done();
451    }
452
453    async function groupQuery(dataShareHelper) {
454      let groupSize = 0;
455      let resultColumns = ['id', 'group_name'];
456      let condition = new dataShare.DataSharePredicates();
457      condition.equalTo('group_name', 'test1100');
458      try {
459        let resultSet = await dataShareHelper.query(groupUri, resultColumns, condition);
460        console.info('group_delete_test_1100  resultSet.rowCount = ' + resultSet.rowCount);
461        expect(resultSet.rowCount === groupSize).assertTrue();
462        resultSet.close();
463      } catch (error) {
464        console.info('group_delete_test_1100 query error ' + error);
465        done();
466      }
467    }
468  });
469
470  /**
471   * @tc.number  group_update_test_1200
472   * @tc.name    update multiple groups
473   * @tc.desc    Function test
474   */
475  it('group_update_test_1200', 0, async function (done) {
476    console.info('------------logMessage group_update_test_1200 is starting!-----------');
477    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
478    console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper);
479
480    let insertValuesOne = { 'group_name': 'test1200' };
481    let insertValuesTwo = { 'group_name': 'test1200' };
482    let insertValuesThree = { 'group_name': 'test1200' };
483    let array = [];
484    array[0] = insertValuesOne;
485    array[1] = insertValuesTwo;
486    array[arrayTwo] = insertValuesThree;
487    try {
488      let code = await dataShareHelper.batchInsert(groupUri, array);
489      console.info('logMessage group_update_test_1200: batchInsert code = ' + code);
490      expect(code === 0).assertTrue();
491      await groupUpdateThree(dataShareHelper);
492      await groupQuery(dataShareHelper);
493      await deleteAll(groupUri, 'group_update_test_1200');
494      done();
495    } catch (error) {
496      console.info('logMessage group_update_test_1200: group insert error = ' + error);
497      done();
498    }
499
500    async function groupQuery(dataShareHelper) {
501      let groupSize = 3;
502      let resultColumns = ['id', 'group_name'];
503      let condition = new dataShare.DataSharePredicates();
504      condition.equalTo('group_name', 'test120000');
505      try {
506        let resultSet = await dataShareHelper.query(groupUri, resultColumns, condition);
507        console.info('logMessage group_update_test_1200: resultSet.rowCount = ' + resultSet.rowCount);
508        expect(resultSet.rowCount === groupSize).assertTrue();
509        resultSet.close();
510      } catch (error) {
511        console.info('group_update_test_1200 query error ' + error);
512        done();
513      }
514    }
515  });
516
517  async function groupUpdateThree(dataShareHelper) {
518    let condition = new dataShare.DataSharePredicates();
519    condition.equalTo('group_name', 'test1200');
520    let updateValue = { 'group_name': 'test120000' };
521    try {
522      let updateCode = await dataShareHelper.update(groupUri, updateValue, condition);
523      console.info('logMessage group_update_test_1200: updateCode = ' + updateCode);
524      expect(updateCode === 0).assertTrue();
525    } catch (error) {
526      console.info('logMessage group_update_test_1200: update error = ' + error);
527    }
528  }
529
530  afterAll(async function (done) {
531    let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS);
532    let condition = new dataShare.DataSharePredicates();
533    condition.notEqualTo('id', '0');
534    try {
535      let deleteCode = await dataShareHelper.delete(groupUri, condition);
536      console.info('logMessage group_deleted : deleteCode = ' + deleteCode);
537      done();
538    } catch (error) {
539      console.info('logMessage group_deleted: group insert error = ' + error);
540      done();
541    }
542  });
543});
544