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 try { 141 let predicates = await new dataRdb.RdbPredicates("test") 142 await predicates.equalTo("aaa", "null") 143 await rdbStore.update(valueBucket, predicates); 144 expect().assertFail() 145 } catch (err) { 146 console.log(TAG + `aaa failed, errcode:${JSON.stringify(err)}.`); 147 } 148 console.log(TAG + "************* testRdbStoreUpdate0002 end *************"); 149 }) 150 151 /** 152 * @tc.name resultSet Update test 153 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0003 154 * @tc.desc resultSet Update test 155 */ 156 it('testRdbStoreUpdate0003', 0, async function () { 157 console.log(TAG + "************* testRdbStoreUpdate0003 start *************"); 158 var u8 = new Uint8Array([1, 2, 3]) 159 const valueBucket = { 160 "name": "zhangsan", 161 "age": 18, 162 "salary": 100.5, 163 "blobType": u8, 164 "wrongColumn": 100.5, 165 } 166 try { 167 let predicates = new dataRdb.RdbPredicates("wrongTable") 168 await rdbStore.update(valueBucket, predicates) 169 expect().assertFail(); 170 } catch (err) { 171 console.log(TAG + `wrongTable failed, errcode:${JSON.stringify(err)}.`); 172 } 173 try { 174 let predicates = await new dataRdb.RdbPredicates("test") 175 await rdbStore.update(valueBucket, predicates) 176 expect().assertFail(); 177 } catch (err) { 178 console.log(TAG + `test failed, errcode:${JSON.stringify(err)}.`); 179 } 180 console.log(TAG + "************* testRdbStoreUpdate0003 end *************"); 181 }) 182 183 /** 184 * @tc.name resultSet Update test 185 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0004 186 * @tc.desc resultSet Update test 187 */ 188 it('testRdbStoreUpdate0004', 0, async function () { 189 console.log(TAG + "************* testRdbStoreUpdate0004 start *************"); 190 var u8 = new Uint8Array([1, 2, 3]) 191 const valueBucket = { 192 "name": "zhangsan", 193 "age": 18, 194 "salary": 100.5, 195 "blobType": u8, 196 } 197 try { 198 let predicates = await new dataRdb.RdbPredicates("test") 199 await predicates.equalTo("aaa", "null") 200 await rdbStore.update(valueBucket, predicates) 201 expect().assertFail(); 202 } catch (err) { 203 console.log(TAG + `test failed, errcode:${JSON.stringify(err)}.`); 204 } 205 try { 206 const emptyBucket = {}; 207 let predicates = await new dataRdb.RdbPredicates("test") 208 await predicates.equalTo("name", "zhangsan") 209 await predicates.equalTo("age", 18) 210 await predicates.equalTo("null", 100.5) 211 await rdbStore.update(emptyBucket, predicates) 212 expect().assertFail(); 213 } catch (err) { 214 console.log(TAG + `emptyBucket failed, errcode:${JSON.stringify(err)}.`); 215 } 216 console.log(TAG + "************* testRdbStoreUpdate0004 end *************"); 217 }) 218 219 /** 220 * @tc.name resultSet Update Extra long character test 221 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0005 222 * @tc.desc resultSet Update Extra long character test 223 */ 224 it('testRdbStoreUpdate0005', 0, async function () { 225 console.log(TAG + "************* testRdbStoreUpdate0005 start *************"); 226 var u8 = new Uint8Array([1, 2, 3]) 227 { 228 const valueBucket = { 229 "name": "xiaoming", 230 "age": 18, 231 "salary": 100.5, 232 "blobType": u8, 233 } 234 await rdbStore.insert("test", valueBucket) 235 } 236 try { 237 var u8 = new Uint8Array([4, 5, 6]) 238 var nameStr = "abcd" + "e".repeat(2000) + "./&*$!@()" 239 const valueBucket = { 240 "name": nameStr, 241 "age": 20, 242 "salary": 200.5, 243 "blobType": u8, 244 } 245 let predicates = await new dataRdb.RdbPredicates("test") 246 await predicates.equalTo("name", "xiaoming") 247 let ret = await rdbStore.update(valueBucket, predicates) 248 await expect(1).assertEqual(ret); 249 await console.log(TAG + "update done: " + ret); 250 251 predicates = await new dataRdb.RdbPredicates("test") 252 predicates.equalTo("age", 20) 253 let resultSet = await rdbStore.query(predicates) 254 try { 255 expect(true).assertEqual(resultSet.goToFirstRow()) 256 const name = await resultSet.getString(resultSet.getColumnIndex("name")) 257 await expect(nameStr).assertEqual(name); 258 } finally { 259 resultSet.close() 260 resultSet = null 261 } 262 } catch (err) { 263 console.log(TAG + `failed, errcode:${JSON.stringify(err)}.`); 264 expect().assertFail(); 265 } 266 console.log(TAG + "************* testRdbStoreUpdate0005 end *************"); 267 }) 268 269 /** 270 * @tc.name resultSet Update Extra long character test 271 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0006 272 * @tc.desc resultSet Update Extra long character test 273 */ 274 it('testRdbStoreUpdate0006', 0, async function () { 275 console.log(TAG + "************* testRdbStoreUpdate0006 start *************"); 276 var u8 = new Uint8Array([1, 2, 3]) 277 { 278 const valueBucket = { 279 "name": "xiaohua", 280 "age": 18, 281 "salary": 100.5, 282 "blobType": u8, 283 } 284 await rdbStore.insert("test", valueBucket) 285 } 286 try { 287 var u8 = new Uint8Array([4, 5, 6]) 288 var nameStr = "橘子是水果" + "e".repeat(2000) 289 const valueBucket = { 290 "name": nameStr, 291 "age": 19, 292 "salary": 200.5, 293 "blobType": u8, 294 } 295 let predicates = await new dataRdb.RdbPredicates("test") 296 await predicates.equalTo("name", "xiaohua") 297 let ret = await rdbStore.update(valueBucket, predicates) 298 await expect(1).assertEqual(ret); 299 await console.log(TAG + "update done: " + ret); 300 301 predicates = await new dataRdb.RdbPredicates("test") 302 predicates.equalTo("age", 19) 303 let resultSet = await rdbStore.query(predicates) 304 try { 305 expect(true).assertEqual(resultSet.goToFirstRow()) 306 const name = await resultSet.getString(resultSet.getColumnIndex("name")) 307 await expect(nameStr).assertEqual(name); 308 } finally { 309 resultSet.close() 310 resultSet = null 311 } 312 } catch (err) { 313 console.log(TAG + `failed, errcode:${JSON.stringify(err)}.`); 314 expect().assertFail(); 315 } 316 console.log(TAG + "************* testRdbStoreUpdate0006 end *************"); 317 }) 318 319 /** 320 * @tc.name resultSet Update Extra long character test 321 * @tc.number SUB_DDM_AppDataFWK_JSRDB_Update_0007 322 * @tc.desc resultSet Update Extra long character test 323 */ 324 it('testRdbStoreUpdate0007', 0, async function () { 325 console.log(TAG + "************* testRdbStoreUpdate0007 start *************"); 326 var u8 = new Uint8Array([1, 2, 3]) 327 { 328 const valueBucket = { 329 "name": "xiaocan", 330 "age": 18, 331 "salary": 100.5, 332 "blobType": u8, 333 } 334 await rdbStore.insert("test", valueBucket) 335 } 336 try { 337 var u8 = new Uint8Array([4, 5, 6]) 338 var nameStr = "菠萝是水果" + "e".repeat(2000) + "好吃又不贵" 339 const valueBucket = { 340 "name": nameStr, 341 "age": 21, 342 "salary": 200.5, 343 "blobType": u8, 344 } 345 let predicates = await new dataRdb.RdbPredicates("test") 346 await predicates.equalTo("name", "xiaocan") 347 let ret = await rdbStore.update(valueBucket, predicates); 348 await expect(1).assertEqual(ret); 349 await console.log(TAG + "update done: " + ret); 350 351 predicates = await new dataRdb.RdbPredicates("test") 352 predicates.equalTo("age", 21) 353 let resultSet = await rdbStore.query(predicates) 354 try { 355 expect(true).assertEqual(resultSet.goToFirstRow()) 356 const name = await resultSet.getString(resultSet.getColumnIndex("name")) 357 await expect(nameStr).assertEqual(name); 358 } finally { 359 resultSet.close() 360 resultSet = null 361 } 362 } catch (err) { 363 console.log(TAG + `failed, errcode:${JSON.stringify(err)}.`); 364 expect().assertFail(); 365 } 366 console.log(TAG + "************* testRdbStoreUpdate0007 end *************"); 367 }) 368 console.log(TAG + "*************Unit Test End*************"); 369})