diff --git a/README.md b/README.md index 27c2e28..acf6028 100644 --- a/README.md +++ b/README.md @@ -267,8 +267,11 @@ Renders just the exception details section. Returns `nil` if no exception. #### `backtrace_html(**options)` Renders just the backtrace section. Returns `nil` if no backtrace. +#### `status_html(**options)` +Renders just the status section. + #### `render_html(**options)` -Convenience method that renders all three sections in a standard layout. +Convenience method that renders all four sections in a standard layout. ### Class Methods diff --git a/lib/rspec/html_messages.rb b/lib/rspec/html_messages.rb index cda7a7d..21c4d8d 100644 --- a/lib/rspec/html_messages.rb +++ b/lib/rspec/html_messages.rb @@ -81,16 +81,27 @@ def backtrace_html(**options) render_template("_backtrace") end + def status_html(**options) + if passed? + css_class = "alert-success" + message = "This test passed!" + else + css_class = "alert-warning" + message = "The test did not pass." + end + render_template("_status", css_class: css_class, message: message) + end + # Public boolean methods so users can make their own decisions def has_output? # Don't show output for errors before assertions return false if error_before_assertion? - status == "failed" || has_actual? + failed? || has_actual? end def has_failure_message? - status == "failed" && !error_before_assertion? && failure_message.present? + failed? && !error_before_assertion? && failure_message.present? end def has_exception_details? @@ -142,6 +153,14 @@ def self.diff_css private + def passed? + status == "passed" + end + + def failed? + status == "failed" + end + def default_options { force_diffable: FORCE_DIFFABLE_MATCHERS, @@ -174,7 +193,7 @@ def failure_message end def calculate_failure_message - return nil unless status == "failed" + return nil unless failed? message = example.dig("exception", "message") return nil unless message @@ -314,8 +333,6 @@ def friendly_error_location end end - private - def validate_example!(example) raise ArgumentError, "Example cannot be nil" if example.nil? raise ArgumentError, "Example must be a Hash" unless example.is_a?(Hash) diff --git a/lib/rspec/html_messages/templates/_status.html.erb b/lib/rspec/html_messages/templates/_status.html.erb new file mode 100644 index 0000000..5ded5f1 --- /dev/null +++ b/lib/rspec/html_messages/templates/_status.html.erb @@ -0,0 +1,3 @@ + diff --git a/lib/rspec/html_messages/templates/example.html.erb b/lib/rspec/html_messages/templates/example.html.erb index 2a2c735..fa9ac61 100644 --- a/lib/rspec/html_messages/templates/example.html.erb +++ b/lib/rspec/html_messages/templates/example.html.erb @@ -1,6 +1,12 @@
- <% if output_content = output_html(**@options) %> + <% if status_content = status_html(**@options) %>
+ <%= status_content %> +
+ <% end %> + + <% if output_content = output_html(**@options) %> +
<%= output_content %>
<% end %> diff --git a/lib/rspec/html_messages/version.rb b/lib/rspec/html_messages/version.rb index 7f22353..0b614b6 100644 --- a/lib/rspec/html_messages/version.rb +++ b/lib/rspec/html_messages/version.rb @@ -2,6 +2,6 @@ module Rspec class HtmlMessages - VERSION = "0.2.0" + VERSION = "0.2.1" end end