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 */ 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 UNIQUE, " + "age INTEGER, " + "salary REAL, " + "blobType BLOB)"; 21const STORE_CONFIG = { 22 name: "UpdataTest.db", 23} 24var rdbStore = undefined; 25 26 27describe('rdbStoreUpdateTest', function () { 28 beforeAll(async function () { 29 console.info(TAG + 'beforeAll') 30 rdbStore = await dataRdb.getRdbStore(STORE_CONFIG, 1); 31 await rdbStore.executeSql(CREATE_TABLE_TEST, null); 32 }) 33 34 beforeEach(async function () { 35 await rdbStore.executeSql("DELETE FROM test"); 36 console.info(TAG + 'beforeEach') 37 }) 38 39 afterEach(function () { 40 console.info(TAG + 'afterEach') 41 }) 42 43 afterAll(async function () { 44 console.info(TAG + 'afterAll') 45 rdbStore = null 46 await dataRdb.deleteRdbStore("UpdataTest.db"); 47 }) 48 49 /** 50 * @tc.name resultSet Update test 51 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0001 52 * @tc.desc resultSet Update test 53 */ 54 it('testRdbStoreUpdate0001', 0, async function () { 55 console.log(TAG + "************* testRdbStoreUpdate0001 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 let ret = await rdbStore.insert("test", valueBucket) 65 expect(1).assertEqual(ret); 66 } 67 try { 68 var u8 = new Uint8Array([4, 5, 6]) 69 const valueBucket = { 70 "name": "lisi", 71 "age": 20, 72 "salary": 200.5, 73 "blobType": u8, 74 } 75 let predicates = await new dataRdb.RdbPredicates("test") 76 await predicates.equalTo("id", "1") 77 let ret = await rdbStore.update(valueBucket, predicates) 78 await expect(1).assertEqual(ret); 79 await console.log(TAG + "update done: " + ret); 80 81 predicates = await new dataRdb.RdbPredicates("test") 82 let resultSet = await rdbStore.query(predicates) 83 try { 84 expect(true).assertEqual(resultSet.goToFirstRow()) 85 const id = await resultSet.getLong(resultSet.getColumnIndex("id")) 86 const name = await resultSet.getString(resultSet.getColumnIndex("name")) 87 const age = await resultSet.getLong(resultSet.getColumnIndex("age")) 88 const salary = await resultSet.getDouble(resultSet.getColumnIndex("salary")) 89 const blobType = await resultSet.getBlob(resultSet.getColumnIndex("blobType")) 90 91 await expect(1).assertEqual(id); 92 await expect("lisi").assertEqual(name); 93 await expect(20).assertEqual(age); 94 await expect(200.5).assertEqual(salary); 95 await expect(4).assertEqual(blobType[0]); 96 await expect(5).assertEqual(blobType[1]); 97 await expect(6).assertEqual(blobType[2]); 98 await expect(false).assertEqual(resultSet.goToNextRow()) 99 } finally { 100 resultSet.close() 101 resultSet = null 102 } 103 } catch (err) { 104 console.log(TAG + `failed, errcode:${JSON.stringify(err)}.`); 105 expect().assertFail() 106 } 107 console.log(TAG + "************* testRdbStoreUpdate0001 end *************"); 108 }) 109 110 /** 111 * @tc.name resultSet Update test 112 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0002 113 * @tc.desc resultSet Update test 114 */ 115 it('testRdbStoreUpdate0002', 0, async function () { 116 console.log(TAG + "************* testRdbStoreUpdate0002 start *************"); 117 var u8 = new Uint8Array([1, 2, 3]) 118 const valueBucket = { 119 "name": "zhangsan", 120 "age": 18, 121 "salary": 100.5, 122 "blobType": u8, 123 } 124 try { 125 let predicates = new dataRdb.RdbPredicates("") 126 await rdbStore.update(valueBucket, predicates) 127 expect().assertFail() 128 } catch (err) { 129 console.log(TAG + `empty failed, errcode:${JSON.stringify(err)}.`); 130 expect("401").assertEqual(err.code) 131 } 132 try { 133 const emptyBucket = {}; 134 let predicates = await new dataRdb.RdbPredicates("test") 135 await rdbStore.update(emptyBucket, predicates) 136 expect().assertFail() 137 } catch (err) { 138 console.log(TAG + `test failed, errcode:${JSON.stringify(err)}.`); 139 } 140 141 try { 142 let predicates = await new dataRdb.RdbPredicates("test") 143 await predicates.equalTo("aaa", "null") 144 await rdbStore.update(valueBucket, predicates); 145 expect().assertFail() 146 } catch (err) { 147 console.log(TAG + `aaa failed, errcode:${JSON.stringify(err)}.`); 148 } 149 console.log(TAG + "************* testRdbStoreUpdate0002 end *************"); 150 }) 151 152 /** 153 * @tc.name resultSet Update test 154 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0003 155 * @tc.desc resultSet Update test 156 */ 157 it('testRdbStoreUpdate0003', 0, async function () { 158 console.log(TAG + "************* testRdbStoreUpdate0003 start *************"); 159 var u8 = new Uint8Array([1, 2, 3]) 160 const valueBucket = { 161 "name": "zhangsan", 162 "age": 18, 163 "salary": 100.5, 164 "blobType": u8, 165 "wrongColumn": 100.5, 166 } 167 try { 168 let predicates = new dataRdb.RdbPredicates("wrongTable") 169 await rdbStore.update(valueBucket, predicates) 170 expect().assertFail(); 171 } catch (err) { 172 console.log(TAG + `wrongTable failed, errcode:${JSON.stringify(err)}.`); 173 } 174 try { 175 let predicates = await new dataRdb.RdbPredicates("test") 176 await rdbStore.update(valueBucket, predicates) 177 expect().assertFail(); 178 } catch (err) { 179 console.log(TAG + `test failed, errcode:${JSON.stringify(err)}.`); 180 } 181 console.log(TAG + "************* testRdbStoreUpdate0003 end *************"); 182 }) 183 184 /** 185 * @tc.name resultSet Update test 186 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0004 187 * @tc.desc resultSet Update test 188 */ 189 it('testRdbStoreUpdate0004', 0, async function () { 190 console.log(TAG + "************* testRdbStoreUpdate0004 start *************"); 191 var u8 = new Uint8Array([1, 2, 3]) 192 const valueBucket = { 193 "name": "zhangsan", 194 "age": 18, 195 "salary": 100.5, 196 "blobType": u8, 197 } 198 try { 199 let predicates = await new dataRdb.RdbPredicates("test") 200 await predicates.equalTo("aaa", "null") 201 await rdbStore.update(valueBucket, predicates) 202 expect().assertFail(); 203 } catch (err) { 204 console.log(TAG + `test failed, errcode:${JSON.stringify(err)}.`); 205 } 206 try { 207 const emptyBucket = {}; 208 let predicates = await new dataRdb.RdbPredicates("test") 209 await predicates.equalTo("name", "zhangsan") 210 await predicates.equalTo("age", 18) 211 await predicates.equalTo("null", 100.5) 212 await rdbStore.update(emptyBucket, predicates) 213 expect().assertFail(); 214 } catch (err) { 215 console.log(TAG + `emptyBucket failed, errcode:${JSON.stringify(err)}.`); 216 } 217 console.log(TAG + "************* testRdbStoreUpdate0004 end *************"); 218 }) 219 220 /** 221 * @tc.name resultSet Update Extra long character test 222 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0005 223 * @tc.desc resultSet Update Extra long character test 224 */ 225 it('testRdbStoreUpdate0005', 0, async function () { 226 console.log(TAG + "************* testRdbStoreUpdate0005 start *************"); 227 var u8 = new Uint8Array([1, 2, 3]) 228 { 229 const valueBucket = { 230 "name": "xiaoming", 231 "age": 18, 232 "salary": 100.5, 233 "blobType": u8, 234 } 235 await rdbStore.insert("test", valueBucket) 236 } 237 try { 238 var u8 = new Uint8Array([4, 5, 6]) 239 var nameStr = "abcd" + "e".repeat(2000) + "./&*$!@()" 240 const valueBucket = { 241 "name": nameStr, 242 "age": 20, 243 "salary": 200.5, 244 "blobType": u8, 245 } 246 let predicates = await new dataRdb.RdbPredicates("test") 247 await predicates.equalTo("name", "xiaoming") 248 let ret = await rdbStore.update(valueBucket, predicates) 249 await expect(1).assertEqual(ret); 250 await console.log(TAG + "update done: " + ret); 251 252 predicates = await new dataRdb.RdbPredicates("test") 253 predicates.equalTo("age", 20) 254 let resultSet = await rdbStore.query(predicates) 255 try { 256 expect(true).assertEqual(resultSet.goToFirstRow()) 257 const name = await resultSet.getString(resultSet.getColumnIndex("name")) 258 await expect(nameStr).assertEqual(name); 259 } finally { 260 resultSet.close() 261 resultSet = null 262 } 263 } catch (err) { 264 console.log(TAG + `failed, errcode:${JSON.stringify(err)}.`); 265 expect().assertFail(); 266 } 267 console.log(TAG + "************* testRdbStoreUpdate0005 end *************"); 268 }) 269 270 /** 271 * @tc.name resultSet Update Extra long character test 272 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0006 273 * @tc.desc resultSet Update Extra long character test 274 */ 275 it('testRdbStoreUpdate0006', 0, async function () { 276 console.log(TAG + "************* testRdbStoreUpdate0006 start *************"); 277 var u8 = new Uint8Array([1, 2, 3]) 278 { 279 const valueBucket = { 280 "name": "xiaohua", 281 "age": 18, 282 "salary": 100.5, 283 "blobType": u8, 284 } 285 await rdbStore.insert("test", valueBucket) 286 } 287 try { 288 var u8 = new Uint8Array([4, 5, 6]) 289 var nameStr = "橘子是水果" + "e".repeat(2000) 290 const valueBucket = { 291 "name": nameStr, 292 "age": 19, 293 "salary": 200.5, 294 "blobType": u8, 295 } 296 let predicates = await new dataRdb.RdbPredicates("test") 297 await predicates.equalTo("name", "xiaohua") 298 let ret = await rdbStore.update(valueBucket, predicates) 299 await expect(1).assertEqual(ret); 300 await console.log(TAG + "update done: " + ret); 301 302 predicates = await new dataRdb.RdbPredicates("test") 303 predicates.equalTo("age", 19) 304 let resultSet = await rdbStore.query(predicates) 305 try { 306 expect(true).assertEqual(resultSet.goToFirstRow()) 307 const name = await resultSet.getString(resultSet.getColumnIndex("name")) 308 await expect(nameStr).assertEqual(name); 309 } finally { 310 resultSet.close() 311 resultSet = null 312 } 313 } catch (err) { 314 console.log(TAG + `failed, errcode:${JSON.stringify(err)}.`); 315 expect().assertFail(); 316 } 317 console.log(TAG + "************* testRdbStoreUpdate0006 end *************"); 318 }) 319 320 /** 321 * @tc.name resultSet Update Extra long character test 322 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0007 323 * @tc.desc resultSet Update Extra long character test 324 */ 325 it('testRdbStoreUpdate0007', 0, async function () { 326 console.log(TAG + "************* testRdbStoreUpdate0007 start *************"); 327 var u8 = new Uint8Array([1, 2, 3]) 328 { 329 const valueBucket = { 330 "name": "xiaocan", 331 "age": 18, 332 "salary": 100.5, 333 "blobType": u8, 334 } 335 await rdbStore.insert("test", valueBucket) 336 } 337 try { 338 var u8 = new Uint8Array([4, 5, 6]) 339 var nameStr = "菠萝是水果" + "e".repeat(2000) + "好吃又不贵" 340 const valueBucket = { 341 "name": nameStr, 342 "age": 21, 343 "salary": 200.5, 344 "blobType": u8, 345 } 346 let predicates = await new dataRdb.RdbPredicates("test") 347 await predicates.equalTo("name", "xiaocan") 348 let ret = await rdbStore.update(valueBucket, predicates); 349 await expect(1).assertEqual(ret); 350 await console.log(TAG + "update done: " + ret); 351 352 predicates = await new dataRdb.RdbPredicates("test") 353 predicates.equalTo("age", 21) 354 let resultSet = await rdbStore.query(predicates) 355 try { 356 expect(true).assertEqual(resultSet.goToFirstRow()) 357 const name = await resultSet.getString(resultSet.getColumnIndex("name")) 358 await expect(nameStr).assertEqual(name); 359 } finally { 360 resultSet.close() 361 resultSet = null 362 } 363 } catch (err) { 364 console.log(TAG + `failed, errcode:${JSON.stringify(err)}.`); 365 expect().assertFail(); 366 } 367 console.log(TAG + "************* testRdbStoreUpdate0007 end *************"); 368 }) 369 console.log(TAG + "*************Unit Test End*************"); 370})