mongoid-multitenancy-sidekiq 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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