1/*
2 * Copyright (C) 2021 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 */
15import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
16import dataRdb from '@ohos.data.rdb';
17
18const TAG = "[RDB_JSKITS_TEST]"
19const CREATE_TABLE_TEST = "CREATE TABLE IF NOT EXISTS test (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
20    "name TEXT NOT NULL, " + "age INTEGER, " + "salary REAL, " + "blobType BLOB)";
21
22const STORE_CONFIG = {
23    name: "Delete.db",
24}
25var rdbStore = undefined;
26
27describe('rdbStoreDeleteTest', function () {
28    beforeAll(function () {
29        console.info(TAG + 'beforeAll')
30    })
31
32    beforeEach(async function () {
33        console.info(TAG + 'beforeEach')
34        rdbStore = await dataRdb.getRdbStore(STORE_CONFIG, 1);
35        await rdbStore.executeSql(CREATE_TABLE_TEST, null);
36    })
37
38    afterEach(async function () {
39        console.info(TAG + 'afterEach')
40        rdbStore = null
41        await dataRdb.deleteRdbStore("Delete.db");
42    })
43
44    afterAll(async function () {
45        console.info(TAG + 'afterAll')
46    })
47
48    console.log(TAG + "*************Unit Test Begin*************");
49    /**
50     * @tc.name rdb delete test
51     * @tc.number SUB_DDM_AppDataFWK_JSRDB_Delete_0010
52     * @tc.desc rdb delete test
53     */
54    it('testRdbStoreDelete0001', 0, async function (done) {
55        console.log(TAG + "************* testRdbStoreDelete0001 start *************");
56        var u8 = new Uint8Array([1, 2, 3])
57        {
58            const valueBucket = {
59                "name": "zhangsan",
60                "age": 18,
61                "salary": 100.5,
62                "blobType": u8,
63            }
64            await rdbStore.insert("test", valueBucket)
65        }
66        {
67            const valueBucket = {
68                "name": "lisi",
69                "age": 28,
70                "salary": 100.5,
71                "blobType": u8,
72            }
73            await rdbStore.insert("test", valueBucket)
74        }
75        {
76            const valueBucket = {
77                "name": "lisi",
78                "age": 38,
79                "salary": 100.5,
80                "blobType": u8,
81            }
82            await rdbStore.insert("test", valueBucket)
83        }
84        {
85            let predicates = await new dataRdb.RdbPredicates("test")
86            let deletePromise = rdbStore.delete(predicates)
87            deletePromise.then(async (ret) => {
88                expect(3).assertEqual(ret)
89                console.log(TAG + "Delete done: " + ret)
90            }).catch((err) => {
91                expect(null).assertFail()
92            })
93            await deletePromise
94        }
95        done()
96        console.log(TAG + "************* testRdbStoreDelete0001 end *************");
97    })
98
99    /**
100     * @tc.name rdb delete test
101     * @tc.number SUB_DDM_AppDataFWK_JSRDB_Delete_0020
102     * @tc.desc rdb delete test
103     */
104    it('testRdbStoreDelete0002', 0, async function (done) {
105        console.log(TAG + "************* testRdbStoreDelete0002 start *************");
106        var u8 = new Uint8Array([1, 2, 3])
107        {
108            const valueBucket = {
109                "name": "zhangsan",
110                "age": 18,
111                "salary": 100.5,
112                "blobType": u8,
113            }
114            await rdbStore.insert("test", valueBucket)
115        }
116        {
117            const valueBucket = {
118                "name": "lisi",
119                "age": 28,
120                "salary": 100.5,
121                "blobType": u8,
122            }
123            await rdbStore.insert("test", valueBucket)
124        }
125        {
126            const valueBucket = {
127                "name": "lisi",
128                "age": 38,
129                "salary": 100.5,
130                "blobType": u8,
131            }
132            await rdbStore.insert("test", valueBucket)
133        }
134        {
135            let predicates = await new dataRdb.RdbPredicates("test")
136            predicates.equalTo("name", "zhangsan")
137            let deletePromise = rdbStore.delete(predicates)
138            deletePromise.then(async (ret) => {
139                await expect(1).assertEqual(ret)
140                await console.log(TAG + "Delete done: " + ret)
141            }).catch((err) => {
142                expect(null).assertFail()
143            })
144            await deletePromise
145        }
146        done()
147        console.log(TAG + "************* testRdbStoreDelete0002 end *************");
148    })
149
150    /**
151     * @tc.name rdb delete test
152     * @tc.number SUB_DDM_AppDataFWK_JSRDB_Delete_0030
153     * @tc.desc rdb delete test
154     */
155    it('testRdbStoreDelete0003', 0, async function (done) {
156        console.log(TAG + "************* testRdbStoreDelete0003 start *************");
157        var u8 = new Uint8Array([1, 2, 3])
158        {
159            const valueBucket = {
160                "name": "zhangsan",
161                "age": 18,
162                "salary": 100.5,
163                "blobType": u8,
164            }
165            await rdbStore.insert("test", valueBucket)
166        }
167        {
168            const valueBucket = {
169                "name": "lisi",
170                "age": 28,
171                "salary": 100.5,
172                "blobType": u8,
173            }
174            await rdbStore.insert("test", valueBucket)
175        }
176        {
177            let predicates = await new dataRdb.RdbPredicates("test")
178            predicates.equalTo("age", 28)
179            let resultSet = await rdbStore.query(predicates)
180            expect(1).assertEqual(resultSet.rowCount)
181            resultSet.close()
182        }
183        {
184            let predicates = await new dataRdb.RdbPredicates("test")
185            predicates.equalTo("age", 28)
186            let deletePromise = rdbStore.delete(predicates)
187            deletePromise.then(async (ret) => {
188                expect(1).assertEqual(ret)
189                console.log(TAG + "Delete done: " + ret)
190            }).catch((err) => {
191                expect(null).assertFail()
192            })
193            await deletePromise
194        }
195        {
196            let predicates = await new dataRdb.RdbPredicates("test")
197            predicates.equalTo("age", 28)
198            let resultSet = await rdbStore.query(predicates)
199            expect(0).assertEqual(resultSet.rowCount)
200            resultSet.close()
201        }
202        done()
203        console.log(TAG + "************* testRdbStoreDelete0003 end *************");
204    })
205
206    /**
207     * @tc.name rdb delete test
208     * @tc.number SUB_DDM_AppDataFWK_JSRDB_Delete_0040
209     * @tc.desc rdb delete test
210     */
211    it('testRdbStoreDelete0004', 0, async function (done) {
212        console.log(TAG + "************* testRdbStoreDelete0004 start *************");
213        var u8 = new Uint8Array([1, 2, 3])
214        {
215            const valueBucket = {
216                "name": "zhangsan",
217                "age": 18,
218                "salary": 100.5,
219                "blobType": u8,
220            }
221            await rdbStore.insert("test", valueBucket)
222        }
223        {
224            const valueBucket = {
225                "name": "lisi",
226                "age": 28,
227                "salary": 100.5,
228                "blobType": u8,
229            }
230            await rdbStore.insert("test", valueBucket)
231        }
232        {
233            const valueBucket = {
234                "name": "lisi",
235                "age": 38,
236                "salary": 100.5,
237                "blobType": u8,
238            }
239            await rdbStore.insert("test", valueBucket)
240        }
241        {
242            let predicates = await new dataRdb.RdbPredicates("test")
243            predicates.equalTo("aaa id", 1)
244            let deletePromise = rdbStore.delete(predicates)
245            deletePromise.then(async (ret) => {
246                console.log(TAG + "delete done: " + ret)
247                expect(null).assertFail()
248            }).catch((err) => {
249                console.log(TAG + "delete with wrong conditions")
250            })
251        }
252        done()
253        console.log(TAG + "************* testRdbStoreDelete0004 end *************");
254    })
255
256    /**
257     * @tc.name rdb delete test
258     * @tc.number SUB_DDM_AppDataFWK_JSRDB_Delete_0050
259     * @tc.desc rdb delete test
260     */
261    it('testRdbStoreDelete0005', 0, async function (done) {
262        console.log(TAG + "************* testRdbStoreDelete0005 start *************");
263        var u8 = new Uint8Array([1, 2, 3])
264        {
265            const valueBucket = {
266                "name": "zhangsan",
267                "age": 18,
268                "salary": 100.5,
269                "blobType": u8,
270            }
271            await rdbStore.insert("test", valueBucket)
272        }
273        {
274            const valueBucket = {
275                "name": "lisi",
276                "age": 28,
277                "salary": 100.5,
278                "blobType": u8,
279            }
280            await rdbStore.insert("test", valueBucket)
281        }
282        {
283            const valueBucket = {
284                "name": "lisi",
285                "age": 38,
286                "salary": 100.5,
287                "blobType": u8,
288            }
289            await rdbStore.insert("test", valueBucket)
290        }
291        {
292            let predicates = await new dataRdb.RdbPredicates("test")
293            predicates.equalTo("name", "lisi")
294            let deletePromise = rdbStore.delete(predicates)
295            deletePromise.then(async (ret) => {
296                expect(2).assertEqual(ret)
297                console.log(TAG + "Delete done: " + ret)
298            }).catch((err) => {
299                expect(null).assertFail()
300            })
301            await deletePromise
302        }
303        done()
304        console.log(TAG + "************* testRdbStoreDelete0005 end *************");
305    })
306
307    /**
308     * @tc.name rdb delete test
309     * @tc.number SUB_DDM_AppDataFWK_JSRDB_Delete_0060
310     * @tc.desc rdb delete test
311     */
312    it('testRdbStoreDelete0006', 0, async function (done) {
313        console.log(TAG + "************* testRdbStoreDelete0006 start *************");
314
315        try {
316            let predicates = await new dataRdb.RdbPredicates("")
317            let deletePromise = rdbStore.delete(predicates)
318            deletePromise.then(async (ret) => {
319                console.log(TAG + "delete done: " + ret)
320                expect(null).assertFail()
321            }).catch((err) => {
322                console.log(TAG + "delete with null")
323            })
324        } catch (err) {
325            console.log("catch err: failed, err: code=" + err.code + " message=" + err.message)
326            expect("401").assertEqual(err.code)
327            done()
328        }
329        done()
330        console.log(TAG + "************* testRdbStoreDelete0006 end *************");
331    })
332
333    console.log(TAG + "*************Unit Test End*************");
334})