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, " + "name TEXT NOT NULL, " + "age INTEGER, " + "salary REAL, " + "blobType BLOB)"; 21 22const STORE_CONFIG = { 23 name: "InsertTest.db", 24} 25 26var rdbStore = undefined; 27 28describe('rdbStoreInsertTest', function () { 29 beforeAll(async function () { 30 console.info(TAG + 'beforeAll') 31 rdbStore = await dataRdb.getRdbStore(STORE_CONFIG, 1); 32 await rdbStore.executeSql(CREATE_TABLE_TEST, null); 33 }) 34 35 beforeEach(async function () { 36 console.info(TAG + 'beforeEach') 37 await rdbStore.executeSql("DELETE FROM test"); 38 }) 39 40 afterEach(async function () { 41 console.info(TAG + 'afterEach') 42 }) 43 44 afterAll(async function () { 45 console.info(TAG + 'afterAll') 46 rdbStore = null 47 await dataRdb.deleteRdbStore("InsertTest.db"); 48 }) 49 50 console.log(TAG + "*************Unit Test Begin*************"); 51 52 /** 53 * @tc.name rdb insert test 54 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0001 55 * @tc.desc rdb insert test 56 */ 57 it('testRdbStoreInsert0001', 0, async function (done) { 58 console.log(TAG + "************* testRdbStoreInsert0001 start *************"); 59 var u8 = new Uint8Array([1, 2, 3]) 60 { 61 const valueBucket = { 62 "name": "zhangsan", 63 "age": 18, 64 "salary": 100.5, 65 "blobType": u8, 66 } 67 await rdbStore.insert("test", valueBucket) 68 } 69 { 70 const valueBucket = { 71 "name": "lisi", 72 "age": 18, 73 "salary": 100.5, 74 "blobType": u8, 75 } 76 await rdbStore.insert("test", valueBucket) 77 } 78 { 79 const valueBucket = { 80 "name": "lisi", 81 "age": 20, 82 "salary": 100.5, 83 "blobType": u8, 84 } 85 await rdbStore.insert("test", valueBucket) 86 } 87 88 let predicates = new dataRdb.RdbPredicates("test"); 89 predicates.equalTo("name", "zhangsan") 90 let resultSet = await rdbStore.query(predicates) 91 try { 92 console.log(TAG + "resultSet query done"); 93 expect(true).assertEqual(resultSet.goToFirstRow()) 94 const id = resultSet.getLong(resultSet.getColumnIndex("id")) 95 const name = resultSet.getString(resultSet.getColumnIndex("name")) 96 const age = resultSet.getLong(resultSet.getColumnIndex("age")) 97 const salary = resultSet.getDouble(resultSet.getColumnIndex("salary")) 98 const blobType = resultSet.getBlob(resultSet.getColumnIndex("blobType")) 99 console.log(TAG + "id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + ", blobType=" + blobType); 100 expect(1).assertEqual(id); 101 expect("zhangsan").assertEqual(name) 102 expect(18).assertEqual(age) 103 expect(100.5).assertEqual(salary) 104 expect(1).assertEqual(blobType[0]) 105 expect(2).assertEqual(blobType[1]) 106 expect(3).assertEqual(blobType[2]) 107 expect(false).assertEqual(resultSet.goToNextRow()) 108 } catch (e) { 109 console.log("insert1 error " + e); 110 } 111 resultSet = null 112 done() 113 console.log(TAG + "************* testRdbStoreInsert0001 end *************"); 114 }) 115 116 /** 117 * @tc.name rdb insert test 118 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0002 119 * @tc.desc rdb insert test 120 */ 121 it('testRdbStoreInsert0002', 0, async function (done) { 122 console.log(TAG + "************* testRdbStoreInsert0002 start *************"); 123 var u8 = new Uint8Array([1, 2, 3]) 124 { 125 const valueBucket = { 126 "name": "zhangsan", 127 "age": 18, 128 "salary": 100.5, 129 "blobType": u8, 130 } 131 let insertPromise = rdbStore.insert("wrong", valueBucket) 132 insertPromise.then(async (ret) => { 133 expect(1).assertEqual(ret) 134 console.log(TAG + "insert first done: " + ret) 135 expect(null).assertFail() 136 }).catch((err) => { 137 console.log(TAG + "insert with wrong table") 138 }) 139 } 140 done() 141 console.log(TAG + "************* testRdbStoreInsert0002 end *************"); 142 }) 143 144 /** 145 * @tc.name rdb insert test 146 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0003 147 * @tc.desc rdb insert test 148 */ 149 it('testRdbStoreInsert0003', 0, async function (done) { 150 console.log(TAG + "************* testRdbStoreInsert0003 start *************"); 151 var u8 = new Uint8Array([1, 2, 3]) 152 { 153 const valueBucket = { 154 "name": "zhangsan", 155 "age": 18, 156 "salary": 100.5, 157 "blobType": u8, 158 } 159 try { 160 let insertPromise = rdbStore.insert(null, valueBucket) 161 insertPromise.then(async (ret) => { 162 expect(1).assertEqual(ret) 163 console.log(TAG + "insert first done: " + ret) 164 expect(null).assertFail() 165 }).catch((err) => { 166 console.log(TAG + "insert with null table") 167 expect(null).assertFail() 168 }) 169 } catch(err) { 170 console.log("catch err: failed, err: code=" + err.code + " message=" + err.message) 171 expect("401").assertEqual(err.code) 172 done() 173 } 174 } 175 done() 176 console.log(TAG + "************* testRdbStoreInsert0003 end *************"); 177 }) 178 179 /** 180 * @tc.name rdb insert Extra long character test 181 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0004 182 * @tc.desc rdb insert Extra long character test 183 */ 184 it('testRdbStoreInsert0004', 0, async function (done) { 185 console.log(TAG + "************* testRdbStoreInsert0004 start *************"); 186 var u8 = new Uint8Array([1, 2, 3]) 187 var nameStr = "abcd" + "e".repeat(2000) + "./&*$!@()" 188 const valueBucket = { 189 "name": nameStr, 190 "age": 19, 191 "salary": 100.5, 192 "blobType": u8, 193 } 194 await rdbStore.insert("test", valueBucket) 195 let predicates = new dataRdb.RdbPredicates("test"); 196 predicates.equalTo("age", 19) 197 let resultSet = await rdbStore.query(predicates) 198 try { 199 console.log(TAG + "resultSet query done"); 200 expect(true).assertEqual(resultSet.goToFirstRow()) 201 const name = resultSet.getString(resultSet.getColumnIndex("name")) 202 console.log(TAG + "id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + ", blobType=" + blobType); 203 expect(nameStr).assertEqual(name) 204 } catch (e) { 205 console.log("insert error " + e); 206 } 207 resultSet = null 208 done() 209 console.log(TAG + "************* testRdbStoreInsert0004 end *************"); 210 }) 211 212 /** 213 * @tc.name rdb insert Extra long character test 214 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0005 215 * @tc.desc rdb insert Extra long character test 216 */ 217 it('testRdbStoreInsert0005', 0, async function (done) { 218 console.log(TAG + "************* testRdbStoreInsert0005 start *************"); 219 var u8 = new Uint8Array([1, 2, 3]) 220 var nameStr = "苹果是水果" + "e".repeat(2000) 221 const valueBucket = { 222 "name": nameStr, 223 "age": 20, 224 "salary": 100.5, 225 "blobType": u8, 226 } 227 await rdbStore.insert("test", valueBucket) 228 let predicates = new dataRdb.RdbPredicates("test"); 229 predicates.equalTo("age", 20) 230 let resultSet = await rdbStore.query(predicates) 231 try { 232 console.log(TAG + "resultSet query done"); 233 expect(true).assertEqual(resultSet.goToFirstRow()) 234 const name = resultSet.getString(resultSet.getColumnIndex("name")) 235 console.log(TAG + "id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + ", blobType=" + blobType); 236 expect(nameStr).assertEqual(name) 237 } catch (e) { 238 console.log("insert error " + e); 239 } 240 resultSet = null 241 done() 242 console.log(TAG + "************* testRdbStoreInsert0005 end *************"); 243 }) 244 245 /** 246 * @tc.name rdb insert Extra long character test 247 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Insert_0006 248 * @tc.desc rdb insert Extra long character test 249 */ 250 it('testRdbStoreInsert0006', 0, async function (done) { 251 console.log(TAG + "************* testRdbStoreInsert0006 start *************"); 252 var u8 = new Uint8Array([1, 2, 3]) 253 var nameStr = "西瓜是水果" + "e".repeat(2000) + "好吃又好看" 254 const valueBucket = { 255 "name": nameStr, 256 "age": 21, 257 "salary": 100.5, 258 "blobType": u8, 259 } 260 await rdbStore.insert("test", valueBucket) 261 let predicates = new dataRdb.RdbPredicates("test"); 262 predicates.equalTo("age", 21) 263 let resultSet = await rdbStore.query(predicates) 264 try { 265 console.log(TAG + "resultSet query done"); 266 expect(true).assertEqual(resultSet.goToFirstRow()) 267 const name = resultSet.getString(resultSet.getColumnIndex("name")) 268 console.log(TAG + "id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + ", blobType=" + blobType); 269 expect(nameStr).assertEqual(name) 270 } catch (e) { 271 console.log("insert error " + e); 272 } 273 resultSet = null 274 done() 275 console.log(TAG + "************* testRdbStoreInsert0006 end *************"); 276 }) 277 278 /** 279 * @tc.name: rdb batchInsert test 280 * @tc.number: SUB_DDM_AppDataFWK_JSRDB_batchInsert_0001 281 * @tc.desc: rdb batchInsert test 282 * @tc.require: issueI5GZGX 283 */ 284 it('testRdbStorebatchInsert001', 0, async function () { 285 console.log(TAG + "************* testRdbStorebatchInsert001 start *************"); 286 287 var u8 = new Uint8Array([1, 2, 3]) 288 const valueBucket = { 289 "name": "zhangsan", 290 "age": 18, 291 "salary": 100.5, 292 "blobType": u8, 293 } 294 let valueBucketArray = new Array(); 295 for (let i = 0; i < 100; i++) { 296 valueBucketArray.push(valueBucket); 297 } 298 await rdbStore.batchInsert("test", valueBucketArray); 299 let resultSet = await rdbStore.querySql("SELECT * FROM test"); 300 let count = resultSet.rowCount; 301 expect(100).assertEqual(count); 302 console.log(TAG + "************* testRdbStorebatchInsert001 end *************"); 303 }) 304 305 console.log(TAG + "*************Unit Test End*************"); 306})