umts-microservices-engine 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e81145f5bfbbeecd56413cd9b89f910bf9066cd2
4
- data.tar.gz: c8e25da32da1614d9b10fbd2775796b3a867c603
3
+ metadata.gz: 2c498cd845409f6ef09e95e9df99569b269928fb
4
+ data.tar.gz: b37e6e9fd532670afe1a109a9e1ffa393a5575f1
5
5
  SHA512:
6
- metadata.gz: fd700a4d1f09eadc51c3a153d83cc760e2218a133b8118b6a752b29bab84220c803e6d735d853e4aefbc368bd3b77f876f6de89991c082cc93d6ce63dbece231
7
- data.tar.gz: 0496cb4a66efcd3cfbb7faf54baace1760dd9c6bab767a5aa427eea4a44dc80be8ed02d566e1556b5cad8801a42535b73861a2866a66f84169cd6716bf00db44
6
+ metadata.gz: 72ca82abc02906755a30b917bfcb7e2d7ba05b6e6616468ebae4af214c225fea9e14e583e9b15f32925b8f1059e3ab9a67a3c551e209faece9a1ff5538ab1fd8
7
+ data.tar.gz: c914a8d387381250d298cfce6a31478373cf5e15f110c0b3a978bb1190899a781d817e502c4be7056a1d409614d73c0174a6c7cc91ec1bc16a6637583a33c60d
@@ -31,7 +31,8 @@ module MicroservicesEngine
31
31
  data = params['content']
32
32
  data_objects = data.map { |d| d['object'] }
33
33
 
34
- verify_token(params['token'])
34
+ # Disabled until router implements token authorization
35
+ # verify_token(params['token'])
35
36
  verify_build(params['build'])
36
37
 
37
38
  existing = Connection.all
@@ -13,7 +13,7 @@ if [config_data['name'], config_data['uri'], config_data['security_token']].any?
13
13
  end
14
14
 
15
15
  # Make sure the URI ends with a / character
16
- router_uri = config['router_uri']
16
+ router_uri = config_data['router_uri']
17
17
 
18
18
  uri = config_data['uri']
19
19
  uri += '/' if uri[-1] != '/'
@@ -30,12 +30,12 @@ module MicroservicesEngine
30
30
  # ------------------------------------------------------ #
31
31
  invalid_changes = [
32
32
  cmajor > major,
33
- cminor > minor && cmajor <= major,
34
- crev > rev && cminor <= minor && cmajor <= major
33
+ cminor > minor && !(major > cmajor),
34
+ crev > rev && !(minor > cminor || major > cmajor)
35
35
  ]
36
36
 
37
37
  if invalid_changes.any?
38
- raise 'Received version is older than existing. Now: #{build}. Given: #{b}'
38
+ raise "Received version is older than existing. Now: #{build}. Given: #{b}"
39
39
  end
40
40
 
41
41
  @build = b
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module MicroservicesEngine
3
- VERSION = '0.0.4'
3
+ VERSION = '0.0.5'
4
4
  end
@@ -1,15 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rails_helper'
3
-
4
- # PLANNED FOR MOVE TO OTHER FILE
5
- def change_build(v, b)
6
- b['build'] = v
7
- end
8
-
9
- def relative_build(ma, mi, r)
10
- [ma, mi, r].map { |ver| 1 + ver }.join('.')
11
- end
12
- # PLANNED FOR MOVE TO OTHER FILE
3
+ require 'mse_spec_helper'
13
4
 
14
5
  describe MicroservicesEngine::V1::DataController, type: :controller do
15
6
  routes { MicroservicesEngine::Engine.routes }
@@ -19,22 +10,7 @@ describe MicroservicesEngine::V1::DataController, type: :controller do
19
10
 
20
11
  before(:each) do
21
12
  MicroservicesEngine.build = '1.1.1'
22
- @data = {
23
- 'build': '1.1.2',
24
- 'token': 'TEST_ENV_VALID_TOKEN',
25
- 'content': [
26
- {
27
- 'name': 'Endpoint 1',
28
- 'object': 'FieldTrip',
29
- 'url': 'http://example.com/microservices_engine/v1/data'
30
- },
31
- {
32
- 'name': 'Endpoint 2',
33
- 'object': 'Survey',
34
- 'url': 'http://potatoes.com/microservices_engine/v1/data'
35
- }
36
- ]
37
- }
13
+ @data = build_basic_data
38
14
  @changed_data = @data.deep_dup # A version of data that is changed for tests
39
15
  end
40
16
 
@@ -52,23 +28,21 @@ describe MicroservicesEngine::V1::DataController, type: :controller do
52
28
  expect { process :register, method: :post, params: @data }.not_to raise_error
53
29
  end
54
30
 
