Skip to content

Commit 38dad4f

Browse files
hitesh-sourcefusedhmlau
authored andcommitted
test(sequelize): add test case of mysql connector
Signed-off-by: Hitesh Baliyan <[email protected]>
1 parent a3bcda0 commit 38dad4f

File tree

1 file changed

+72
-2
lines changed

1 file changed

+72
-2
lines changed

extensions/sequelize/src/__tests__/integration/repository.integration.ts

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {AnyObject} from '@loopback/repository';
1+
import {AnyObject, EntityNotFoundError} from '@loopback/repository';
22
import {RestApplication} from '@loopback/rest';
33
import {
44
Client,
@@ -8,10 +8,16 @@ import {
88
createStubInstance,
99
expect,
1010
givenHttpServerConfig,
11+
sinon,
1112
} from '@loopback/testlab';
1213
import _ from 'lodash';
1314
import {resolve} from 'path';
14-
import {UniqueConstraintError} from 'sequelize';
15+
import {
16+
ModelStatic,
17+
Sequelize,
18+
Model as SequelizeModel,
19+
UniqueConstraintError,
20+
} from 'sequelize';
1521
import {fail} from 'should';
1622
import {validate as uuidValidate, version as uuidVersion} from 'uuid';
1723
import {SequelizeCrudRepository, SequelizeDataSource} from '../../sequelize';
@@ -20,6 +26,7 @@ import {config as primaryDataSourceConfig} from '../fixtures/datasources/primary
2026
import {config as secondaryDataSourceConfig} from '../fixtures/datasources/secondary.datasource';
2127
import {ProgrammingLanguage, TableInSecondaryDB} from '../fixtures/models';
2228
import {Box, Event, eventTableName} from '../fixtures/models/test.model';
29+
import {User} from '../fixtures/models/user.model';
2330
import {
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

Comments
 (0)