Class: Syntropy::Test

Inherits:
Minitest::Test
  • Object
show all
Defined in:
lib/syntropy/test.rb

Overview

Test provides a class for testing a Syntropy app, based on Minitest.

Constant Summary collapse

HTTP =
Syntropy::HTTP

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#appObject (readonly)

Returns the value of attribute app.



22
23
24
# File 'lib/syntropy/test.rb', line 22

def app
  @app
end

#machineObject (readonly)

Returns the value of attribute machine.



22
23
24
# File 'lib/syntropy/test.rb', line 22

def machine
  @machine
end

Class Method Details

.env=(env) ⇒ void

This method returns an undefined value.

Sets the app environment for all Syntropy tests.

Parameters:

  • env (Hash)

    app environment hash



18
19
20
# File 'lib/syntropy/test.rb', line 18

def self.env=(env)
  @@env = env
end

Instance Method Details

#envHash

Returns the test environment.

Returns:

  • (Hash)

    test app environment



27
28
29
# File 'lib/syntropy/test.rb', line 27

def env
  @@env
end

#get(path, **headers) ⇒ Syntropy::Request

Makes an HTTP GET request to the test app.

Parameters:

  • path (String)

    request path

  • headers (Hash)

    request headers

Returns:



53
54
55
56
57
58
59
60
# File 'lib/syntropy/test.rb', line 53

def get(path, **headers)
  http_request(
    headers.merge(
      ':method' => 'GET',
      ':path'   => path
    )
  )
end

#http_request(headers, body = nil) ⇒ Syntropy::Request

Makes an HTTP request to the test app.

Parameters:

  • headers (Hash)

    request headers

  • body (String, nil) (defaults to: nil)

    request body

Returns:



44
45
46
# File 'lib/syntropy/test.rb', line 44

def http_request(headers, body = nil)
  @test_harness.request(headers, body)
end

#load_module(ref, raise_on_missing: true) ⇒ any

Loads and returns a module with the given reference.

Parameters:

  • ref (String)

    module reference

Returns:

  • (any)

    module



35
36
37
# File 'lib/syntropy/test.rb', line 35

def load_module(ref, raise_on_missing: true)
  app.module_loader.load(ref, raise_on_missing:)
end

#post(path, content_type, body, **headers) ⇒ Syntropy::Request

Makes an HTTP POST request to the test app.

Parameters:

  • path (String)

    request path

  • content_type (String, nil)

    content MIME type

  • body (String)

    request body

  • headers (Hash)

    request headers

Returns:



69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/syntropy/test.rb', line 69

def post(path, content_type, body, **headers)
  headers = headers.merge('content-type' => content_type) if content_type
  http_request(
    headers.merge(
      {
        ':method' => 'POST',
        ':path'   => path
      }
    ),
    body
  )
end

#post_form(path, data) ⇒ Syntropy::Request

Makes an HTTP POST request to the test app with a “application/x-www-form-urlencoded” content type. The given data is converted to URL Encoded form format and sent as the request body.

Parameters:

  • path (String)

    request path

  • data (Hash)

    form data

Returns:



100
101
102
# File 'lib/syntropy/test.rb', line 100

def post_form(path, data, **)
  post(path, 'application/x-www-form-urlencoded', URI.encode_www_form(data), **)
end

#post_json(path, data) ⇒ Syntropy::Request

Makes an HTTP POST request to the test app with a “application/json” content type. The given object is converted to JSON and sent as the request body.

Parameters:

  • path (String)

    request path

  • data (any)

    data

Returns:



89
90
91
# File 'lib/syntropy/test.rb', line 89

def post_json(path, data, **)
  post(path, 'application/json', JSON.dump(data), **)
end

#setupvoid

This method returns an undefined value.

Sets up a test instance.



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/syntropy/test.rb', line 107

def setup
  raise 'Environment not set' if !@@env

  Syntropy.load_config(@@env)

  @machine = UM.new
  @app = Syntropy::App.new(
    **@@env.merge(
      machine: @machine,
      test_mode: true
    )
  )
  @test_harness = Syntropy::TestHarness.new(@app)

  @db = load_module('/_lib/database', raise_on_missing: false)
  @db&.migrate!
end

#teardownvoid

This method returns an undefined value.

Cleans up a test instance.



128
129
130
131
132
# File 'lib/syntropy/test.rb', line 128

def teardown
  @machine = nil
  @app = nil
  @test_harness = nil
end