import NfcCardModuleWrapper from '../NfcCardModuleWrapper'; import {ERR_JSON_MUST_HAVE_MSG_FIELD, ERR_JSON_MUST_HAVE_STATUS_FIELD, ERR_JSON_MUST_HAVE_CODE_FIELD, ERR_JSON_MUST_HAVE_TYPE_FIELD, ERR_JSON_MUST_HAVE_TYPE_ID_FIELD, ERR_JSON_TYPE_ID_FIELD_MUST_HAVE_VAL} from '../NfcCardModuleWrapper' /** * Test createKeyForHmac method behaviour if the function with the same title in NativeModule throwed a error or produced response of bad format. * We mock different incorrect error messages from NativeModule and also a correct error message, and check the behaviour. */ jest.mock('react-native', () => { return { NativeModules: { NfcCardModule: { createKeyForHmac: jest.fn().mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("aaa")); })) .mockReturnValueOnce(new Promise((resolve, _reject) => { resolve("{\"message\":\"\", \"status\":\"ok\"}" ) })) .mockReturnValueOnce(new Promise((resolve, _reject) => { resolve("{\"message1\":\"111\", \"status\":\"ok\"}" ) })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"\", \"status\":\"fail\", \"code\": \"30006\", \"errorTypeId\": \"3\", \"errorType\": \"Native code fail: incorrect format of input data\"}" )); })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message1\":\"22223\", \"status\":\"fail\", \"code\": \"30006\", \"errorTypeId\": \"3\", \"errorType\": \"Native code fail: incorrect format of input data\"}" )); })) .mockReturnValueOnce(new Promise((resolve, _reject) => { resolve("{\"message\":\"111\", \"status\":\"\"}" ) })) .mockReturnValueOnce(new Promise((resolve, _reject) => { resolve("{\"message\":\"111\", \"status1\":\"ok\"}" ) })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"22223\", \"status\":\"\", \"code\": \"30006\", \"errorTypeId\": \"3\", \"errorType\": \"Native code fail: incorrect format of input data\"}" )); })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"22223\", \"status1\":\"fail\", \"code\": \"30006\", \"errorTypeId\": \"3\", \"errorType\": \"Native code fail: incorrect format of input data\"}" )); })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"22223\", \"code\": \"\", \"status\":\"fail\", \"errorTypeId\": \"3\", \"errorType\": \"Native code fail: incorrect format of input data\"}" )); })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"22223\", \"code1\": \"30006\", \"status\":\"fail\", \"errorTypeId\": \"3\", \"errorType\": \"Native code fail: incorrect format of input data\"}" )); })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"22223\", \"code\": \"30006\", \"status\":\"fail\", \"errorTypeId\": \"3\", \"errorType\": \"\"}" )); })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"22223\", \"code\": \"30006\", \"status\":\"fail\", \"errorTypeId\": \"3\", \"errorType1\": \"Native code fail: incorrect format of input data\"}" )); })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"22223\", \"code\": \"30006\", \"status\":\"fail\", \"errorTypeId\": \"\", \"errorType\": \"Native code fail: incorrect format of input data\"}" )); })) .mockReturnValueOnce(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"22223\", \"code\": \"30006\", \"status\":\"fail\", \"errorTypeId1\": \"3\", \"errorType\": \"Native code fail: incorrect format of input data\"}" )); })) .mockReturnValue(new Promise((_resolve, reject) => { reject(new Error("{\"message\":\"Key for hmac signing for specified serial number does not exist.\", \"code\": \"80000\", \"status\":\"fail\", \"errorTypeId\": \"8\", \"errorType\": \"Native code (Android) fail: hmac key issue\"}" )); })), } }, Platform: { OS: "android" } }; }); /* createKeyForHmac */ test('Test createKeyForHmac throws error if input arg is not json', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe("aaa"); }); }); test('Test createKeyForHmac throws error if message field (in response) is empty', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_MSG_FIELD); }); }); test('Test createKeyForHmac throws error if message field (in response) is absent', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_MSG_FIELD); }); }); test('Test createKeyForHmac throws error if message field ()in error msg) is empty', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_MSG_FIELD); }); }); test('Test createKeyForHmac throws error if message field (in error msg) is absent', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_MSG_FIELD); }); }); test('Test createKeyForHmac throws error if status field (in response) is empty', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_STATUS_FIELD); }); }); test('Test createKeyForHmac throws error if status field (in response) is absent', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_STATUS_FIELD); }); }); test('Test createKeyForHmac throws error if status field (in error msg) is empty', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_STATUS_FIELD); }); }); test('Test createKeyForHmac throws error if status field (in error msg) is absent', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_STATUS_FIELD); }); }); test('Test createKeyForHmac throws error if code field is empty', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_CODE_FIELD); }); }); test('Test createKeyForHmac throws error if code field is absent', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_CODE_FIELD); }); }); test('Test createKeyForHmac throws error if errorType field is empty', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_TYPE_FIELD); }); }); test('Test createKeyForHmac throws error if errorType field is absent', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_TYPE_FIELD); }); }); test('Test createKeyForHmac throws error if errorTypeId field is empty', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_TYPE_ID_FIELD_MUST_HAVE_VAL); }); }); test('Test createKeyForHmac throws error if errorTypeId field is absent', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe(ERR_JSON_MUST_HAVE_TYPE_ID_FIELD); }); }); test('Test createKeyForHmac throws NfcNativeModuleError if errorTypeId > 0', () => { return new NfcCardModuleWrapper().createKeyForHmac("F4B072E1DF2DB7CF6CD0CD681EC5CD2D071458D278E6546763CBB4860F8082FE14418C8A8A55E2106CBC6CB1174F4BA6D827A26A2D205F99B7E00401DA4C15ACC943274B92258114B5E11C16DA64484034F93771547FBE60DA70E273E6BD64F8A4201A9913B386BCA55B6678CFD7E7E68A646A7543E9E439DD5B60B9615079FE", "7256EFE7A77AFC7E9088266EF27A93CB01CD9432E0DB66D600745D506EE04AC4", "504394802433901126813236") .then(_cardRsponse => { expect(true).toBe(false); }) .catch(error => { console.log(error.message) expect(error.message).toBe('Key for hmac signing for specified serial number does not exist.'); expect(error.status).toBe('fail'); expect(error.errorCode).toBe('80000'); expect(error.errorTypeId).toBe('8'); expect(error.errorType).toBe('Native code (Android) fail: hmac key issue'); }); });