1/*
2 * Copyright (c) 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
16import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
17import factory from '@ohos.data.distributedKVStore'
18import abilityFeatureAbility from '@ohos.ability.featureAbility';
19
20var context = abilityFeatureAbility.getContext();
21const TEST_BUNDLE_NAME = 'com.example.myapplication';
22const TEST_STORE_ID = 'storeId';
23var kvManager = null;
24var kvStore = null;
25var resultSet = null;
26
27describe('KvStoreResultSetTest', function () {
28    const config = {
29        bundleName: TEST_BUNDLE_NAME,
30        context: context
31    }
32
33    const options = {
34        createIfMissing: true,
35        encrypt: false,
36        backup: false,
37        autoSync: true,
38        kvStoreType: factory.KVStoreType.SINGLE_VERSION,
39        schema: '',
40        securityLevel: factory.SecurityLevel.S2,
41    }
42
43    beforeAll(async function (done) {
44        console.info('beforeAll');
45        console.info('beforeAll config:' + JSON.stringify(config));
46        kvManager =  factory.createKVManager(config);
47        await kvManager.getAllKVStoreId(TEST_BUNDLE_NAME).then(async (data) => {
48            console.info('beforeAll getAllKVStoreId size = ' + data.length);
49            for (var i = 0; i < data.length; i++) {
50                await kvManager.deleteKVStore(TEST_BUNDLE_NAME, data[i]).then(() => {
51                    console.info('beforeAll deleteKVStore success ' + data[i]);
52                }).catch((err) => {
53                    console.info('beforeAll deleteKVStore store: ' + data[i]);
54                    console.error('beforeAll deleteKVStore error ' + `, error code is ${err.code}, message is ${err.message}`);
55                });
56            }
57        }).catch((err) => {
58            console.error('beforeAll getAllKVStoreId err ' + `, error code is ${err.code}, message is ${err.message}`);
59        });
60
61        console.info('beforeAll end');
62        done();
63    })
64
65    afterAll(async function (done) {
66        console.info('afterAll');
67        kvManager = null;
68        kvStore = null;
69        done();
70    })
71
72    beforeEach(async function (done) {
73        console.info('beforeEach');
74        await kvManager.getKVStore(TEST_STORE_ID, options).then((store) => {
75            kvStore = store;
76            console.info('beforeEach getKVStore success');
77        }).catch((err) => {
78            console.error('beforeEach getKVStore err ' + `, error code is ${err.code}, message is ${err.message}`);
79        });
80        let entries = [];
81        for (var i = 0; i < 10; i++) {
82            var key = 'batch_test_string_key';
83            var entry = {
84                key: key + i,
85                value: {
86                    type: factory.ValueType.STRING,
87                    value: 'batch_test_string_value'
88                }
89            }
90            entries.push(entry);
91        }
92        await kvStore.putBatch(entries).then(async (err) => {
93            console.info('beforeEach putBatch success');
94        }).catch((err) => {
95            console.error('beforeEach putBatch fail ' + `, error code is ${err.code}, message is ${err.message}`);
96        });
97        await kvStore.getResultSet('batch_test_string_key').then((result) => {
98            console.info('beforeEach getResultSet success');
99            resultSet = result;
100        }).catch((err) => {
101            console.error('beforeEach getResultSet fail ' + `, error code is ${err.code}, message is ${err.message}`);
102        });
103        console.info('beforeEach end');
104        done();
105    })
106
107    afterEach(async function (done) {
108        console.info('afterEach');
109        await kvStore.closeResultSet(resultSet).then((err) => {
110            console.info('afterEach closeResultSet success');
111        }).catch((err) => {
112            console.error('afterEach closeResultSet fail ' + `, error code is ${err.code}, message is ${err.message}`);
113        });
114        resultSet = null;
115        await kvManager.closeKVStore(TEST_BUNDLE_NAME, TEST_STORE_ID).then(async () => {
116            console.info('afterEach closeKVStore success');
117            await kvManager.deleteKVStore(TEST_BUNDLE_NAME, TEST_STORE_ID).then(() => {
118                console.info('afterEach deleteKVStore success');
119            }).catch((err) => {
120                console.error('afterEach deleteKVStore err ' + `, error code is ${err.code}, message is ${err.message}`);
121            });
122        }).catch((err) => {
123            console.error('afterEach closeKVStore err ' + `, error code is ${err.code}, message is ${err.message}`);
124        });
125        kvStore = null;
126        done();
127    })
128
129    /**
130     * @tc.name KvStoreResultSetGetCountSucTest
131     * @tc.desc Test Js Api KvStoreResultSet.GetCount() successfully
132     * @tc.type: FUNC
133     * @tc.require: issueNumber
134     */
135    it('KvStoreResultSetGetCountSucTest', 0, async function (done) {
136        try {
137            var count = resultSet.getCount();
138            expect(count == 10).assertTrue();
139        } catch (e) {
140            console.error("KvStoreResultSetGetCountTest001 fail " + `, error code is ${e.code}, message is ${e.message}`);
141            expect(null).assertFail();
142        }
143        done();
144    })
145
146    /**
147     * @tc.name KvStoreResultSetGetCountNullSetTest
148     * @tc.desc Test Js Api KvStoreResultSet.GetCount() from a null resultset
149     * @tc.type: FUNC
150     * @tc.require: issueNumber
151     */
152    it('KvStoreResultSetGetCountNullSetTest', 0, async function (done) {
153        try {
154            var rs;
155            await kvStore.getResultSet('test').then((result) => {
156                rs = result;
157                expect(rs.getCount() == 0).assertTrue();
158            }).catch((err) => {
159                console.error('KvStoreResultSetGetCountNullSetTest getResultSet fail ' + `, error code is ${err.code}, message is ${err.message}`);
160                expect(null).assertFail();
161            });
162            await kvStore.closeResultSet(rs).then((err) => {
163            }).catch((err) => {
164                console.error('KvStoreResultSetGetCountNullSetTest closeResultSet fail ' + `, error code is ${err.code}, message is ${err.message}`);
165                expect(null).assertFail();
166            });
167        } catch (e) {
168            console.error('KvStoreResultSetGetCountNullSetTest e ' + `, error code is ${e.code}, message is ${e.message}`);
169            expect(null).assertFail();
170        }
171        done();
172    })
173
174    /**
175     * @tc.name KvStoreResultSetGetPositionSucTest
176     * @tc.desc Test Js Api KvStoreResultSet.GetPosition() successfully
177     * @tc.type: FUNC
178     * @tc.require: issueNumber
179     */
180    it('KvStoreResultSetGetPositionSucTest', 0, async function (done) {
181        try {
182            var position = resultSet.getPosition();
183            console.info("KvStoreResultSetGetPositionSucTest getPosition " + position);
184            expect(position == -1).assertTrue();
185        } catch (e) {
186            console.error("KvStoreResultSetGetPositionSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
187            expect(null).assertFail();
188        }
189        done();
190    })
191
192    /**
193     * @tc.name KvStoreResultSetGetPositionMoveToLastTest
194     * @tc.desc Test Js Api KvStoreResultSet.GetPosition() after move to last
195     * @tc.type: FUNC
196     * @tc.require: issueNumber
197     */
198    it('KvStoreResultSetGetPositionMoveToLastTest', 0, async function (done) {
199        try {
200            var position = resultSet.getPosition();
201            console.info("KvStoreResultSetGetPositionMoveToLastTest getPosition " + position);
202            expect(position).assertEqual(-1);
203            var flag = resultSet.moveToLast();
204            expect(flag).assertTrue();
205            position = resultSet.getPosition();
206            expect(position).assertEqual(9);
207        } catch (e) {
208            console.error("KvStoreResultSetGetPositionMoveToLastTest fail " + `, error code is ${e.code}, message is ${e.message}`);
209            expect(null).assertFail();
210        }
211        done();
212    })
213
214    /**
215     * @tc.name KvStoreResultSetMoveToFirstSucTest
216     * @tc.desc Test Js Api KvStoreResultSet.MoveToFirst() successfully
217     * @tc.type: FUNC
218     * @tc.require: issueNumber
219     */
220    it('KvStoreResultSetMoveToFirstSucTest', 0, async function (done) {
221        try {
222            var moved = resultSet.moveToFirst();
223            console.info("KvStoreResultSetMoveToFirstSucTest moveToFirst " + moved);
224            expect(moved).assertTrue();
225            var pos = resultSet.getPosition();
226            console.info("KvStoreResultSetMoveToFirstSucTest getPosition " + pos);
227            expect(pos == 0).assertTrue();
228        } catch (e) {
229            expect(null).assertFail();
230            console.error("KvStoreResultSetMoveToFirstSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
231        }
232        done();
233    })
234
235    /**
236     * @tc.name KvStoreResultSetMoveToFirstSucTest
237     * @tc.desc Test Js Api KvStoreResultSet.MoveToFirst() success
238     * @tc.type: FUNC
239     * @tc.require: issueNumber
240     */
241    it('KvStoreResultSetMoveToFirstSucTest', 0, async function (done) {
242        try {
243            var moved = resultSet.moveToLast();
244            console.info("KvStoreResultSetMoveToFirstSucTest moveToFirst " + moved);
245            expect(moved && (resultSet.getPosition() == 9)).assertTrue();
246            moved = resultSet.moveToFirst();
247            expect(moved && (resultSet.getPosition() == 0)).assertTrue();
248        } catch (e) {
249            console.error("KvStoreResultSetMoveToFirstSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
250        }
251        done();
252    })
253
254    /**
255     * @tc.name KvStoreResultSetMoveToLastSucTest
256     * @tc.desc Test Js Api KvStoreResultSet.MoveToLast() successfully
257     * @tc.type: FUNC
258     * @tc.require: issueNumber
259     */
260    it('KvStoreResultSetMoveToLastSucTest', 0, async function (done) {
261        try {
262            var moved = resultSet.moveToLast();
263            console.info("KvStoreResultSetMoveToLastSucTest moveToLast " + moved);
264            expect(moved && (resultSet.getPosition() == 9)).assertTrue();
265        } catch (e) {
266            expect(null).assertFail();
267            console.error("KvStoreResultSetMoveToLastSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
268        }
269        done();
270    })
271
272    /**
273     * @tc.name KvStoreResultSetMoveToNextSucTest
274     * @tc.desc Test Js Api KvStoreResultSet.MoveToNext() successfully
275     * @tc.type: FUNC
276     * @tc.require: issueNumber
277     */
278    it('KvStoreResultSetMoveToNextSucTest', 0, async function (done) {
279        try {
280            var moved = resultSet.moveToNext();
281            console.info("KvStoreResultSetMoveToNextSucTest moveToNext " + moved);
282            expect(moved && (resultSet.getPosition() == 0)).assertTrue();
283            moved = resultSet.moveToNext();
284            expect(moved && (resultSet.getPosition() == 1)).assertTrue();
285        } catch (e) {
286            expect(null).assertFail();
287            console.error("KvStoreResultSetMoveToNextSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
288        }
289        done();
290    })
291
292    /**
293     * @tc.name KvStoreResultSetMoveToPreviousSucTest
294     * @tc.desc Test Js Api KvStoreResultSet.MoveToPrevious() successfully
295     * @tc.type: FUNC
296     * @tc.require: issueNumber
297     */
298    it('KvStoreResultSetMoveToPreviousSucTest', 0, async function (done) {
299        try {
300            var moved = resultSet.moveToFirst();
301            expect(moved && (resultSet.getPosition() == 0)).assertTrue();
302            moved = resultSet.moveToNext();
303            console.info("KvStoreResultSetMoveToPreviousSucTest moveToNext " + moved);
304            expect(moved && (resultSet.getPosition() == 1)).assertTrue();
305            moved = resultSet.moveToPrevious();
306            console.info("KvStoreResultSetMoveToPreviousSucTest moveToPrevious " + moved);
307            expect(moved && (resultSet.getPosition() == 0)).assertTrue();
308        } catch (e) {
309            console.error("KvStoreResultSetMoveToPreviousSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
310            expect(null).assertFail();
311        }
312        done();
313    })
314
315    /**
316     * @tc.name KvStoreResultSetMoveSucTest
317     * @tc.desc Test Js Api KvStoreResultSet.Move() successfully
318     * @tc.type: FUNC
319     * @tc.require: issueNumber
320     */
321    it('KvStoreResultSetMoveSucTest', 0, async function (done) {
322        try {
323            resultSet.moveToFirst();
324            expect(resultSet.getPosition() == 0).assertTrue();
325            var moved = resultSet.move(3);
326            console.info("KvStoreResultSetMoveSucTest move " + moved);
327            expect(moved).assertTrue();
328            expect(3).assertEqual(resultSet.getPosition());
329        } catch (e) {
330            console.error("KvStoreResultSetMoveSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
331            expect(null).assertFail();
332        }
333        done();
334    })
335
336    /**
337     * @tc.name KvStoreResultSetMoveInvalidArgsTest
338     * @tc.desc Test Js Api KvStoreResultSet.Move() with invalid args
339     * @tc.type: FUNC
340     * @tc.require: issueNumber
341     */
342    it('KvStoreResultSetMoveInvalidArgsTest', 0, async function (done) {
343        try {
344            var moved = resultSet.move();
345            console.info("KvStoreResultSetMoveInvalidArgsTest move " + moved);
346            expect(null).assertFail();
347        } catch (e) {
348            console.error("KvStoreResultSetMoveInvalidArgsTest fail " + `, error code is ${e.code}, message is ${e.message}`);
349            expect(e.code == 401).assertTrue();
350        }
351        done();
352    })
353
354    /**
355     * @tc.name KvStoreResultSetMoveToPositionWithoutArgsTest
356     * @tc.desc Test Js Api KvStoreResultSet.MoveToPosition() without args
357     * @tc.type: FUNC
358     * @tc.require: issueNumber
359     */
360    it('KvStoreResultSetMoveToPositionWithoutArgsTest', 0, async function (done) {
361        try {
362            var moved = resultSet.moveToPosition();
363            console.info("KvStoreResultSetMoveToPositionWithoutArgsTest moveToPosition " + moved);
364            expect(null).assertFail();
365        } catch (e) {
366            console.error("KvStoreResultSetMoveToPositionWithoutArgsTest fail " + `, error code is ${e.code}, message is ${e.message}`);
367            expect(e.code == 401).assertTrue();
368        }
369        done();
370    })
371
372    /**
373     * @tc.name KvStoreResultSetMoveToPositionSucTest
374     * @tc.desc Test Js Api KvStoreResultSet.MoveToPosition() successfully
375     * @tc.type: FUNC
376     * @tc.require: issueNumber
377     */
378    it('KvStoreResultSetMoveToPositionSucTest', 0, async function (done) {
379        try {
380            var moved = resultSet.moveToPosition(5);
381            console.info("KvStoreResultSetMoveToPositionSucTest moveToPosition " + moved);
382            expect(moved && (resultSet.getPosition() == 5)).assertTrue();
383        } catch (e) {
384            console.error("KvStoreResultSetMoveToPositionSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
385            expect(null).assertFail();
386        }
387        done();
388    })
389
390    /**
391     * @tc.name KvStoreResultSetIsFirstSucTest
392     * @tc.desc Test Js Api KvStoreResultSet.IsFirst() successfully
393     * @tc.type: FUNC
394     * @tc.require: issueNumber
395     */
396    it('KvStoreResultSetIsFirstSucTest', 0, async function (done) {
397        try {
398            var flag = resultSet.isFirst();
399            console.info("KvStoreResultSetIsFirstSucTest isFirst " + flag);
400            expect(!flag).assertTrue();
401        } catch (e) {
402            expect(null).assertFail();
403            console.error("KvStoreResultSetIsFirstSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
404        }
405        done();
406    })
407
408    /**
409     * @tc.name KvStoreResultSetIsFirstAfterMoveTest
410     * @tc.desc Test Js Api KvStoreResultSet.IsFirst() after move
411     * @tc.type: FUNC
412     * @tc.require: issueNumber
413     */
414    it('KvStoreResultSetIsFirstAfterMoveTest', 0, async function (done) {
415        try {
416            var flag = resultSet.isFirst();
417            console.info("KvStoreResultSetIsFirstAfterMoveTest isFirst " + flag);
418            expect(!flag).assertTrue();
419            resultSet.move(3);
420            flag = resultSet.isFirst();
421            console.info("KvStoreResultSetIsFirstAfterMoveTest isFirst " + flag);
422            expect(!flag).assertTrue();
423        } catch (e) {
424            expect(null).assertFail();
425            console.error("KvStoreResultSetIsFirstAfterMoveTest fail " + `, error code is ${e.code}, message is ${e.message}`);
426        }
427        done();
428    })
429
430    /**
431     * @tc.name KvStoreResultSetIsLastFailTest
432     * @tc.desc Test Js Api KvStoreResultSet.IsLast() fail
433     * @tc.type: FUNC
434     * @tc.require: issueNumber
435     */
436    it('KvStoreResultSetIsLastFailTest', 0, async function (done) {
437        try {
438            var flag = resultSet.isLast();
439            console.info("KvStoreResultSetIsLastFailTest isLast " + flag);
440            expect(!flag).assertTrue();
441        } catch (e) {
442            expect(null).assertFail();
443            console.error("KvStoreResultSetIsLastFailTest fail " + `, error code is ${e.code}, message is ${e.message}`);
444        }
445        done();
446    })
447
448    /**
449     * @tc.name KvStoreResultSetIsLastSucTest
450     * @tc.desc Test Js Api KvStoreResultSet.IsLast() successfully
451     * @tc.type: FUNC
452     * @tc.require: issueNumber
453     */
454    it('KvStoreResultSetIsLastSucTest', 0, async function (done) {
455        try {
456            resultSet.moveToLast();
457            var flag = resultSet.isLast();
458            console.info("KvStoreResultSetIsLastSucTest isLast " + flag);
459            expect(flag).assertTrue();
460        } catch (e) {
461            expect(null).assertFail();
462            console.error("KvStoreResultSetIsLastSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
463        }
464        done();
465    })
466
467    /**
468     * @tc.name KvStoreResultSetIsBeforeFirstSucTest
469     * @tc.desc Test Js Api KvStoreResultSet.IsBeforeFirst() successfully
470     * @tc.type: FUNC
471     * @tc.require: issueNumber
472     */
473    it('KvStoreResultSetIsBeforeFirstSucTest', 0, async function (done) {
474        try {
475            var flag = resultSet.isBeforeFirst();
476            console.info("KvStoreResultSetIsBeforeFirstSucTest isBeforeFirst " + flag);
477            expect(flag).assertTrue();
478        } catch (e) {
479            expect(null).assertFail();
480            console.error("KvStoreResultSetIsBeforeFirstSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
481        }
482        done();
483    })
484
485    /**
486     * @tc.name KvStoreResultSetIsAfterLastSucTest
487     * @tc.desc Test Js Api KvStoreResultSet.IsAfterLast() success
488     * @tc.type: FUNC
489     * @tc.require: issueNumber
490     */
491    it('KvStoreResultSetIsAfterLastSucTest', 0, async function (done) {
492        try {
493            var moved = resultSet.moveToLast();
494            console.info("KvStoreResultSetIsAfterLastSucTest  moveToLast  moved=" + moved);
495            expect(moved).assertTrue();
496            moved = resultSet.moveToNext();
497            console.info("KvStoreResultSetIsAfterLastSucTest  moveToNext  moved=" + moved);
498            expect(moved == false).assertTrue();
499            var flag = resultSet.isAfterLast();
500            console.info("KvStoreResultSetIsAfterLastSucTest  isAfterLast true=" + flag);
501            expect(flag).assertTrue();
502        } catch (e) {
503            console.error("KvStoreResultSetIsAfterLastSucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
504            expect(null).assertFail();
505        }
506        done();
507    })
508
509    /**
510     * @tc.name KvStoreResultSetGetEntrySucTest
511     * @tc.desc Test Js Api KvStoreResultSet.GetEntry() successfully
512     * @tc.type: FUNC
513     * @tc.require: issueNumber
514     */
515    it('KvStoreResultSetGetEntrySucTest', 0, async function (done) {
516        try {
517            var moved = resultSet.moveToNext();
518            var entry = resultSet.getEntry();
519            console.info("KvStoreResultSetGetEntrySucTest getEntry " + entry);
520            expect(entry.key == 'batch_test_string_key0').assertTrue();
521            expect(entry.value.value == 'batch_test_string_value').assertTrue();
522            moved = resultSet.moveToNext();
523            expect(moved).assertTrue();
524            entry = resultSet.getEntry();
525            console.info("KvStoreResultSetGetEntrySucTest getEntry " + entry);
526            expect(entry.key == 'batch_test_string_key1').assertTrue();
527            expect(entry.value.value == 'batch_test_string_value').assertTrue();
528        } catch (e) {
529            expect(null).assertFail();
530            console.error("KvStoreResultSetGetEntrySucTest fail " + `, error code is ${e.code}, message is ${e.message}`);
531        }
532        done();
533    })
534})
535