nulogy_message_bus_producer 2.0.0 → 3.2.1

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +188 -15
  3. data/Rakefile +6 -2
  4. data/db/migrate/20201005150212_rename_tenant_id_and_public.rb +6 -0
  5. data/lib/nulogy_message_bus_producer.rb +47 -19
  6. data/lib/nulogy_message_bus_producer/{base_public_subscription.rb → base_subscription.rb} +1 -1
  7. data/lib/nulogy_message_bus_producer/config.rb +6 -0
  8. data/lib/nulogy_message_bus_producer/repopulate_replication_slots.rb +25 -0
  9. data/lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator.rb +1 -1
  10. data/lib/nulogy_message_bus_producer/{public_subscription.rb → subscription.rb} +1 -2
  11. data/lib/nulogy_message_bus_producer/{public_subscription_event.rb → subscription_event.rb} +1 -1
  12. data/lib/nulogy_message_bus_producer/subscriptions/no_variables.rb +43 -0
  13. data/lib/nulogy_message_bus_producer/subscriptions/postgres_transport.rb +85 -0
  14. data/lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker.rb +70 -0
  15. data/lib/nulogy_message_bus_producer/version.rb +1 -1
  16. data/lib/tasks/engine/message_bus_producer.rake +11 -0
  17. data/spec/dummy/config/database.yml +1 -1
  18. data/spec/dummy/config/puma.rb +2 -2
  19. data/spec/dummy/db/migrate/20201005164116_create_active_storage_tables.active_storage.rb +5 -0
  20. data/spec/dummy/db/schema.rb +3 -5
  21. data/spec/dummy/log/development.log +510 -0
  22. data/spec/dummy/log/test.log +18126 -0
  23. data/spec/integration/lib/nulogy_message_bus_producer/repopulate_replication_slots_spec.rb +141 -0
  24. data/spec/integration/lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator_spec.rb +49 -0
  25. data/spec/integration/lib/nulogy_message_bus_producer/subscription_spec.rb +61 -0
  26. data/spec/integration/lib/nulogy_message_bus_producer/subscriptions/no_variables_spec.rb +46 -0
  27. data/spec/integration/lib/nulogy_message_bus_producer/subscriptions/postgres_transport_spec.rb +135 -0
  28. data/spec/integration/lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker_spec.rb +49 -0
  29. data/spec/integration_spec_helper.rb +5 -0
  30. data/spec/spec_helper.rb +0 -40
  31. data/spec/support/kafka.rb +105 -0
  32. data/spec/support/kafka_connect.rb +31 -0
  33. data/spec/support/spec_utils.rb +16 -0
  34. data/spec/support/sql_helpers.rb +45 -0
  35. data/spec/support/subscription_helpers.rb +52 -0
  36. data/spec/support/test_graphql_schema.rb +48 -0
  37. metadata +89 -38
  38. data/lib/nulogy_message_bus_producer/postgres_public_subscriptions.rb +0 -117
  39. data/spec/integration/lib/graphql_api/postgres_public_subscriptions_spec.rb +0 -122
  40. data/spec/integration/lib/graphql_api/validators/subscriber_graphql_schema_validator_spec.rb +0 -76
  41. data/spec/unit/lib/graphql_api/models/public_subscription_spec.rb +0 -66
  42. data/spec/unit_spec_helper.rb +0 -6
@@ -6,6 +6,7 @@ ENV["RAILS_ENV"] ||= "test"
6
6
  require File.expand_path("dummy/config/environment.rb", __dir__)
7
7
 
8
8
  require "rspec/rails"
9
+ require "rspec/json_expectations"
9
10
  require "active_record"
10
11
  require "spec_helper"
11
12
 
@@ -33,4 +34,8 @@ RSpec.configure do |config|
33
34
  config.expect_with(:rspec) do |c|
34
35
  c.max_formatted_output_length = 1_000_000
35
36
  end
37
+
38
+ config.include(SpecUtils)
39
+ config.include(SqlHelpers)
40
+ config.include(SubscriptionHelpers)
36
41
  end
