@@ -20,6 +20,7 @@ var config = require('./config');
2020
2121describe ( 'client.test.js' , function ( ) {
2222 var prefix = 'prefix-' + process . version + '-' ;
23+ var table = 'ali-sdk-test-user' ;
2324 before ( function * ( ) {
2425 this . db = rds ( config ) ;
2526 yield this . db . query ( 'delete from `ali-sdk-test-user` where name like ?' , [ prefix + '%' ] ) ;
@@ -264,6 +265,111 @@ describe('client.test.js', function () {
264265 } ) ;
265266 } ) ;
266267
268+ describe ( 'insert(table, row[s])' , function ( ) {
269+ it ( 'should insert one row' , function * ( ) {
270+ var result = yield this . db . insert ( table , {
271+ name : prefix + 'fengmk2-insert1' ,
272+ email : prefix + 'm@fengmk2-insert.com'
273+ } ) ;
274+ assert . equal ( result . affectedRows , 1 ) ;
275+ } ) ;
276+
277+ it ( 'should insert multi rows' , function * ( ) {
278+ var result = yield this . db . insert ( table , [
279+ {
280+ name : prefix + 'fengmk2-insert2' ,
281+ email : prefix + 'm@fengmk2-insert.com'
282+ } ,
283+ {
284+ name : prefix + 'fengmk2-insert3' ,
285+ email : prefix + 'm@fengmk2-insert.com'
286+ } ,
287+ ] ) ;
288+ assert . equal ( result . affectedRows , 2 ) ;
289+ var row = yield this . db . get ( table , { id : result . insertId } ) ;
290+ assert ( row ) ;
291+ assert . equal ( row . id , result . insertId ) ;
292+ } ) ;
293+
294+ it ( 'should insert multi fail' , function * ( ) {
295+ try {
296+ yield this . db . insert ( table , [
297+ {
298+ name : prefix + 'fengmk2-insert4' ,
299+ email : prefix + 'm@fengmk2-insert.com'
300+ } ,
301+ {
302+ name : prefix + 'fengmk2-insert4' ,
303+ email : prefix + 'm@fengmk2-insert.com'
304+ } ,
305+ ] ) ;
306+ throw new Error ( 'should not run this' ) ;
307+ } catch ( err ) {
308+ assert . equal ( err . code , 'ER_DUP_ENTRY' ) ;
309+ }
310+ var row = yield this . db . get ( table , { name : prefix + 'fengmk2-insert4' } ) ;
311+ assert ( ! row ) ;
312+ } ) ;
313+
314+ it ( 'should part success on Duplicate key without transaction' , function * ( ) {
315+ var result = yield this . db . insert ( table , {
316+ name : prefix + 'fengmk2-insert-no-tran' ,
317+ email : prefix + 'm@fengmk2-insert.com'
318+ } ) ;
319+ assert . equal ( result . affectedRows , 1 ) ;
320+ var rows = yield this . db . select ( table , {
321+ where : { name : prefix + 'fengmk2-insert-no-tran' }
322+ } ) ;
323+ assert . equal ( rows . length , 1 ) ;
324+
325+ try {
326+ yield this . db . insert ( table , {
327+ name : prefix + 'fengmk2-insert-no-tran' ,
328+ email : prefix + 'm@fengmk2-insert.com'
329+ } ) ;
330+ throw new Error ( 'should not run this' ) ;
331+ } catch ( err ) {
332+ assert . equal ( err . code , 'ER_DUP_ENTRY' ) ;
333+ }
334+ var rows = yield this . db . select ( table , {
335+ where : { name : prefix + 'fengmk2-insert-no-tran' }
336+ } ) ;
337+ assert . equal ( rows . length , 1 ) ;
338+ } ) ;
339+
340+ it ( 'should all fail on Duplicate key with transaction' , function * ( ) {
341+ var tran = yield this . db . beginTransaction ( ) ;
342+ try {
343+ var result = yield tran . insert ( table , {
344+ name : prefix + 'fengmk2-insert-has-tran' ,
345+ email : prefix + 'm@fengmk2-insert.com'
346+ } ) ;
347+ assert . equal ( result . affectedRows , 1 ) ;
348+ var rows = yield tran . select ( table , {
349+ where : { name : prefix + 'fengmk2-insert-has-tran' }
350+ } ) ;
351+ assert . equal ( rows . length , 1 ) ;
352+
353+ yield tran . insert ( table , {
354+ name : prefix + 'fengmk2-insert-has-tran' ,
355+ email : prefix + 'm@fengmk2-insert.com'
356+ } ) ;
357+
358+ yield tran . commit ( ) ;
359+ } catch ( err ) {
360+ yield tran . rollback ( ) ;
361+ assert . equal ( err . code , 'ER_DUP_ENTRY' ) ;
362+ } finally {
363+ tran . release ( ) ;
364+ }
365+
366+ var rows = yield this . db . select ( table , {
367+ where : { name : prefix + 'fengmk2-insert-has-tran' }
368+ } ) ;
369+ assert . equal ( rows . length , 0 ) ;
370+ } ) ;
371+ } ) ;
372+
267373 describe ( 'update(table, obj, options)' , function ( ) {
268374 before ( function * ( ) {
269375 yield this . db . insert ( 'ali-sdk-test-user' , {
0 commit comments