diff --git a/src/test/location.js b/src/test/location.js
new file mode 100644
index 0000000000000000000000000000000000000000..334e3faf364f71a0fdcfb9fab87393ae6464dd5a
--- /dev/null
+++ b/src/test/location.js
@@ -0,0 +1,385 @@
+process.env.NODE_ENV = 'test';
+
+const chai = require('chai');
+
+const dirtyChai = require('dirty-chai');
+
+chai.use(dirtyChai);
+
+const chaiXml = require('chai-xml');
+
+chai.use(chaiXml);
+
+const chaiHttp = require('chai-http');
+
+const assert = chai.assert;
+
+const expect = chai.expect;
+
+const should = chai.should(); // actually call the function
+
+const libs = `${process.cwd()}/libs`;
+
+const server = require(`${libs}/app`);
+
+chai.use(chaiHttp);
+
+const testTimeout = 5000;
+
+describe('test location', () => {
+    it('should return the expected response format for sociodemographic data for the whole country', (done) => {
+        chai.request(server)
+            .get('/api/v1/location/sociodemographic')
+            .end((err, res) => {
+                res.should.have.status(200);
+                // test response format
+                res.should.be.json;
+                // test for result attribute in the response
+                res.body.should.have.property('result');
+                // test result type
+                res.body.result.should.be.a('object');
+                res.body.result.should.have.property('population');
+                res.body.result.should.have.property('gdp');
+                res.body.result.should.have.property('idh');
+                res.body.result.should.have.property('analfab');
+                res.body.result.should.have.property('gini');
+                // test response attributes for population
+                res.body.result.population.should.have.property('name');
+                res.body.result.population.should.have.property('population');
+                res.body.result.population.should.have.property('census_year');
+                // test response attributes for gdp
+                res.body.result.gdp.should.have.property('name');
+                res.body.result.gdp.should.have.property('gdp_per_capita');
+                res.body.result.gdp.should.have.property('census_year');
+                // test response attributes for idh
+                res.body.result.idh.should.have.property('name');
+                res.body.result.idh.should.have.property('idhm');
+                res.body.result.idh.should.have.property('census_year');
+                // test response attributes for analfab
+                res.body.result.analfab.should.have.property('name');
+                res.body.result.analfab.should.have.property('analfabetism');
+                res.body.result.analfab.should.have.property('census_year');
+                // test response attributes for gini
+                res.body.result.gini.should.have.property('name');
+                res.body.result.gini.should.have.property('gini');
+                res.body.result.gini.should.have.property('census_year');
+                done();
+            });
+    }).timeout(testTimeout);
+
+    it('should return the expected response format for sociodemographic data for a country region', (done) => {
+        chai.request(server)
+            .get('/api/v1/location/sociodemographic/region/1')
+            .end((err, res) => {
+                res.should.have.status(200);
+                // test response format
+                res.should.be.json;
+                // test for result attribute in the response
+                res.body.should.have.property('result');
+                // test result type
+                res.body.result.should.be.a('object');
+                res.body.result.should.have.property('population');
+                res.body.result.should.have.property('gdp');
+                res.body.result.should.have.property('idh');
+                res.body.result.should.have.property('analfab');
+                res.body.result.should.have.property('gini');
+                // test response attributes for population
+                res.body.result.population.should.have.property('name');
+                res.body.result.population.should.have.property('population');
+                res.body.result.population.should.have.property('census_year');
+                // test response attributes for gdp
+                res.body.result.gdp.should.have.property('name');
+                res.body.result.gdp.should.have.property('gdp_per_capita');
+                res.body.result.gdp.should.have.property('census_year');
+                // test response attributes for idh
+                res.body.result.idh.should.have.property('name');
+                res.body.result.idh.should.have.property('idhm');
+                res.body.result.idh.should.have.property('census_year');
+                // test response attributes for analfab
+                res.body.result.analfab.should.have.property('name');
+                res.body.result.analfab.should.have.property('analfabetism');
+                res.body.result.analfab.should.have.property('census_year');
+                // test response attributes for gini
+                res.body.result.gini.should.have.property('name');
+                res.body.result.gini.should.have.property('gini');
+                res.body.result.gini.should.have.property('census_year');
+                done();
+            });
+    }).timeout(testTimeout);
+
+    it('should return the expected response format for sociodemographic data for a country state', (done) => {
+        chai.request(server)
+            .get('/api/v1/location/sociodemographic/state/42')
+            .end((err, res) => {
+                res.should.have.status(200);
+                // test response format
+                res.should.be.json;
+                // test for result attribute in the response
+                res.body.should.have.property('result');
+                // test result type
+                res.body.result.should.be.a('object');
+                res.body.result.should.have.property('population');
+                res.body.result.should.have.property('gdp');
+                res.body.result.should.have.property('idh');
+                res.body.result.should.have.property('analfab');
+                res.body.result.should.have.property('gini');
+                // test response attributes for population
+                res.body.result.population.should.have.property('name');
+                res.body.result.population.should.have.property('population');
+                res.body.result.population.should.have.property('census_year');
+                // test response attributes for gdp
+                res.body.result.gdp.should.have.property('name');
+                res.body.result.gdp.should.have.property('gdp_per_capita');
+                res.body.result.gdp.should.have.property('census_year');
+                // test response attributes for idh
+                res.body.result.idh.should.have.property('name');
+                res.body.result.idh.should.have.property('idhm');
+                res.body.result.idh.should.have.property('census_year');
+                // test response attributes for analfab
+                res.body.result.analfab.should.have.property('name');
+                res.body.result.analfab.should.have.property('analfabetism');
+                res.body.result.analfab.should.have.property('census_year');
+                // test response attributes for gini
+                res.body.result.gini.should.have.property('name');
+                res.body.result.gini.should.have.property('gini');
+                res.body.result.gini.should.have.property('census_year');
+                done();
+            });
+    }).timeout(testTimeout);
+
+    it('should return the expected response format for sociodemographic data for a country city', (done) => {
+        chai.request(server)
+            .get('/api/v1/location/sociodemographic/city/4106902')
+            .end((err, res) => {
+                res.should.have.status(200);
+                // test response format
+                res.should.be.json;
+                // test for result attribute in the response
+                res.body.should.have.property('result');
+                // test result type
+                res.body.result.should.be.a('object');
+                res.body.result.should.have.property('population');
+                res.body.result.should.have.property('gdp');
+                res.body.result.should.have.property('idh');
+                res.body.result.should.have.property('analfab');
+                res.body.result.should.have.property('gini');
+                // test response attributes for population
+                res.body.result.population.should.have.property('name');
+                res.body.result.population.should.have.property('population');
+                res.body.result.population.should.have.property('census_year');
+                // test response attributes for gdp
+                res.body.result.gdp.should.have.property('name');
+                res.body.result.gdp.should.have.property('gdp_per_capita');
+                res.body.result.gdp.should.have.property('census_year');
+                // test response attributes for idh
+                res.body.result.idh.should.have.property('name');
+                res.body.result.idh.should.have.property('idhm');
+                res.body.result.idh.should.have.property('census_year');
+                // test response attributes for analfab
+                res.body.result.analfab.should.have.property('name');
+                res.body.result.analfab.should.have.property('analfabetism');
+                res.body.result.analfab.should.have.property('census_year');
+                // test response attributes for gini
+                res.body.result.gini.should.have.property('name');
+                res.body.result.gini.should.have.property('gini');
+                res.body.result.gini.should.have.property('census_year');
+                done();
+            });
+    }).timeout(testTimeout);
+
+    it('should return the expected response format for educational data for the whole country', (done) => {
+        chai.request(server)
+            .get('/api/v1/location/educational')
+            .end((err, res) => {
+                res.should.have.status(200);
+                // test response format
+                res.should.be.json;
+                // test for result attribute in the response
+                res.body.should.have.property('result');
+                // test result type
+                res.body.result.should.be.a('object');
+                res.body.result.should.have.property('school');
+                res.body.result.should.have.property('school_per_location');
+                res.body.result.should.have.property('enrollment');
+                res.body.result.should.have.property('enrollment_per_adm_dep');
+                res.body.result.should.have.property('enrollment_per_school_level');
+                // test response attributes for school
+                res.body.result.school.should.have.property('name');
+                res.body.result.school.should.have.property('location');
+                res.body.result.school.should.have.property('total');
+                res.body.result.school.should.have.property('census_year');
+                // test response attributes for school_per_location
+                res.body.result.school_per_location.should.have.property('name');
+                res.body.result.school_per_location.should.have.property('location');
+                res.body.result.school_per_location.should.have.property('total');
+                res.body.result.school_per_location.should.have.property('census_year');
+                // test response attributes for enrollment
+                res.body.result.enrollment.should.have.property('name');
+                res.body.result.enrollment.should.have.property('total');
+                res.body.result.enrollment.should.have.property('census_year');
+                res.body.result.enrollment.should.have.property('adm_dependency');
+                res.body.result.enrollment.should.have.property('location');
+                // test response attributes for enrollment_per_adm_dep
+                res.body.result.enrollment_per_adm_dep.should.have.property('name');
+                res.body.result.enrollment_per_adm_dep.should.have.property('total');
+                res.body.result.enrollment_per_adm_dep.should.have.property('census_year');
+                res.body.result.enrollment_per_adm_dep.should.have.property('adm_dependency');
+                res.body.result.enrollment_per_adm_dep.should.have.property('location');
+                // test response attributes for enrollment_per_school_level
+                res.body.result.enrollment_per_school_level.should.have.property('name');
+                res.body.result.enrollment_per_school_level.should.have.property('total');
+                res.body.result.enrollment_per_school_level.should.have.property('census_year');
+                res.body.result.enrollment_per_school_level.should.have.property('adm_dependency');
+                res.body.result.enrollment_per_school_level.should.have.property('school_level');
+                res.body.result.enrollment_per_school_level.should.have.property('location');
+                done();
+            });
+    }).timeout(testTimeout);
+
+    it('should return the expected response format for educational data for a country region', (done) => {
+        chai.request(server)
+            .get('/api/v1/location/educational/region/1')
+            .end((err, res) => {
+                res.should.have.status(200);
+                // test response format
+                res.should.be.json;
+                // test for result attribute in the response
+                res.body.should.have.property('result');
+                // test result type
+                res.body.result.should.be.a('object');
+                res.body.result.should.have.property('school');
+                res.body.result.should.have.property('school_per_location');
+                res.body.result.should.have.property('enrollment');
+                res.body.result.should.have.property('enrollment_per_adm_dep');
+                res.body.result.should.have.property('enrollment_per_school_level');
+                // test response attributes for school
+                res.body.result.school.should.have.property('name');
+                res.body.result.school.should.have.property('location');
+                res.body.result.school.should.have.property('total');
+                res.body.result.school.should.have.property('census_year');
+                // test response attributes for school_per_location
+                res.body.result.school_per_location.should.have.property('name');
+                res.body.result.school_per_location.should.have.property('location');
+                res.body.result.school_per_location.should.have.property('total');
+                res.body.result.school_per_location.should.have.property('census_year');
+                // test response attributes for enrollment
+                res.body.result.enrollment.should.have.property('name');
+                res.body.result.enrollment.should.have.property('total');
+                res.body.result.enrollment.should.have.property('census_year');
+                res.body.result.enrollment.should.have.property('adm_dependency');
+                res.body.result.enrollment.should.have.property('location');
+                // test response attributes for enrollment_per_adm_dep
+                res.body.result.enrollment_per_adm_dep.should.have.property('name');
+                res.body.result.enrollment_per_adm_dep.should.have.property('total');
+                res.body.result.enrollment_per_adm_dep.should.have.property('census_year');
+                res.body.result.enrollment_per_adm_dep.should.have.property('adm_dependency');
+                res.body.result.enrollment_per_adm_dep.should.have.property('location');
+                // test response attributes for enrollment_per_school_level
+                res.body.result.enrollment_per_school_level.should.have.property('name');
+                res.body.result.enrollment_per_school_level.should.have.property('total');
+                res.body.result.enrollment_per_school_level.should.have.property('census_year');
+                res.body.result.enrollment_per_school_level.should.have.property('adm_dependency');
+                res.body.result.enrollment_per_school_level.should.have.property('school_level');
+                res.body.result.enrollment_per_school_level.should.have.property('location');
+                done();
+            });
+    }).timeout(testTimeout);
+
+    it('should return the expected response format for educational data for a country state', (done) => {
+        chai.request(server)
+            .get('/api/v1/location/educational/state/42')
+            .end((err, res) => {
+                res.should.have.status(200);
+                // test response format
+                res.should.be.json;
+                // test for result attribute in the response
+                res.body.should.have.property('result');
+                // test result type
+                res.body.result.should.be.a('object');
+                res.body.result.should.have.property('school');
+                res.body.result.should.have.property('school_per_location');
+                res.body.result.should.have.property('enrollment');
+                res.body.result.should.have.property('enrollment_per_adm_dep');
+                res.body.result.should.have.property('enrollment_per_school_level');
+                // test response attributes for school
+                res.body.result.school.should.have.property('name');
+                res.body.result.school.should.have.property('location');
+                res.body.result.school.should.have.property('total');
+                res.body.result.school.should.have.property('census_year');
+                // test response attributes for school_per_location
+                res.body.result.school_per_location.should.have.property('name');
+                res.body.result.school_per_location.should.have.property('location');
+                res.body.result.school_per_location.should.have.property('total');
+                res.body.result.school_per_location.should.have.property('census_year');
+                // test response attributes for enrollment
+                res.body.result.enrollment.should.have.property('name');
+                res.body.result.enrollment.should.have.property('total');
+                res.body.result.enrollment.should.have.property('census_year');
+                res.body.result.enrollment.should.have.property('adm_dependency');
+                res.body.result.enrollment.should.have.property('location');
+                // test response attributes for enrollment_per_adm_dep
+                res.body.result.enrollment_per_adm_dep.should.have.property('name');
+                res.body.result.enrollment_per_adm_dep.should.have.property('total');
+                res.body.result.enrollment_per_adm_dep.should.have.property('census_year');
+                res.body.result.enrollment_per_adm_dep.should.have.property('adm_dependency');
+                res.body.result.enrollment_per_adm_dep.should.have.property('location');
+                // test response attributes for enrollment_per_school_level
+                res.body.result.enrollment_per_school_level.should.have.property('name');
+                res.body.result.enrollment_per_school_level.should.have.property('total');
+                res.body.result.enrollment_per_school_level.should.have.property('census_year');
+                res.body.result.enrollment_per_school_level.should.have.property('adm_dependency');
+                res.body.result.enrollment_per_school_level.should.have.property('school_level');
+                res.body.result.enrollment_per_school_level.should.have.property('location');
+                done();
+            });
+    }).timeout(testTimeout);
+
+    it('should return the expected response format for educational data for a country city', (done) => {
+        chai.request(server)
+            .get('/api/v1/location/educational/city/4106902')
+            .end((err, res) => {
+                res.should.have.status(200);
+                // test response format
+                res.should.be.json;
+                // test for result attribute in the response
+                res.body.should.have.property('result');
+                // test result type
+                res.body.result.should.be.a('object');
+                res.body.result.should.have.property('school');
+                res.body.result.should.have.property('school_per_location');
+                res.body.result.should.have.property('enrollment');
+                res.body.result.should.have.property('enrollment_per_adm_dep');
+                res.body.result.should.have.property('enrollment_per_school_level');
+                // test response attributes for school
+                res.body.result.school.should.have.property('name');
+                res.body.result.school.should.have.property('location');
+                res.body.result.school.should.have.property('total');
+                res.body.result.school.should.have.property('census_year');
+                // test response attributes for school_per_location
+                res.body.result.school_per_location.should.have.property('name');
+                res.body.result.school_per_location.should.have.property('location');
+                res.body.result.school_per_location.should.have.property('total');
+                res.body.result.school_per_location.should.have.property('census_year');
+                // test response attributes for enrollment
+                res.body.result.enrollment.should.have.property('name');
+                res.body.result.enrollment.should.have.property('total');
+                res.body.result.enrollment.should.have.property('census_year');
+                res.body.result.enrollment.should.have.property('adm_dependency');
+                res.body.result.enrollment.should.have.property('location');
+                // test response attributes for enrollment_per_adm_dep
+                res.body.result.enrollment_per_adm_dep.should.have.property('name');
+                res.body.result.enrollment_per_adm_dep.should.have.property('total');
+                res.body.result.enrollment_per_adm_dep.should.have.property('census_year');
+                res.body.result.enrollment_per_adm_dep.should.have.property('adm_dependency');
+                res.body.result.enrollment_per_adm_dep.should.have.property('location');
+                // test response attributes for enrollment_per_school_level
+                res.body.result.enrollment_per_school_level.should.have.property('name');
+                res.body.result.enrollment_per_school_level.should.have.property('total');
+                res.body.result.enrollment_per_school_level.should.have.property('census_year');
+                res.body.result.enrollment_per_school_level.should.have.property('adm_dependency');
+                res.body.result.enrollment_per_school_level.should.have.property('school_level');
+                res.body.result.enrollment_per_school_level.should.have.property('location');
+                done();
+            });
+    }).timeout(testTimeout);
+});