kong/spec/02-integration/03-db/12-dao_hooks_spec.lua (239 lines of code) (raw):
local helpers = require "spec.helpers"
local hooks = require "kong.hooks"
for _, strategy in helpers.each_strategy() do
describe("kong.db hooks [#" .. strategy .. "]", function()
local db, bp, s1, r1
lazy_setup(function()
bp, db = helpers.get_db_utils(strategy, {
"routes",
"services",
})
s1 = bp.services:insert {
name = "s1",
url = "http://example.test",
}
r1 = bp.routes:insert {
protocols = { "http" },
hosts = { "host1" },
service = s1,
name = "r1",
}
end)
describe("page_for", function()
local pre_hook = spy.new(function() end)
local post_hook = spy.new(function() end)
lazy_setup(function()
hooks.register_hook("dao:page_for:pre", function()
pre_hook()
return true
end)
hooks.register_hook("dao:page_for:post", function()
post_hook()
return true
end)
end)
it("calls hooks", function()
finally(function()
hooks.clear_hooks()
end)
assert(db.routes:page_for_service(s1))
assert.spy(pre_hook).was_called(1)
assert.spy(post_hook).was_called(1)
end)
end)
describe("select_by", function()
local pre_hook = spy.new(function() end)
local post_hook = spy.new(function() end)
lazy_setup(function()
hooks.register_hook("dao:select_by:pre", function()
pre_hook()
return true
end)
hooks.register_hook("dao:select_by:post", function()
post_hook()
return true
end)
end)
it("calls hooks", function()
finally(function()
hooks.clear_hooks()
end)
assert(db.routes:select_by_name("r1"))
assert.spy(pre_hook).was_called(1)
assert.spy(post_hook).was_called(1)
end)
end)
describe("update_by", function()
local pre_hook = spy.new(function() end)
local post_hook = spy.new(function() end)
lazy_setup(function()
hooks.register_hook("dao:update_by:pre", function()
pre_hook()
return true
end)
hooks.register_hook("dao:update_by:post", function()
post_hook()
return true
end)
end)
it("calls hooks", function()
finally(function()
hooks.clear_hooks()
end)
assert(db.routes:update_by_name("r1", {
protocols = { "http", "https" } }
))
assert.spy(pre_hook).was_called(1)
assert.spy(post_hook).was_called(1)
end)
end)
describe("upsert_by", function()
local pre_hook = spy.new(function() end)
local post_hook = spy.new(function() end)
lazy_setup(function()
hooks.register_hook("dao:upsert_by:pre", function()
pre_hook()
return true
end)
hooks.register_hook("dao:upsert_by:post", function()
post_hook()
return true
end)
end)
it("calls hooks", function()
finally(function()
hooks.clear_hooks()
end)
assert(db.routes:upsert_by_name("r3",
{
protocols = { "http", "https" },
service = s1,
hosts = { "host1" },
}
))
assert.spy(pre_hook).was_called(1)
assert.spy(post_hook).was_called(1)
end)
end)
describe("delete_by", function()
local pre_hook = spy.new(function() end)
local post_hook = spy.new(function() end)
lazy_setup(function()
hooks.register_hook("dao:delete_by:pre", function()
pre_hook()
return true
end)
hooks.register_hook("dao:delete_by:post", function()
post_hook()
return true
end)
end)
it("calls hooks", function()
finally(function()
hooks.clear_hooks()
end)
assert(db.routes:delete_by_name("r3"))
assert.spy(pre_hook).was_called(1)
assert.spy(post_hook).was_called(1)
end)
end)
describe("select", function()
local pre_hook = spy.new(function() end)
local post_hook = spy.new(function() end)
lazy_setup(function()
hooks.register_hook("dao:select:pre", function()
pre_hook()
return true
end)
hooks.register_hook("dao:select:post", function()
post_hook()
return true
end)
end)
it("calls hooks", function()
finally(function()
hooks.clear_hooks()
end)
assert(db.routes:select( {id = r1.id} ))
assert.spy(pre_hook).was_called(1)
assert.spy(post_hook).was_called(1)
end)
end)
describe("page", function()
local pre_hook = spy.new(function() end)
local post_hook = spy.new(function() end)
lazy_setup(function()
hooks.register_hook("dao:page:pre", function()
pre_hook()
return true
end)
hooks.register_hook("dao:page:post", function()
post_hook()
return true
end)
end)
it("calls hooks", function()
finally(function()
hooks.clear_hooks()
end)
assert(db.routes:page())
assert.spy(pre_hook).was_called(1)
assert.spy(post_hook).was_called(1)
end)
end)
describe("insert", function()
local pre_hook = spy.new(function() end)
local post_hook = spy.new(function() end)
lazy_setup(function()
hooks.register_hook("dao:insert:pre", function()
pre_hook()
return true
end)
hooks.register_hook("dao:insert:post", function()
post_hook()
return true
end)
end)
it("calls hooks", function()
finally(function()
hooks.clear_hooks()
end)
assert(db.routes:insert({
protocols = { "http" },
hosts = { "host1" },
service = s1,
name = "r5",
}))
assert.spy(pre_hook).was_called(1)
assert.spy(post_hook).was_called(1)
end)
end)
describe("update", function()
local pre_hook = spy.new(function() end)
local post_hook = spy.new(function() end)
lazy_setup(function()
hooks.register_hook("dao:update:pre", function()
pre_hook()
return true
end)
hooks.register_hook("dao:update:post", function()
post_hook()
return true
end)
end)
it("calls hooks", function()
finally(function()
hooks.clear_hooks()
end)
assert(db.routes:update({ id = r1.id }, {
protocols = { "http" },
hosts = { "host1" },
service = s1,
name = "r10",
}))
assert.spy(pre_hook).was_called(1)
assert.spy(post_hook).was_called(1)
end)
end)
end)
end