mockingbird-sdk
v1.0.3
Published
A simple SDK for database testing with AI feedback
Downloads
14
Maintainers
Readme
Mockingbird SDK Documentation
Installation
npm i mockingbird-sdk
Configuration
Step 1: Create a Configuration File
Create a mockingbird.config.json
file in your project root:
{
"databases": {
"main": {
"type": "mysql",
"connection": {
"host": "${HOST}",
"user": "${USER}",
"password": "${PASSWORD}",
"database": "${DATABASE}",
"port": "${PORT}"
}
},
"reporting": {
"type": "postgres",
"connection": {
"host": "${REPORTING_PG_HOST}",
"user": "${REPORTING_PG_USER}",
"password": "${REPORTING_PG_PASSWORD}",
"database": "${REPORTING_PG_DATABASE}",
"port": "${REPORTING_PG_PORT}"
}
}
},
"testPatterns": [
"tests/**/*.test.js"
],
"reportConfig": {
"type": "file",
"outputPath": "./test-reports/report.json"
}
}
Step 2: Create an Environment File
Create a .env
file in your project root with the necessary environment variables:
HOST=your_host
PORT=your_port
USER=your_username
PASSWORD=your_password
DATABASE=your_database_name
REPORTING_PG_HOST=your_reporting_host
REPORTING_PG_PORT=your_reporting_port
REPORTING_PG_USER=your_reporting_username
REPORTING_PG_PASSWORD=your_reporting_password
REPORTING_PG_DATABASE=your_reporting_database_name
Usage
Example Test File
Create a test file (e.g., tests/db.test.js
):
const { mockingbirdSDK } = require('mockingbird-sdk');
// Set the default database
mockingbirdSDK.setDefaultDatabase('main');
mockingbirdSDK
.test('Count distinct issues for specific board in date range')
.query(\`
SELECT
COUNT(DISTINCT i.id) AS issue_count
FROM
issues i
JOIN board_issues bi ON i.id = bi.issue_id
JOIN boards b ON bi.board_id = b.id
WHERE
i.created_date BETWEEN FROM_UNIXTIME(?) AND FROM_UNIXTIME(?)
AND b.id = ?
\`, 1721070312, 1736967912, 'github:GithubRepo:1:290006')
.expectRowCount(1);
// Run all tests
mockingbirdSDK.run();
Running Tests
Run your tests using the Mockingbird CLI:
npx mockingbird
Example Test Cases
1. Simple Count Query
mockingbirdSDK
.test('Count total users')
.query('SELECT COUNT(*) AS user_count FROM users')
.expect('user_count', 100)
.expectRowCount(1);
2. Data Integrity Check
mockingbirdSDK
.test('Ensure no duplicate email addresses')
.query('SELECT email, COUNT(*) AS count FROM users GROUP BY email HAVING COUNT(*) > 1')
.expectRowCount(0);
3. Join Query with Multiple Expectations
mockingbirdSDK
.test('Validate order details for a specific user')
.query(\`
SELECT u.username, o.order_id, o.total_amount
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.username = ?
\`, 'john_doe')
.expect('username', 'john_doe')
.expect('total_amount', 99.99)
.expectRowCount(1);
4. Date Range Query
mockingbirdSDK
.test('Check orders within a date range')
.query(\`
SELECT COUNT(*) AS order_count
FROM orders
WHERE order_date BETWEEN ? AND ?
\`, '2023-01-01', '2023-12-31')
.expect('order_count', 500);
5. Complex Aggregation
mockingbirdSDK
.test('Analyze user activity')
.query(\`
SELECT
u.user_type,
AVG(a.login_count) AS avg_logins,
MAX(a.last_active_date) AS latest_activity
FROM users u
JOIN user_activity a ON u.id = a.user_id
GROUP BY u.user_type
\`)
.expectRowCount(3)
.expect('avg_logins', (value) => value > 0);
License
This SDK is licensed under MIT License.