@@ -1,43 +1,3 @@
1
- # Some test GraphQL objects for testing
2
- module NulogyMessageBusProducer
3
- module Specs
4
- class TestObject < GraphQL::Schema::Object
5
- graphql_name "testObject"
6
-
7
- field :id, type: NulogyGraphqlApi::Types::UUID, null: false
8
- end
9
-
10
- class TestQuery < GraphQL::Schema::Object
11
- graphql_name "testQuery"
12
-
13
- field :foo, TestObject, null: false do
14
- argument :id, type: NulogyGraphqlApi::Types::UUID, required: false
15
- end
16
-
17
- def foo(id:)
18
- OpenStruct.new(id: id)
19
- end
20
- end
21
-
22
- class TestCreated < NulogyMessageBusProducer::BasePublicSubscription
23
- field :description, String, null: false
24
- end
25
-
26
- class TestSubscription < GraphQL::Schema::Object
27
- extend GraphQL::Subscriptions::SubscriptionRoot
28
-
29
- field :test_created, subscription: TestCreated
30
- end
31
-
32
- class TestSchema < GraphQL::Schema
33
- use NulogyMessageBusProducer::PostgresPublicSubscriptions
34
-
35
- query TestQuery
36
- subscription TestSubscription
37
- end
38
- end
39
- end
40
-
41
1
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
42
2
  RSpec.configure do |config|
43
3
  config.expect_with(:rspec) do |expectations|
