From 4c5c91a6554214372679477d135504db72886780 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Thu, 3 Jun 2021 02:01:52 +0100 Subject: [PATCH 01/12] feat : get a baladiya by the daira and wilaya code --- ...BaladiyaByCodeAndDairaCodeAndWilayaCode.js | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js diff --git a/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js b/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js new file mode 100644 index 0000000..1059f56 --- /dev/null +++ b/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js @@ -0,0 +1,30 @@ +const projectBaladiya = require('../utils/projections/projectObject'); +const getBaladiyaByCodeAndDairaCodeAndWilayaCode = + /** + * Takes a wilaya mattricule and a daira code and return the baladyia. + * + * @example Get a daira by code and wilaya mattricule(mattricule:1, code:101, bcode:101) + * + * //returns {name : "ADRAR"} + * getWilayaByBaladyiaName(1, 101,101) + * + * @param { integer } mattricule wilaya mattricule + * @param { integer } code daira code + * @param { integer } bcode baladiya code + * @param { String[] } projection a list of Baladyia object attributes to keep + * @returns { Object | null } Returns a baldiya's object, or null + */ + (mattricule, code, bcode, projection)=>{ + const wilaya = data.find((w) => w.mattricule === mattricule); + if (wilaya) { + const daira = wilaya.dairats.find((d)=> d.code === code); + if( daira){ + const baladiya = daira.baladiyats.find((b)=> b.code === bcode) + return projectBaladiya(baladiya, projection); + } + + } + return null +} + +module.exports = getBaladiyaByCodeAndDairaCodeAndWilayaCode \ No newline at end of file From 9f51e6f5280f3d85cf0ca9844fca36229b6b3db7 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Thu, 3 Jun 2021 02:02:35 +0100 Subject: [PATCH 02/12] get a baladiya by daira code and wilaya code --- src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js b/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js index 1059f56..4cb0755 100644 --- a/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js +++ b/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js @@ -1,9 +1,9 @@ const projectBaladiya = require('../utils/projections/projectObject'); const getBaladiyaByCodeAndDairaCodeAndWilayaCode = /** - * Takes a wilaya mattricule and a daira code and return the baladyia. + * Takes a wilaya mattricule ,a daira code , bladiya code and return the baladyia. * - * @example Get a daira by code and wilaya mattricule(mattricule:1, code:101, bcode:101) + * @example Get a baladiya by code, daira code, and wilaya mattricule(mattricule:1, code:101, bcode:101) * * //returns {name : "ADRAR"} * getWilayaByBaladyiaName(1, 101,101) From 28dab1649ec9366bc37214fe893eb2f5796bf137 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Thu, 3 Jun 2021 02:03:02 +0100 Subject: [PATCH 03/12] feat : get a baladiya by code for a given wilaya code --- src/api/getBaldiyaByCodeForWilaya.js | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/api/getBaldiyaByCodeForWilaya.js diff --git a/src/api/getBaldiyaByCodeForWilaya.js b/src/api/getBaldiyaByCodeForWilaya.js new file mode 100644 index 0000000..76601b6 --- /dev/null +++ b/src/api/getBaldiyaByCodeForWilaya.js @@ -0,0 +1,32 @@ +const getBaldiyaByCodeForWilaya = (data) => +/** + * Takes a wilaya code (mattricule) and a baladiya code and return a baladiya + * + * @example Get the baladiya of adrar in adrara(mattricule:1 ,code: 101) + * + * + * getBaldiyaByCodeForWilaya(1, 101) + * + * @param { Number } mattricule wilaya code (mattricule) + * @param { Number } code baladiya code (code) + * @param { String[] } projection a list of Baladyia object attributes to keep + * @returns { Object[] | null } get baladiya's object + */ + + (mattricule, code, projections) => { + const wilaya = data.find((w) => w.mattricule === mattricule); + if (wilaya) { + const baladyiats = wilaya.dairats.reduce( + (acc, daira) => [...acc, ...daira.baladyiats], + [], + ); + if(baladyiats){ + baladiya = baladyiats.find((w)=> w.code === code) + return projectBaladiya(baladiya, projections); + } + + } + return null; + }; + +module.exports = getBaldiyaByCodeForWilaya; From 0f140f899bf7080bd8a02e39648b7632441dda2f Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Thu, 3 Jun 2021 02:03:32 +0100 Subject: [PATCH 04/12] feat : get baladiyats for a daira by code for a given wilaya code --- ...tBaldiyatsForDairaByCodeForWilayaByCode.js | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js diff --git a/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js b/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js new file mode 100644 index 0000000..1683d6c --- /dev/null +++ b/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js @@ -0,0 +1,29 @@ + +const getBaldiyatsForDairaByCodeForWilayaByCode = (data) => +/** + * Takes a wilaya code (mattricule), daira code (code) and returns array of Baladiyates of wilaya. + * + * @example Get Baladiyats list of adrar daira in adrar wilaya (mattricule:1 ,code: 101) + * + * + * getBaldiyatsForDairaByCodeForWilayaByCode(1, 101) + * + * @param { Number } mattricule wilaya code (mattricule) + * @param { Number } code baladiya code (code) + * @param { String[] } projection a list of Baladyia object attributes to keep + * @returns { Object[] | null } list of all baladiyas for wilaya + */ + + (mattricule,code) => { + const wilaya = data.find((w) => w.mattricule === mattricule); + if (wilaya) { + daira = data.find((w) => w.code === code); + if(daira){ + return daira.baladiyats + } + + } + return null; + }; + +module.exports = getBaldiyatsForDairaByCodeForWilayaByCode; From 30ebd22db23c11cfbbf8fd2f5023bcf321f5f621 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Thu, 3 Jun 2021 02:07:17 +0100 Subject: [PATCH 05/12] feat : get a given daira by code for a wilaya code --- src/api/getDairaByCodeAndWilayaCode.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/api/getDairaByCodeAndWilayaCode.js diff --git a/src/api/getDairaByCodeAndWilayaCode.js b/src/api/getDairaByCodeAndWilayaCode.js new file mode 100644 index 0000000..06733e6 --- /dev/null +++ b/src/api/getDairaByCodeAndWilayaCode.js @@ -0,0 +1,26 @@ +const projectDaira = require('../utils/projections/projectObject'); + +const getDairaByCodeAndWilayaCode = + /** + * Takes a wilaya mattricule and a daira code and return daira. + * + * @example Get a daira by code and wilaya mattricule(mattricule:1, code:101) + * + * //returns {name : "ADRAR"} + * getWilayaByBaladyiaName(1, 101) + * + * @param { integer } mattricule wilaya mattricule + * @param { integer } code daira code + * @param { String[] } projection a list of Baladyia object attributes to keep + * @returns { Object | null } Returns daira's object, or null + */ + (mattricule, code, projection)=>{ + const wilaya = data.find((w) => w.mattricule === mattricule); + if (wilaya) { + const daira = wilaya.dairats.find((d)=> d.code === code) + return projectDaira(daira, projection); + } + return null; +} + +module.exports = getDairaByCodeAndWilayaCode; \ No newline at end of file From 6feba78116433d1968197ebfbe47b170d9c2874f Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Thu, 3 Jun 2021 02:08:01 +0100 Subject: [PATCH 06/12] add the new fucntions to index --- src/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 706adad..a3c62b9 100644 --- a/src/index.js +++ b/src/index.js @@ -16,7 +16,10 @@ const getBaladyiatsForWilaya = require('./api/getBaladyiatsForWilaya'); const getBaladyiatsForDaira = require('./api/getBaladyiatsForDaira'); const getWilayaByBaladyiaName = require('./api/getWilayaByBaladyiaName'); const getDairaByBaladyiaName = require('./api/getDairaByBaladyiaName'); - +const getDairaByCodeAndWilayaCode = require('./api/getDairaByCodeAndWilayaCode'); +const getBaladiyaByCodeAndDairaCodeAndWilayaCode = require('./api/getBaladiyaByCodeAndDairaCodeAndWilayaCode'); +const getBaldiyatsForDairaByCodeForWilayaByCode = require('./api/getBaldiyatsForDairaByCodeForWilayaByCode'); +const getBaldiyaByCodeForWilaya = require('./api/getBaldiyaByCodeForWilaya'); const data = require('../data/WilayaList.json'); const _getData = () => [...data]; @@ -35,6 +38,10 @@ module.exports = { getBaladyiatsForDaira: getBaladyiatsForDaira(_getData()), getWilayaByBaladyiaName: getWilayaByBaladyiaName(_getData()), getDairaByBaladyiaName: getDairaByBaladyiaName(_getData()), + getDairaByCodeAndWilayaCode: getDairaByCodeAndWilayaCode(_getData()), + getBaladiyaByCodeAndDairaCodeAndWilayaCode: getBaladiyaByCodeAndDairaCodeAndWilayaCode(_getData()), + getBaldiyatsForDairaByCodeForWilayaByCode:getBaldiyatsForDairaByCodeForWilayaByCode(_getData()), + getBaldiyaByCodeForWilaya: getBaldiyaByCodeForWilaya(_getData()), utils: { projectObject, isValidWilayaCode, From 91c69b456495351c007bdc0c2c311dfe69497db8 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Fri, 4 Jun 2021 03:49:15 +0100 Subject: [PATCH 07/12] fix : typos and some undifined errors --- src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js | 4 ++-- src/api/getBaldiyaByCodeForWilaya.js | 2 ++ src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js | 8 ++++---- src/api/getDairaByCodeAndWilayaCode.js | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js b/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js index 4cb0755..af3e694 100644 --- a/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js +++ b/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js @@ -1,5 +1,5 @@ const projectBaladiya = require('../utils/projections/projectObject'); -const getBaladiyaByCodeAndDairaCodeAndWilayaCode = +const getBaladiyaByCodeAndDairaCodeAndWilayaCode = (data) => /** * Takes a wilaya mattricule ,a daira code , bladiya code and return the baladyia. * @@ -19,7 +19,7 @@ const getBaladiyaByCodeAndDairaCodeAndWilayaCode = if (wilaya) { const daira = wilaya.dairats.find((d)=> d.code === code); if( daira){ - const baladiya = daira.baladiyats.find((b)=> b.code === bcode) + const baladiya = daira.baladyiats.find((b)=> b.code === bcode) return projectBaladiya(baladiya, projection); } diff --git a/src/api/getBaldiyaByCodeForWilaya.js b/src/api/getBaldiyaByCodeForWilaya.js index 76601b6..1e6a6ce 100644 --- a/src/api/getBaldiyaByCodeForWilaya.js +++ b/src/api/getBaldiyaByCodeForWilaya.js @@ -1,3 +1,5 @@ +const projectBaladiya = require('../utils/projections/projectObject'); + const getBaldiyaByCodeForWilaya = (data) => /** * Takes a wilaya code (mattricule) and a baladiya code and return a baladiya diff --git a/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js b/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js index 1683d6c..3e8231d 100644 --- a/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js +++ b/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js @@ -1,4 +1,3 @@ - const getBaldiyatsForDairaByCodeForWilayaByCode = (data) => /** * Takes a wilaya code (mattricule), daira code (code) and returns array of Baladiyates of wilaya. @@ -14,12 +13,13 @@ const getBaldiyatsForDairaByCodeForWilayaByCode = (data) => * @returns { Object[] | null } list of all baladiyas for wilaya */ - (mattricule,code) => { + (mattricule, code) => { const wilaya = data.find((w) => w.mattricule === mattricule); if (wilaya) { - daira = data.find((w) => w.code === code); + daira = wilaya.dairats.find((d) => d.code === code); + if(daira){ - return daira.baladiyats + return daira.baladyiats } } diff --git a/src/api/getDairaByCodeAndWilayaCode.js b/src/api/getDairaByCodeAndWilayaCode.js index 06733e6..3d181cc 100644 --- a/src/api/getDairaByCodeAndWilayaCode.js +++ b/src/api/getDairaByCodeAndWilayaCode.js @@ -1,6 +1,6 @@ const projectDaira = require('../utils/projections/projectObject'); -const getDairaByCodeAndWilayaCode = +const getDairaByCodeAndWilayaCode = (data)=> /** * Takes a wilaya mattricule and a daira code and return daira. * From 0923acc26e908014299d4612ae76b54e07acd3e8 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Fri, 4 Jun 2021 03:51:17 +0100 Subject: [PATCH 08/12] fix some not defined variables and add new fucntions to the package index --- ...BaladiyaByCodeAndDairaCodeAndWilayaCode.js | 29 ++++++++++--------- src/api/getBaldiyaByCodeForWilaya.js | 6 ++-- ...tBaldiyatsForDairaByCodeForWilayaByCode.js | 8 ++--- src/api/getDairaByCodeAndWilayaCode.js | 18 ++++++------ src/index.js | 2 +- 5 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js b/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js index af3e694..a410731 100644 --- a/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js +++ b/src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.js @@ -1,6 +1,7 @@ const projectBaladiya = require('../utils/projections/projectObject'); + const getBaladiyaByCodeAndDairaCodeAndWilayaCode = (data) => - /** +/** * Takes a wilaya mattricule ,a daira code , bladiya code and return the baladyia. * * @example Get a baladiya by code, daira code, and wilaya mattricule(mattricule:1, code:101, bcode:101) @@ -14,17 +15,17 @@ const getBaladiyaByCodeAndDairaCodeAndWilayaCode = (data) => * @param { String[] } projection a list of Baladyia object attributes to keep * @returns { Object | null } Returns a baldiya's object, or null */ - (mattricule, code, bcode, projection)=>{ - const wilaya = data.find((w) => w.mattricule === mattricule); - if (wilaya) { - const daira = wilaya.dairats.find((d)=> d.code === code); - if( daira){ - const baladiya = daira.baladyiats.find((b)=> b.code === bcode) - return projectBaladiya(baladiya, projection); - } - - } - return null -} + (mattricule, code, bcode, projection)=>{ + const wilaya = data.find((w) => w.mattricule === mattricule); + if (wilaya) { + const daira = wilaya.dairats.find((d)=> d.code === code); + if( daira){ + const baladiya = daira.baladyiats.find((b)=> b.code === bcode); + return projectBaladiya(baladiya, projection); + } + + } + return null; + }; -module.exports = getBaladiyaByCodeAndDairaCodeAndWilayaCode \ No newline at end of file +module.exports = getBaladiyaByCodeAndDairaCodeAndWilayaCode; \ No newline at end of file diff --git a/src/api/getBaldiyaByCodeForWilaya.js b/src/api/getBaldiyaByCodeForWilaya.js index 1e6a6ce..8f94522 100644 --- a/src/api/getBaldiyaByCodeForWilaya.js +++ b/src/api/getBaldiyaByCodeForWilaya.js @@ -12,7 +12,7 @@ const getBaldiyaByCodeForWilaya = (data) => * @param { Number } mattricule wilaya code (mattricule) * @param { Number } code baladiya code (code) * @param { String[] } projection a list of Baladyia object attributes to keep - * @returns { Object[] | null } get baladiya's object + * @returns { Object[] | null } get baladiya's object */ (mattricule, code, projections) => { @@ -23,10 +23,10 @@ const getBaldiyaByCodeForWilaya = (data) => [], ); if(baladyiats){ - baladiya = baladyiats.find((w)=> w.code === code) + const baladiya = baladyiats.find((w)=> w.code === code); return projectBaladiya(baladiya, projections); } - + } return null; }; diff --git a/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js b/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js index 3e8231d..de7adec 100644 --- a/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js +++ b/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js @@ -16,12 +16,12 @@ const getBaldiyatsForDairaByCodeForWilayaByCode = (data) => (mattricule, code) => { const wilaya = data.find((w) => w.mattricule === mattricule); if (wilaya) { - daira = wilaya.dairats.find((d) => d.code === code); - + const daira = wilaya.dairats.find((d) => d.code === code); + if(daira){ - return daira.baladyiats + return daira.baladyiats; } - + } return null; }; diff --git a/src/api/getDairaByCodeAndWilayaCode.js b/src/api/getDairaByCodeAndWilayaCode.js index 3d181cc..d10917a 100644 --- a/src/api/getDairaByCodeAndWilayaCode.js +++ b/src/api/getDairaByCodeAndWilayaCode.js @@ -1,7 +1,7 @@ const projectDaira = require('../utils/projections/projectObject'); const getDairaByCodeAndWilayaCode = (data)=> - /** +/** * Takes a wilaya mattricule and a daira code and return daira. * * @example Get a daira by code and wilaya mattricule(mattricule:1, code:101) @@ -14,13 +14,13 @@ const getDairaByCodeAndWilayaCode = (data)=> * @param { String[] } projection a list of Baladyia object attributes to keep * @returns { Object | null } Returns daira's object, or null */ - (mattricule, code, projection)=>{ - const wilaya = data.find((w) => w.mattricule === mattricule); - if (wilaya) { - const daira = wilaya.dairats.find((d)=> d.code === code) - return projectDaira(daira, projection); - } - return null; -} + (mattricule, code, projection)=>{ + const wilaya = data.find((w) => w.mattricule === mattricule); + if (wilaya) { + const daira = wilaya.dairats.find((d)=> d.code === code); + return projectDaira(daira, projection); + } + return null; + }; module.exports = getDairaByCodeAndWilayaCode; \ No newline at end of file diff --git a/src/index.js b/src/index.js index a3c62b9..8def2a7 100644 --- a/src/index.js +++ b/src/index.js @@ -40,7 +40,7 @@ module.exports = { getDairaByBaladyiaName: getDairaByBaladyiaName(_getData()), getDairaByCodeAndWilayaCode: getDairaByCodeAndWilayaCode(_getData()), getBaladiyaByCodeAndDairaCodeAndWilayaCode: getBaladiyaByCodeAndDairaCodeAndWilayaCode(_getData()), - getBaldiyatsForDairaByCodeForWilayaByCode:getBaldiyatsForDairaByCodeForWilayaByCode(_getData()), + getBaldiyatsForDairaByCodeForWilayaByCode: getBaldiyatsForDairaByCodeForWilayaByCode(_getData()), getBaldiyaByCodeForWilaya: getBaldiyaByCodeForWilaya(_getData()), utils: { projectObject, From 6449a99d5b9f648c26eedf30e4db8d4a7a95bb21 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Fri, 4 Jun 2021 03:53:42 +0100 Subject: [PATCH 09/12] test : the new added , missing api functions --- ...iyaByCodeAndDairaCodeAndWilayaCode.test.js | 72 +++++++++++++++ tests/api/getBaldiyaByCodeForWilaya.test.js | 91 +++++++++++++++++++ ...iyatsForDairaByCodeForWilayaByCode.test.js | 69 ++++++++++++++ tests/api/getDairaByCodeAndWilayaCode.test.js | 89 ++++++++++++++++++ tests/index.test.js | 4 + 5 files changed, 325 insertions(+) create mode 100644 tests/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.test.js create mode 100644 tests/api/getBaldiyaByCodeForWilaya.test.js create mode 100644 tests/api/getBaldiyatsForDairaByCodeForWilayaByCode.test.js create mode 100644 tests/api/getDairaByCodeAndWilayaCode.test.js diff --git a/tests/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.test.js b/tests/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.test.js new file mode 100644 index 0000000..c40b658 --- /dev/null +++ b/tests/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode.test.js @@ -0,0 +1,72 @@ +describe('get matching daira by code and wilaya mattricule', ()=>{ + const mockData = [ + { + mattricule: 47, + name: 'Ghardaïa', + dairats: [ + { + code: 4701, + name: 'GHARDAIA', + name_ar: 'غرداية', + name_en: 'GHARDAIA', + baladyiats: [ + { + code: 4701, + name: 'GHARDAIA', + name_en: 'GHARDAIA', + name_ar: 'غرداية', + }, + { + code: 4702, + name: 'EL MENIAA', + name_en: 'EL MENIAA', + name_ar: 'المنيعة', + }, + ], + }, + ], + }, + ]; + + + + let getBaladiyaByCodeAndDairaCodeAndWilayaCode; + beforeEach(()=>{ + getBaladiyaByCodeAndDairaCodeAndWilayaCode = require('../../src/api/getBaladiyaByCodeAndDairaCodeAndWilayaCode'); + }); + + it('should export a function', () => { + expect(typeof getBaladiyaByCodeAndDairaCodeAndWilayaCode).toBe('function'); + }); + + it('should return a curried function that returns the data', () => { + const fn = getBaladiyaByCodeAndDairaCodeAndWilayaCode(mockData); + + expect(typeof fn).toBe('function'); + }); + + it('should return null for invalid wilaya mattricule and baladiya and daira code ', () => { + const result = getBaladiyaByCodeAndDairaCodeAndWilayaCode(mockData)(99, 1, 99); + + expect(result).toBeNull(); + }); + + it('should return null for invalid baladiya and daira code ', () => { + const result = getBaladiyaByCodeAndDairaCodeAndWilayaCode(mockData)(47, 88, 99); + + expect(result).toBeNull(); + }); + + + it('should return null for invalid baladiya code ', () => { + const result = getBaladiyaByCodeAndDairaCodeAndWilayaCode(mockData)(47, 4701, 99); + + expect(result).toBeNull(); + }); + + it('should return a matching baldiya for valide wilaya mattricule, baladiya and daira code ', () => { + const result = getBaladiyaByCodeAndDairaCodeAndWilayaCode(mockData)(47, 4701, 4702); + expect(result).toEqual(mockData[0].dairats[0].baladyiats[1]); + }); + +}); \ No newline at end of file diff --git a/tests/api/getBaldiyaByCodeForWilaya.test.js b/tests/api/getBaldiyaByCodeForWilaya.test.js new file mode 100644 index 0000000..674ac2a --- /dev/null +++ b/tests/api/getBaldiyaByCodeForWilaya.test.js @@ -0,0 +1,91 @@ +describe('get matching baldiyats by daira code and wilaya mattricule', ()=>{ + const mockData = [ + { + mattricule: 47, + name: 'Ghardaïa', + dairats: [ + { + code: 4701, + name: 'GHARDAIA', + name_ar: 'غرداية', + name_en: 'GHARDAIA', + baladyiats: [ + { + code: 4701, + name: 'GHARDAIA', + name_en: 'GHARDAIA', + name_ar: 'غرداية', + }, + { + code: 4702, + name: 'EL MENIAA', + name_en: 'EL MENIAA', + name_ar: 'المنيعة', + }, + ], + }, + ], + }, + ]; + + const mockDataNoBaladiyats = [ + { + mattricule: 47, + name: 'Ghardaïa', + dairats: [ + { + code: 4701, + name: 'GHARDAIA', + name_ar: 'غرداية', + name_en: 'GHARDAIA', + baladyiats: [ + + ], + }, + ], + }, + ]; + let getBaldiyaByCodeForWilaya; + + beforeEach(()=>{ + getBaldiyaByCodeForWilaya = require('../../src/api/getBaldiyaByCodeForWilaya'); + }); + + + + it('should export a function', () => { + expect(typeof getBaldiyaByCodeForWilaya).toBe('function'); + }); + + it('should return a curried function that returns the data', () => { + const fn = getBaldiyaByCodeForWilaya(mockData); + + expect(typeof fn).toBe('function'); + }); + + it('should return null for invalid wilaya mattricule and baldiya code ', () => { + const result = getBaldiyaByCodeForWilaya(mockData)(99, 1); + + expect(result).toBeNull(); + }); + + it('should return null for invalid baldiya code ', () => { + const result = getBaldiyaByCodeForWilaya(mockData)(47, 22); + + expect(result).toBeNull(); + }); + + + it('should return a matching baldiya for a valide baladiya code and wilaya mattricule ', () => { + const result =getBaldiyaByCodeForWilaya(mockData)(47, 4702); + + expect(result).toEqual(mockData[0].dairats[0].baladyiats[1]); + }); + + it('should return null for an empty data set', () => { + const result =getBaldiyaByCodeForWilaya(mockDataNoBaladiyats)(47, 4702); + + expect(result).toBeNull(); + }); + +}); \ No newline at end of file diff --git a/tests/api/getBaldiyatsForDairaByCodeForWilayaByCode.test.js b/tests/api/getBaldiyatsForDairaByCodeForWilayaByCode.test.js new file mode 100644 index 0000000..10a1af2 --- /dev/null +++ b/tests/api/getBaldiyatsForDairaByCodeForWilayaByCode.test.js @@ -0,0 +1,69 @@ +describe('get matching baldiyats by daira code and wilaya mattricule', ()=>{ + const mockData = [ + { + mattricule: 47, + name: 'Ghardaïa', + dairats: [ + { + code: 4701, + name: 'GHARDAIA', + name_ar: 'غرداية', + name_en: 'GHARDAIA', + baladyiats: [ + { + code: 4701, + name: 'GHARDAIA', + name_en: 'GHARDAIA', + name_ar: 'غرداية', + }, + { + code: 4702, + name: 'EL MENIAA', + name_en: 'EL MENIAA', + name_ar: 'المنيعة', + }, + ], + }, + ], + }, + ]; + + let getBaldiyatsForDairaByCodeForWilayaByCode; + + beforeEach(()=>{ + getBaldiyatsForDairaByCodeForWilayaByCode = require('../../src/api/getBaldiyatsForDairaByCodeForWilayaByCode'); + }); + + + + it('should export a function', () => { + expect(typeof getBaldiyatsForDairaByCodeForWilayaByCode).toBe('function'); + }); + + it('should return a curried function that returns the data', () => { + const fn = getBaldiyatsForDairaByCodeForWilayaByCode(mockData); + + expect(typeof fn).toBe('function'); + }); + + it('should return null for invalid wilaya mattricule and daira code ', () => { + const result = getBaldiyatsForDairaByCodeForWilayaByCode(mockData)(99, 1); + + expect(result).toBeNull(); + }); + + it('should return null for invalid daira code ', () => { + const result = getBaldiyatsForDairaByCodeForWilayaByCode(mockData)(47, 22); + + expect(result).toBeNull(); + }); + + + it('should return null for invalid baladiya code ', () => { + const result = getBaldiyatsForDairaByCodeForWilayaByCode(mockData)(47, 4701); + + expect(result).toEqual(mockData[0].dairats[0].baladyiats); + }); + + +}); \ No newline at end of file diff --git a/tests/api/getDairaByCodeAndWilayaCode.test.js b/tests/api/getDairaByCodeAndWilayaCode.test.js new file mode 100644 index 0000000..2c198da --- /dev/null +++ b/tests/api/getDairaByCodeAndWilayaCode.test.js @@ -0,0 +1,89 @@ + +describe('get matching daira by code and wilaya mattricule', ()=>{ + const mockData = [ + { + mattricule: 33, + dairats: [ + { + code: 3301, + baladyiats: [ + { + code: 3301, + }, + ], + }, + { + code: 3302, + baladyiats: [ + { + code: 3302, + }, + { + code: 3305, + }, + ], + }, + { + code: 3302, + baladyiats: [ + { + code: 3302, + }, + { + code: 3305, + }, + ], + }, + { + code: 3306, + baladyiats: [ + { + code: 3303, + }, + { + code: 3304, + }, + { + code: 3306, + }, + ], + }, + ], + }, + ]; + + let getDairaByCodeAndWilayaCode; + beforeEach(()=>{ + getDairaByCodeAndWilayaCode = require('../../src/api/getDairaByCodeAndWilayaCode'); + }); + + it('should export a function', () => { + expect(typeof getDairaByCodeAndWilayaCode).toBe('function'); + }); + + it('should return a curried function that returns the data', () => { + const fn = getDairaByCodeAndWilayaCode(mockData); + + expect(typeof fn).toBe('function'); + }); + + it('should return null for invalid wilaya mattricule and daira code ', () => { + const result = getDairaByCodeAndWilayaCode(mockData)(99, 1); + + expect(result).toBeNull(); + }); + + it('should return null for invalid daira code ', () => { + const result = getDairaByCodeAndWilayaCode(mockData)(33, 99); + + expect(result).toBeNull(); + }); + + + + it('should return a matching baldiya for valide wilaya mattricule and daira code ', () => { + const result = getDairaByCodeAndWilayaCode(mockData)(33, 3302); + expect(result).toEqual(mockData[0].dairats[1]); + }); + +}); \ No newline at end of file diff --git a/tests/index.test.js b/tests/index.test.js index 9763907..8e06c99 100644 --- a/tests/index.test.js +++ b/tests/index.test.js @@ -26,6 +26,10 @@ describe("Le'Bled SDK", () => { getBaladyiatsForDaira: expect.any(Function), getWilayaByBaladyiaName: expect.any(Function), getDairaByBaladyiaName: expect.any(Function), + getDairaByCodeAndWilayaCode: expect.any(Function), + getBaladiyaByCodeAndDairaCodeAndWilayaCode: expect.any(Function), + getBaldiyatsForDairaByCodeForWilayaByCode: expect.any(Function), + getBaldiyaByCodeForWilaya: expect.any(Function), utils: { projectObject: expect.any(Function), isValidZipCode: expect.any(Function), From 37e736b94d1f419deeb69eec17b7d68678e6ed83 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Sat, 5 Jun 2021 02:09:47 +0100 Subject: [PATCH 10/12] refactor : dont check if the baldyats list exists --- src/api/getBaldiyaByCodeForWilaya.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/api/getBaldiyaByCodeForWilaya.js b/src/api/getBaldiyaByCodeForWilaya.js index 8f94522..9762ecd 100644 --- a/src/api/getBaldiyaByCodeForWilaya.js +++ b/src/api/getBaldiyaByCodeForWilaya.js @@ -22,12 +22,16 @@ const getBaldiyaByCodeForWilaya = (data) => (acc, daira) => [...acc, ...daira.baladyiats], [], ); - if(baladyiats){ - const baladiya = baladyiats.find((w)=> w.code === code); + + const baladiya = baladyiats.find((w)=> w.code === code); + if (baladiya){ return projectBaladiya(baladiya, projections); } + } + + return null; }; From 9a2fcf1ab8c33ce5fdd22920d6d516847daeea27 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Mon, 7 Jun 2021 01:09:49 +0100 Subject: [PATCH 11/12] feat: add prjections for get baldiyats by code for a daira and a wilaya --- src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js b/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js index de7adec..87e8f1f 100644 --- a/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js +++ b/src/api/getBaldiyatsForDairaByCodeForWilayaByCode.js @@ -1,3 +1,5 @@ +const projectBaladiya = require('../utils/projections/projectObject'); + const getBaldiyatsForDairaByCodeForWilayaByCode = (data) => /** * Takes a wilaya code (mattricule), daira code (code) and returns array of Baladiyates of wilaya. @@ -9,17 +11,17 @@ const getBaldiyatsForDairaByCodeForWilayaByCode = (data) => * * @param { Number } mattricule wilaya code (mattricule) * @param { Number } code baladiya code (code) - * @param { String[] } projection a list of Baladyia object attributes to keep + * @param { String[] } projections a list of Baladyia object attributes to keep * @returns { Object[] | null } list of all baladiyas for wilaya */ - (mattricule, code) => { + (mattricule, code, projections) => { const wilaya = data.find((w) => w.mattricule === mattricule); if (wilaya) { const daira = wilaya.dairats.find((d) => d.code === code); if(daira){ - return daira.baladyiats; + return projectBaladiya(daira.baladyiats, projections); } } From b7b52a901a4445f84a09c6aceac398d677ab9468 Mon Sep 17 00:00:00 2001 From: abderrahmane Date: Mon, 7 Jun 2021 01:16:56 +0100 Subject: [PATCH 12/12] doc : add missing api fucntions documentation --- README.md | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/README.md b/README.md index d15aed9..1a3528c 100644 --- a/README.md +++ b/README.md @@ -264,6 +264,98 @@ const { getDairaByBaladyiaName } = require('@dzcode-io/leblad'); console.log(getDairaByBaladyiaName('ES SENIA')); // will print the daira object ({name: "ES SENIA"...}) ``` +#### getBaladiyaByCodeAndDairaCodeAndWilayaCode(mattricule:number, code: number, bcode:number, projection?: string[]) + +Takes a Wialya code , Daira code and Baladyia code and returns a baladiya. + +**Arguments** + +- `mattricule: number` (**required**) the Wilaya id +- `code: number` (**required**) the Daira id +- `bcode: number` (**required**) the Baladiya id +- `projection: string[]` (optional) Array of Wilaya Object attributes + +**Examples** + +```javascript +const { getBaladiyaByCodeAndDairaCodeAndWilayaCode } = require('@dzcode-io/leblad'); + +console.log(getBaladiyaByCodeAndDairaCodeAndWilayaCode(1, 101, 101)); // will print the daira object ({name: "ADRAR"...}) +``` + +#### getBaladiyaByCodeAndDairaCodeAndWilayaCode(mattricule:number, code: number, bcode:number, projection?: string[]) + +Takes a Wialya mattricule , Daira code and Baladyia code and returns a baladiya. + +**Arguments** + +- `mattricule: number` (**required**) the Wilaya id +- `code: number` (**required**) the Daira id +- `bcode: number` (**required**) the Baladiya id +- `projection: string[]` (optional) Array of Wilaya Object attributes + +**Examples** + +```javascript +const { getBaladiyaByCodeAndDairaCodeAndWilayaCode } = require('@dzcode-io/leblad'); + +console.log(getBaladiyaByCodeAndDairaCodeAndWilayaCode(1, 101, 101)); // will print the baladiya object ({name: "ADRAR"...}) +``` + +#### getBaldiyaByCodeForWilaya(mattricule:number, code: number, projection?: string[]) + +Takes a Wialya mattricule, Baladyia code and returns a baladiya. + +**Arguments** + +- `mattricule: number` (**required**) the Wilaya id +- `code: number` (**required**) the Baladiya id +- `projection: string[]` (optional) Array of Baladiya Object attributes + +**Examples** + +```javascript +const { getBaldiyaByCodeForWilaya } = require('@dzcode-io/leblad'); + +console.log(getBaldiyaByCodeForWilaya(1, 121)); // will print the baldiya object ({name: "OULED AHMED TIMMI"...}) +``` + +#### getBaldiyatsForDairaByCodeForWilayaByCode(mattricule:number, code: number, projection?: string[]) + +Takes a Wialya mattricule and Daira code and returns a list of baladiyats. + +**Arguments** + +- `mattricule: number` (**required**) the Wilaya id +- `code: number` (**required**) the Daira id +- `projection: string[]` (optional) Array of Baladiya Object attributes + +**Examples** + +```javascript +const { getBaldiyatsForDairaByCodeForWilayaByCode } = require('@dzcode-io/leblad'); + +console.log(getBaldiyatsForDairaByCodeForWilayaByCode(1, 101)); // will print the list of baldiyats ([{name: "OULED AHMED TIMMI"...}, {....} , {....} ...]) +``` + +#### getDairaByCodeAndWilayaCode(mattricule:number, code: number, projection?: string[]) + +Takes a Wialya mattricule and Daira code and returns a daira. + +**Arguments** + +- `mattricule: number` (**required**) the Wilaya id +- `code: number` (**required**) the Daira id +- `projection: string[]` (optional) Array of Daira Object attributes + +**Examples** + +```javascript +const { getDairaByCodeAndWilayaCode } = require('@dzcode-io/leblad'); + +console.log(getDairaByCodeAndWilayaCode (1, 103)); // will print the daira object ({name: "CHAROUINE"...},) +``` + ## Helper methods #### projectObject(data: (object|array), projection?: string[])