@@ -14,6 +14,23 @@ def detailed_message(...)
1414 end
1515end
1616
17+ class PlainError
18+ def class
19+ StandardError
20+ end
21+
22+ def message
23+ "Plain error!"
24+ end
25+
26+ def backtrace
27+ [ ]
28+ end
29+
30+ def cause
31+ end
32+ end
33+
1734describe Console ::Event ::Failure do
1835 include Sus ::Fixtures ::Console ::CapturedLogger
1936
@@ -59,5 +76,44 @@ def detailed_message(...)
5976
6077 expect ( failure . exception ) . to be == error
6178 end
79+
80+ it "logs failures directly" do
81+ Console ::Event ::Failure . log ( "It failed" , error , name : "failure" )
82+
83+ expect ( console_capture . last ) . to have_keys (
84+ severity : be == :error ,
85+ subject : be == "It failed" ,
86+ name : be == "failure" ,
87+ )
88+ end
89+
90+ it "includes nested causes" do
91+ begin
92+ begin
93+ raise RuntimeError , "Cause!"
94+ rescue
95+ raise TestError , "Test error!"
96+ end
97+ rescue TestError => error
98+ expect ( Console ::Event ::Failure . for ( error ) . to_hash ) . to have_keys (
99+ cause : have_keys (
100+ class : be == "RuntimeError" ,
101+ message : be =~ /Cause!/
102+ )
103+ )
104+ end
105+ end
106+ end
107+
108+ it "returns nil if the default root cannot be determined" do
109+ expect ( Dir ) . to receive ( :getwd ) . and_raise ( Errno ::EMFILE )
110+
111+ expect ( subject . default_root ) . to be_nil
112+ end
113+
114+ it "uses the basic message when detailed messages are unavailable" do
115+ expect ( subject . new ( PlainError . new ) . to_hash ) . to have_keys (
116+ message : be == "Plain error!"
117+ )
62118 end
63119end
0 commit comments