Annotate

spec/util_error_spec.lua @ 12995:e385f3a06673

moduleapi: Add 'peek' to :may() and new :could() helper to suppress logging The current method logs scary "access denied" messages on failure - this is generally very useful when debugging access control stuff, but in some cases the call is simply a check to see if someone *could* perform an action, even if they haven't requested it yet. One example is determining whether to show the user as an admin in disco. The 'peek' parameter, if true, will suppress such logging. The :could() method is just a simple helper that can make the calling code a bit more readable (suggested by Zash).
author Matthew Wild <mwild1@gmail.com>
date Sun, 26 Mar 2023 14:06:04 +0100
parent 11221:b0a563716334
child 13080:031382b207ec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10101
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local errors = require "util.error"
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 describe("util.error", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 describe("new()", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 it("works", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local err = errors.new("bork", "bork bork");
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 assert.not_nil(err);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 assert.equal("cancel", err.type);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 assert.equal("undefined-condition", err.condition);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 assert.same("bork bork", err.context);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 describe("templates", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 it("works", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 local templates = {
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 ["fail"] = {
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 type = "wait",
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 condition = "internal-server-error",
10365
744ca71a49f7 util.error: Add well-known field 'code' in error templates
Kim Alvefur <zash@zash.se>
parents: 10101
diff changeset
19 code = 555;
10101
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 };
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 };
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 local err = errors.new("fail", { traceback = "in some file, somewhere" }, templates);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 assert.equal("wait", err.type);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 assert.equal("internal-server-error", err.condition);
10365
744ca71a49f7 util.error: Add well-known field 'code' in error templates
Kim Alvefur <zash@zash.se>
parents: 10101
diff changeset
25 assert.equal(555, err.code);
10101
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 assert.same({ traceback = "in some file, somewhere" }, err.context);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 describe("is_err()", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 it("works", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 assert.truthy(errors.is_err(errors.new()));
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 assert.falsy(errors.is_err("not an error"));
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 describe("coerce", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 it("works", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 local ok, err = errors.coerce(nil, "it dun goofed");
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 assert.is_nil(ok);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 assert.truthy(errors.is_err(err))
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 describe("from_stanza", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 it("works", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 local st = require "util.stanza";
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 local m = st.message({ type = "chat" });
11092
bd13aa89262d util.error: Collect Application-Specific Conditions from stanza errors
Kim Alvefur <zash@zash.se>
parents: 11089
diff changeset
51 local e = st.error_reply(m, "modify", "bad-request", nil, "error.example"):tag("extra", { xmlns = "xmpp:example.test" });
10101
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 local err = errors.from_stanza(e);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 assert.truthy(errors.is_err(err));
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 assert.equal("modify", err.type);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 assert.equal("bad-request", err.condition);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 assert.equal(e, err.context.stanza);
11089
35d2260644d9 util.error: Extract error originator from stanza errors
Kim Alvefur <zash@zash.se>
parents: 11081
diff changeset
57 assert.equal("error.example", err.context.by);
11092
bd13aa89262d util.error: Collect Application-Specific Conditions from stanza errors
Kim Alvefur <zash@zash.se>
parents: 11089
diff changeset
58 assert.not_nil(err.extra.tag);
10101
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 describe("__tostring", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 it("doesn't throw", function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 assert.has_no.errors(function ()
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 -- See 6f317e51544d
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 tostring(errors.new());
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70
11081
0b68697450c5 util.error: Add well-known field 'extra'
Kim Alvefur <zash@zash.se>
parents: 10365
diff changeset
71 describe("extra", function ()
0b68697450c5 util.error: Add well-known field 'extra'
Kim Alvefur <zash@zash.se>
parents: 10365
diff changeset
72 it("keeps some extra fields", function ()
0b68697450c5 util.error: Add well-known field 'extra'
Kim Alvefur <zash@zash.se>
parents: 10365
diff changeset
73 local err = errors.new({condition="gone",text="Sorry mate, it's all gone",extra={uri="file:///dev/null"}});
0b68697450c5 util.error: Add well-known field 'extra'
Kim Alvefur <zash@zash.se>
parents: 10365
diff changeset
74 assert.is_table(err.extra);
0b68697450c5 util.error: Add well-known field 'extra'
Kim Alvefur <zash@zash.se>
parents: 10365
diff changeset
75 assert.equal("file:///dev/null", err.extra.uri);
0b68697450c5 util.error: Add well-known field 'extra'
Kim Alvefur <zash@zash.se>
parents: 10365
diff changeset
76 end);
0b68697450c5 util.error: Add well-known field 'extra'
Kim Alvefur <zash@zash.se>
parents: 10365
diff changeset
77 end)
0b68697450c5 util.error: Add well-known field 'extra'
Kim Alvefur <zash@zash.se>
parents: 10365
diff changeset
78
11097
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
79 describe("init", function()
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
80 it("basics works", function()
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
81 local reg = errors.init("test", {
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
82 broke = {type = "cancel"; condition = "internal-server-error"; text = "It broke :("};
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
83 nope = {type = "auth"; condition = "not-authorized"; text = "Can't let you do that Dave"};
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
84 });
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
85
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
86 local broke = reg.new("broke");
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
87 assert.equal("cancel", broke.type);
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
88 assert.equal("internal-server-error", broke.condition);
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
89 assert.equal("It broke :(", broke.text);
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
90 assert.equal("test", broke.source);
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
91
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
92 local nope = reg.new("nope");
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
93 assert.equal("auth", nope.type);
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
94 assert.equal("not-authorized", nope.condition);
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
95 assert.equal("Can't let you do that Dave", nope.text);
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
96 end);
11100
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
97
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
98 it("compact mode works", function()
11102
5a0ff475ecfd util.error: Drop registry initialization with namespace as key
Kim Alvefur <zash@zash.se>
parents: 11101
diff changeset
99 local reg = errors.init("test", "spec", {
11100
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
100 broke = {"cancel"; "internal-server-error"; "It broke :("};
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
101 nope = {"auth"; "not-authorized"; "Can't let you do that Dave"; "sorry-dave"};
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
102 });
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
103
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
104 local broke = reg.new("broke");
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
105 assert.equal("cancel", broke.type);
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
106 assert.equal("internal-server-error", broke.condition);
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
107 assert.equal("It broke :(", broke.text);
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
108 assert.is_nil(broke.extra);
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
109
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
110 local nope = reg.new("nope");
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
111 assert.equal("auth", nope.type);
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
112 assert.equal("not-authorized", nope.condition);
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
113 assert.equal("Can't let you do that Dave", nope.text);
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
114 assert.equal("spec", nope.extra.namespace);
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
115 assert.equal("sorry-dave", nope.extra.condition);
3aa06cdd2dc8 util.error: Add a "compact mode" for registries
Kim Alvefur <zash@zash.se>
parents: 11097
diff changeset
116 end);
11101
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
117
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
118 it("registry looks the same regardless of syntax", function()
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
119 local normal = errors.init("test", {
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
120 broke = {type = "cancel"; condition = "internal-server-error"; text = "It broke :("};
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
121 nope = {
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
122 type = "auth";
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
123 condition = "not-authorized";
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
124 text = "Can't let you do that Dave";
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
125 extra = {namespace = "spec"; condition = "sorry-dave"};
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
126 };
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
127 });
11102
5a0ff475ecfd util.error: Drop registry initialization with namespace as key
Kim Alvefur <zash@zash.se>
parents: 11101
diff changeset
128 local compact1 = errors.init("test", "spec", {
11101
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
129 broke = {"cancel"; "internal-server-error"; "It broke :("};
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
130 nope = {"auth"; "not-authorized"; "Can't let you do that Dave"; "sorry-dave"};
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
131 });
11102
5a0ff475ecfd util.error: Drop registry initialization with namespace as key
Kim Alvefur <zash@zash.se>
parents: 11101
diff changeset
132 local compact2 = errors.init("test", {
11101
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
133 broke = {"cancel"; "internal-server-error"; "It broke :("};
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
134 nope = {"auth"; "not-authorized"; "Can't let you do that Dave"};
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
135 });
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
136 assert.same(normal.registry, compact1.registry);
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
137
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
138 assert.same({
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
139 broke = {type = "cancel"; condition = "internal-server-error"; text = "It broke :("};
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
140 nope = {type = "auth"; condition = "not-authorized"; text = "Can't let you do that Dave"};
11102
5a0ff475ecfd util.error: Drop registry initialization with namespace as key
Kim Alvefur <zash@zash.se>
parents: 11101
diff changeset
141 }, compact2.registry);
11101
2288d206b14b util.error: Expand compact registries into normal form internally
Kim Alvefur <zash@zash.se>
parents: 11100
diff changeset
142 end);
11221
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
143
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
144 describe(".wrap", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
145 local reg = errors.init("test", "spec", {
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
146 myerror = { "cancel", "internal-server-error", "Oh no" };
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
147 });
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
148 it("is exposed", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
149 assert.is_function(reg.wrap);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
150 end);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
151 it("returns errors according to the registry", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
152 local e = reg.wrap("myerror");
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
153 assert.equal("cancel", e.type);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
154 assert.equal("internal-server-error", e.condition);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
155 assert.equal("Oh no", e.text);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
156 end);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
157
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
158 it("passes through existing errors", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
159 local e = reg.wrap(reg.new({ type = "auth", condition = "forbidden" }));
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
160 assert.equal("auth", e.type);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
161 assert.equal("forbidden", e.condition);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
162 end);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
163
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
164 it("wraps arbitrary values", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
165 local e = reg.wrap(123);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
166 assert.equal("cancel", e.type);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
167 assert.equal("undefined-condition", e.condition);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
168 assert.equal(123, e.context.wrapped_error);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
169 end);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
170 end);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
171
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
172 describe(".coerce", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
173 local reg = errors.init("test", "spec", {
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
174 myerror = { "cancel", "internal-server-error", "Oh no" };
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
175 });
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
176
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
177 it("is exposed", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
178 assert.is_function(reg.coerce);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
179 end);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
180
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
181 it("passes through existing errors", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
182 local function test()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
183 return nil, errors.new({ type = "auth", condition = "forbidden" });
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
184 end
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
185 local ok, err = reg.coerce(test());
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
186 assert.is_nil(ok);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
187 assert.is_truthy(errors.is_err(err));
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
188 assert.equal("forbidden", err.condition);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
189 end);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
190
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
191 it("passes through successful return values", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
192 local function test()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
193 return 1, 2, 3, 4;
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
194 end
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
195 local one, two, three, four = reg.coerce(test());
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
196 assert.equal(1, one);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
197 assert.equal(2, two);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
198 assert.equal(3, three);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
199 assert.equal(4, four);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
200 end);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
201
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
202 it("wraps non-error objects", function ()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
203 local function test()
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
204 return nil, "myerror";
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
205 end
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
206 local ok, err = reg.coerce(test());
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
207 assert.is_nil(ok);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
208 assert.is_truthy(errors.is_err(err));
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
209 assert.equal("internal-server-error", err.condition);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
210 assert.equal("Oh no", err.text);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
211 end);
b0a563716334 util.error: Add coerce and wrap methods to registry(?) objects
Matthew Wild <mwild1@gmail.com>
parents: 11102
diff changeset
212 end);
11097
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
213 end);
f23cf8e2e2ff util.error: Cover registry initialization in test
Kim Alvefur <zash@zash.se>
parents: 11092
diff changeset
214
10101
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
215 end);
ba7636860bbc util.error: Add tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
216