thermos 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,32 +11,30 @@
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
13
  ActiveRecord::Schema.define(version: 2016_03_26_174530) do
14
-
15
- create_table "categories", force: :cascade do |t|
16
- t.string "name"
17
- t.integer "store_id"
18
- t.datetime "created_at", null: false
19
- t.datetime "updated_at", null: false
14
+ create_table 'categories', force: :cascade do |t|
15
+ t.string 'name'
16
+ t.integer 'store_id'
17
+ t.datetime 'created_at', null: false
18
+ t.datetime 'updated_at', null: false
20
19
  end
21
20
 
22
- create_table "category_items", force: :cascade do |t|
23
- t.string "name"
24
- t.integer "category_id"
25
- t.integer "product_id"
26
- t.datetime "created_at", null: false
27
- t.datetime "updated_at", null: false
21
+ create_table 'category_items', force: :cascade do |t|
22
+ t.string 'name'
23
+ t.integer 'category_id'
24
+ t.integer 'product_id'
25
+ t.datetime 'created_at', null: false
26
+ t.datetime 'updated_at', null: false
28
27
  end
29
28
 
30
- create_table "products", force: :cascade do |t|
31
- t.string "name"
32
- t.datetime "created_at", null: false
33
- t.datetime "updated_at", null: false
29
+ create_table 'products', force: :cascade do |t|
30
+ t.string 'name'
31
+ t.datetime 'created_at', null: false
32
+ t.datetime 'updated_at', null: false
34
33
  end
35
34
 
36
- create_table "stores", force: :cascade do |t|
37
- t.string "name"
38
- t.datetime "created_at", null: false
39
- t.datetime "updated_at", null: false
35
+ create_table 'stores', force: :cascade do |t|
36
+ t.string 'name'
37
+ t.datetime 'created_at', null: false
38
+ t.datetime 'updated_at', null: false
40
39
  end
41
-
42
40
  end
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ class FilterTest < ActiveSupport::TestCase
4
+ self.use_transactional_tests = true
5
+ teardown :clear_cache
6
+
7
+ test 'allows filtering for which records should be rebuilt' do
8
+ mock = Minitest::Mock.new
9
+ category = categories(:baseball)
10
+ filter = ->(model) { model.name.match('ball') }
11
+ Thermos.fill(
12
+ key: 'key',
13
+ model: Category,
14
+ lookup_key: 'name',
15
+ filter: filter,
16
+ ) { |name| mock.call(name) }
17
+
18
+ mock.expect(:call, 1, ['basketball'])
19
+ category.update!(name: 'basketball')
20
+ mock.verify
21
+
22
+ mock.expect(:call, 1, ['hockey'])
23
+ category.update!(name: 'hockey')
24
+ assert_raises(MockExpectationError) { mock.verify }
25
+ end
26
+
27
+ test 'allows filtering based on the beverage when multiple beverages are configured and only one of them has a filter' do
28
+ mock = Minitest::Mock.new
29
+ store = stores(:supermarket)
30
+ category = categories(:baseball)
31
+
32
+ # filter method specific to one model
33
+ # store.ball? doesn't exist
34
+ filter = ->(model) { model.ball? }
35
+
36
+ Thermos.fill(
37
+ key: 'key',
38
+ model: Category,
39
+ lookup_key: 'name',
40
+ filter: filter,
41
+ ) { |name| mock.call(name) }
42
+
43
+ Thermos.fill(key: 'key_2', model: Store, lookup_key: 'name') do |name|
44
+ mock.call(name)
45
+ end
46
+
47
+ mock.expect(:call, 1, ['groceries'])
48
+ store.update!(name: 'groceries')
49
+ assert_equal 1, Thermos.drink(key: 'key_2', id: 'groceries')
50
+ mock.verify
51
+ end
52
+ end
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ class QueueTest < ActiveSupport::TestCase
4
+ include ActiveJob::TestHelper
5
+ self.use_transactional_tests = true
6
+ teardown :clear_cache
7
+
8
+ test 'uses the default background queue by default' do
9
+ mock = Minitest::Mock.new
10
+ category = categories(:baseball)
11
+
12
+ Thermos.fill(key: 'key', model: Category) { |id| mock.call(id) }
13
+
14
+ mock.expect(:call, 1, [category.id])
15
+ assert_performed_with(job: Thermos::RebuildCacheJob, queue: 'default') do
16
+ category.update!(name: 'foo')
17
+ end
18
+ mock.verify
19
+ end
20
+
21
+ test 'can specify a preferred queue name for the cache filling' do
22
+ mock = Minitest::Mock.new
23
+ category = categories(:baseball)
24
+
25
+ Thermos.fill(key: 'key', model: Category, queue: 'low_priority') do |id|
26
+ mock.call(id)
27
+ end
28
+
29
+ mock.expect(:call, 1, [category.id])
30
+ assert_performed_with(
31
+ job: Thermos::RebuildCacheJob,
32
+ queue: 'low_priority',
33
+ ) { category.update!(name: 'foo') }
34
+ mock.verify
35
+ end
36
+ end
data/test/test_helper.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  # Configure Rails Environment
2
- ENV["RAILS_ENV"] = "test"
2
+ ENV['RAILS_ENV'] = 'test'
3
3
 
4
- require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
5
- ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
6
- require "rails/test_help"
4
+ require File.expand_path('../../test/dummy/config/environment.rb', __FILE__)
5
+ ActiveRecord::Migrator.migrations_paths = [
6
+ File.expand_path('../../test/dummy/db/migrate', __FILE__),
7
+ ]
8
+ require 'rails/test_help'
7
9
 
8
10
  # Filter out Minitest backtrace while allowing backtrace from other libraries
9
11
  # to be shown.
@@ -15,9 +17,17 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
15
17
 
16
18
  # Load fixtures from the engine
17
19
  if ActiveSupport::TestCase.respond_to?(:fixture_path=)
18
- ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
19
- ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
20
+ ActiveSupport::TestCase.fixture_path =
21
+ File.expand_path('../fixtures', __FILE__)
22
+ ActionDispatch::IntegrationTest.fixture_path =
23
+ ActiveSupport::TestCase.fixture_path
20
24
  ActiveSupport::TestCase.fixtures :all
21
25
  end
22
26
 
23
27
  ActiveJob::Base.queue_adapter = :inline
28
+ ActiveSupport.test_order = :random
29
+
30
+ def clear_cache
31
+ Thermos::BeverageStorage.instance.empty
32
+ Rails.cache.clear
33
+ end