UNPKG

node-onesky-utils

Version:

Node.js utils for working with OneSky translation service. Original package from @brainly/onesky-utils

187 lines (157 loc) 5.49 kB
'use strict'; const privateFunctions = rootRequire('lib/privateFunctions.js'); describe('privateFunctions', function() { let sandbox; beforeEach(function() { sandbox = sinon.createSandbox(); }); afterEach(function() { sandbox.restore(); }); describe('getDevHash', function() { it('should return an object with devHash and timestamp', function() { const secret = 'test-secret'; const result = privateFunctions.getDevHash(secret); expect(result).to.be.an('object'); expect(result).to.have.property('devHash'); expect(result).to.have.property('timestamp'); }); it('should return a string devHash', function() { const secret = 'test-secret'; const result = privateFunctions.getDevHash(secret); expect(result.devHash).to.be.a('string'); expect(result.devHash).to.have.length(32); // MD5 hash length }); it('should return a numeric timestamp', function() { const secret = 'test-secret'; const result = privateFunctions.getDevHash(secret); expect(result.timestamp).to.be.a('number'); expect(result.timestamp).to.be.closeTo(Math.floor(Date.now() / 1000), 1); }); it('should generate different hashes for different secrets', function() { const secret1 = 'secret1'; const secret2 = 'secret2'; const result1 = privateFunctions.getDevHash(secret1); const result2 = privateFunctions.getDevHash(secret2); expect(result1.devHash).to.not.equal(result2.devHash); }); it('should generate different hashes at different times', function(done) { const secret = 'test-secret'; const result1 = privateFunctions.getDevHash(secret); setTimeout(() => { const result2 = privateFunctions.getDevHash(secret); expect(result1.devHash).to.not.equal(result2.devHash); expect(result1.timestamp).to.be.lessThan(result2.timestamp); done(); }, 1100); // Wait for timestamp to change }); }); describe('makeRequest', function() { it('should make a request and handle responses', function() { // Since makeRequest uses axios internally and we can't easily mock it // without complex module replacement, we'll test the function signature // and basic structure instead const options = { method: 'GET', url: 'https://test.com/api' }; const result = privateFunctions.makeRequest(options, 'Test error message'); expect(result).to.be.a('promise'); }); it('should accept request options and error message', function() { const options = { method: 'POST', url: 'https://test.com/upload', data: { field: 'value' } }; const result = privateFunctions.makeRequest(options, 'Upload error'); expect(result).to.be.a('promise'); }); }); describe('handleError', function() { it('should reject with parsed error from OneSky API response', function(done) { const errorResponse = { response: { body: JSON.stringify({ meta: { message: 'Invalid API key', status: 401 } }) } }; privateFunctions.handleError('Custom message', errorResponse) .catch(error => { expect(error.message).to.equal('Invalid API key'); expect(error.code).to.equal(401); done(); }); }); it('should handle axios-style error format', function(done) { const errorResponse = { response: { body: JSON.stringify({ message: 'Request failed', code: 500 }) } }; privateFunctions.handleError('Request error', errorResponse) .catch(error => { expect(error.message).to.equal('Request failed'); expect(error.code).to.equal(500); done(); }); }); it('should use fallback message when parsing fails', function(done) { const errorResponse = { response: { body: 'invalid json' } }; privateFunctions.handleError('Fallback message', errorResponse) .catch(error => { expect(error.message).to.equal('Fallback message'); expect(error.code).to.equal(500); done(); }); }); it('should handle response with statusCode', function(done) { this.timeout(5000); // Increase timeout for debugging const errorResponse = { response: { body: 'invalid json', statusCode: 404 } }; privateFunctions.handleError('Not found', errorResponse) .then(() => { done(new Error('Should not resolve')); }) .catch(error => { try { expect(error.message).to.equal('Not found'); expect(error.code).to.equal(404); done(); } catch (e) { done(e); } }) .catch(done); // Catch any unhandled errors }); it('should always reject (never resolve)', function(done) { const errorResponse = { response: { body: JSON.stringify({ meta: { message: 'Test', status: 200 } }) } }; privateFunctions.handleError('Test message', errorResponse) .then(() => { done(new Error('Should not resolve')); }) .catch(() => { done(); // Expected to reject }); }); }); });