mongoid-multitenancy-sidekiq 0.0.1 → 0.0.2

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.
data/.travis.yml CHANGED
@@ -3,6 +3,7 @@ rvm:
3
3
  - "1.9.3"
4
4
  services:
5
5
  - mongodb
6
+ - redis
6
7
 
7
8
  # uncomment this line if your project needs to run something other than `rake`:
8
9
  # script: bundle exec rspec spec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongoid-multitenancy-sidekiq (0.0.1)
4
+ mongoid-multitenancy-sidekiq (0.0.2)
5
5
  mongoid-multitenancy
6
6
  sidekiq (>= 2.11)
7
7
 
@@ -80,4 +80,5 @@ DEPENDENCIES
80
80
  mongoid-multitenancy-sidekiq!
81
81
  rake (~> 10.0)
82
82
  rspec (~> 2.12)
83
+ rspec-mocks (~> 2.12)
83
84
  yard (~> 0.8)
@@ -1,7 +1,10 @@
1
1
  module Mongoid::Multitenancy::Sidekiq::Middleware
2
2
  class Client
3
3
  def call(worker_class, item, queue)
4
- item['tenant'] ||= Mongoid::Multitenancy.current_tenant
4
+ if Mongoid::Multitenancy.current_tenant
5
+ item['tenant_class'] ||= Mongoid::Multitenancy.current_tenant.class.to_s
6
+ item['tenant_id'] ||= Mongoid::Multitenancy.current_tenant.id.to_s
7
+ end
5
8
  yield
6
9
  end
7
10
  end
@@ -1,8 +1,9 @@
1
1
  module Mongoid::Multitenancy::Sidekiq::Middleware
2
2
  class Server
3
3
  def call(worker_class, item, queue)
4
- if item['tenant']
5
- Mongoid::Multitenancy.with_tenant(item['tenant']) do
4
+ if item['tenant_id'] and item['tenant_class']
5
+ tenant = item['tenant_class'].constantize.find item['tenant_id']
6
+ Mongoid::Multitenancy.with_tenant(tenant) do
6
7
  yield
7
8
  end
8
9
  else
@@ -1,7 +1,7 @@
1
1
  module Mongoid
2
2
  module Multitenancy
3
3
  module Sidekiq
4
- VERSION = '0.0.1'
4
+ VERSION = '0.0.2'
5
5
  end
6
6
  end
7
7
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency('rake', '~> 10.0')
22
22
  spec.add_development_dependency('rspec', '~> 2.12')
23
+ spec.add_development_dependency('rspec-mocks', '~> 2.12')
23
24
  spec.add_development_dependency('yard', '~> 0.8')
24
25
  spec.add_development_dependency('database_cleaner', '~> 1.0')
25
26
 
@@ -1,43 +1,114 @@
1
1
  require 'spec_helper'
2
2
 
3
- class Tenant
4
- include Mongoid::Document
5
- end
6
-
7
- class User
8
- include Mongoid::Document
9
- include Mongoid::Multitenancy::Document
3
+ class FakeActor
4
+ def processor_done(*args)
5
+ nil
6
+ end
10
7
 
11
- tenant(:tenant, :optional => true)
8
+ def real_thread(*args)
9
+ nil
10
+ end
12
11
  end
13
12
 
14
- class UserCreatorWorker
13
+ class TestWorker
15
14
  include Sidekiq::Worker
16
15
 
17
16
  def perform
18
- User.create(tenant: Mongoid::Multitenancy.current_tenant)
19
17
  end
20
18
  end
21
19
 
22
- describe UserCreatorWorker do
23
- context 'when the current Tenant is set' do
24
- before do
25
- @current_tenant = Mongoid::Multitenancy.current_tenant = Tenant.create!
20
+ class Tenant
21
+ include Mongoid::Document
22
+ end
23
+
24
+ UnitOfWork = Struct.new(:queue, :message) do
25
+ def acknowledge
26
+ # nothing to do
27
+ end
28
+
29
+ def queue_name
30
+ queue
31
+ end
32
+
33
+ def requeue
34
+ # nothing to do
35
+ end
36
+ end
37
+
38
+
39
+ describe Mongoid::Multitenancy::Sidekiq::Middleware::Client do
40
+ describe '#call' do
41
+ context 'when Mongoid::Multitenancy.current_tenant is set' do
42
+ before do
43
+ Mongoid::Multitenancy.current_tenant = Tenant.create!
44
+ jid = TestWorker.perform_async
45
+ @job = Sidekiq::Queue.new.find_job(jid)
46
+ end
47
+
48
+ it 'adds both tenant class and tenant_id to the item message' do
49
+ expect(@job['tenant_class']).to eq Mongoid::Multitenancy.current_tenant.class.to_s
50
+ expect(@job['tenant_id']).to eq Mongoid::Multitenancy.current_tenant.id.to_s
51
+ end
26
52
  end
27
53
 
