multi-tenant-support 1.2.0 → 1.3.0

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
  SHA256:
3
- metadata.gz: 9834d4e3e978120e9a85d8da767d2079a34c416086557b84c4e54730819a1ffb
4
- data.tar.gz: 41e2d934baa4668efc23bddb8d76dbb4a5b759ae4103f172c71b9406bc08c80d
3
+ metadata.gz: dce423fece46127c6f8f4f83f53b738524be0c7c84173d4aff9b02f51c077cae
4
+ data.tar.gz: d8e4328c0e0338831065b54bd38317c761af13a1b21025e2d98b14bcb20ac136
5
5
  SHA512:
6
- metadata.gz: fc6ba9df8591e04abcc454981b15435261708ab23c39f54bcf9d321e362c8e631c5d74aa35c29a81030da7215b2e96e868acca238318f98a656ad38de37e6028
7
- data.tar.gz: bdf08283a7363e65198a8de9d6ce1039886377d85870b7da13938cfe05c4d66d09c6281d743e6f9b6f8cd0792ae32cd218ea3513c9d21f8570318d74e797415e
6
+ metadata.gz: 46a70af78f3fb46731e8e5a989d3816d999eee75e17f13db11e111a18b7923549904621a787511455e6301234117d06a77a3df82f31c041c5f2930a7e39d1396
7
+ data.tar.gz: 18b80a4ca7dbbb0e24976d0748699abde53c7dfc00b370bcb2d44222c8b4c1990d6ad728073da5f08ffd7512f2d9bb67d1a1c369b0b717ad94e14c12f6bca26a
data/README.md CHANGED
@@ -237,6 +237,12 @@ MultiTenantSupport.under_tenant amazon do
237
237
  end
238
238
  ```
239
239
 
240
+ ### Set current tenant global
241
+
242
+ ```ruby
243
+ MultiTenantSupport::Current.tenant_account = account
244
+ ```
245
+
240
246
  ### Disallow read across tenant by default
241
247
 
242
248
  This gem disallow read across tenant by default. You can check current state through:
@@ -329,6 +335,44 @@ Console does not allow read across tenant by default. But you have several ways
329
335
  $ irb(main):001:0> MultiTenantSupport.allow_read_across_tenant
330
336
  ```
331
337
 
338
+ ## Testing
339
+ ### Minitest (Rails default)
340
+
341
+ ```ruby
342
+ # test/test_helper.rb
343
+ require 'multi_tenant_support/minitet'
344
+ ```
345
+ ### RSpec (with Capybara)
346
+
347
+ ```ruby
348
+ # spec/rails_helper.rb or spec/spec_helper.rb
349
+ require 'multi_tenant_support/rspec'
350
+ ```
351
+
352
+ Above code will make sure the `MultiTenantSupport.current_tenant` won't accidentally be reset during integration and system tests. For example:
353
+
354
+ With above testing requre code
355
+
356
+ ```ruby
357
+ # Integration test
358
+ test "a integration test" do
359
+ host! "apple.example.com"
360
+
361
+ assert_no_changes "MultiTenantSupport.current_tenant" do
362
+ get users_path
363
+ end
364
+ end
365
+
366
+ # System test
367
+ test "a system test" do
368
+ Capybara.app_host = "http://apple.example.com"
369
+
370
+ assert_no_changes "MultiTenantSupport.current_tenant" do
371
+ visit users_path
372
+ end
373
+ end
374
+ ```
375
+
332
376
  ## Code Example
333
377
 
334
378
  ### Database Schema
