91 lines
2.6 KiB
JavaScript
91 lines
2.6 KiB
JavaScript
const request = require('supertest');
|
|
const app = require('../src/app');
|
|
|
|
describe('Dubai DLD Analytics API', () => {
|
|
|
|
describe('Health Check', () => {
|
|
test('GET /health should return status OK', async () => {
|
|
const response = await request(app)
|
|
.get('/health')
|
|
.expect(200);
|
|
|
|
expect(response.body.status).toBe('OK');
|
|
expect(response.body.service).toBe('Dubai DLD Analytics API');
|
|
});
|
|
});
|
|
|
|
describe('Query Endpoints', () => {
|
|
test('POST /api/query should process rental trend query', async () => {
|
|
const query = {
|
|
query: 'Give me the last 6 months rental price trend for Business Bay'
|
|
};
|
|
|
|
const response = await request(app)
|
|
.post('/api/query')
|
|
.send(query)
|
|
.expect(200);
|
|
|
|
expect(response.body.success).toBe(true);
|
|
expect(response.body.data).toHaveProperty('text');
|
|
expect(response.body.data).toHaveProperty('visualizations');
|
|
expect(response.body.data).toHaveProperty('cards');
|
|
expect(response.body.data).toHaveProperty('sql_queries');
|
|
});
|
|
|
|
test('GET /api/queries/top-areas should return top areas', async () => {
|
|
const response = await request(app)
|
|
.get('/api/queries/top-areas')
|
|
.expect(200);
|
|
|
|
expect(response.body.success).toBe(true);
|
|
expect(response.body.data).toHaveProperty('visualizations');
|
|
});
|
|
|
|
test('GET /api/queries/project-summary should return project data', async () => {
|
|
const response = await request(app)
|
|
.get('/api/queries/project-summary')
|
|
.expect(200);
|
|
|
|
expect(response.body.success).toBe(true);
|
|
expect(response.body.data).toHaveProperty('text');
|
|
});
|
|
});
|
|
|
|
describe('Validation', () => {
|
|
test('POST /api/query should validate query length', async () => {
|
|
const invalidQuery = {
|
|
query: 'ab' // Too short
|
|
};
|
|
|
|
const response = await request(app)
|
|
.post('/api/query')
|
|
.send(invalidQuery)
|
|
.expect(400);
|
|
|
|
expect(response.body.success).toBe(false);
|
|
expect(response.body.message).toBe('Validation error');
|
|
});
|
|
|
|
test('POST /api/query should require query field', async () => {
|
|
const response = await request(app)
|
|
.post('/api/query')
|
|
.send({})
|
|
.expect(400);
|
|
|
|
expect(response.body.success).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('Error Handling', () => {
|
|
test('GET /api/nonexistent should return 404', async () => {
|
|
const response = await request(app)
|
|
.get('/api/nonexistent')
|
|
.expect(404);
|
|
|
|
expect(response.body.success).toBe(false);
|
|
expect(response.body.message).toBe('Endpoint not found');
|
|
});
|
|
});
|
|
});
|
|
|