_G.spy = spy local env_mock = require("spec.env_mock") describe("smr cacheing",function() setup(env_mock.setup) teardown(env_mock.teardown) it("caches a page if the page is requested twice #working",function() local read_get = require("endpoints.read_get") local cache = require("cache") renderspy = spy.on(cache,"render") configure() local req = { method = "GET", path = "/a", args = {}, host = "test.host" } assert.spy(renderspy).called(0) read_get(req) assert.spy(renderspy).called(1) read_get(req) assert.spy(renderspy).called(2) for row in cache.cache:rows("SELECT COUNT(*) FROM cache") do assert(row[1] == 1, string.format( "Exepected only one cache entry after" .. "calling test.host/a 2 times " .. ", but got %d rows.", row[1] )) end end) it("should expose the database connection", function() local cache = require("cache") configure() assert(cache.cache, "Not exposed under .cache") end) it("does not cache the page if the user is logged in", function() local read_get = require("endpoints.read_get") local cache = require("cache") env_mock.mockdb() renderspy = spy.on(cache,"render") configure() for row in cache.cache:rows("SELECT COUNT(*) FROM cache") do assert(row[1] == 0, string.format( "Cache should not have any rows before " .. "request have been made." )) end local req = env_mock.session() req.method = "GET" req.path = "/a" req.args = {} read_get(req) for row in cache.cache:rows("SELECT COUNT(*) FROM cache") do assert(row[1] == 0, string.format( "Cache should not cache requests made by " .. "logged in users." )) end end) it("caches one page for domain/id and author.domain/id",function() local read_get = require("endpoints.read_get") local cache = require("cache") configure() local req_m = {__index = { method = "GET", path = "/a", args = {} }} local base_host = {host="test.host"} local base_req = setmetatable({host="test.host"},req_m) read_get(base_req) local user_req = setmetatable({host="admin.test.host"},req_m) read_get(user_req) for row in cache.cache:rows("SELECT COUNT(*) FROM cache") do assert(row[1] == 1, string.format( "Exepected only one cache entry for" .. "'test.host/a' and 'admin.test.host/a'" .. ", but got %d rows.", row[1] )) end end) it("detours configure",function() local s = {} local c = false local oldconfigure = configure --local index_get = require("endpoints.index_get") --configure(s) --assert(c) end) describe("author home page",function() it("lists all stories by that author",function() local read_get = require("endpoints.index_get") local cache = require("cache") configure() local req_m = {__index = { method = "GET", path = "/a", args = {} }} local base_host = {host="user.test.host"} for row in cache.cache:rows("SELECT COUNT(*) FROM cache") do assert(row[1] == 0, string.format( "Before requesting user homepage " .. "there should not be any pages in the " .. "cache." )) end local base_req = setmetatable({host="user.test.host"},req_m) read_get(base_req) for row in cache.cache:rows("SELECT COUNT(*) FROM cache") do assert(row[1] == 1, string.format( "After reading the autor home page, " .. " only that page should be cached." )) end read_get(base_req) for row in cache.cache:rows("SELECT COUNT(*) FROM cache") do assert(row[1] == 1, string.format( "After reading the autor home page " .. " twice only that page should be cached." )) end end) end) end)