@@ -0,0 +1,7 @@
1
+ require_relative "./test/integration"
2
+ require_relative "./test/system"
3
+ require_relative "./test/capybara"
4
+
5
+ ActionDispatch::IntegrationTest.prepend(MultiTenantSupport::Test::Integration)
6
+ ActionDispatch::SystemTestCase.prepend(MultiTenantSupport::Test::System)
7
+ Capybara::Node::Element.prepend(MultiTenantSupport::Test::Capybara)
@@ -0,0 +1,13 @@
1
+ require_relative "./test/integration"
2
+ require_relative "./test/system"
3
+ require_relative "./test/capybara"
4
+
5
+ RSpec.configure do |config|
6
+ config.include MultiTenantSupport::Test::Integration, type: :request
7
+ config.include MultiTenantSupport::Test::Integration, type: :controller
8
+
9
+ config.include MultiTenantSupport::Test::System, type: :system
10
+ config.include MultiTenantSupport::Test::System, type: :feature
11
+ end
12
+
13
+ Capybara::Node::Element.prepend(MultiTenantSupport::Test::Capybara)
@@ -0,0 +1,57 @@
1
+ module MultiTenantSupport
2
+ module Test
3
+ module Capybara
4
+
5
+ def set(value, **options)
6
+ keep_context_tenant_unchange do
7
+ super(value, **options)
8
+ end
9
+ end
10
+
11
+ def select_option(wait: nil)
12
+ keep_context_tenant_unchange do
13
+ super(wait: wait)
14
+ end
15
+ end
16
+
17
+ def unselect_option(wait: nil)
18
+ keep_context_tenant_unchange do
19
+ super(wait: wait)
20
+ end
21
+ end
22
+
23
+ def perform_click_action(keys, wait: nil, **options)
24
+ keep_context_tenant_unchange do
25
+ super
26
+ end
27
+ end
28
+
29
+ def trigger(event)
30
+ keep_context_tenant_unchange do
31
+ super
32
+ end
33
+ end
34
+
35
+ def evaluate_script(script, *args)
36
+ keep_context_tenant_unchange do
37
+ super
38
+ end
39
+ end
40
+
41
+ def evaluate_async_script(script, *args)
42
+ keep_context_tenant_unchange do
43
+ super
44
+ end
45
+ end
46
+
47
+ def keep_context_tenant_unchange
48
+ _current_tenant = MultiTenantSupport::Current.tenant_account
49
+ MultiTenantSupport::Current.tenant_account = nil # Simulate real circumstance
50
+ yield
51
+ ensure
52
+ MultiTenantSupport::Current.tenant_account = _current_tenant
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,29 @@
1
+ module MultiTenantSupport
2
+ module Test
3
+ module Integration
4
+
5
+ %i[get post patch put delete head options].each do |method|
6
+ define_method method do |path, **args|
7
+ keep_context_tenant_unchange do
8
+ super(path, **args)
9
+ end
10
+ end
11
+ end
12
+
13
+ def follow_redirect(**args)
14
+ keep_context_tenant_unchange do
15
+ super(**args)
16
+ end
17
+ end
18
+
19
+ def keep_context_tenant_unchange
20
+ _current_tenant = MultiTenantSupport::Current.tenant_account
21
+ MultiTenantSupport::Current.tenant_account = nil # Simulate real circumstance
22
+ yield
23
+ ensure
24
+ MultiTenantSupport::Current.tenant_account = _current_tenant
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,38 @@
1
+ module MultiTenantSupport
2
+ module Test
3
+ module System
4
+
5
+ %i[
6
+ visit refresh click_on go_back go_forward
7
+ check choose click_button click_link
8
+ fill_in uncheck check unselect select
9
+ execute_script evaluate_script
10
+ ].each do |method|
11
+ if RUBY_VERSION >= '2.7'
12
+ class_eval <<~METHOD, __FILE__, __LINE__ + 1
13
+ def #{method}(...)
14
+ keep_context_tenant_unchange do
15
+ super(...)
16
+ end
17
+ end
18
+ METHOD
19
+ else
20
+ define_method method do |*args, &block|
21
+ keep_context_tenant_unchange do
22
+ super(*args, &block)
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ def keep_context_tenant_unchange
29
+ _current_tenant = MultiTenantSupport::Current.tenant_account
30
+ MultiTenantSupport::Current.tenant_account = nil # Simulate real circumstance
31
+ yield
32
+ ensure
33
+ MultiTenantSupport::Current.tenant_account = _current_tenant
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  module MultiTenantSupport
2
- VERSION = '1.2.0'
2
+ VERSION = '1.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi-tenant-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hopper Gee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-07 00:00:00.000000000 Z
11
+ date: 2021-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -51,8 +51,13 @@ files:
51
51
  - lib/multi_tenant_support/current.rb
52
52
  - lib/multi_tenant_support/errors.rb
53
53
  - lib/multi_tenant_support/find_tenant_account.rb
54
+ - lib/multi_tenant_support/minitest.rb
54
55
  - lib/multi_tenant_support/railtie.rb
56
+ - lib/multi_tenant_support/rspec.rb
55
57
  - lib/multi_tenant_support/sidekiq.rb
58
+ - lib/multi_tenant_support/test/capybara.rb
59
+ - lib/multi_tenant_support/test/integration.rb
60
+ - lib/multi_tenant_support/test/system.rb
56
61
  - lib/multi_tenant_support/version.rb
57
62
  - lib/tasks/multi_tenant_support_tasks.rake
58
63
  homepage: https://github.com/hoppergee/multi-tenant-support