UNPKG

mares-error-mapper

Version:

마레스 에러를 번역 및 매핑하는 모듈입니다.

337 lines (309 loc) 8.38 kB
const should = require('should') const _ = require('lodash') const utils = require('./utils') suite('mares-error-mapper test', () => { suite('unique mapper test', () => { suiteSetup(() => { }) test('uniqueMapper should exclude error for excluding params', () => { let errors = [{ param: 'a', value: 'a', domain: null, code: 'error1' }, { param: 'b', value: 'b', domain: null, code: 'error2' }, { param: 'c', value: 'c', domain: null, code: 'error3' }] let res = utils.excludeErrorObject(errors, ['a']) res.length.should.eql(2) res[0].should.property('param', 'b') res[1].should.property('param', 'c') }) suiteTeardown(() => {}) }) suite('code translator test', () => { suiteSetup(() => {}) test('codeTranslator should make msg', () => { let errors = [{ param: null, value: null, code: 'invalidKey', msg: 'invalidKey' }, { param: null, value: null, code: 'commonInternalServerError', msg: 'commonInternalServerError' }, { param: null, value: null, code: 'invalidKey', msg: null }] let codeLang = { 'std': { 'user': { 'enum': { 'gender': { 'man': '남성', 'woman': '여성' } } } }, 'codes': { 'invalidKey': '잘못된 키 입니다.', 'commonInternalServerError': '서버 오류입니다.' } } let checkErrors = _.cloneDeep(errors) let res = utils.translateErrorCode(checkErrors, codeLang) res.length.should.eql(3) res[0].code.should.eql(errors[0].code) res[1].code.should.eql(errors[1].code) res[2].code.should.eql(errors[2].code) res[0].msg.should.eql(codeLang.codes.invalidKey) res[1].msg.should.eql(codeLang.codes.commonInternalServerError) res[2].msg.should.eql(codeLang.codes.invalidKey) res[0].msg.should.not.eql(errors[0].msg) res[1].msg.should.not.eql(errors[1].msg) res[2].msg.should.not.eql(errors[2].msg) }) test('codeTranslator should not translate when already translated', () => { let errors = [{ param: null, value: null, code: 'invalidKey', msg: '잘못된 키를 사용하셨습니다.' }, { param: null, value: null, code: 'commonInternalServerError', msg: '내부 서버 오류입니다. 서버 관리자에게 문의하세요' }] let codeLang = { 'std': { 'user': { 'enum': { 'gender': { 'man': '남성', 'woman': '여성' } } } }, 'codes': { 'invalidKey': '잘못된 키 입니다.', 'commonInternalServerError': '서버 오류입니다.' } } let checkErrors = _.cloneDeep(errors) let res = utils.translateErrorCode(checkErrors, codeLang) res.length.should.eql(2) res[0].code.should.eql(errors[0].code) res[1].code.should.eql(errors[1].code) res[0].msg.should.not.eql(codeLang.codes.invalidKey) res[1].msg.should.not.eql(codeLang.codes.commonInternalServerError) res[0].msg.should.eql(errors[0].msg) res[1].msg.should.eql(errors[1].msg) }) test('codeTranslator should not translate when object doenst have translate msg', () => { let errors = [{ param: null, value: null, code: 'invalidKey', msg: 'invalidKey' }, { param: null, value: null, code: 'commonInternalServerError', msg: 'commonInternalServerError' }] let codeLang = { 'std': { 'user': { 'enum': { 'gender': { 'man': '남성', 'woman': '여성' } } } }, 'codes': { 'commonInternalServerError': '서버 오류입니다.' } } let checkErrors = _.cloneDeep(errors) let res = utils.translateErrorCode(checkErrors, codeLang) res.length.should.eql(2) res[0].code.should.eql(errors[0].code) res[1].code.should.eql(errors[1].code) res[1].msg.should.eql(codeLang.codes.commonInternalServerError) res[0].msg.should.eql(errors[0].msg) res[1].msg.should.not.eql(errors[1].msg) }) suiteTeardown(() => {}) }) suite('code translator by json test', () => { suiteSetup(() => {}) test('codeTranslator should make msg by Json', () => { let errors = [{ param: null, value: null, code: 'invalidKey', msg: 'invalidKey' }, { param: null, value: null, code: 'commonInternalServerError', msg: 'commonInternalServerError' }, { param: null, value: null, code: 'invalidKey', msg: null }] let codeLang = { 'std': { 'user': { 'enum': { 'gender': { 'man': '남성', 'woman': '여성' } } } }, 'codes': { 'invalidKey': '잘못된 키 입니다.', 'commonInternalServerError': '서버 오류입니다.' } } let checkErrors = _.cloneDeep(errors) let codeLangJson = JSON.stringify(codeLang) let res = utils.translateErrorCodeByJson(checkErrors, codeLangJson) res.length.should.eql(3) res[0].code.should.eql(errors[0].code) res[1].code.should.eql(errors[1].code) res[2].code.should.eql(errors[2].code) res[0].msg.should.eql(codeLang.codes.invalidKey) res[1].msg.should.eql(codeLang.codes.commonInternalServerError) res[2].msg.should.eql(codeLang.codes.invalidKey) res[0].msg.should.not.eql(errors[0].msg) res[1].msg.should.not.eql(errors[1].msg) res[2].msg.should.not.eql(errors[2].msg) }) test('codeTranslator should not translate when already translated', () => { let errors = [{ param: null, value: null, code: 'invalidKey', msg: '잘못된 키를 사용하셨습니다.' }, { param: null, value: null, code: 'commonInternalServerError', msg: '내부 서버 오류입니다. 서버 관리자에게 문의하세요' }] let codeLang = { 'std': { 'user': { 'enum': { 'gender': { 'man': '남성', 'woman': '여성' } } } }, 'codes': { 'invalidKey': '잘못된 키 입니다.', 'commonInternalServerError': '서버 오류입니다.' } } let checkErrors = _.cloneDeep(errors) let codeLangJson = JSON.stringify(codeLang) let res = utils.translateErrorCodeByJson(checkErrors, codeLangJson) res.length.should.eql(2) res[0].code.should.eql(errors[0].code) res[1].code.should.eql(errors[1].code) res[0].msg.should.not.eql(codeLang.codes.invalidKey) res[1].msg.should.not.eql(codeLang.codes.commonInternalServerError) res[0].msg.should.eql(errors[0].msg) res[1].msg.should.eql(errors[1].msg) }) test('codeTranslator should not translate when json doenst have translate msg', () => { let errors = [{ param: null, value: null, code: 'invalidKey', msg: 'invalidKey' }, { param: null, value: null, code: 'commonInternalServerError', msg: 'commonInternalServerError' }] let codeLang = { 'std': { 'user': { 'enum': { 'gender': { 'man': '남성', 'woman': '여성' } } } }, 'codes': { 'commonInternalServerError': '서버 오류입니다.' } } let checkErrors = _.cloneDeep(errors) let codeLangJson = JSON.stringify(codeLang) let res = utils.translateErrorCodeByJson(checkErrors, codeLangJson) res.length.should.eql(2) res[0].code.should.eql(errors[0].code) res[1].code.should.eql(errors[1].code) res[1].msg.should.eql(codeLang.codes.commonInternalServerError) res[0].msg.should.eql(errors[0].msg) res[1].msg.should.not.eql(errors[1].msg) }) test('codeTranslator should not translate and push errors if json file is not valid', () => { let errors = [{ param: null, value: null, code: 'invalidKey', msg: 'invalidKey' }, { param: null, value: null, code: 'commonInternalServerError', msg: 'commonInternalServerError' }] var age = 32 let codeLangJson = 'invalidJSON:{}{}fdasasdfasdf' let checkErrors = _.cloneDeep(errors) let res = utils.translateErrorCodeByJson(checkErrors, codeLangJson) res.length.should.eql(3) res[0].should.eql(errors[0]) res[1].should.eql(errors[1]) res[2].should.eql({ code: 'jsonParseError', msg: 'translate json parse error. please send message to server developer', value: null, domain: null }) }) suiteTeardown(() => {}) }) })