Skip to content

Commit

Permalink
refactor: reduce duplicate code in new test file
Browse files Browse the repository at this point in the history
Signed-off-by: Dale Lane <dale.lane@uk.ibm.com>
  • Loading branch information
dalelane committed Mar 7, 2024
1 parent 66a4538 commit a42dfb4
Showing 1 changed file with 95 additions and 139 deletions.
234 changes: 95 additions & 139 deletions test/Kafka.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,216 +13,172 @@ describe('kafka integration tests using the generator', () => {

jest.setTimeout(30000);

it('should generate Java for a secured, encrypted Kafka', async () => {
const OUTPUT_DIR = generateFolderName();
const PACKAGE = 'com.asyncapi';
const generateJavaProject = async (OUTPUT_DIR, PACKAGE, params, asyncApiDoc, expectedFiles, expectedConnectionHelperLines) => {
const PACKAGE_PATH = path.join(...PACKAGE.split('.'));
const params = {
server: 'production'
};

// try running the generator
const generator = new Generator(path.normalize('./'), OUTPUT_DIR, { forceWrite: true, templateParams: params });
await generator.generateFromFile(path.resolve('test', 'mocks/kafka-example.yml'));
await generator.generateFromFile(path.resolve('test', asyncApiDoc));

const expectedFiles = [
// check that the files specific to this AsyncAPI doc are generated
for (const file of expectedFiles) {
expect(existsSync(path.join(OUTPUT_DIR, `${PACKAGE_PATH}/${file}`))).toBe(true);
}

// check that standard files common to every project are generated
const commonFiles = [
'pom.xml',
'Dockerfile',
'env.json',
`${PACKAGE_PATH}/Connection.java`,
`${PACKAGE_PATH}/ConnectionHelper.java`,
`${PACKAGE_PATH}/LoggingHelper.java`,
`${PACKAGE_PATH}/DemoProducer.java`,
`${PACKAGE_PATH}/DemoSubscriber.java`,
`${PACKAGE_PATH}/PubSubBase.java`,
`${PACKAGE_PATH}/SongReleasedProducer.java`,
`${PACKAGE_PATH}/SongReleasedSubscriber.java`,
`${PACKAGE_PATH}/models/ModelContract.java`,
`${PACKAGE_PATH}/models/Song.java`,
'Dockerfile',
'env.json'
];

for (const file of expectedFiles) {
for (const file of commonFiles) {
expect(existsSync(path.join(OUTPUT_DIR, file))).toBe(true);
}

// check that the expected connection parameters are found
const connectionHelper = readFileSync(path.join(OUTPUT_DIR, `${PACKAGE_PATH}/ConnectionHelper.java`), 'utf-8');
expect(connectionHelper.includes('props.put("security.protocol", "SASL_SSL")')).toBe(true);
expect(connectionHelper.includes('props.put("sasl.mechanism", "SCRAM-SHA-512")')).toBe(true);
for (const expectedLine of expectedConnectionHelperLines) {
expect(connectionHelper.includes(expectedLine)).toBe(true);
}
};

it('should generate Java for a secured, encrypted Kafka', () => {

Check warning on line 49 in test/Kafka.test.js

View workflow job for this annotation

GitHub Actions / Test NodeJS PR - ubuntu-latest

Test has no assertions
const OUTPUT_DIR = generateFolderName();
const PACKAGE = 'com.asyncapi';
const params = {
server: 'production'
};
const expectedFiles = [
'DemoProducer.java',
'DemoSubscriber.java',
'SongReleasedProducer.java',
'SongReleasedSubscriber.java',
'models/ModelContract.java',
'models/Song.java',
];
const expectedConnectionLines = [
'props.put("security.protocol", "SASL_SSL")',
'props.put("sasl.mechanism", "SCRAM-SHA-512")'
];

return generateJavaProject(OUTPUT_DIR, PACKAGE, params, 'mocks/kafka-example.yml', expectedFiles, expectedConnectionLines);
});

it('should generate Java for an encrypted Kafka', async () => {
it('should generate Java for an encrypted Kafka', () => {

Check warning on line 71 in test/Kafka.test.js

View workflow job for this annotation

GitHub Actions / Test NodeJS PR - ubuntu-latest

Test has no assertions
const OUTPUT_DIR = generateFolderName();
const PACKAGE = 'com.custom.package';
const PACKAGE_PATH = path.join(...PACKAGE.split('.'));
const params = {
server: 'production',
package: PACKAGE
};
console.log(OUTPUT_DIR);
const generator = new Generator(path.normalize('./'), OUTPUT_DIR, { forceWrite: true, templateParams: params });
await generator.generateFromFile(path.resolve('test', 'mocks/kafka-example-encrypt.yml'));

const expectedFiles = [
'pom.xml',
`${PACKAGE_PATH}/Connection.java`,
`${PACKAGE_PATH}/ConnectionHelper.java`,
`${PACKAGE_PATH}/LoggingHelper.java`,
`${PACKAGE_PATH}/DemoProducer.java`,
`${PACKAGE_PATH}/PubSubBase.java`,
`${PACKAGE_PATH}/SongReleasedProducer.java`,
`${PACKAGE_PATH}/models/ModelContract.java`,
`${PACKAGE_PATH}/models/Song.java`,
'Dockerfile',
'env.json'
'DemoProducer.java',
'SongReleasedProducer.java',
'models/ModelContract.java',
'models/Song.java',
];
const expectedConnectionLines = [
'props.put("security.protocol", "SSL")',
];

for (const file of expectedFiles) {
expect(existsSync(path.join(OUTPUT_DIR, file))).toBe(true);
}

const connectionHelper = readFileSync(path.join(OUTPUT_DIR, `${PACKAGE_PATH}/ConnectionHelper.java`), 'utf-8');
expect(connectionHelper.includes('props.put("security.protocol", "SSL")')).toBe(true);
return generateJavaProject(OUTPUT_DIR, PACKAGE, params, 'mocks/kafka-example-encrypt.yml', expectedFiles, expectedConnectionLines);
});

it('should generate Java for a plain Kafka', async () => {

Check warning on line 91 in test/Kafka.test.js

View workflow job for this annotation

GitHub Actions / Test NodeJS PR - ubuntu-latest

Test has no assertions
const OUTPUT_DIR = generateFolderName();
const PACKAGE = 'asyncapi.kafka';
const PACKAGE_PATH = path.join(...PACKAGE.split('.'));
const params = {
server: 'production',
package: PACKAGE
};
const generator = new Generator(path.normalize('./'), OUTPUT_DIR, { forceWrite: true, templateParams: params });
await generator.generateFromFile(path.resolve('test', 'mocks/kafka-example-plain.yml'));

const expectedFiles = [
'pom.xml',
`${PACKAGE_PATH}/Connection.java`,
`${PACKAGE_PATH}/ConnectionHelper.java`,
`${PACKAGE_PATH}/LoggingHelper.java`,
`${PACKAGE_PATH}/DemoProducer.java`,
`${PACKAGE_PATH}/DemoSubscriber.java`,
`${PACKAGE_PATH}/PubSubBase.java`,
`${PACKAGE_PATH}/SongReleasedProducer.java`,
`${PACKAGE_PATH}/SongReleasedSubscriber.java`,
`${PACKAGE_PATH}/models/ModelContract.java`,
`${PACKAGE_PATH}/models/Song.java`,
'Dockerfile',
'env.json'
'DemoProducer.java',
'DemoSubscriber.java',
'SongReleasedProducer.java',
'SongReleasedSubscriber.java',
'models/ModelContract.java',
'models/Song.java',
];
const expectedConnectionLines = [
'props.put("security.protocol", "PLAINTEXT")',
];

for (const file of expectedFiles) {
expect(existsSync(path.join(OUTPUT_DIR, file))).toBe(true);
}

const connectionHelper = readFileSync(path.join(OUTPUT_DIR, `${PACKAGE_PATH}/ConnectionHelper.java`), 'utf-8');
expect(connectionHelper.includes('props.put("security.protocol", "PLAINTEXT")')).toBe(true);
return generateJavaProject(OUTPUT_DIR, PACKAGE, params, 'mocks/kafka-example-plain.yml', expectedFiles, expectedConnectionLines);
});

it('should generate Java for a secured Kafka', async () => {

Check warning on line 113 in test/Kafka.test.js

View workflow job for this annotation

GitHub Actions / Test NodeJS PR - ubuntu-latest

Test has no assertions
const OUTPUT_DIR = generateFolderName();
const PACKAGE = 'asyncapi.kafka';
const PACKAGE_PATH = path.join(...PACKAGE.split('.'));
const params = {
server: 'production',
package: PACKAGE
};
const generator = new Generator(path.normalize('./'), OUTPUT_DIR, { forceWrite: true, templateParams: params });
await generator.generateFromFile(path.resolve('test', 'mocks/kafka-example-auth.yml'));

const expectedFiles = [
'pom.xml',
`${PACKAGE_PATH}/Connection.java`,
`${PACKAGE_PATH}/ConnectionHelper.java`,
`${PACKAGE_PATH}/LoggingHelper.java`,
`${PACKAGE_PATH}/DemoSubscriber.java`,
`${PACKAGE_PATH}/PubSubBase.java`,
`${PACKAGE_PATH}/SongReleasedSubscriber.java`,
`${PACKAGE_PATH}/models/ModelContract.java`,
`${PACKAGE_PATH}/models/Song.java`,
'Dockerfile',
'env.json'
'DemoSubscriber.java',
'SongReleasedSubscriber.java',
'models/ModelContract.java',
'models/Song.java',
];
const expectedConnectionLines = [
'props.put("security.protocol", "SASL_PLAINTEXT")',
'props.put("sasl.mechanism", "PLAIN")',
];

for (const file of expectedFiles) {
expect(existsSync(path.join(OUTPUT_DIR, file))).toBe(true);
}
const connectionHelper = readFileSync(path.join(OUTPUT_DIR, `${PACKAGE_PATH}/ConnectionHelper.java`), 'utf-8');
expect(connectionHelper.includes('props.put("security.protocol", "SASL_PLAINTEXT")')).toBe(true);
expect(connectionHelper.includes('props.put("sasl.mechanism", "PLAIN")')).toBe(true);
return generateJavaProject(OUTPUT_DIR, PACKAGE, params, 'mocks/kafka-example-auth.yml', expectedFiles, expectedConnectionLines);
});

it('should generate Java for the streetlights example', async () => {

Check warning on line 134 in test/Kafka.test.js

View workflow job for this annotation

GitHub Actions / Test NodeJS PR - ubuntu-latest

Test has no assertions
const OUTPUT_DIR = generateFolderName();
const PACKAGE = 'com.asyncapi.examples.streetlights.v2';
const PACKAGE_PATH = path.join(...PACKAGE.split('.'));
const params = {
server: 'mtls-connections',
package: PACKAGE
};
const generator = new Generator(path.normalize('./'), OUTPUT_DIR, { forceWrite: true, templateParams: params });
await generator.generateFromFile(path.resolve('test', 'mocks/kafka-streetlights-v2.yml'));

const expectedFiles = [
'pom.xml',
`${PACKAGE_PATH}/Connection.java`,
`${PACKAGE_PATH}/ConnectionHelper.java`,
`${PACKAGE_PATH}/LoggingHelper.java`,
`${PACKAGE_PATH}/DemoSubscriber.java`,
`${PACKAGE_PATH}/PubSubBase.java`,
`${PACKAGE_PATH}/SmartylightingStreetlights10ActionStreetlightIdDimProducer.java`,
`${PACKAGE_PATH}/SmartylightingStreetlights10ActionStreetlightIdTurnOffProducer.java`,
`${PACKAGE_PATH}/SmartylightingStreetlights10ActionStreetlightIdTurnOnProducer.java`,
`${PACKAGE_PATH}/SmartylightingStreetlights10EventStreetlightIdLightingMeasuredSubscriber.java`,
`${PACKAGE_PATH}/models/DimLight.java`,
`${PACKAGE_PATH}/models/LightMeasured.java`,
`${PACKAGE_PATH}/models/ModelContract.java`,
`${PACKAGE_PATH}/models/TurnOnOff.java`,
'Dockerfile',
'env.json'
'DemoSubscriber.java',
'SmartylightingStreetlights10ActionStreetlightIdDimProducer.java',
'SmartylightingStreetlights10ActionStreetlightIdTurnOffProducer.java',
'SmartylightingStreetlights10ActionStreetlightIdTurnOnProducer.java',
'SmartylightingStreetlights10EventStreetlightIdLightingMeasuredSubscriber.java',
'models/DimLight.java',
'models/LightMeasured.java',
'models/ModelContract.java',
'models/TurnOnOff.java',
];
const expectedConnectionLines = [
'props.put("security.protocol", "SSL")',
];

for (const file of expectedFiles) {
expect(existsSync(path.join(OUTPUT_DIR, file))).toBe(true);
}
const connectionHelper = readFileSync(path.join(OUTPUT_DIR, `${PACKAGE_PATH}/ConnectionHelper.java`), 'utf-8');
expect(connectionHelper.includes('props.put("security.protocol", "SSL")')).toBe(true);
return generateJavaProject(OUTPUT_DIR, PACKAGE, params, 'mocks/kafka-streetlights-v2.yml', expectedFiles, expectedConnectionLines);
});

it('should generate Java for a v3 AsyncAPI', async () => {

Check warning on line 159 in test/Kafka.test.js

View workflow job for this annotation

GitHub Actions / Test NodeJS PR - ubuntu-latest

Test has no assertions
const OUTPUT_DIR = generateFolderName();
console.log(OUTPUT_DIR);
const PACKAGE = 'com.asyncapi.examples.streetlights.v3';
const PACKAGE_PATH = path.join(...PACKAGE.split('.'));
const params = {
server: 'scram-connections',
package: PACKAGE
};
const generator = new Generator(path.normalize('./'), OUTPUT_DIR, { forceWrite: true, templateParams: params });
await generator.generateFromFile(path.resolve('test', 'mocks/kafka-streetlights-v3.yml'));

const expectedFiles = [
'pom.xml',
`${PACKAGE_PATH}/Connection.java`,
`${PACKAGE_PATH}/ConnectionHelper.java`,
`${PACKAGE_PATH}/LoggingHelper.java`,
`${PACKAGE_PATH}/DemoSubscriber.java`,
`${PACKAGE_PATH}/PubSubBase.java`,
`${PACKAGE_PATH}/LightingMeasuredSubscriber.java`,
`${PACKAGE_PATH}/LightsDimProducer.java`,
`${PACKAGE_PATH}/LightTurnOffProducer.java`,
`${PACKAGE_PATH}/LightTurnOnProducer.java`,
`${PACKAGE_PATH}/models/DimLight.java`,
`${PACKAGE_PATH}/models/LightMeasured.java`,
`${PACKAGE_PATH}/models/ModelContract.java`,
`${PACKAGE_PATH}/models/TurnOn.java`,
'Dockerfile',
'env.json'
'DemoSubscriber.java',
'LightingMeasuredSubscriber.java',
'LightsDimProducer.java',
'LightTurnOffProducer.java',
'LightTurnOnProducer.java',
'models/DimLight.java',
'models/LightMeasured.java',
'models/ModelContract.java',
'models/TurnOn.java',
];
const expectedConnectionLines = [
'props.put("security.protocol", "SASL_SSL")',
'props.put("sasl.mechanism", "SCRAM-SHA-256")',
];

for (const file of expectedFiles) {
expect(existsSync(path.join(OUTPUT_DIR, file))).toBe(true);
}
const connectionHelper = readFileSync(path.join(OUTPUT_DIR, `${PACKAGE_PATH}/ConnectionHelper.java`), 'utf-8');
expect(connectionHelper.includes('props.put("security.protocol", "SASL_SSL")')).toBe(true);
expect(connectionHelper.includes('props.put("sasl.mechanism", "SCRAM-SHA-256")')).toBe(true);
return generateJavaProject(OUTPUT_DIR, PACKAGE, params, 'mocks/kafka-streetlights-v3.yml', expectedFiles, expectedConnectionLines);
});
});

0 comments on commit a42dfb4

Please sign in to comment.