1- import { AnyObject } from '@loopback/repository' ;
1+ import { AnyObject , EntityNotFoundError } from '@loopback/repository' ;
22import { RestApplication } from '@loopback/rest' ;
33import {
44 Client ,
@@ -8,10 +8,16 @@ import {
88 createStubInstance ,
99 expect ,
1010 givenHttpServerConfig ,
11+ sinon ,
1112} from '@loopback/testlab' ;
1213import _ from 'lodash' ;
1314import { resolve } from 'path' ;
14- import { UniqueConstraintError } from 'sequelize' ;
15+ import {
16+ ModelStatic ,
17+ Sequelize ,
18+ Model as SequelizeModel ,
19+ UniqueConstraintError ,
20+ } from 'sequelize' ;
1521import { fail } from 'should' ;
1622import { validate as uuidValidate , version as uuidVersion } from 'uuid' ;
1723import { SequelizeCrudRepository , SequelizeDataSource } from '../../sequelize' ;
@@ -20,6 +26,7 @@ import {config as primaryDataSourceConfig} from '../fixtures/datasources/primary
2026import { config as secondaryDataSourceConfig } from '../fixtures/datasources/secondary.datasource' ;
2127import { ProgrammingLanguage , TableInSecondaryDB } from '../fixtures/models' ;
2228import { Box , Event , eventTableName } from '../fixtures/models/test.model' ;
29+ import { User } from '../fixtures/models/user.model' ;
2330import {
2431 DeveloperRepository ,
2532 ProgrammingLanguageRepository ,
@@ -387,6 +394,69 @@ describe('Sequelize CRUD Repository (integration)', () => {
387394 expect ( patchResponse . body ) . to . have . property ( 'count' , 1 ) ;
388395 } ) ;
389396
397+ describe ( 'updates created entity with MySQL dialect' , ( ) => {
398+ let seqQueryStub : sinon . SinonStub ;
399+ let repo : SequelizeCrudRepository < User , unknown , { } > ;
400+ let userModel : ModelStatic < SequelizeModel > ;
401+
402+ beforeEach ( ( ) => {
403+ seqQueryStub = sinon . stub ( Sequelize . prototype , 'query' ) ;
404+ datasource . sequelize = new Sequelize ( {
405+ dialect : 'mysql' ,
406+ } ) ;
407+ datasource . sequelizeConfig = {
408+ host : '0.0.0.0' ,
409+ dialect : 'mysql' ,
410+ database : 'transaction-primary' ,
411+ } ;
412+ repo = new SequelizeCrudRepository ( User , datasource ) ;
413+ userModel = datasource . sequelize . model ( repo . entityClass . modelName ) ;
414+ } ) ;
415+ afterEach ( ( ) => {
416+ seqQueryStub . restore ( ) ;
417+ } ) ;
418+
419+ it ( 'should check for the entity when affectedRow return 0' , async ( ) => {
420+ seqQueryStub
421+ . onFirstCall ( )
422+ . resolves ( 0 as never )
423+ . onSecondCall ( )
424+ . resolves (
425+ userModel
426+ . bulkBuild (
427+ [
428+ {
429+ id : 1 ,
430+ username : 'string' ,
431+ password : 'password:varchar' ,
432+ email : 'email:varchar' ,
433+ registerDate : '2024-01-24T11:02:16.000Z' ,
434+ } ,
435+ ] ,
436+ { raw : true } ,
437+ )
438+ . pop ( ) as never ,
439+ ) ;
440+
441+ await repo . updateById ( 1 , { name : 'UpdatedName' } ) ;
442+ expect ( seqQueryStub . callCount ) . to . be . equal ( 2 ) ;
443+ } ) ;
444+
445+ it ( 'should check for the entity and throw "EntityNotFoundError" when entity missing' , async ( ) => {
446+ try {
447+ seqQueryStub
448+ . onFirstCall ( )
449+ . resolves ( 0 as never )
450+ . onSecondCall ( )
451+ . resolves ( null as never ) ;
452+ await repo . updateById ( 1 , { name : 'UpdatedName' } ) ;
453+ } catch ( err ) {
454+ expect ( err ) . to . instanceOf ( EntityNotFoundError ) ;
455+ }
456+ expect ( seqQueryStub . callCount ) . to . be . equal ( 2 ) ;
457+ } ) ;
458+ } ) ;
459+
390460 it ( 'can execute raw sql command without parameters' , async function ( ) {
391461 await client . post ( '/users' ) . send ( getDummyUser ( { name : 'Foo' } ) ) ;
392462
0 commit comments