Mercurial > prosody-hg
comparison spec/util_error_spec.lua @ 11200:bf8f2da84007
Merge 0.11->trunk
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 05 Nov 2020 22:31:25 +0100 |
| parents | 5a0ff475ecfd |
| children | b0a563716334 |
comparison
equal
deleted
inserted
replaced
| 11199:6c7c50a4de32 | 11200:bf8f2da84007 |
|---|---|
| 1 local errors = require "util.error" | |
| 2 | |
| 3 describe("util.error", function () | |
| 4 describe("new()", function () | |
| 5 it("works", function () | |
| 6 local err = errors.new("bork", "bork bork"); | |
| 7 assert.not_nil(err); | |
| 8 assert.equal("cancel", err.type); | |
| 9 assert.equal("undefined-condition", err.condition); | |
| 10 assert.same("bork bork", err.context); | |
| 11 end); | |
| 12 | |
| 13 describe("templates", function () | |
| 14 it("works", function () | |
| 15 local templates = { | |
| 16 ["fail"] = { | |
| 17 type = "wait", | |
| 18 condition = "internal-server-error", | |
| 19 code = 555; | |
| 20 }; | |
| 21 }; | |
| 22 local err = errors.new("fail", { traceback = "in some file, somewhere" }, templates); | |
| 23 assert.equal("wait", err.type); | |
| 24 assert.equal("internal-server-error", err.condition); | |
| 25 assert.equal(555, err.code); | |
| 26 assert.same({ traceback = "in some file, somewhere" }, err.context); | |
| 27 end); | |
| 28 end); | |
| 29 | |
| 30 end); | |
| 31 | |
| 32 describe("is_err()", function () | |
| 33 it("works", function () | |
| 34 assert.truthy(errors.is_err(errors.new())); | |
| 35 assert.falsy(errors.is_err("not an error")); | |
| 36 end); | |
| 37 end); | |
| 38 | |
| 39 describe("coerce", function () | |
| 40 it("works", function () | |
| 41 local ok, err = errors.coerce(nil, "it dun goofed"); | |
| 42 assert.is_nil(ok); | |
| 43 assert.truthy(errors.is_err(err)) | |
| 44 end); | |
| 45 end); | |
| 46 | |
| 47 describe("from_stanza", function () | |
| 48 it("works", function () | |
| 49 local st = require "util.stanza"; | |
| 50 local m = st.message({ type = "chat" }); | |
| 51 local e = st.error_reply(m, "modify", "bad-request", nil, "error.example"):tag("extra", { xmlns = "xmpp:example.test" }); | |
| 52 local err = errors.from_stanza(e); | |
| 53 assert.truthy(errors.is_err(err)); | |
| 54 assert.equal("modify", err.type); | |
| 55 assert.equal("bad-request", err.condition); | |
| 56 assert.equal(e, err.context.stanza); | |
| 57 assert.equal("error.example", err.context.by); | |
| 58 assert.not_nil(err.extra.tag); | |
| 59 end); | |
| 60 end); | |
| 61 | |
| 62 describe("__tostring", function () | |
| 63 it("doesn't throw", function () | |
| 64 assert.has_no.errors(function () | |
| 65 -- See 6f317e51544d | |
| 66 tostring(errors.new()); | |
| 67 end); | |
| 68 end); | |
| 69 end); | |
| 70 | |
| 71 describe("extra", function () | |
| 72 it("keeps some extra fields", function () | |
| 73 local err = errors.new({condition="gone",text="Sorry mate, it's all gone",extra={uri="file:///dev/null"}}); | |
| 74 assert.is_table(err.extra); | |
| 75 assert.equal("file:///dev/null", err.extra.uri); | |
| 76 end); | |
| 77 end) | |
| 78 | |
| 79 describe("init", function() | |
| 80 it("basics works", function() | |
| 81 local reg = errors.init("test", { | |
| 82 broke = {type = "cancel"; condition = "internal-server-error"; text = "It broke :("}; | |
| 83 nope = {type = "auth"; condition = "not-authorized"; text = "Can't let you do that Dave"}; | |
| 84 }); | |
| 85 | |
| 86 local broke = reg.new("broke"); | |
| 87 assert.equal("cancel", broke.type); | |
| 88 assert.equal("internal-server-error", broke.condition); | |
| 89 assert.equal("It broke :(", broke.text); | |
| 90 assert.equal("test", broke.source); | |
| 91 | |
| 92 local nope = reg.new("nope"); | |
| 93 assert.equal("auth", nope.type); | |
| 94 assert.equal("not-authorized", nope.condition); | |
| 95 assert.equal("Can't let you do that Dave", nope.text); | |
| 96 end); | |
| 97 | |
| 98 it("compact mode works", function() | |
| 99 local reg = errors.init("test", "spec", { | |
| 100 broke = {"cancel"; "internal-server-error"; "It broke :("}; | |
| 101 nope = {"auth"; "not-authorized"; "Can't let you do that Dave"; "sorry-dave"}; | |
| 102 }); | |
| 103 | |
| 104 local broke = reg.new("broke"); | |
| 105 assert.equal("cancel", broke.type); | |
| 106 assert.equal("internal-server-error", broke.condition); | |
| 107 assert.equal("It broke :(", broke.text); | |
| 108 assert.is_nil(broke.extra); | |
| 109 | |
| 110 local nope = reg.new("nope"); | |
| 111 assert.equal("auth", nope.type); | |
| 112 assert.equal("not-authorized", nope.condition); | |
| 113 assert.equal("Can't let you do that Dave", nope.text); | |
| 114 assert.equal("spec", nope.extra.namespace); | |
| 115 assert.equal("sorry-dave", nope.extra.condition); | |
| 116 end); | |
| 117 | |
| 118 it("registry looks the same regardless of syntax", function() | |
| 119 local normal = errors.init("test", { | |
| 120 broke = {type = "cancel"; condition = "internal-server-error"; text = "It broke :("}; | |
| 121 nope = { | |
| 122 type = "auth"; | |
| 123 condition = "not-authorized"; | |
| 124 text = "Can't let you do that Dave"; | |
| 125 extra = {namespace = "spec"; condition = "sorry-dave"}; | |
| 126 }; | |
| 127 }); | |
| 128 local compact1 = errors.init("test", "spec", { | |
| 129 broke = {"cancel"; "internal-server-error"; "It broke :("}; | |
| 130 nope = {"auth"; "not-authorized"; "Can't let you do that Dave"; "sorry-dave"}; | |
| 131 }); | |
| 132 local compact2 = errors.init("test", { | |
| 133 broke = {"cancel"; "internal-server-error"; "It broke :("}; | |
| 134 nope = {"auth"; "not-authorized"; "Can't let you do that Dave"}; | |
| 135 }); | |
| 136 assert.same(normal.registry, compact1.registry); | |
| 137 | |
| 138 assert.same({ | |
| 139 broke = {type = "cancel"; condition = "internal-server-error"; text = "It broke :("}; | |
| 140 nope = {type = "auth"; condition = "not-authorized"; text = "Can't let you do that Dave"}; | |
| 141 }, compact2.registry); | |
| 142 end); | |
| 143 end); | |
| 144 | |
| 145 end); | |
| 146 |