@@ -0,0 +1,105 @@
1
+ require "open3"
2
+ require "rdkafka"
3
+
4
+ module Kafka
5
+ module_function
6
+
7
+ def kafka_config
8
+ config = {
9
+ "auto.offset.reset": "beginning",
10
+ "bootstrap.servers": test_bootstrap_servers,
11
+ "enable.auto.commit": false,
12
+ "group.id": random_consumer_group
13
+ }
14
+
15
+ Rdkafka::Config.new(config)
16
+ end
17
+
18
+ def random_topic_name
19
+ "test-topic-#{SecureRandom.uuid}"
20
+ end
21
+
22
+ def random_consumer_group
23
+ "ruby-test-consumer-group-#{SecureRandom.uuid}"
24
+ end
25
+
26
+ def test_bootstrap_servers
27
+ "localhost:9092"
28
+ end
29
+
30
+ def setup_kafka_producer
31
+ kafka_config.producer
32
+ end
33
+
34
+ def setup_kafka_consumer(topic_name)
35
+ consumer = kafka_config.consumer
36
+ consumer.subscribe(topic_name)
37
+ wait_for_assignment(consumer)
38
+ consumer
39
+ end
40
+
41
+ def get_all_messages(consumer, timeout: 500)
42
+ messages = []
43
+
44
+ loop do
45
+ message = consumer.poll(timeout)
46
+
47
+ return messages unless message
48
+
49
+ messages << message
50
+ end
51
+ end
52
+
53
+ def wait_for_messages(consumer)
54
+ messages = []
55
+ SpecUtils.wait_for(attempts: 10) do
56
+ messages = Kafka.get_all_messages(consumer)
57
+ messages.present?
58
+ end
59
+ messages
60
+ end
61
+
62
+ def create_topic(topic_name)
63
+ cmd = [
64
+ "docker-compose exec",
65
+ "-T kafka kafka-topics",
66
+ "--zookeeper zookeeper:2181",
67
+ "--create",
68
+ "--replication-factor 1",
69
+ "--partitions 3",
70
+ "--if-not-exists --topic #{topic_name}"
71
+ ]
72
+ run(cmd.join(" "))
73
+ end
74
+
75
+ def delete_topic(topic_name)
76
+ run("docker-compose exec -T kafka kafka-topics --zookeeper zookeeper:2181 --delete --topic #{topic_name}")
77
+ end
78
+
79
+ def list_topics
80
+ topics = run("docker-compose exec -T kafka kafka-topics --zookeeper zookeeper:2181 --list")
81
+ topics.split(" ")
82
+ end
83
+
84
+ def run(command)
85
+ stdout, stderr, status = Open3.capture3(command)
86
+ raise <<~OUTPUT if status != 0
87
+ Command `#{command}` failed with:
88
+ STDOUT:
89
+ #{stdout}
90
+
91
+ STDERR:
92
+ #{stderr}
93
+ OUTPUT
94
+
95
+ stdout
96
+ end
97
+
98
+ def wait_for_assignment(consumer)
99
+ SpecUtils.wait_for { !consumer.assignment.empty? }
100
+ end
101
+
102
+ def wait_for_unassignment(consumer)
103
+ SpecUtils.wait_for { consumer.assignment.empty? }
104
+ end
105
+ end
@@ -0,0 +1,31 @@
1
+ class KafkaConnect
2
+ def initialize(host, connector_name)
3
+ uri = URI(host)
4
+ @http = Net::HTTP.new(uri.host, uri.port)
5
+ @connector_name = connector_name
6
+ end
7
+
8
+ def configure(config)
9
+ request = Net::HTTP::Put.new("/connectors/#{@connector_name}/config")
10
+ request.body = config.to_json
11
+ request.content_type = "application/json"
12
+ @http.request(request)
13
+ end
14
+
15
+ def delete
16
+ request = Net::HTTP::Delete.new("/connectors/#{@connector_name}")
17
+ @http.request(request)
18
+ end
19
+
20
+ def info
21
+ request = Net::HTTP::Get.new("/connectors/#{@connector_name}")
22
+ response = @http.request(request)
23
+ JSON.parse(response.body, symbolize_names: true)
24
+ end
25
+
26
+ def status
27
+ request = Net::HTTP::Get.new("/connectors/#{@connector_name}/status")
28
+ response = @http.request(request)
29
+ JSON.parse(response.body, symbolize_names: true)
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ module SpecUtils
2
+ module_function
3
+
4
+ def wait_for(attempts: 100, interval: 0.1)
5
+ attempts.times do
6
+ return if yield
7
+
8
+ sleep interval
9
+ end
10
+ raise "Waited for #{attempts} times but it never resolved"
11
+ end
12
+
13
+ def uuid(entity_number)
14
+ format("00000000-0000-0000-0000-%<id>12.12d", id: entity_number)
15
+ end
16
+ end
@@ -0,0 +1,45 @@
1
+ module SqlHelpers
2
+ def without_transaction
3
+ ActiveRecord::Base.connection.rollback_transaction
4
+ yield
5
+ ensure
6
+ truncate_db
7
+ end
8
+
9
+ def truncate_db
10
+ # Hit any tables that were used via active record
11
+ ActiveRecord::Base.connection.tables.each do |table|
12
+ ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
13
+ end
14
+
15
+ # Just incase these models weren't loaded, do them explicitly
16
+ ActiveRecord::Base.connection.execute("TRUNCATE #{NulogyMessageBusProducer::SubscriptionEvent.table_name}")
17
+ ActiveRecord::Base.connection.execute("TRUNCATE #{NulogyMessageBusProducer::Subscription.table_name}")
18
+ end
19
+
20
+ def replication_slots
21
+ results = ActiveRecord::Base.connection.exec_query(<<~SQL)
22
+ SELECT slot_name FROM pg_replication_slots
23
+ SQL
24
+
25
+ results.to_a.map { |result| result["slot_name"] }
26
+ end
27
+
28
+ def drop_replication_slot(slot_name)
29
+ ActiveRecord::Base.connection.execute(<<~SQL)
30
+ SELECT pg_drop_replication_slot('#{slot_name}')
31
+ SQL
32
+ end
33
+
34
+ def wait_for_replication_slot(slot_name)
35
+ wait_for do
36
+ replication_slots.any? { |replication_slot| replication_slot == slot_name }
37
+ end
38
+ end
39
+
40
+ def wait_for_replication_slot_cleanup(slot_name)
41
+ wait_for do
42
+ replication_slots.none? { |replication_slot| replication_slot == slot_name }
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,52 @@
1
+ module SubscriptionHelpers
2
+ def subscribe_to(
3
+ schema: NulogyMessageBusProducer::Specs::TestSchema,
4
+ subscription_id: SecureRandom.uuid,
5
+ **query_args
6
+ )
7
+ gql = subscription_query(subscription_id: subscription_id, **query_args)
8
+
9
+ expect do
10
+ gql_response = execute_graphql(gql, schema)
11
+ expect(gql_response).to eq(data: {})
12
+ end.to change(NulogyMessageBusProducer::Subscription, :count).by(1)
13
+
14
+ NulogyMessageBusProducer::Subscription.find(subscription_id)
15
+ end
16
+
17
+ def subscription_query(
18
+ event_type: "testCreated",
19
+ query: "foo { id }",
20
+ subscription_id: SecureRandom.uuid,
21
+ subscription_group_id: SecureRandom.uuid,
22
+ topic_name: "some_topic"
23
+ )
24
+ <<~GRAPHQL
25
+ subscription {
26
+ #{event_type} (
27
+ subscriptionId: "#{subscription_id}",
28
+ subscriptionGroupId: "#{subscription_group_id}",
29
+ topicName: "#{topic_name}"
30
+ ) {
31
+ #{query}
32
+ }
33
+ }
34
+ GRAPHQL
35
+ end
36
+
37
+ def execute_graphql(query, schema, variables: {}, context: {})
38
+ response = schema.execute(
39
+ query,
40
+ variables: variables,
41
+ context: context,
42
+ operation_name: nil
43
+ )
44
+
45
+ response.to_h.deep_symbolize_keys
46
+ end
47
+
48
+ def trigger_event(event_type, root_object)
49
+ schema = NulogyMessageBusProducer::Specs::TestSchema
50
+ NulogyMessageBusProducer.trigger_event(schema, event_type, root_object)
51
+ end
52
+ end
@@ -0,0 +1,48 @@
1
+ # Some test GraphQL objects for testing
2
+ NulogyMessageBusProducer.config.register_schema(
3
+ schema: "NulogyMessageBusProducer::Specs::TestSchema",
4
+ key: "test"
5
+ )
6
+
7
+ module NulogyMessageBusProducer
8
+ module Specs
9
+ class TestObject < GraphQL::Schema::Object
10
+ graphql_name "testObject"
11
+
12
+ field :id, type: String, null: false
13
+ field :field_with_arguments, type: String, null: false do
14
+ argument :first, String, required: false
15
+ end
16
+ field :context_data, type: String, null: false
17
+
18
+ def context_data
19
+ context[:context_data]
20
+ end
21
+ end
22
+
23
+ class TestQuery < GraphQL::Schema::Object
24
+ field :dummy_value, String, null: false
25
+ end
26
+
27
+ class TestCreated < NulogyMessageBusProducer::BaseSubscription
28
+ field :foo, TestObject, null: false
29
+ field :foo_list, [TestObject], null: false
30
+ end
31
+
32
+ class TestSubscription < GraphQL::Schema::Object
33
+ field :test_created, subscription: TestCreated
34
+ end
35
+
36
+ class TestSchema < GraphQL::Schema
37
+ use GraphQL::Execution::Interpreter
38
+ use GraphQL::Analysis::AST
39
+ use NulogyMessageBusProducer::Subscriptions::PostgresTransport
40
+
41
+ query TestQuery
42
+ subscription TestSubscription
43
+
44
+ query_analyzer NulogyMessageBusProducer::Subscriptions::RiskySubscriptionBlocker
45
+ query_analyzer NulogyMessageBusProducer::Subscriptions::NoVariables
46
+ end
47
+ end
48
+ end
metadata CHANGED
@@ -1,57 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nulogy_message_bus_producer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nulogy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-14 00:00:00.000000000 Z
11
+ date: 2020-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: graphql
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5'
19
+ version: 1.11.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '5'
26
+ version: 1.11.4
27
27
  - !ruby/object:Gem::Dependency
