Module: OpenapiFirst::Test::Coverage

Defined in:
lib/openapi_first/test/coverage.rb,
lib/openapi_first/test/coverage/plan.rb,
lib/openapi_first/test/coverage/route_task.rb,
lib/openapi_first/test/coverage/request_task.rb,
lib/openapi_first/test/coverage/response_task.rb,
lib/openapi_first/test/coverage/terminal_formatter.rb

Overview

The Coverage module is about tracking request and response validation to assess if all parts of the API description have been tested. Currently it does not care about unknown requests that are not part of any API description.

Defined Under Namespace

Classes: Plan, TerminalFormatter

Constant Summary collapse

Result =
Data.define(:plans, :coverage)
RouteTask =
Data.define(:path, :request_method, :requests, :responses) do
  def finished?
    requests.all?(&:finished?) && responses.all?(&:finished?)
  end
end

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.current_runObject (readonly)

Returns the value of attribute current_run.



16
17
18
# File 'lib/openapi_first/test/coverage.rb', line 16

def current_run
  @current_run
end

Class Method Details

.installObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/openapi_first/test/coverage.rb', line 18

def install
  return if @installed

  @after_request_validation = lambda do |validated_request, oad|
    track_request(validated_request, oad)
  end

  @after_response_validation = lambda do |validated_response, request, oad|
    track_response(validated_response, request, oad)
  end

  OpenapiFirst.configure do |config|
    config.after_request_validation(&@after_request_validation)
    config.after_response_validation(&@after_response_validation)
  end
  @installed = true
end

.plansObject

Returns all plans (Plan) that were registered for this run



68
69
70
# File 'lib/openapi_first/test/coverage.rb', line 68

def plans
  current_run&.values
end

.resetObject

Clear current coverage run



51
52
53
# File 'lib/openapi_first/test/coverage.rb', line 51

def reset
  @current_run = nil
end

.resultObject



63
64
65
# File 'lib/openapi_first/test/coverage.rb', line 63

def result
  Result.new(plans:, coverage:)
end

.start(skip_response: nil) ⇒ Object



36
37
38
39
40
41
# File 'lib/openapi_first/test/coverage.rb', line 36

def start(skip_response: nil)
  @current_run = Test.definitions.values.to_h do |oad|
    plan = Plan.for(oad, skip_response:)
    [oad.key, plan]
  end
end

.track_request(request, oad) ⇒ Object



55
56
57
# File 'lib/openapi_first/test/coverage.rb', line 55

def track_request(request, oad)
  current_run[oad.key]&.track_request(request)
end

.track_response(response, _request, oad) ⇒ Object



59
60
61
# File 'lib/openapi_first/test/coverage.rb', line 59

def track_response(response, _request, oad)
  current_run[oad.key]&.track_response(response)
end

.uninstallObject



43
44
45
46
47
48
# File 'lib/openapi_first/test/coverage.rb', line 43

def uninstall
  configuration = OpenapiFirst.configuration
  configuration.hooks[:after_request_validation].delete(@after_request_validation)
  configuration.hooks[:after_response_validation].delete(@after_response_validation)
  @installed = nil
end