55
- it 'denies invalid token' do
56
- # 1. Change base data to be an invalid token
57
- # 2. Expect the request to cause an error.
31
+ # This test is disabled until the router implements the appropriate logic
32
+ # it 'denies invalid token' do
33
+ # 1. Change base data to be an invalid token
34
+ # 2. Expect the request to cause an error.
58
35
 
59
- @changed_data['token'] = 'mayonnaise_is_not_an_instrument_patrick'
60
- expect { process :register, method: :post, params: @changed_data }.to raise_error(SecurityError)
61
- end
36
+ # @changed_data['token'] = 'mayonnaise_is_not_an_instrument_patrick'
37
+ # expect { process :register, method: :post, params: @changed_data }.to raise_error(SecurityError)
38
+ # end
62
39
  end
63
40
 
64
41
  # The request updates the build version properly
65
42
  describe 'updating MicroservicesEngine.build' do
66
43
  context 'failing builds' do
67
- failing_builds = [0, -1].repeated_permutation(3).to_a.map { |bld| relative_build(*bld) }
68
- failing_builds -= ['1.1.1'] # this is a result of above but is a valid build
69
-
70
- failing_builds.each do |failing_build|
71
- it 'fails with older version #{failing_build}' do
44
+ failing_semantic_builds.each do |failing_build|
45
+ it "fails with older version #{failing_build}" do
72
46
  change_build(failing_build, @changed_data)
73
47
  expect { process :register, method: :post, params: @changed_data }.to raise_error(RuntimeError)
74
48
  end
@@ -76,10 +50,8 @@ describe MicroservicesEngine::V1::DataController, type: :controller do
76
50
  end
77
51
 
78
52
  context 'passing builds' do
79
- passing_builds = [0, 1].repeated_permutation(3).to_a.map { |bld| relative_build(*bld) }
80
-
81
- passing_builds.each do |passing_build|
82
- it 'passes with newer version #{passing_build}' do
53
+ passing_semantic_builds.each do |passing_build|
54
+ it "passes with newer version #{passing_build}" do
83
55
  change_build(passing_build, @changed_data)
84
56
  expect(MicroservicesEngine.build).to eq('1.1.1')
85
57
  process :register, method: :post, params: @changed_data
@@ -2,7 +2,96 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  class MicroservicesEngineTest < ActiveSupport::TestCase
5
- test 'truth' do
6
- assert_kind_of Module, MicroservicesEngine
5
+ describe MicroservicesEngine do
6
+ before(:each) do
7
+ MicroservicesEngine.build = '1.1.1'
8
+ @expected = {
9
+ 'name': '',
10
+ 'uri': '',
11
+ 'security_token': '',
12
+ 'router_uri': '',
13
+ 'accessible_models': ''
14
+ }
15
+ allow(MicroservicesEngine).to receive(:config).and_return(@expected)
16
+ allow(MicroservicesEngine).to receive(:reload_config).and_return(@expected)
17
+ end
18
+
19
+ describe 'build= and build' do
20
+ context 'failing builds' do
21
+ failing_semantic_builds.each do |failing_build|
22
+ it "fails with older version #{failing_build}" do
23
+ expect { MicroservicesEngine.build = failing_build }.to raise_error(RuntimeError)
24
+ end
25
+ end
26
+ end
27
+
28
+ context 'passing builds' do
29
+ passing_semantic_builds.each do |passing_build|
30
+ it "passes with newer version #{passing_build}" do
31
+ expect(MicroservicesEngine.build).to eq('1.1.1')
32
+ MicroservicesEngine.build = passing_build
33
+ expect(MicroservicesEngine.build).to eq(passing_build)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ # Because they are alias methods, both are tested at once
40
+ describe 'reload_config and config' do
41
+ # With this test, we can effectively only test
42
+ # one of the methods and actually be testing both
43
+ it 'does the same thing' do
44
+ expect(MicroservicesEngine.reload_config)
45
+ .to be(MicroservicesEngine.config)
46
+ end
47
+
48
+ it 'loads the config' do
49
+ expect(MicroservicesEngine.config)
50
+ .to eq(@expected)
51
+ end
52
+
53
+ it 'loads the new config' do
54
+ @expected['name'] = 'potatoes'
55
+ expect(MicroservicesEngine.config)
56
+ .to eq(@expected)
57
+ end
58
+ end
59
+
60
+ describe 'valid_token?' do
61
+ context 'on test environment' do
62
+ it 'accepts valid token' do
63
+ expect(MicroservicesEngine.valid_token?('TEST_ENV_VALID_TOKEN'))
64
+ .to be(true)
65
+ end
66
+
67
+ it 'refuses invalid token' do
68
+ expect(MicroservicesEngine.valid_token?('POTATOES_ARE_INVALID'))
69
+ .to be(false)
70
+ end
71
+ end
72
+
73
+ context 'not on test environment' do
74
+ before(:each) do
75
+ @expected['security_token'] = 'PROD_ENV_VALID_TOKEN'
76
+ allow(Rails).to receive(:env).and_return(ActiveSupport::StringInquirer.new('production'))
77
+ end
78
+
79
+ it 'raises an error with no token config' do
80
+ @expected['security_token'] = ''
81
+ expect { MicroservicesEngine.valid_token?(':thinking:') }
82
+ .to raise_error(RuntimeError)
83
+ end
84
+
85
+ it 'accepts valid token' do
86
+ expect(MicroservicesEngine.valid_token?('PROD_ENV_VALID_TOKEN'))
87
+ .to be(true)
88
+ end
89
+
90
+ it 'refuses invalid token' do
91
+ expect(MicroservicesEngine.valid_token?('POTATOES_ARE_STILL_INVALID'))
92
+ .to be(false)
93
+ end
94
+ end
95
+ end
7
96
  end
