| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- const request = require('supertest');
- const { expect } = require('chai');
- const server = require('../src/server');
- describe('Financial Data Server', () => {
- let app;
- before(async () => {
- // Get the Express app instance from the server
- app = server.app;
- });
- describe('Health Check', () => {
- it('should return server health status', (done) => {
- request(app)
- .get('/health')
- .expect(200)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'OK');
- expect(res.body).to.have.property('timestamp');
- expect(res.body).to.have.property('uptime');
- done();
- });
- });
- });
- describe('Price API', () => {
- it('should return current price for valid symbol', (done) => {
- request(app)
- .get('/api/prices/current/EURUSD')
- .expect(200)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'success');
- expect(res.body).to.have.property('data');
- expect(res.body.data).to.have.property('symbol', 'EURUSD');
- expect(res.body.data).to.have.property('price');
- expect(res.body.data).to.have.property('change');
- expect(res.body.data).to.have.property('changePercent');
- done();
- });
- });
- it('should return 404 for invalid symbol', (done) => {
- request(app)
- .get('/api/prices/current/INVALID')
- .expect(404)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'error');
- expect(res.body).to.have.property('message');
- done();
- });
- });
- it('should return historical data for valid symbol', (done) => {
- request(app)
- .get('/api/prices/historical/EURUSD?timeframe=H1&limit=10')
- .expect(200)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'success');
- expect(res.body).to.have.property('data');
- expect(res.body.data).to.be.an('array');
- expect(res.body).to.have.property('symbol', 'EURUSD');
- expect(res.body).to.have.property('timeframe', 'H1');
- done();
- });
- });
- });
- describe('Symbol API', () => {
- it('should return list of symbols', (done) => {
- request(app)
- .get('/api/symbols')
- .expect(200)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'success');
- expect(res.body).to.have.property('data');
- expect(res.body.data).to.be.an('array');
- expect(res.body).to.have.property('pagination');
- done();
- });
- });
- it('should return specific symbol details', (done) => {
- request(app)
- .get('/api/symbols/EURUSD')
- .expect(200)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'success');
- expect(res.body).to.have.property('data');
- expect(res.body.data).to.have.property('symbol', 'EURUSD');
- expect(res.body.data).to.have.property('name');
- expect(res.body.data).to.have.property('category');
- expect(res.body.data).to.have.property('exchange');
- done();
- });
- });
- it('should return 404 for non-existent symbol', (done) => {
- request(app)
- .get('/api/symbols/NONEXISTENT')
- .expect(404)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'error');
- expect(res.body).to.have.property('message');
- done();
- });
- });
- it('should return symbol categories', (done) => {
- request(app)
- .get('/api/symbols/categories/list')
- .expect(200)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'success');
- expect(res.body).to.have.property('data');
- expect(res.body.data).to.be.an('array');
- done();
- });
- });
- });
- describe('Error Handling', () => {
- it('should handle 404 for unknown routes', (done) => {
- request(app)
- .get('/api/unknown-route')
- .expect(404)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'error');
- expect(res.body).to.have.property('message');
- done();
- });
- });
- it('should handle malformed JSON', (done) => {
- request(app)
- .post('/api/prices/subscribe')
- .set('Content-Type', 'application/json')
- .send('{ malformed json }')
- .expect(400)
- .end((err, res) => {
- if (err) return done(err);
- expect(res.body).to.have.property('status', 'error');
- done();
- });
- });
- });
- });
|