Skip to content
Snippets Groups Projects
Commit d8820eb1 authored by Bastien DUMONT's avatar Bastien DUMONT :angel:
Browse files

Merge branch 'fix/no-contract' into 'main'

fix: no contract found throw errors

See merge request web-et-numerique/llle_project/enedis-sge-konnector!13
parents 8487f77b 00e8b2a0
No related branches found
No related tags found
1 merge request!13fix: no contract found throw errors
Pipeline #42247 passed
...@@ -40,7 +40,7 @@ unit-test: ...@@ -40,7 +40,7 @@ unit-test:
- apk add bash - apk add bash
script: script:
- yarn - yarn
- yarn test --ci --reporters=default --reporters=jest-junit - yarn test --ci --reporters=default --reporters=jest-junit --coverage
coverage: "/All files[^|]*\\|[^|]*\\s+([\\d\\.]+)/" coverage: "/All files[^|]*\\|[^|]*\\s+([\\d\\.]+)/"
artifacts: artifacts:
when: always when: always
......
...@@ -6,8 +6,10 @@ const mockSoapRequest = jest.fn() ...@@ -6,8 +6,10 @@ const mockSoapRequest = jest.fn()
jest.mock('easy-soap-request', () => async () => mockSoapRequest()) jest.mock('easy-soap-request', () => async () => mockSoapRequest())
const mockParseContracts = jest.fn() const mockParseContracts = jest.fn()
const mockCheckContractExists = jest.fn()
jest.mock('../../src/helpers/parsing', () => ({ jest.mock('../../src/helpers/parsing', () => ({
parseContracts: () => mockParseContracts(), parseContracts: () => mockParseContracts(),
checkContractExists: () => mockCheckContractExists(),
})) }))
const responseMock = { const responseMock = {
...@@ -33,6 +35,7 @@ describe('verifyContract', () => { ...@@ -33,6 +35,7 @@ describe('verifyContract', () => {
'Collecte de la courbe de charge au pas 30 min avec transmission quotidienne des données brutes en soutirage', 'Collecte de la courbe de charge au pas 30 min avec transmission quotidienne des données brutes en soutirage',
}, },
]) ])
mockCheckContractExists.mockReturnValueOnce(true)
jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValue( jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValue(
{ {
...@@ -84,6 +87,7 @@ describe('verifyContract', () => { ...@@ -84,6 +87,7 @@ describe('verifyContract', () => {
serviceSouscritLibelle: serviceSouscritLibelle:
'Collecte de la courbe de charge au pas 30 min avec transmission quotidienne des données brutes en soutirage', 'Collecte de la courbe de charge au pas 30 min avec transmission quotidienne des données brutes en soutirage',
}) })
mockCheckContractExists.mockReturnValueOnce(true)
jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValue( jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValue(
{ {
...@@ -143,6 +147,7 @@ describe('verifyContract', () => { ...@@ -143,6 +147,7 @@ describe('verifyContract', () => {
'Collecte de la courbe de charge au pas 30 min avec transmission quotidienne des données brutes en soutirage', 'Collecte de la courbe de charge au pas 30 min avec transmission quotidienne des données brutes en soutirage',
}, },
]) ])
mockCheckContractExists.mockReturnValueOnce(true)
jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValue( jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValue(
{ {
...@@ -212,6 +217,7 @@ describe('verifyContract', () => { ...@@ -212,6 +217,7 @@ describe('verifyContract', () => {
}, },
}, },
}) })
mockCheckContractExists.mockReturnValueOnce(true)
try { try {
await verifyContract( await verifyContract(
...@@ -226,4 +232,28 @@ describe('verifyContract', () => { ...@@ -226,4 +232,28 @@ describe('verifyContract', () => {
expect(error).toBe(errors.LOGIN_FAILED) expect(error).toBe(errors.LOGIN_FAILED)
} }
}) })
it('should return NULL if no contract are found 🚫', async () => {
mockSoapRequest.mockResolvedValue(responseMock)
jest.spyOn(xml2js, 'parseStringPromise').mockResolvedValueOnce({
Envelope: {
Body: {
rechercherServicesSouscritsMesuresResponse: {},
},
},
})
try {
const serviceId = await verifyContract(
'http://test.com',
'111',
'login@log.com',
'1234567',
'1111111111111'
)
expect(serviceId).toBe(null)
} catch (error) {
expect(true).toBe(false)
}
mockParseContracts.mockRestore()
})
}) })
// @ts-check // @ts-check
const { log, errors } = require('cozy-konnector-libs') const { log, errors } = require('cozy-konnector-libs')
const soapRequest = require('easy-soap-request') const soapRequest = require('easy-soap-request')
const { parseTags, parseValue, parseContracts } = require('../helpers/parsing') const {
parseTags,
parseValue,
parseContracts,
checkContractExists,
} = require('../helpers/parsing')
const { rechercherServicesSouscritsMesures } = require('../requests/sge') const { rechercherServicesSouscritsMesures } = require('../requests/sge')
const xml2js = require('xml2js') const xml2js = require('xml2js')
const { contractState, contractLibelle } = require('./types/enum') const { contractState, contractLibelle } = require('./types/enum')
...@@ -37,6 +42,11 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) { ...@@ -37,6 +42,11 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) {
}) })
try { try {
if (!checkContractExists(parsedReply)) {
log('error', 'no contract found')
return null
}
const currentContracts = parseContracts(parsedReply) const currentContracts = parseContracts(parsedReply)
let currentContract = null let currentContract = null
if (Array.isArray(currentContracts)) { if (Array.isArray(currentContracts)) {
......
...@@ -89,6 +89,18 @@ async function formateDataForDoctype(data) { ...@@ -89,6 +89,18 @@ async function formateDataForDoctype(data) {
}) })
} }
/**
* Check if response contains contracts
* @param {string} parsedReply
* @return {boolean}
*/
function checkContractExists(parsedReply) {
const json = JSON.stringify(parsedReply)
return JSON.parse(json)['Envelope']['Body'][
'rechercherServicesSouscritsMesuresResponse'
]['servicesSouscritsMesures']
}
/** /**
* Format tag in order to be manipulated easly * Format tag in order to be manipulated easly
* @param {string} name * @param {string} name
...@@ -124,4 +136,5 @@ module.exports = { ...@@ -124,4 +136,5 @@ module.exports = {
parseContracts, parseContracts,
parseContractStartDate, parseContractStartDate,
parseServiceId, parseServiceId,
checkContractExists,
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment