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 dataRdb from '@ohos.data.rdb'; 18 19const TAG = "[RDB_JSKITS_TEST]" 20const CREATE_TABLE_TEST = "CREATE TABLE IF NOT EXISTS test (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + 21 "name TEXT NOT NULL, " + "age INTEGER, " + "salary REAL, " + "blobType BLOB)"; 22 23const STORE_CONFIG = { 24 name: "InsertTest.db", 25} 26 27var rdbStore = undefined; 28 29describe('rdbStoreInsertTest', function () { 30 beforeAll(async function () { 31 console.info(TAG + 'beforeAll') 32 rdbStore = await dataRdb.getRdbStore(STORE_CONFIG, 1); 33 await rdbStore.executeSql(CREATE_TABLE_TEST, null); 34 }) 35 36 beforeEach(async function () { 37 console.info(TAG + 'beforeEach') 38 await rdbStore.executeSql("DELETE FROM test"); 39 }) 40 41 afterEach(async function () { 42 console.info(TAG + 'afterEach') 43 }) 44 45 afterAll(async function () { 46 console.info(TAG + 'afterAll') 47 rdbStore = null 48 await dataRdb.deleteRdbStore("InsertTest.db"); 49 }) 50 51 console.log(TAG + "*************Unit Test Begin*************"); 52 53 /** 54 * @tc.name rdb insert test 55 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0001 56 * @tc.desc rdb insert test 57 */ 58 it('testRdbStoreInsert0001', 0, async function (done) { 59 console.log(TAG + "************* testRdbStoreInsert0001 start *************"); 60 var u8 = new Uint8Array([1, 2, 3]) 61 { 62 const valueBucket = { 63 "name": "zhangsan", 64 "age": 18, 65 "salary": 100.5, 66 "blobType": u8, 67 } 68 await rdbStore.insert("test", valueBucket) 69 } 70 { 71 const valueBucket = { 72 "name": "lisi", 73 "age": 18, 74 "salary": 100.5, 75 "blobType": u8, 76 } 77 await rdbStore.insert("test", valueBucket) 78 } 79 { 80 const valueBucket = { 81 "name": "lisi", 82 "age": 20, 83 "salary": 100.5, 84 "blobType": u8, 85 } 86 await rdbStore.insert("test", valueBucket) 87 } 88 89 let predicates = new dataRdb.RdbPredicates("test"); 90 predicates.equalTo("name", "zhangsan") 91 let resultSet = await rdbStore.query(predicates) 92 try { 93 console.log(TAG + "resultSet query done"); 94 expect(true).assertEqual(resultSet.goToFirstRow()) 95 const id = resultSet.getLong(resultSet.getColumnIndex("id")) 96 const name = resultSet.getString(resultSet.getColumnIndex("name")) 97 const age = resultSet.getLong(resultSet.getColumnIndex("age")) 98 const salary = resultSet.getDouble(resultSet.getColumnIndex("salary")) 99 const blobType = resultSet.getBlob(resultSet.getColumnIndex("blobType")) 100 console.log(TAG + "id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + ", blobType=" + blobType); 101 expect(1).assertEqual(id); 102 expect("zhangsan").assertEqual(name) 103 expect(18).assertEqual(age) 104 expect(100.5).assertEqual(salary) 105 expect(1).assertEqual(blobType[0]) 106 expect(2).assertEqual(blobType[1]) 107 expect(3).assertEqual(blobType[2]) 108 expect(false).assertEqual(resultSet.goToNextRow()) 109 } catch (e) { 110 console.log("insert1 error " + e); 111 } 112 resultSet.close() 113 resultSet = null 114 done() 115 console.log(TAG + "************* testRdbStoreInsert0001 end *************"); 116 }) 117 118 /** 119 * @tc.name rdb insert test 120 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0002 121 * @tc.desc rdb insert test 122 */ 123 it('testRdbStoreInsert0002', 0, async function (done) { 124 console.log(TAG + "************* testRdbStoreInsert0002 start *************"); 125 var u8 = new Uint8Array([1, 2, 3]) 126 { 127 const valueBucket = { 128 "name": "zhangsan", 129 "age": 18, 130 "salary": 100.5, 131 "blobType": u8, 132 } 133 let insertPromise = rdbStore.insert("wrong", valueBucket) 134 insertPromise.then(async (ret) => { 135 expect(1).assertEqual(ret) 136 console.log(TAG + "insert first done: " + ret) 137 expect(null).assertFail() 138 }).catch((err) => { 139 console.log(TAG + "insert with wrong table") 140 }) 141 } 142 done() 143 console.log(TAG + "************* testRdbStoreInsert0002 end *************"); 144 }) 145 146 /** 147 * @tc.name rdb insert test 148 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0003 149 * @tc.desc rdb insert test 150 */ 151 it('testRdbStoreInsert0003', 0, async function (done) { 152 console.log(TAG + "************* testRdbStoreInsert0003 start *************"); 153 var u8 = new Uint8Array([1, 2, 3]) 154 { 155 const valueBucket = { 156 "name": "zhangsan", 157 "age": 18, 158 "salary": 100.5, 159 "blobType": u8, 160 } 161 try { 162 let insertPromise = rdbStore.insert(null, valueBucket) 163 insertPromise.then(async (ret) => { 164 expect(1).assertEqual(ret) 165 console.log(TAG + "insert first done: " + ret) 166 expect(null).assertFail() 167 }).catch((err) => { 168 console.log(TAG + "insert with null table") 169 expect(null).assertFail() 170 }) 171 } catch(err) { 172 console.log("catch err: failed, err: code=" + err.code + " message=" + err.message) 173 expect("401").assertEqual(err.code) 174 done() 175 } 176 } 177 done() 178 console.log(TAG + "************* testRdbStoreInsert0003 end *************"); 179 }) 180 181 /** 182 * @tc.name rdb insert Extra long character test 183 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0004 184 * @tc.desc rdb insert Extra long character test 185 */ 186 it('testRdbStoreInsert0004', 0, async function (done) { 187 console.log(TAG + "************* testRdbStoreInsert0004 start *************"); 188 var u8 = new Uint8Array([1, 2, 3]) 189 var nameStr = "abcd" + "e".repeat(2000) + "./&*$!@()" 190 const valueBucket = { 191 "name": nameStr, 192 "age": 19, 193 "salary": 100.5, 194 "blobType": u8, 195 } 196 await rdbStore.insert("test", valueBucket) 197 let predicates = new dataRdb.RdbPredicates("test"); 198 predicates.equalTo("age", 19) 199 let resultSet = await rdbStore.query(predicates) 200 try { 201 console.log(TAG + "resultSet query done"); 202 expect(true).assertEqual(resultSet.goToFirstRow()) 203 const name = resultSet.getString(resultSet.getColumnIndex("name")) 204 console.log(TAG + "id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + ", blobType=" + blobType); 205 expect(nameStr).assertEqual(name) 206 } catch (e) { 207 console.log("insert error " + e); 208 } 209 resultSet.close() 210 resultSet = null 211 done() 212 console.log(TAG + "************* testRdbStoreInsert0004 end *************"); 213 }) 214 215 /** 216 * @tc.name rdb insert Extra long character test 217 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0005 218 * @tc.desc rdb insert Extra long character test 219 */ 220 it('testRdbStoreInsert0005', 0, async function (done) { 221 console.log(TAG + "************* testRdbStoreInsert0005 start *************"); 222 var u8 = new Uint8Array([1, 2, 3]) 223 var nameStr = "苹果是水果" + "e".repeat(2000) 224 const valueBucket = { 225 "name": nameStr, 226 "age": 20, 227 "salary": 100.5, 228 "blobType": u8, 229 } 230 await rdbStore.insert("test", valueBucket) 231 let predicates = new dataRdb.RdbPredicates("test"); 232 predicates.equalTo("age", 20) 233 let resultSet = await rdbStore.query(predicates) 234 try { 235 console.log(TAG + "resultSet query done"); 236 expect(true).assertEqual(resultSet.goToFirstRow()) 237 const name = resultSet.getString(resultSet.getColumnIndex("name")) 238 console.log(TAG + "id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + ", blobType=" + blobType); 239 expect(nameStr).assertEqual(name) 240 } catch (e) { 241 console.log("insert error " + e); 242 } 243 resultSet.close() 244 resultSet = null 245 done() 246 console.log(TAG + "************* testRdbStoreInsert0005 end *************"); 247 }) 248 249 /** 250 * @tc.name rdb insert Extra long character test 251 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0006 252 * @tc.desc rdb insert Extra long character test 253 */ 254 it('testRdbStoreInsert0006', 0, async function (done) { 255 console.log(TAG + "************* testRdbStoreInsert0006 start *************"); 256 var u8 = new Uint8Array([1, 2, 3]) 257 var nameStr = "西瓜是水果" + "e".repeat(2000) + "好吃又好看" 258 const valueBucket = { 259 "name": nameStr, 260 "age": 21, 261 "salary": 100.5, 262 "blobType": u8, 263 } 264 await rdbStore.insert("test", valueBucket) 265 let predicates = new dataRdb.RdbPredicates("test"); 266 predicates.equalTo("age", 21) 267 let resultSet = await rdbStore.query(predicates) 268 try { 269 console.log(TAG + "resultSet query done"); 270 expect(true).assertEqual(resultSet.goToFirstRow()) 271 const name = resultSet.getString(resultSet.getColumnIndex("name")) 272 console.log(TAG + "id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + ", blobType=" + blobType); 273 expect(nameStr).assertEqual(name) 274 } catch (e) { 275 console.log("insert error " + e); 276 } 277 resultSet.close() 278 resultSet = null 279 done() 280 console.log(TAG + "************* testRdbStoreInsert0006 end *************"); 281 }) 282 283 /** 284 * @tc.name rdb getString test 285 * @tc.number SUB_DDM_AppDataFWK_JSRDB_GetString_0001 286 * @tc.desc rdb getString test of the null value 287 */ 288 it('testRdbStoreGetString0001', 0, async function (done) { 289 console.log(TAG + "************* testRdbStoreGetString0001 start *************"); 290 var u8 = new Uint8Array([1, 2, 3]) 291 const valueBucket = { 292 "name": "", 293 "age": 21, 294 "salary": 100.5, 295 "blobType": u8, 296 } 297 await rdbStore.insert("test", valueBucket) 298 let predicates = new dataRdb.RdbPredicates("test"); 299 predicates.equalTo("name", "") 300 let resultSet = await rdbStore.query(predicates) 301 try { 302 console.log(TAG + "resultSet query done"); 303 expect(true).assertEqual(resultSet.goToFirstRow()) 304 const name = resultSet.getString(resultSet.getColumnIndex("name")) 305 expect("").assertEqual(name) 306 } catch (e) { 307 console.log("insert error " + e); 308 expect().assertFail(); 309 } 310 resultSet.close() 311 resultSet = null 312 done() 313 console.log(TAG + "************* testRdbStoreGetString0001 end *************"); 314 }) 315 316 /** 317 * @tc.name: rdb batchInsert test 318 * @tc.number: SUB_DDM_AppDataFWK_JSRDB_batchInsert_0001 319 * @tc.desc: rdb batchInsert test 320 * @tc.require: issueI5GZGX 321 */ 322 it('testRdbStorebatchInsert001', 0, async function () { 323 console.log(TAG + "************* testRdbStorebatchInsert001 start *************"); 324 325 var u8 = new Uint8Array([1, 2, 3]) 326 const valueBucket = { 327 "name": "zhangsan", 328 "age": 18, 329 "salary": 100.5, 330 "blobType": u8, 331 } 332 let valueBucketArray = new Array(); 333 for (let i = 0; i < 100; i++) { 334 valueBucketArray.push(valueBucket); 335 } 336 await rdbStore.batchInsert("test", valueBucketArray); 337 let resultSet = await rdbStore.querySql("SELECT * FROM test"); 338 let count = resultSet.rowCount; 339 expect(100).assertEqual(count); 340 resultSet.close() 341 console.log(TAG + "************* testRdbStorebatchInsert001 end *************"); 342 }) 343 344 /** 345 * @tc.name: rdb batchInsert test 346 * @tc.number: SUB_DDM_AppDataFWK_JSRDB_batchInsert_0001 347 * @tc.desc: rdb batchInsert test 348 * @tc.require: issueI5GZGX 349 */ 350 it('testRdbStorebatchInsert002', 0, async function () { 351 console.log(TAG + "************* testRdbStorebatchInsert002 start *************"); 352 353 await rdbStore.executeSql("delete from test"); 354 355 let valueBucketArray = new Array(); 356 357 var u8 = new Uint8Array([1, 2, 3]) 358 const valueBucket = { 359 "name": "zhangsan", 360 "age": 18, 361 "salary": 11.5, 362 "blobType": u8, 363 } 364 const valueBucket1 = { 365 "name": "lisi", 366 "age": 15, 367 "salary": 100.5, 368 "blobType": u8, 369 } 370 const valueBucket2 = { 371 "name": "zhaoliu", 372 "salary": 1.5, 373 } 374 const valueBucket3 = { 375 "name": "lisi", 376 "age": 18, 377 "salary": 111.5, 378 "blobType": u8, 379 } 380 381 valueBucketArray.push(valueBucket); 382 valueBucketArray.push(valueBucket1); 383 valueBucketArray.push(valueBucket2); 384 valueBucketArray.push(valueBucket3); 385 386 let errCode = await rdbStore.batchInsert("test", valueBucketArray); 387 expect(4).assertEqual(errCode); 388 let resultSet = await rdbStore.querySql("SELECT * FROM test"); 389 let count = resultSet.rowCount; 390 expect(4).assertEqual(count); 391 resultSet.close() 392 393 let predicates = new dataRdb.RdbPredicates("test"); 394 predicates.equalTo("salary", 1.5); 395 resultSet = await rdbStore.query(predicates, []); 396 count = resultSet.rowCount; 397 expect(1).assertEqual(count); 398 resultSet.close(); 399 400 let secPredicates = new dataRdb.RdbPredicates("test"); 401 secPredicates.equalTo("age", 18); 402 resultSet = await rdbStore.query(secPredicates, []); 403 count = resultSet.rowCount; 404 expect(2).assertEqual(count); 405 resultSet.close(); 406 407 console.log(TAG + "************* testRdbStorebatchInsert002 end *************"); 408 }) 409 410 /** 411 * @tc.name: rdb batchInsert test 412 * @tc.number: SUB_DDM_AppDataFWK_JSRDB_batchInsert_0003 413 * @tc.desc: rdb batchInsert not exist column test 414 * @tc.require: issueIB3DGQ 415 */ 416 it('testRdbStorebatchInsert003', 0, async function () { 417 console.log(TAG + "************* testRdbStorebatchInsert003 start *************"); 418 419 await rdbStore.executeSql("delete from test"); 420 421 let valueBucketArray = new Array(); 422 423 var u8 = new Uint8Array([1, 2, 3]) 424 const valueBucket = { 425 "name": "zhangsan", 426 "age": 18, 427 "salary": 11.5, 428 "blobType": u8, 429 "notexistcolumn": 1, 430 } 431 valueBucketArray.push(valueBucket); 432 433 let errCode = await rdbStore.batchInsert("test", valueBucketArray); 434 expect(-1).assertEqual(errCode); 435 let resultSet = await rdbStore.querySql("SELECT * FROM test"); 436 let count = resultSet.rowCount; 437 expect(0).assertEqual(count); 438 resultSet.close() 439 console.log(TAG + "************* testRdbStorebatchInsert003 end *************"); 440 }) 441 console.log(TAG + "*************Unit Test End*************"); 442})