diff --git a/integration-tests/__tests__/object-analyse.spec.js b/integration-tests/__tests__/object-analyse.spec.js index e49e098df..4e15cef15 100644 --- a/integration-tests/__tests__/object-analyse.spec.js +++ b/integration-tests/__tests__/object-analyse.spec.js @@ -10,6 +10,14 @@ function flatSource() { ); } +function flatSourceParameters() { + return _.flatten( + engines.map(engine => + (engine.parameters || []).map(parameter => [engine.label, parameter.testName, parameter, engine]) + ) + ); +} + const obj1Match = expect.objectContaining({ pureName: 'obj1', }); @@ -86,4 +94,21 @@ describe('Object analyse', () => { expect(structure3[type][0]).toEqual(type.includes('views') ? view1Match : obj1Match); }) ); + + test.each(flatSourceParameters())( + 'Test parameters simple analyse - %s - %s', + testWrapper(async (conn, driver, testName, parameter, engine) => { + for (const sql of initSql) await driver.query(conn, sql, { discardResult: true }); + + await driver.query(conn, parameter.create, { discardResult: true }); + const structure = await driver.analyseFull(conn); + + const parameters = structure[parameter.objectTypeField][0].parameters; + + expect(parameters.length).toEqual(parameter.list.length); + for (let i = 0; i < parameters.length; i += 1) { + expect(parameters[i]).toEqual(expect.objectContaining(parameter.list[i])); + } + }) + ); }); diff --git a/integration-tests/engines.js b/integration-tests/engines.js index 1bd0ab110..814594b9a 100644 --- a/integration-tests/engines.js +++ b/integration-tests/engines.js @@ -129,6 +129,59 @@ const engines = [ drop2: 'DROP PROCEDURE obj2', }, ], + parameters: [ + { + testName: 'simple', + create: 'CREATE PROCEDURE obj1 (@param1 int) AS SELECT id from t1', + objectTypeField: 'procedures', + list: [ + { + parameterName: '@param1', + parameterMode: 'IN', + dataType: 'int', + }, + ], + }, + { + testName: 'dataTypes', + create: 'CREATE PROCEDURE obj1 (@p1 bit, @p2 nvarchar(20), @p3 decimal(18,2), @p4 float) AS SELECT id from t1', + objectTypeField: 'procedures', + list: [ + { + parameterName: '@p1', + parameterMode: 'IN', + dataType: 'bit', + }, + { + parameterName: '@p2', + parameterMode: 'IN', + dataType: 'nvarchar(20)', + }, + { + parameterName: '@p3', + parameterMode: 'IN', + dataType: 'decimal(18,2)', + }, + { + parameterName: '@p4', + parameterMode: 'IN', + dataType: 'float', + }, + ], + }, + { + testName: 'outputParam', + create: 'CREATE PROCEDURE obj1 (@p1 int OUTPUT) AS SELECT id from t1', + objectTypeField: 'procedures', + list: [ + { + parameterName: '@p1', + parameterMode: 'OUT', + dataType: 'int', + }, + ], + }, + ], supportSchemas: true, supportRenameSqlObject: true, defaultSchemaName: 'dbo',