28
- name: graphql
28
+ name: rails
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.9'
33
+ version: '5'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.9'
41
- - !ruby/object:Gem::Dependency
42
- name: strong_migrations
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 0.5.0
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 0.5.0
40
+ version: '5'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: pg
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +94,48 @@ dependencies:
108
94
  - - '='
109
95
  - !ruby/object:Gem::Version
110
96
  version: 13.0.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake-release
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.2.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 1.2.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: rdkafka
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec-json_expectations
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 2.2.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 2.2.0
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: rspec-rails
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -188,16 +216,21 @@ files:
188
216
  - README.md
189
217
  - Rakefile
190
218
  - db/migrate/20200611150212_create_public_subscriptions_and_events_tables.rb
219
+ - db/migrate/20201005150212_rename_tenant_id_and_public.rb
191
220
  - lib/nulogy_message_bus_producer.rb
192
221
  - lib/nulogy_message_bus_producer/application_record.rb
193
- - lib/nulogy_message_bus_producer/base_public_subscription.rb
222
+ - lib/nulogy_message_bus_producer/base_subscription.rb
194
223
  - lib/nulogy_message_bus_producer/config.rb
195
224
  - lib/nulogy_message_bus_producer/engine.rb
196
- - lib/nulogy_message_bus_producer/postgres_public_subscriptions.rb
197
- - lib/nulogy_message_bus_producer/public_subscription.rb
198
- - lib/nulogy_message_bus_producer/public_subscription_event.rb
225
+ - lib/nulogy_message_bus_producer/repopulate_replication_slots.rb
199
226
  - lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator.rb
227
+ - lib/nulogy_message_bus_producer/subscription.rb
228
+ - lib/nulogy_message_bus_producer/subscription_event.rb
229
+ - lib/nulogy_message_bus_producer/subscriptions/no_variables.rb
230
+ - lib/nulogy_message_bus_producer/subscriptions/postgres_transport.rb
231
+ - lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker.rb
200
232
  - lib/nulogy_message_bus_producer/version.rb
233
+ - lib/tasks/engine/message_bus_producer.rake
201
234
  - spec/dummy/Rakefile
202
235
  - spec/dummy/app/assets/config/manifest.js
203
236
  - spec/dummy/app/assets/javascripts/application.js
@@ -242,6 +275,7 @@ files:
242
275
  - spec/dummy/config/routes.rb
