/**
* SonarCloud Tools Tests
*/
import {
sonarcloudSetupGuide,
sonarcloudCreateConfig
} from '../src/tools.js';
describe('SonarCloud Tools', () => {
describe('sonarcloudSetupGuide', () => {
test('should return setup guide with all steps', () => {
const result = sonarcloudSetupGuide();
expect(result.content[0].text).toContain('SONARCLOUD SETUP GUIDE');
expect(result.content[0].text).toContain('STEP 1');
expect(result.content[0].text).toContain('STEP 2');
expect(result.content[0].text).toContain('STEP 3');
expect(result.content[0].text).toContain('STEP 4');
expect(result.content[0].text).toContain('sonarcloud.io');
expect(result.content[0].text).toContain('gh secret set SONAR_TOKEN');
});
test('should include GitHub authorization step', () => {
const result = sonarcloudSetupGuide();
expect(result.content[0].text).toContain('GitHub');
expect(result.content[0].text).toContain('Authorize');
});
test('should include token generation instructions', () => {
const result = sonarcloudSetupGuide();
expect(result.content[0].text).toContain('Generate');
expect(result.content[0].text).toContain('token');
expect(result.content[0].text).toContain('/account/security');
});
});
describe('sonarcloudCreateConfig', () => {
test('should generate Java Maven config', () => {
const result = sonarcloudCreateConfig({
organization: 'myorg',
project_key: 'myorg_myproject',
project_name: 'My Project',
project_type: 'java-maven',
source_dir: 'src'
});
expect(result.content[0].text).toContain('SONAR-PROJECT.PROPERTIES');
expect(result.content[0].text).toContain('sonar.organization=myorg');
expect(result.content[0].text).toContain('sonar.projectKey=myorg_myproject');
expect(result.content[0].text).toContain('sonar.projectName=My Project');
expect(result.content[0].text).toContain('sonar.sources=src/main/java');
expect(result.content[0].text).toContain('sonar.tests=src/test/java');
expect(result.content[0].text).toContain('sonar.java.binaries=target/classes');
});
test('should generate Node.js config', () => {
const result = sonarcloudCreateConfig({
organization: 'myorg',
project_key: 'myorg_frontend',
project_name: 'Frontend App',
project_type: 'nodejs',
source_dir: 'src'
});
expect(result.content[0].text).toContain('sonar.organization=myorg');
expect(result.content[0].text).toContain('sonar.projectKey=myorg_frontend');
expect(result.content[0].text).toContain('sonar.sources=src');
expect(result.content[0].text).toContain('sonar.javascript.lcov.reportPaths=coverage/lcov.info');
});
test('should generate Python config', () => {
const result = sonarcloudCreateConfig({
organization: 'myorg',
project_key: 'myorg_backend',
project_name: 'Backend API',
project_type: 'python',
source_dir: 'app'
});
expect(result.content[0].text).toContain('sonar.organization=myorg');
expect(result.content[0].text).toContain('sonar.projectKey=myorg_backend');
expect(result.content[0].text).toContain('sonar.sources=app');
expect(result.content[0].text).toContain('sonar.python.coverage.reportPaths=coverage.xml');
});
test('should use default source_dir when not provided for nodejs', () => {
const result = sonarcloudCreateConfig({
organization: 'myorg',
project_key: 'myorg_app',
project_name: 'App',
project_type: 'nodejs',
source_dir: ''
});
expect(result.content[0].text).toContain('sonar.sources=src');
});
test('should reject unknown project type', () => {
const result = sonarcloudCreateConfig({
organization: 'myorg',
project_key: 'myorg_app',
project_name: 'App',
project_type: 'unknown-type',
source_dir: 'src'
});
expect(result.content[0].text).toContain('Unknown project type');
expect(result.content[0].text).toContain('unknown-type');
expect(result.content[0].text).toContain('Supported');
});
test('should include save instructions', () => {
const result = sonarcloudCreateConfig({
organization: 'myorg',
project_key: 'myorg_app',
project_name: 'App',
project_type: 'nodejs',
source_dir: 'src'
});
expect(result.content[0].text).toContain('Save this to');
expect(result.content[0].text).toContain('sonar-project.properties');
});
});
});