File: test_results.rb

package info (click to toggle)
ruby-blade 0.7.1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 208 kB
  • sloc: ruby: 819; makefile: 3; sh: 3
file content (52 lines) | stat: -rw-r--r-- 1,094 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Blade::TestResults
  STATUS_DOTS = { pass: ".", fail: "✗" }.with_indifferent_access

  attr_reader :session_id, :state, :results, :total, :failures

  def initialize(session_id)
    @session_id = session_id
    reset

    Blade.subscribe("/tests") do |details|
      if details[:session_id] == session_id
        event = details.delete(:event)
        try("process_#{event}", details)
      end
    end
  end

  def reset
    @results = []
    @state = "pending"
    @total = 0
    @failures = 0
  end

  def process_begin(details)
    reset
    @state = "running"
    @total = details[:total]
    publish(total: @total)
  end

  def process_result(details)
    result = details.slice(:status, :name, :message)
    @results << result

    if result[:status] == "fail"
      @state = "failing"
      @failures += 1
    end

    publish(result)
  end

  def process_end(details)
    @state = failures.zero? ? "finished" : "failed"
    publish(completed: true)
  end

  def publish(message = {})
    Blade.publish("/results", message.merge(state: state, session_id: session_id))
  end
end