8
97
  end
@@ -20,9 +20,9 @@ describe MicroservicesEngine::Connection do
20
20
  end
21
21
 
22
22
  describe 'self.get' do
23
- # it 'implies params' do
24
- # expect(@conn).to receive(:get).with(@path, {})
25
- # resp = MicroservicesEngine::Connection.get('ExampleModel', @path)
26
- # end
23
+ it 'implies params' do
24
+ expect_only_instance_of(MicroservicesEngine::Connection).to receive(:get).with(@path, {})
25
+ MicroservicesEngine::Connection.get('ExampleModel', @path)
26
+ end
27
27
  end
28
28
  end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ # -- Changes that directly affect RSpec -- #
4
+ module RSpec
5
+ module Mocks
6
+ ::RSpec::Mocks::ExampleMethods.class_exec do
7
+ def expect_only_instance_of(klass)
8
+ expect(klass.count).to be(1)
9
+ AnyInstanceExpectationTarget.new(klass)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ # ---------------------------------------- #
15
+
16
+ # Changes the build key of a request
17
+ # Params:
18
+ # +v+:: The value to change the key to
19
+ # +b+:: The build request to change
20
+ def change_build(v, b)
21
+ b['build'] = v
22
+ end
23
+
24
+ # Takes in a series of semantic versions (major, minor, revision)
25
+ # changes and outputs a new semantic version based off of 1.1.1
26
+ # Params:
27
+ # +major+:: Change in major version
28
+ # +minor+:: Change in minor version
29
+ # +revision+:: Change in revision version
30
+ def relative_build(major, minor, revision)
31
+ # Example usage:
32
+ # relative_build(1, -1, 0) = 2.0.1
33
+ # relative_build(0, 0, 0) = 1.1.1
34
+ [major, minor, revision].map { |ver| 1 + ver }.join('.')
35
+ end
36
+
37
+ # Returns a basic set fo a build data for integration testing
38
+ def build_basic_data
39
+ {
40
+ 'build': '1.1.2',
41
+ 'token': 'TEST_ENV_VALID_TOKEN',
42
+ 'content': [
43
+ {
44
+ 'name': 'Endpoint 1',
45
+ 'object': 'FieldTrip',
46
+ 'url': 'http://example.com/microservices_engine/v1/data'
47
+ },
48
+ {
49
+ 'name': 'Endpoint 2',
50
+ 'object': 'Survey',
51
+ 'url': 'http://potatoes.com/microservices_engine/v1/data'
52
+ }
53
+ ]
54
+ }
55
+ end
56
+
57
+ # Gives a list of all changes to a semantic build that are invalid
58
+ def failing_semantic_builds
59
+ [0, -1]
60
+ .repeated_permutation(3)
61
+ .to_a.map { |bld| relative_build(*bld) } - ['1.1.1']
62
+ end
63
+
64
+ # Gives a list of all changes to a semantic build that are valid
65
+ def passing_semantic_builds
66
+ base = [0, 1]
67
+ .repeated_permutation(3)
68
+ .to_a.map { |bld| relative_build(*bld) }
69
+ base + ['2.0.0', '2.1.0', '2.0.1', '1.2.0']
70
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: umts-microservices-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - UMass Transportation Services
@@ -134,6 +134,7 @@ files:
134
134
  - spec/microservices_engine/install_generator_spec.rb.old
135
135
  - spec/microservices_engine_spec.rb
136
136
  - spec/models/connection_spec.rb
137
+ - spec/mse_spec_helper.rb
137
138
  - spec/rails_helper.rb
138
139
  - spec/spec_helper.rb
139
140
  homepage: https://github.com/umts/microservices-engine
@@ -165,5 +166,6 @@ test_files:
165
166
  - spec/microservices_engine/install_generator_spec.rb.old
166
167
  - spec/microservices_engine_spec.rb
167
168
  - spec/models/connection_spec.rb
169
+ - spec/mse_spec_helper.rb
168
170
  - spec/rails_helper.rb
169
171
  - spec/spec_helper.rb