json_
Version:
Converts camelCase JavaScript objects to JSON snake_case and vise versa.
49 lines (43 loc) • 1.65 kB
text/typescript
import JSON_ from '.';
import { installGlobals } from '@remix-run/node';
// This installs globals such as "fetch", "Response", "Request" and "Headers".
installGlobals();
const testCases = [
['first_name', 'firstName'],
['address_1', 'address1'],
['scores_a_1_b_2', 'scoresA1B2'],
];
describe('JSON_', function() {
describe('parse', function() {
describe('when passed a string', function() {
testCases.forEach(([snakeCasedKey, camelCasedKey]) => {
it(`should return ${camelCasedKey} given ${snakeCasedKey}`, function() {
const results = JSON_.parse(`{"${snakeCasedKey}": ""}`);
const expected = JSON.parse(`{"${camelCasedKey}": ""}`);
expect(results).toEqual(expected);
});
});
});
describe('when passed a Response', function() {
it('should return a promise', function() {
const response = new Response('{ "foo_bar": 1 }');
const promise = JSON_.parse(response);
expect(promise).toBeInstanceOf(Promise);
});
it('that resolves with a camelCased JS object', async () => {
const response = new Response('{ "foo_bar": 1 }');
const obj = await JSON_.parse(response);
expect(obj).toEqual({ fooBar: 1 });
});
});
});
describe('stringify', function() {
testCases.forEach(([snakeCasedKey, camelCasedKey]) => {
it(`should return ${snakeCasedKey} given ${camelCasedKey}`, function() {
const results = JSON_.stringify({ [camelCasedKey]: '' });
const expected = JSON.stringify({ [snakeCasedKey]: '' });
expect(results).toBe(expected);
});
});
});
});