28
- it 'creates the User with the current tenant_id field' do
29
- UserCreatorWorker.perform_async
30
- User.where(tenant_id: @current_tenant.id).should have(1).items
54
+ context 'when Mongoid::Multitenancy.current_tenant is nil' do
55
+ before do
56
+ Mongoid::Multitenancy.current_tenant = nil
57
+ jid = TestWorker.perform_async
58
+ @job = Sidekiq::Queue.new.find_job(jid)
59
+ end
60
+
61
+ it 'does have neither tenant class nor tenant id to the item message' do
62
+ expect(@job['tenant_class']).to be_nil
63
+ expect(@job['tenant_id']).to be_nil
64
+ end
31
65
  end
32
66
  end
67
+ end
68
+
69
+ describe Mongoid::Multitenancy::Sidekiq::Middleware::Server do
70
+ before do
71
+ actor = FakeActor.new
72
+ @boss.stub(:async).and_return(actor)
73
+ end
33
74
 
34
- context 'when the Tenant is not set' do
35
- before { Mongoid::Multitenancy.current_tenant = nil }
75
+ describe '#call' do
76
+ context 'when the messsage has tenant_class and tenant_id' do
77
+ before do
78
+ @tenant1 = Tenant.create!
79
+ @tenant2 = Tenant.create!
80
+ Mongoid::Multitenancy.current_tenant = @tenant1
36
81
 
37
- it 'creates the User without the tenant_id field' do
38
- UserCreatorWorker.perform_async
39
- User.where(:tenant_id.ne => '', :tenant_id.exists => true).should have(0).items
40
- User.where(tenant_id: nil).should have(1).items
82
+ jid = TestWorker.perform_async
83
+ Mongoid::Multitenancy.current_tenant = @tenant2 #change the Tenant, but the worker should be starts with @tenant1
84
+
85
+ job = Sidekiq::Queue.new.find_job(jid)
86
+ msg = Sidekiq.dump_json(job.item)
87
+ @work = UnitOfWork.new('default', msg)
88
+ end
89
+
90
+ it 'yields the Worker with Mongoid::Multitenancy.with_tenant(@tenant1) block' do
91
+ Mongoid::Multitenancy.should_receive(:with_tenant).with(@tenant1)
92
+ @processor.process(@work)
93
+ end
94
+ end
95
+
96
+ context 'when the messsage does not have tenant_class and tenant_id' do
97
+ before do
98
+ Mongoid::Multitenancy.current_tenant = nil
99
+ jid = TestWorker.perform_async
100
+
101
+ Mongoid::Multitenancy.current_tenant = Tenant.create! #change the Tenant, but the worker should be starts without tenant
102
+
103
+ job = Sidekiq::Queue.new.find_job(jid)
104
+ msg = Sidekiq.dump_json(job.item)
105
+ @work = UnitOfWork.new('default', msg)
106
+ end
107
+
108
+ it 'does not yield the Worker with Mongoid::Multitenancy.with_tenant block' do
109
+ Mongoid::Multitenancy.should_not_receive(:with_tenant)
110
+ @processor.process(@work)
111
+ end
41
112
  end
42
113
  end
43
- end
114
+ end
data/spec/spec_helper.rb CHANGED
@@ -11,16 +11,29 @@ require 'rspec'
11
11
  require 'mongoid'
12
12
  require 'mongoid-multitenancy'
13
13
  require 'database_cleaner'
14
+
15
+ require 'celluloid'
16
+ Celluloid.logger = nil
17
+
18
+ require 'sidekiq'
19
+ require 'sidekiq/cli'
20
+ require 'sidekiq/processor'
21
+ require 'sidekiq/util'
14
22
  require 'mongoid-multitenancy-sidekiq'
15
- require 'sidekiq/testing/inline'
16
23
 
17
24
 
25
+ Sidekiq.logger.level = Logger::ERROR
26
+
27
+ require 'sidekiq/redis_connection'
28
+ REDIS = Sidekiq::RedisConnection.create(:url => "redis://localhost/15", :namespace => 'testfoo')
29
+
18
30
  Mongoid.configure do |config|
19
31
  config.connect_to "mongoid_multitenancy_sidekiq"
20
32
  end
21
33
 
22
34
  DatabaseCleaner.orm = 'mongoid'
23
35
 
36
+ Mongoid::Multitenancy::Sidekiq::Middleware.run
24
37
 
25
38
  RSpec.configure do |config|
26
39
  config.include Mongoid::Matchers
@@ -31,6 +44,13 @@ RSpec.configure do |config|
31
44
 
32
45
  config.before(:each) do
33
46
  DatabaseCleaner.start
47
+
48
+ Celluloid.boot
49
+ @boss = Object.new
50
+ @processor = ::Sidekiq::Processor.new(@boss)
51
+
52
+ Sidekiq.redis = REDIS
53
+ Sidekiq.redis { |c| c.flushdb }
34
54
  end
35
55
 
36
56
  config.after(:each) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-multitenancy-sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-22 00:00:00.000000000 Z
12
+ date: 2013-09-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: '2.12'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec-mocks
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '2.12'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.12'
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: yard
48
64
  requirement: !ruby/object:Gem::Requirement