Module: Julewire::Core::Testing::Contracts::Component

Included in:
Julewire::Core::Testing::Contracts
Defined in:
lib/julewire/core/testing/contracts/component.rb

Instance Method Summary collapse

Instance Method Details

#assert_julewire_destination_contract(destination, record: build_julewire_contract_record) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/julewire/core/testing/contracts/component.rb', line 31

def assert_julewire_destination_contract(destination, record: build_julewire_contract_record)
  %i[name emit flush close health].each do |method_name|
    assert_respond_to destination, method_name
  end

  assert_nil destination.emit(record)
  assert destination.flush(timeout: 0)
  assert destination.close(timeout: 0)
  assert_kind_of Hash, destination.health
  destination
end

#assert_julewire_formatter_contract(formatter, record: build_julewire_contract_record) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/julewire/core/testing/contracts/component.rb', line 21

def assert_julewire_formatter_contract(formatter, record: build_julewire_contract_record)
  assert_respond_to formatter, :call

  formatted = formatter.call(record)
  encoded = Julewire::Core::Serialization::JsonEncoder.new.call(formatted)

  assert_kind_of String, encoded
  formatted
end

#assert_julewire_processor_contract(processor, draft: build_julewire_contract_draft) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/julewire/core/testing/contracts/component.rb', line 10

def assert_julewire_processor_contract(processor, draft: build_julewire_contract_draft)
  assert_respond_to processor, :call

  result = processor.call(draft)
  return :drop if result == :drop

  result = draft unless result.is_a?(Julewire::Core::Records::Draft)
  result.to_record
  result
end

#assert_julewire_record_shape_contract(record: build_julewire_shape_contract_record) ⇒ Object



43
44
45
46
47
48
49
50
51
52
# File 'lib/julewire/core/testing/contracts/component.rb', line 43

def assert_julewire_record_shape_contract(record: build_julewire_shape_contract_record)
  Julewire::Core::Records::Record.validate_normalized!(record)

  data = record.to_h
  assert_julewire_record_data_shape!(record, data)
  assert_julewire_record_formatter_shape!(record)
  assert_julewire_record_serializer_shape!(record)

  record
end

#build_julewire_contract_draft(fields = {}) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/julewire/core/testing/contracts/component.rb', line 58

def build_julewire_contract_draft(fields = {})
  Julewire::Core::Records::Draft.build(
    {
      severity: :info,
      kind: :point,
      event: "test.event",
      source: "test",
      message: "test message",
      attributes: { "test.attribute" => "value" },
      payload: { value: 1 }
    }.merge(fields),
    context: {},
    scope: nil,
    freeze_sections: false
  )
end

#build_julewire_contract_record(fields = {}) ⇒ Object



54
55
56
# File 'lib/julewire/core/testing/contracts/component.rb', line 54

def build_julewire_contract_record(fields = {})
  build_julewire_contract_draft(fields).to_record
end