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
|