243
276
  - spec/dummy/config/secrets.yml
244
277
  - spec/dummy/config/spring.rb
278
+ - spec/dummy/db/migrate/20201005164116_create_active_storage_tables.active_storage.rb
245
279
  - spec/dummy/db/schema.rb
246
280
  - spec/dummy/log/development.log
247
281
  - spec/dummy/log/test.log
@@ -252,12 +286,20 @@ files:
252
286
  - spec/dummy/public/apple-touch-icon-precomposed.png
253
287
  - spec/dummy/public/apple-touch-icon.png
254
288
  - spec/dummy/public/favicon.ico
255
- - spec/integration/lib/graphql_api/postgres_public_subscriptions_spec.rb
256
- - spec/integration/lib/graphql_api/validators/subscriber_graphql_schema_validator_spec.rb
289
+ - spec/integration/lib/nulogy_message_bus_producer/repopulate_replication_slots_spec.rb
290
+ - spec/integration/lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator_spec.rb
291
+ - spec/integration/lib/nulogy_message_bus_producer/subscription_spec.rb
292
+ - spec/integration/lib/nulogy_message_bus_producer/subscriptions/no_variables_spec.rb
293
+ - spec/integration/lib/nulogy_message_bus_producer/subscriptions/postgres_transport_spec.rb
294
+ - spec/integration/lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker_spec.rb
257
295
  - spec/integration_spec_helper.rb
258
296
  - spec/spec_helper.rb
259
- - spec/unit/lib/graphql_api/models/public_subscription_spec.rb
260
- - spec/unit_spec_helper.rb
297
+ - spec/support/kafka.rb
298
+ - spec/support/kafka_connect.rb
299
+ - spec/support/spec_utils.rb
300
+ - spec/support/sql_helpers.rb
301
+ - spec/support/subscription_helpers.rb
302
+ - spec/support/test_graphql_schema.rb
261
303
  homepage: https://github.com/nulogy/message-bus/tree/master/gems/nulogy_message_bus_producer
262
304
  licenses: []
263
305
  metadata: {}
@@ -267,9 +309,9 @@ require_paths:
267
309
  - lib
268
310
  required_ruby_version: !ruby/object:Gem::Requirement
269
311
  requirements:
270
- - - ">="
312
+ - - "~>"
271
313
  - !ruby/object:Gem::Version
272
- version: '0'
314
+ version: '2.0'
273
315
  required_rubygems_version: !ruby/object:Gem::Requirement
274
316
  requirements:
275
317
  - - ">="
@@ -282,7 +324,6 @@ specification_version: 4
282
324
  summary: Nulogy's code for producing to the Message Bus
283
325
  test_files:
284
326
  - spec/spec_helper.rb
285
- - spec/unit/lib/graphql_api/models/public_subscription_spec.rb
286
327
  - spec/dummy/app/mailers/application_mailer.rb
287
328
  - spec/dummy/app/models/application_record.rb
288
329
  - spec/dummy/app/jobs/application_job.rb
@@ -335,9 +376,19 @@ test_files:
335
376
  - spec/dummy/public/apple-touch-icon-precomposed.png
336
377
  - spec/dummy/package.json
337
378
  - spec/dummy/db/schema.rb
379
+ - spec/dummy/db/migrate/20201005164116_create_active_storage_tables.active_storage.rb
338
380
  - spec/dummy/log/test.log
339
381
  - spec/dummy/log/development.log
340
382
  - spec/integration_spec_helper.rb
341
- - spec/integration/lib/graphql_api/postgres_public_subscriptions_spec.rb
342
- - spec/integration/lib/graphql_api/validators/subscriber_graphql_schema_validator_spec.rb
343
- - spec/unit_spec_helper.rb
383
+ - spec/integration/lib/nulogy_message_bus_producer/repopulate_replication_slots_spec.rb
384
+ - spec/integration/lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker_spec.rb
385
+ - spec/integration/lib/nulogy_message_bus_producer/subscriptions/postgres_transport_spec.rb
386
+ - spec/integration/lib/nulogy_message_bus_producer/subscriptions/no_variables_spec.rb
387
+ - spec/integration/lib/nulogy_message_bus_producer/subscription_spec.rb
388
+ - spec/integration/lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator_spec.rb
389
+ - spec/support/kafka_connect.rb
390
+ - spec/support/subscription_helpers.rb
391
+ - spec/support/kafka.rb
392
+ - spec/support/spec_utils.rb
393
+ - spec/support/sql_helpers.rb
394
+ - spec/support/test_graphql_schema.rb