mares-error-mapper
Version:
마레스 에러를 번역 및 매핑하는 모듈입니다.
337 lines (309 loc) • 8.38 kB
JavaScript
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(() => {})
})
})