diff --git a/lib/functions/getMessage.js b/lib/functions/getMessage.js
index 591f231..1219769 100644
--- a/lib/functions/getMessage.js
+++ b/lib/functions/getMessage.js
@@ -19,7 +19,7 @@ module.exports.getMessage = async (event) => {
 
   const ret = await service.getMessage(event.pathParameters.id)
 
-  if (!ret?.rows?.[0]?.getmessage) {
+  if (!ret || !ret.rows || !Array.isArray(ret.rows) || ret.rows.length < 1 || !ret.rows[0].getmessage) {
     console.log('No message found for ' + event.pathParameters.id)
     throw new Error('No message found')
   }
diff --git a/lib/functions/processMessage.js b/lib/functions/processMessage.js
index b4a4001..6e56327 100644
--- a/lib/functions/processMessage.js
+++ b/lib/functions/processMessage.js
@@ -1,5 +1,6 @@
 'use strict'
 
+const xml2js = require('xml2js')
 const moment = require('moment')
 const AWSConfig = require('../../config/config.json').aws
 const service = require('../helpers/service')
@@ -19,10 +20,9 @@ module.exports.processMessage = async (event) => {
 
   // Add in the references field
   const xmlMessage = event.bodyXml.replace('</scope>', '</scope>\n<references></references>')
-  const parseString = require('xml2js').parseString
 
   const xmlResult = await new Promise((resolve, reject) => {
-    parseString(xmlMessage, function (err, value) {
+    xml2js.parseString(xmlMessage, (err, value) => {
       if (err) return reject(err)
       resolve(value)
     })
diff --git a/test/getMessage.js b/test/getMessage.js
index 810ef8e..6a829d2 100644
--- a/test/getMessage.js
+++ b/test/getMessage.js
@@ -5,6 +5,7 @@ const lab = exports.lab = Lab.script()
 const Code = require('@hapi/code')
 const getMessage = require('../lib/functions/getMessage').getMessage
 const service = require('../lib/helpers/service')
+
 let event
 
 lab.experiment('getMessage', () => {
@@ -51,7 +52,16 @@ lab.experiment('getMessage', () => {
 
   lab.test('Incorrect database rows object', async () => {
     service.getMessage = (query, params) => Promise.resolve({
-      rows: {}
+      rows: [{}]
+    })
+
+    const err = await Code.expect(getMessage(event)).to.reject()
+    Code.expect(err.message).to.equal('No message found')
+  })
+
+  lab.test('Missing database rows object', async () => {
+    service.getMessage = (query, params) => Promise.resolve({
+      no_rows: []
     })
 
     const err = await Code.expect(getMessage(event)).to.reject()
@@ -85,10 +95,15 @@ lab.experiment('getMessage', () => {
     await Code.expect(getMessage(event)).to.reject()
   })
   lab.test('Invalid id format test', async () => {
-    // Set the id to a value that is not a hexadecimal string
     event.pathParameters.id = 'invalid_id_format'
 
-    // Expect the getMessage function to reject due to validation failure
     await Code.expect(getMessage(event)).to.reject()
   })
+  lab.test('Valid id format test', async () => {
+    event.pathParameters.id = 'a1b2c3'
+    const result = await getMessage(event)
+    const body = result.body
+
+    Code.expect(body).to.equal('<alert xmlns="urn:oasis:names:tc:emergency:cap:1.2">test</alert>')
+  })
 })
diff --git a/test/processMessage.js b/test/processMessage.js
index 365910a..7e6f170 100644
--- a/test/processMessage.js
+++ b/test/processMessage.js
@@ -273,4 +273,9 @@ lab.experiment('processMessage', () => {
     // Expect the processMessage function to reject due to validation failure
     await Code.expect(processMessage({ bodyXml: invalidBodyXml })).to.reject()
   })
+  lab.test('Valid bodyXml format test', async () => {
+    const validBodyXml = capAlert.bodyXml
+
+    await Code.expect(processMessage({ bodyXml: validBodyXml })).to.not.reject()
+  })
 })
diff --git a/test/schemas.js b/test/schemas.js
new file mode 100644
index 0000000..8ba9b07
--- /dev/null
+++ b/test/schemas.js
@@ -0,0 +1,58 @@
+'use strict'
+
+const Joi = require('joi')
+const Lab = require('@hapi/lab')
+const lab = exports.lab = Lab.script()
+const Code = require('@hapi/code')
+const configSchema = require('../config/schema')
+const { getMessageEventSchema, processMessageEventSchema } = require('../lib/helpers/schemas')
+
+lab.experiment('schemas', () => {
+  lab.test('configSchema', () => {
+    Code.expect(Joi.isSchema(configSchema)).to.equal(true)
+  })
+
+  lab.test('getMessageEventSchema', () => {
+    Code.expect(Joi.isSchema(getMessageEventSchema)).to.equal(true)
+  })
+
+  lab.test('getMessageEventSchema with invalid data', () => {
+    const invalidSampleData = { pathParameters: { id: 'invalid_hex' } }
+    const validationResult = getMessageEventSchema.validate(invalidSampleData)
+
+    Code.expect(validationResult.error).to.not.be.null()
+  })
+
+  lab.test('getMessageEventSchema with missing id', () => {
+    const dataWithoutId = { pathParameters: {} }
+    const validationResult = getMessageEventSchema.validate(dataWithoutId)
+
+    Code.expect(validationResult.error).to.not.be.null()
+  })
+
+  lab.test('processMessageEventSchema', () => {
+    Code.expect(Joi.isSchema(processMessageEventSchema)).to.equal(true)
+    Code.expect(processMessageEventSchema.validate({ bodyXml: '<xml />' })).to.equal({ value: { bodyXml: '<xml />' } })
+  })
+  lab.test('processMessageEventSchema with valid data', () => {
+    const validSampleData = { bodyXml: '<xml />' }
+    const validationResult = processMessageEventSchema.validate(validSampleData)
+
+    Code.expect(validationResult.error).to.not.exist()
+    Code.expect(validationResult.value).to.equal(validSampleData)
+  })
+
+  lab.test('processMessageEventSchema with missing bodyXml', () => {
+    const dataWithoutBodyXml = {}
+    const validationResult = processMessageEventSchema.validate(dataWithoutBodyXml)
+
+    Code.expect(validationResult.error).to.not.be.null()
+  })
+
+  lab.test('processMessageEventSchema with invalid bodyXml', () => {
+    const invalidSampleData = { bodyXml: 123 }
+    const validationResult = processMessageEventSchema.validate(invalidSampleData)
+
+    Code.expect(validationResult.error).to.not.be.null()
+  })
+})