|
1 | | -import { snakeToCamelCase, camelizeResponse } from './utils'; |
| 1 | +import { snakecaseKeys, snakeToCamelCase, camelizeResponse } from './utils'; |
2 | 2 |
|
3 | 3 | describe('src/Utils', () => { |
4 | 4 | describe('snakeToCamelCase()', () => { |
@@ -146,4 +146,95 @@ describe('src/Utils', () => { |
146 | 146 | }); |
147 | 147 | }); |
148 | 148 | }); |
| 149 | + describe('snakecaseKeys()', () => { |
| 150 | + it("converts an object's keys from camelCase to snake_case", () => { |
| 151 | + const cases = [ |
| 152 | + { |
| 153 | + input: { snakeCase: 1 }, |
| 154 | + expected: { snake_case: 1 }, |
| 155 | + }, |
| 156 | + { |
| 157 | + input: { snakeCase: 1, anotherSnakeCase: 2 }, |
| 158 | + expected: { snake_case: 1, another_snake_case: 2 }, |
| 159 | + }, |
| 160 | + ]; |
| 161 | + cases.forEach((testCase) => { |
| 162 | + expect(snakecaseKeys(testCase.input)).toEqual(testCase.expected); |
| 163 | + }); |
| 164 | + }); |
| 165 | + |
| 166 | + it("converts a nested object's keys from camelCase to snake_case", () => { |
| 167 | + const cases = [ |
| 168 | + { |
| 169 | + input: { snakeCase: { abCd: 1 } }, |
| 170 | + expected: { snake_case: { ab_cd: 1 } }, |
| 171 | + }, |
| 172 | + { |
| 173 | + input: { snakeCase: { enGb: 1 } }, |
| 174 | + expected: { snake_case: { en_gb: 1 } }, |
| 175 | + }, |
| 176 | + { |
| 177 | + input: { enGb: { snakeCasePlus: { anotherOne: 1 } } }, |
| 178 | + expected: { en_gb: { snake_case_plus: { another_one: 1 } } }, |
| 179 | + }, |
| 180 | + { |
| 181 | + input: { |
| 182 | + enGb: { snakeCasePlus: { anotherOne: { yetAnother: 1 } } }, |
| 183 | + }, |
| 184 | + expected: { |
| 185 | + en_gb: { snake_case_plus: { another_one: { yet_another: 1 } } }, |
| 186 | + }, |
| 187 | + }, |
| 188 | + ]; |
| 189 | + cases.forEach((testCase) => { |
| 190 | + expect(snakecaseKeys(testCase.input)).toEqual(testCase.expected); |
| 191 | + }); |
| 192 | + }); |
| 193 | + |
| 194 | + it('converts keys of objects contained in an array', () => { |
| 195 | + const cases = [ |
| 196 | + { |
| 197 | + input: { snakeCase: { abCd: [{ qwertyDvorak: 1 }] } }, |
| 198 | + expected: { snake_case: { ab_cd: [{ qwerty_dvorak: 1 }] } }, |
| 199 | + }, |
| 200 | + { |
| 201 | + input: { |
| 202 | + snakeCase: [ |
| 203 | + { abCd: [{ qwertyDvorak: 1 }] }, |
| 204 | + 'dont_change_me', |
| 205 | + { zxyWt: [7, { pp: 42, llllMmm: 'aa_aa' }] }, |
| 206 | + ], |
| 207 | + caseSnake: { |
| 208 | + snakeCamel: [ |
| 209 | + { mnOpQrSt: [[{ objKey: ['a', 7, { keyObj: 99 }] }]] }, |
| 210 | + ], |
| 211 | + }, |
| 212 | + }, |
| 213 | + expected: { |
| 214 | + snake_case: [ |
| 215 | + { ab_cd: [{ qwerty_dvorak: 1 }] }, |
| 216 | + 'dont_change_me', |
| 217 | + { zxy_wt: [7, { pp: 42, llll_mmm: 'aa_aa' }] }, |
| 218 | + ], |
| 219 | + case_snake: { |
| 220 | + snake_camel: [ |
| 221 | + { mn_op_qr_st: [[{ obj_key: ['a', 7, { key_obj: 99 }] }]] }, |
| 222 | + ], |
| 223 | + }, |
| 224 | + }, |
| 225 | + }, |
| 226 | + { |
| 227 | + input: [42, { snakeCase: { abCd: [{ qwertyDvorak: 1 }] } }, '180'], |
| 228 | + expected: [ |
| 229 | + 42, |
| 230 | + { snake_case: { ab_cd: [{ qwerty_dvorak: 1 }] } }, |
| 231 | + '180', |
| 232 | + ], |
| 233 | + }, |
| 234 | + ]; |
| 235 | + cases.forEach((testCase) => { |
| 236 | + expect(snakecaseKeys(testCase.input)).toEqual(testCase.expected); |
| 237 | + }); |
| 238 | + }); |
| 239 | + }); |
149 | 240 | }); |
0 commit comments