workarea-core 3.5.8 → 3.5.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/workarea/application_controller.rb +0 -5
- data/app/controllers/workarea/authentication.rb +6 -0
- data/app/helpers/workarea/i18n_helper.rb +1 -1
- data/app/middleware/workarea/application_middleware.rb +18 -0
- data/app/models/workarea/search/storefront/category_query.rb +2 -2
- data/app/models/workarea/user/password_reset.rb +3 -1
- data/app/queries/workarea/search/product_entries.rb +7 -5
- data/app/workers/workarea/bulk_index_admin.rb +1 -1
- data/app/workers/workarea/bulk_index_products.rb +3 -2
- data/app/workers/workarea/bulk_index_searches.rb +4 -4
- data/app/workers/workarea/synchronize_user_metrics.rb +12 -2
- data/lib/workarea/cache.rb +1 -1
- data/lib/workarea/core.rb +1 -0
- data/lib/workarea/elasticsearch/document.rb +15 -8
- data/lib/workarea/ext/freedom_patches/mongoid_localized_defaults.rb +25 -0
- data/lib/workarea/geolocation.rb +1 -9
- data/lib/workarea/version.rb +1 -1
- data/test/helpers/workarea/i18n_helper_test.rb +2 -0
- data/test/integration/workarea/authentication_test.rb +10 -0
- data/test/integration/workarea/cache_varies_integration_test.rb +31 -0
- data/test/lib/workarea/elasticsearch/document_test.rb +20 -0
- data/test/lib/workarea/ext/freedom_patches/mongoid_localized_defaults_test.rb +25 -0
- data/test/lib/workarea/geolocation_test.rb +3 -3
- data/test/models/workarea/segment/rules/geolocation_test.rb +9 -7
- data/test/models/workarea/user/password_reset_test.rb +12 -4
- data/test/queries/workarea/search/product_entries_test.rb +11 -0
- data/test/queries/workarea/search/product_search_test.rb +13 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 277c3f21e9ad08940c1f72830fd89f066987b104d019cb45b670774dc31b91e2
|
4
|
+
data.tar.gz: a256669db5f584453ad3103365446f5cb885bfa55bae6b68240b07782775b8aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97608d2f8240e4e21862d986599f8a6cbe4f5e461dc0bbb027203fff9d36b2d74f6477f27a9a652a893690146cfcaac3347bd0e263084f85af6438649d4a9c52
|
7
|
+
data.tar.gz: 2affa2d8c642e5f47f690d29ccf01629efaaa41f2963d1b16b9a02a3e690ceb57a22447f0e9ebbf7552973de4b817f6d6f80154a76cca01bc8065e6bfa5620ed
|
@@ -7,7 +7,6 @@ module Workarea
|
|
7
7
|
|
8
8
|
protect_from_forgery
|
9
9
|
|
10
|
-
before_action :set_locale
|
11
10
|
after_action :set_flash_header
|
12
11
|
|
13
12
|
# Cache templates within the scope of a request for development
|
@@ -33,10 +32,6 @@ module Workarea
|
|
33
32
|
|
34
33
|
private
|
35
34
|
|
36
|
-
def set_locale
|
37
|
-
I18n.locale = params[:locale] || I18n.default_locale
|
38
|
-
end
|
39
|
-
|
40
35
|
def set_flash_header
|
41
36
|
messages = flash.map { |k, v| [k, ERB::Util.h(v)] }
|
42
37
|
response.headers['X-Flash-Messages'] = Hash[messages].to_json
|
@@ -89,6 +89,12 @@ module Workarea
|
|
89
89
|
else
|
90
90
|
uri = URI.parse(params[:return_to])
|
91
91
|
|
92
|
+
if I18n.locale != I18n.default_locale
|
93
|
+
query_hash = Rack::Utils.parse_nested_query(uri.query)
|
94
|
+
query_hash['locale'] ||= I18n.locale
|
95
|
+
uri.query = query_hash.to_query
|
96
|
+
end
|
97
|
+
|
92
98
|
if uri.fragment.present?
|
93
99
|
"#{uri.request_uri}##{uri.fragment}"
|
94
100
|
else
|
@@ -8,6 +8,7 @@ module Workarea
|
|
8
8
|
request = Rack::Request.new(env)
|
9
9
|
return @app.call(env) if request.path =~ /(jpe?g|png|ico|gif|css|js|svg)$/
|
10
10
|
|
11
|
+
set_locale(env, request)
|
11
12
|
setup_environment(env, request)
|
12
13
|
set_segment_request_headers(env)
|
13
14
|
status, headers, body = @app.call(env)
|
@@ -16,6 +17,10 @@ module Workarea
|
|
16
17
|
[status, headers, body]
|
17
18
|
end
|
18
19
|
|
20
|
+
def set_locale(env, request)
|
21
|
+
I18n.locale = locale_from_request(env, request) || I18n.default_locale
|
22
|
+
end
|
23
|
+
|
19
24
|
def setup_environment(env, request)
|
20
25
|
env['workarea.visit'] = Visit.new(env)
|
21
26
|
env['workarea.cache_varies'] = Cache::Varies.new(env['workarea.visit']).to_s
|
@@ -37,6 +42,19 @@ module Workarea
|
|
37
42
|
|
38
43
|
private
|
39
44
|
|
45
|
+
def locale_from_request(env, request)
|
46
|
+
return request.params['locale'] if request.params['locale'].present?
|
47
|
+
|
48
|
+
env_with_method = env.merge(
|
49
|
+
method: request.params[Rack::MethodOverride::METHOD_OVERRIDE_PARAM_KEY].presence ||
|
50
|
+
request.request_method
|
51
|
+
)
|
52
|
+
Rails.application.routes.recognize_path(request.path, env_with_method)[:locale]
|
53
|
+
|
54
|
+
rescue ActionController::RoutingError
|
55
|
+
# Return nil since we can't get locale out of this request
|
56
|
+
end
|
57
|
+
|
40
58
|
def normalize_segment_ids(visit)
|
41
59
|
visit.applied_segments.map(&:id).sort.join(',')
|
42
60
|
end
|
@@ -113,7 +113,7 @@ module Workarea
|
|
113
113
|
id: category.id,
|
114
114
|
release_id: 'live',
|
115
115
|
changeset_release_ids: changesets.map(&:release_id).uniq,
|
116
|
-
query: Categorization.new(rules: category.product_rules).query
|
116
|
+
query: Workarea::Search::Categorization.new(rules: category.product_rules).query
|
117
117
|
}
|
118
118
|
|
119
119
|
Storefront.current_index.save(document, type: 'category')
|
@@ -130,7 +130,7 @@ module Workarea
|
|
130
130
|
document = {
|
131
131
|
id: "#{category.id}-#{changeset.release_id}",
|
132
132
|
release_id: changeset.release_id,
|
133
|
-
query: Categorization.new(rules: category.product_rules).query
|
133
|
+
query: Workarea::Search::Categorization.new(rules: category.product_rules).query
|
134
134
|
}
|
135
135
|
|
136
136
|
Storefront.current_index.save(document, type: 'category')
|
@@ -4,7 +4,7 @@ module Workarea
|
|
4
4
|
include ApplicationDocument
|
5
5
|
include UrlToken
|
6
6
|
|
7
|
-
belongs_to :user, class_name: 'Workarea::User'
|
7
|
+
belongs_to :user, class_name: 'Workarea::User', index: true
|
8
8
|
|
9
9
|
index(
|
10
10
|
{ created_at: 1 },
|
@@ -14,6 +14,8 @@ module Workarea
|
|
14
14
|
def self.setup!(email)
|
15
15
|
user = User.find_by_email(email)
|
16
16
|
return nil unless user
|
17
|
+
|
18
|
+
where(user_id: user.id).destroy_all
|
17
19
|
create!(user: user)
|
18
20
|
end
|
19
21
|
|
@@ -17,15 +17,17 @@ module Workarea
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def live_entries
|
20
|
-
@live_entries ||= @products.
|
21
|
-
index_entries_for(product.without_release)
|
20
|
+
@live_entries ||= @products.reduce([]) do |memo, product|
|
21
|
+
memo + Array.wrap(index_entries_for(product.without_release))
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
def release_entries
|
26
|
-
@release_entries ||= @products.
|
27
|
-
ProductReleases.new(product).releases
|
28
|
-
|
26
|
+
@release_entries ||= @products.reduce([]) do |results, product|
|
27
|
+
releases = ProductReleases.new(product).releases
|
28
|
+
|
29
|
+
results + releases.reduce([]) do |memo, release|
|
30
|
+
memo + Array.wrap(index_entries_for(product.in_release(release)))
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
@@ -15,8 +15,9 @@ module Workarea
|
|
15
15
|
return if products.blank?
|
16
16
|
products = Array.wrap(products)
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
Search::Storefront.bulk do
|
19
|
+
Search::ProductEntries.new(products).map(&:as_bulk_document)
|
20
|
+
end
|
20
21
|
|
21
22
|
Catalog::Product.in(id: products.map(&:id)).set(last_indexed_at: Time.current)
|
22
23
|
end
|
@@ -18,11 +18,11 @@ module Workarea
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def perform_by_models(searches)
|
21
|
-
|
22
|
-
|
21
|
+
Search::Storefront.bulk do
|
22
|
+
searches.map do |model|
|
23
|
+
Search::Storefront::Search.new(model).as_bulk_document
|
24
|
+
end
|
23
25
|
end
|
24
|
-
|
25
|
-
Search::Storefront.bulk(documents)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -19,8 +19,18 @@ module Workarea
|
|
19
19
|
|
20
20
|
def perform(id)
|
21
21
|
user = User.find(id)
|
22
|
-
|
23
|
-
|
22
|
+
|
23
|
+
Metrics::User.collection.update_one(
|
24
|
+
{ _id: user.email },
|
25
|
+
{
|
26
|
+
'$set' => {
|
27
|
+
admin: user.admin?,
|
28
|
+
tags: user.tags,
|
29
|
+
updated_at: Time.current.utc
|
30
|
+
}
|
31
|
+
},
|
32
|
+
upsert: true
|
33
|
+
)
|
24
34
|
end
|
25
35
|
end
|
26
36
|
end
|
data/lib/workarea/cache.rb
CHANGED
data/lib/workarea/core.rb
CHANGED
@@ -131,6 +131,7 @@ require 'workarea/ext/freedom_patches/dragonfly_callable_url_host'
|
|
131
131
|
require 'workarea/ext/freedom_patches/active_support_duration'
|
132
132
|
require 'workarea/ext/freedom_patches/premailer'
|
133
133
|
require 'workarea/ext/freedom_patches/referer_parser'
|
134
|
+
require 'workarea/ext/freedom_patches/mongoid_localized_defaults'
|
134
135
|
require 'workarea/ext/mongoid/list_field'
|
135
136
|
require 'workarea/ext/mongoid/each_by'
|
136
137
|
require 'workarea/ext/mongoid/except'
|
@@ -44,22 +44,27 @@ module Workarea
|
|
44
44
|
|
45
45
|
def save(document, options = {})
|
46
46
|
options = options.merge(type: type)
|
47
|
-
|
47
|
+
current_index.save(document, options)
|
48
48
|
end
|
49
49
|
|
50
|
-
def bulk(documents, options = {})
|
50
|
+
def bulk(documents = [], options = {})
|
51
51
|
options = options.merge(type: type)
|
52
|
-
|
52
|
+
|
53
|
+
if block_given?
|
54
|
+
I18n.for_each_locale { current_index.bulk(Array.wrap(yield), options) }
|
55
|
+
else
|
56
|
+
current_index.bulk(documents, options)
|
57
|
+
end
|
53
58
|
end
|
54
59
|
|
55
60
|
def update(document, options = {})
|
56
61
|
options = options.merge(type: type)
|
57
|
-
|
62
|
+
current_index.update(document, options)
|
58
63
|
end
|
59
64
|
|
60
65
|
def delete(id, options = {})
|
61
66
|
options = options.merge(type: type)
|
62
|
-
|
67
|
+
current_index.delete(id, options)
|
63
68
|
end
|
64
69
|
|
65
70
|
def count(query = nil, options = {})
|
@@ -97,12 +102,14 @@ module Workarea
|
|
97
102
|
end
|
98
103
|
|
99
104
|
def save(options = {})
|
100
|
-
|
101
|
-
|
105
|
+
I18n.for_each_locale do
|
106
|
+
document = as_document.merge(Serializer.serialize(model))
|
107
|
+
self.class.save(document, options)
|
108
|
+
end
|
102
109
|
end
|
103
110
|
|
104
111
|
def destroy(options = {})
|
105
|
-
self.class.delete(id, options)
|
112
|
+
I18n.for_each_locale { self.class.delete(id, options) }
|
106
113
|
end
|
107
114
|
end
|
108
115
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Fields
|
3
|
+
module LocalizedDefaults
|
4
|
+
def create_accessors(name, meth, options = {})
|
5
|
+
super
|
6
|
+
|
7
|
+
if options[:localize]
|
8
|
+
field = fields[name]
|
9
|
+
|
10
|
+
define_method meth do |*args|
|
11
|
+
result = super(*args)
|
12
|
+
return result unless result.nil?
|
13
|
+
|
14
|
+
default_name = field.send(:default_name)
|
15
|
+
return send(default_name) if respond_to?(default_name)
|
16
|
+
|
17
|
+
field.default_val
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
ClassMethods.prepend(LocalizedDefaults)
|
24
|
+
end
|
25
|
+
end
|
data/lib/workarea/geolocation.rb
CHANGED
@@ -57,15 +57,7 @@ module Workarea
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def names
|
60
|
-
@names ||= [
|
61
|
-
postal_code,
|
62
|
-
city,
|
63
|
-
region,
|
64
|
-
subdivision&.name,
|
65
|
-
country&.alpha2,
|
66
|
-
country&.alpha3,
|
67
|
-
country&.name
|
68
|
-
].reject(&:blank?)
|
60
|
+
@names ||= [postal_code, city, subdivision&.name, country&.name].reject(&:blank?)
|
69
61
|
end
|
70
62
|
|
71
63
|
private
|
data/lib/workarea/version.rb
CHANGED
@@ -7,12 +7,14 @@ module Workarea
|
|
7
7
|
params[:controller] = 'controller'
|
8
8
|
params[:action] = 'action'
|
9
9
|
params[:foo] = 'bar'
|
10
|
+
params[:locale] = 'es'
|
10
11
|
|
11
12
|
assert_includes(switch_locale_fields, 'foo')
|
12
13
|
assert_includes(switch_locale_fields, 'bar')
|
13
14
|
refute_includes(switch_locale_fields, 'utf8')
|
14
15
|
refute_includes(switch_locale_fields, 'controller')
|
15
16
|
refute_includes(switch_locale_fields, 'action')
|
17
|
+
refute_includes(switch_locale_fields, 'locale')
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -185,5 +185,15 @@ module Workarea
|
|
185
185
|
get '/test_logout'
|
186
186
|
refute(cookies[:email].present?)
|
187
187
|
end
|
188
|
+
|
189
|
+
def test_ensures_locale_passthrough_for_return_to
|
190
|
+
set_locales(available: [:en, :es], default: :en, current: :en)
|
191
|
+
|
192
|
+
get '/login_required', params: { locale: 'es', return_to: '/blah?foo=bar' }
|
193
|
+
get '/test_login', params: { user_id: @user.id }
|
194
|
+
assert(response.redirect?)
|
195
|
+
assert_match('locale=es', response.location)
|
196
|
+
assert_match('foo=bar', response.location)
|
197
|
+
end
|
188
198
|
end
|
189
199
|
end
|
@@ -25,6 +25,10 @@ module Workarea
|
|
25
25
|
render plain: session[:foo].presence || 'nil'
|
26
26
|
end
|
27
27
|
|
28
|
+
def varies
|
29
|
+
render plain: request.env['workarea.cache_varies']
|
30
|
+
end
|
31
|
+
|
28
32
|
def current_user
|
29
33
|
nil
|
30
34
|
end
|
@@ -34,6 +38,11 @@ module Workarea
|
|
34
38
|
Rails.application.routes.prepend do
|
35
39
|
post 'cache_varies_test_set_session', to: 'workarea/cache_varies_integration_test/caching#set_session'
|
36
40
|
get 'cache_varies_test_foo', to: 'workarea/cache_varies_integration_test/caching#foo'
|
41
|
+
|
42
|
+
scope '(:locale)', constraints: Workarea::I18n.routes_constraint do
|
43
|
+
get 'cache_varies_test_varies', to: 'workarea/cache_varies_integration_test/caching#varies'
|
44
|
+
patch 'cache_varies_test_varies', to: 'workarea/cache_varies_integration_test/caching#varies'
|
45
|
+
end
|
37
46
|
end
|
38
47
|
|
39
48
|
Rails.application.reload_routes!
|
@@ -74,5 +83,27 @@ module Workarea
|
|
74
83
|
assert_equal('baz', response.body)
|
75
84
|
assert_equal('fresh', response.headers['X-Rack-Cache'])
|
76
85
|
end
|
86
|
+
|
87
|
+
def test_varies_includes_locale
|
88
|
+
set_locales(available: [:en, :es], default: :en, current: :en)
|
89
|
+
|
90
|
+
get '/cache_varies_test_varies'
|
91
|
+
assert_includes(response.body, 'en')
|
92
|
+
|
93
|
+
get '/cache_varies_test_varies', params: { locale: 'es' }
|
94
|
+
assert_includes(response.body, 'es')
|
95
|
+
|
96
|
+
get '/es/cache_varies_test_varies'
|
97
|
+
assert_includes(response.body, 'es')
|
98
|
+
|
99
|
+
patch '/cache_varies_test_varies'
|
100
|
+
assert_includes(response.body, 'en')
|
101
|
+
|
102
|
+
patch '/cache_varies_test_varies', params: { locale: 'es' }
|
103
|
+
assert_includes(response.body, 'es')
|
104
|
+
|
105
|
+
patch '/es/cache_varies_test_varies'
|
106
|
+
assert_includes(response.body, 'es')
|
107
|
+
end
|
77
108
|
end
|
78
109
|
end
|
@@ -67,6 +67,26 @@ module Workarea
|
|
67
67
|
assert_equal({ 'id' => '1' }, results.first['_source'])
|
68
68
|
end
|
69
69
|
|
70
|
+
def test_bulk_with_block
|
71
|
+
set_locales(available: [:en, :es], default: :en, current: :en)
|
72
|
+
Foo.bulk { { id: I18n.locale.to_s, bulk_action: 'index' } }
|
73
|
+
|
74
|
+
find_results = -> do
|
75
|
+
Foo
|
76
|
+
.current_index
|
77
|
+
.search({ query: { match_all: {} } }, type: 'foo')
|
78
|
+
.dig('hits', 'hits')
|
79
|
+
end
|
80
|
+
|
81
|
+
I18n.locale = :en
|
82
|
+
assert(1, Foo.count)
|
83
|
+
assert_equal({ 'id' => 'en' }, find_results.call.first['_source'])
|
84
|
+
|
85
|
+
I18n.locale = :es
|
86
|
+
assert(1, Foo.count)
|
87
|
+
assert_equal({ 'id' => 'es' }, find_results.call.first['_source'])
|
88
|
+
end
|
89
|
+
|
70
90
|
def test_update
|
71
91
|
Foo.save(id: '1')
|
72
92
|
Foo.update(id: '1', foo: 'bar')
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
class MongoidLocalizedDefaultsTest < TestCase
|
5
|
+
class Foo
|
6
|
+
include Mongoid::Document
|
7
|
+
|
8
|
+
field :name, type: String, default: -> { 'foo' }, localize: true
|
9
|
+
field :config, type: Hash, default: { foo: 'bar' }, localize: true
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_localized_defaults
|
13
|
+
set_locales(available: [:en, :es], default: :en, current: :en)
|
14
|
+
|
15
|
+
instance = Foo.new
|
16
|
+
assert_equal('foo', instance.name)
|
17
|
+
assert_equal({ foo: 'bar' }, instance.config)
|
18
|
+
|
19
|
+
I18n.locale = :es
|
20
|
+
|
21
|
+
assert_equal('foo', instance.name)
|
22
|
+
assert_equal({ foo: 'bar' }, instance.config)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -94,10 +94,10 @@ module Workarea
|
|
94
94
|
'HTTP_GEOIP_POSTAL_CODE' => '19106'
|
95
95
|
)
|
96
96
|
|
97
|
-
|
98
|
-
|
97
|
+
refute_includes(location.names, 'US')
|
98
|
+
refute_includes(location.names, 'USA')
|
99
99
|
assert_includes(location.names, 'United States of America')
|
100
|
-
|
100
|
+
refute_includes(location.names, 'PA')
|
101
101
|
assert_includes(location.names, 'Pennsylvania')
|
102
102
|
assert_includes(location.names, 'Philadelphia')
|
103
103
|
assert_includes(location.names, '19106')
|
@@ -7,12 +7,15 @@ module Workarea
|
|
7
7
|
def test_qualifies?
|
8
8
|
refute(Geolocation.new.qualifies?(create_visit))
|
9
9
|
|
10
|
-
visit = create_visit(
|
10
|
+
visit = create_visit(
|
11
|
+
'HTTP_GEOIP_REGION' => 'PA',
|
12
|
+
'HTTP_GEOIP_CITY_COUNTRY_CODE' => 'US'
|
13
|
+
)
|
11
14
|
refute(Geolocation.new(locations: %w(NJ)).qualifies?(visit))
|
12
|
-
assert(Geolocation.new(locations: %w(pa)).qualifies?(visit))
|
13
|
-
assert(Geolocation.new(locations: %w(PA)).qualifies?(visit))
|
14
|
-
assert(Geolocation.new(locations: %w(NJ
|
15
|
-
refute(Geolocation.new(locations: %w(NJ NY)).qualifies?(visit))
|
15
|
+
assert(Geolocation.new(locations: %w(us-pa)).qualifies?(visit))
|
16
|
+
assert(Geolocation.new(locations: %w(US-PA)).qualifies?(visit))
|
17
|
+
assert(Geolocation.new(locations: %w(US-NJ US-pa)).qualifies?(visit))
|
18
|
+
refute(Geolocation.new(locations: %w(US-NJ US-NY)).qualifies?(visit))
|
16
19
|
|
17
20
|
visit = create_visit(
|
18
21
|
'HTTP_GEOIP_REGION' => 'PA',
|
@@ -26,14 +29,13 @@ module Workarea
|
|
26
29
|
assert(Geolocation.new(locations: %w(Philadelphia)).qualifies?(visit))
|
27
30
|
assert(Geolocation.new(locations: %w(Philadelphia US)).qualifies?(visit))
|
28
31
|
refute(Geolocation.new(locations: %w(Harrisburg)).qualifies?(visit))
|
29
|
-
refute(Geolocation.new(locations: %w(Harrisburg PA)).qualifies?(visit))
|
32
|
+
refute(Geolocation.new(locations: %w(Harrisburg US-PA)).qualifies?(visit))
|
30
33
|
assert(Geolocation.new(locations: %w(Philadelphia Harrisburg)).qualifies?(visit))
|
31
34
|
refute(Geolocation.new(locations: %w(Pittsburgh Harrisburg)).qualifies?(visit))
|
32
35
|
|
33
36
|
visit = create_visit('HTTP_GEOIP_CITY_COUNTRY_CODE' => 'US')
|
34
37
|
refute(Geolocation.new(locations: %w(CA)).qualifies?(visit))
|
35
38
|
assert(Geolocation.new(locations: %w(US)).qualifies?(visit))
|
36
|
-
assert(Geolocation.new(locations: %w(USA)).qualifies?(visit))
|
37
39
|
assert(Geolocation.new(locations: ['United States of America']).qualifies?(visit))
|
38
40
|
assert(Geolocation.new(locations: %w(Philadelphia US)).qualifies?(visit))
|
39
41
|
assert(Geolocation.new(locations: %w(US CA)).qualifies?(visit))
|
@@ -4,14 +4,22 @@ module Workarea
|
|
4
4
|
class User
|
5
5
|
class PasswordResetTest < TestCase
|
6
6
|
def user
|
7
|
-
@user ||= create_user
|
7
|
+
@user ||= create_user(email: 'one@workarea.com')
|
8
8
|
end
|
9
9
|
|
10
10
|
def test_setup!
|
11
|
-
|
11
|
+
2.times do
|
12
|
+
PasswordReset.setup!(user.email)
|
12
13
|
|
13
|
-
|
14
|
-
|
14
|
+
assert_equal(1, PasswordReset.count)
|
15
|
+
assert_equal(user.id, PasswordReset.first.user_id)
|
16
|
+
end
|
17
|
+
|
18
|
+
two = create_user(email: 'two@workarea.com')
|
19
|
+
PasswordReset.setup!('two@workarea.com')
|
20
|
+
|
21
|
+
assert_equal(2, PasswordReset.count)
|
22
|
+
assert_equal(two.id, PasswordReset.last.user_id)
|
15
23
|
end
|
16
24
|
|
17
25
|
def test_complete
|
@@ -36,6 +36,17 @@ module Workarea
|
|
36
36
|
assert_equal(release.id, results.first.release_id)
|
37
37
|
refute_equal(product.object_id, results.first.model.object_id)
|
38
38
|
end
|
39
|
+
|
40
|
+
def test_entry_flattening
|
41
|
+
products = Array.new(2) { create_product }
|
42
|
+
release = create_release
|
43
|
+
release.as_current { products.first.update!(name: 'Bar') }
|
44
|
+
|
45
|
+
instance = ProductEntries.new(products)
|
46
|
+
instance.stubs(:index_entries_for).returns([:foo, :bar])
|
47
|
+
|
48
|
+
assert_equal([:foo, :bar, :foo, :bar, :foo, :bar], instance.entries)
|
49
|
+
end
|
39
50
|
end
|
40
51
|
end
|
41
52
|
end
|
@@ -425,6 +425,19 @@ module Workarea
|
|
425
425
|
assert_equal([product], ProductSearch.new(q: '*').results.pluck(:model))
|
426
426
|
end
|
427
427
|
end
|
428
|
+
|
429
|
+
def test_locale
|
430
|
+
set_locales(available: [:en, :es], default: :en, current: :en)
|
431
|
+
Search::Storefront.reset_indexes!
|
432
|
+
|
433
|
+
product = create_product(active_translations: { 'en' => true, 'es' => false })
|
434
|
+
|
435
|
+
I18n.locale = :es
|
436
|
+
assert_equal([], ProductSearch.new(q: '*').results.pluck(:model))
|
437
|
+
|
438
|
+
I18n.locale = :en
|
439
|
+
assert_equal([product], ProductSearch.new(q: '*').results.pluck(:model))
|
440
|
+
end
|
428
441
|
end
|
429
442
|
end
|
430
443
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workarea-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.5.
|
4
|
+
version: 3.5.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Crouse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -1920,6 +1920,7 @@ files:
|
|
1920
1920
|
- lib/workarea/ext/freedom_patches/float.rb
|
1921
1921
|
- lib/workarea/ext/freedom_patches/global_id.rb
|
1922
1922
|
- lib/workarea/ext/freedom_patches/money.rb
|
1923
|
+
- lib/workarea/ext/freedom_patches/mongoid_localized_defaults.rb
|
1923
1924
|
- lib/workarea/ext/freedom_patches/mongoid_simple_tags.rb
|
1924
1925
|
- lib/workarea/ext/freedom_patches/net_http_ssl_connection.rb
|
1925
1926
|
- lib/workarea/ext/freedom_patches/premailer.rb
|
@@ -2081,6 +2082,7 @@ files:
|
|
2081
2082
|
- test/lib/workarea/ext/freedom_patches/dragonfly_callable_url_host_test.rb
|
2082
2083
|
- test/lib/workarea/ext/freedom_patches/global_id_test.rb
|
2083
2084
|
- test/lib/workarea/ext/freedom_patches/money_test.rb
|
2085
|
+
- test/lib/workarea/ext/freedom_patches/mongoid_localized_defaults_test.rb
|
2084
2086
|
- test/lib/workarea/ext/freedom_patches/mongoid_simple_tags_test.rb
|
2085
2087
|
- test/lib/workarea/ext/mongoid/audit_log_entry_test.rb
|
2086
2088
|
- test/lib/workarea/ext/mongoid/each_by_test.rb
|