pg_rails 7.5.5 → 7.5.7
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 +4 -4
- data/pg_engine/app/controllers/admin/user_accounts_controller.rb +2 -0
- data/pg_engine/app/controllers/pg_engine/base_public_controller.rb +2 -0
- data/pg_engine/app/controllers/users/account_switcher_controller.rb +6 -0
- data/pg_engine/app/controllers/users/registrations_controller.rb +20 -9
- data/pg_engine/app/models/account.rb +4 -0
- data/pg_engine/app/models/user.rb +1 -31
- data/pg_engine/app/models/user_account.rb +3 -2
- data/pg_engine/app/policies/user_policy.rb +3 -3
- data/pg_engine/app/views/admin/accounts/show.html.slim +2 -0
- data/pg_engine/app/views/users/accounts/show.html.slim +1 -1
- data/pg_engine/config/initializers/acts_as_tenant.rb +2 -2
- data/pg_engine/config/locales/es.yml +2 -2
- data/pg_engine/config/routes.rb +3 -1
- data/pg_engine/lib/pg_engine/engine.rb +8 -0
- data/pg_engine/spec/controllers/admin/accounts_controller_spec.rb +1 -1
- data/pg_engine/spec/controllers/admin/users_controller_spec.rb +11 -7
- data/pg_engine/spec/fixtures/test.pdf +0 -0
- data/pg_engine/spec/models/user_spec.rb +24 -42
- data/pg_engine/spec/requests/active_storage_spec.rb +16 -0
- data/pg_engine/spec/{controllers/users/registrations_controller_spec.rb → requests/users/registrations_spec.rb} +35 -12
- data/pg_engine/spec/requests/users/switcher_spec.rb +8 -2
- data/pg_engine/spec/system/tenants_spec.rb +3 -1
- data/pg_rails/lib/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d700901741523887ccac3c92bc1e266a4ec57f1cf2794865aa2c1bc4a30a5ae2
|
|
4
|
+
data.tar.gz: e8e55331eb22f7168d483ce8e1eec5965b23cec8f8421bfbe4ff58e870d874af
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 63ea0b3be1e39bcdc8436269b539945000b11e6f40f03e69eb3f5e897bf1ba1ca45a5a054d13c0e3f37c5fd5eb878d91b092b31174a796012b5a8b87ccd0e625
|
|
7
|
+
data.tar.gz: c6808a080fe3a4dc2769bf35ac29662f4875229d323c31f793481c3460b44d41a8984010f328a4a380d842f2aa3e5ddbeaed9853ce5013b4913cf53516dc848d
|
|
@@ -7,15 +7,19 @@ module Users
|
|
|
7
7
|
def create
|
|
8
8
|
build_resource(sign_up_params)
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
ActiveRecord::Base.transaction do
|
|
11
|
+
resource.save
|
|
12
|
+
yield resource if block_given?
|
|
13
|
+
if resource.persisted?
|
|
14
|
+
create_account_for(resource)
|
|
15
|
+
|
|
16
|
+
expire_data_after_sign_in!
|
|
17
|
+
render_message
|
|
18
|
+
else
|
|
19
|
+
clean_up_passwords resource
|
|
20
|
+
set_minimum_password_length
|
|
21
|
+
respond_with resource
|
|
22
|
+
end
|
|
19
23
|
end
|
|
20
24
|
end
|
|
21
25
|
|
|
@@ -27,5 +31,12 @@ module Users
|
|
|
27
31
|
HTML
|
|
28
32
|
render turbo_stream: turbo_stream.update('form-signup', msg)
|
|
29
33
|
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def create_account_for(user)
|
|
38
|
+
account = Account.create!(nombre: user.email)
|
|
39
|
+
user.user_accounts.create!(account:)
|
|
40
|
+
end
|
|
30
41
|
end
|
|
31
42
|
end
|
|
@@ -41,17 +41,7 @@ class User < ApplicationRecord
|
|
|
41
41
|
# Hace falta?
|
|
42
42
|
has_many :accounts, through: :user_accounts
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
# if ActsAsTenant.current_tenant.present?
|
|
46
|
-
# joins(:user_accounts).where('user_accounts.account_id': ActsAsTenant.current_tenant.id)
|
|
47
|
-
# else
|
|
48
|
-
# raise ActsAsTenant::Errors::NoTenantSet unless Current.user.blank? || ActsAsTenant.unscoped?
|
|
49
|
-
|
|
50
|
-
# # Aún no autenticó devise o es el admin
|
|
51
|
-
# all
|
|
52
|
-
|
|
53
|
-
# end
|
|
54
|
-
# }
|
|
44
|
+
acts_as_tenant :account, through: :user_accounts
|
|
55
45
|
|
|
56
46
|
has_many :notifications, as: :recipient, class_name: 'Noticed::Notification'
|
|
57
47
|
|
|
@@ -80,26 +70,6 @@ class User < ApplicationRecord
|
|
|
80
70
|
kept? ? super : :locked
|
|
81
71
|
end
|
|
82
72
|
|
|
83
|
-
after_create do
|
|
84
|
-
create_account unless orphan
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def create_account
|
|
88
|
-
account =
|
|
89
|
-
if ActsAsTenant.current_tenant.present?
|
|
90
|
-
# :nocov:
|
|
91
|
-
raise PgEngine::Error, 'user not invited' unless Rails.env.test?
|
|
92
|
-
# :nocov:
|
|
93
|
-
|
|
94
|
-
ActsAsTenant.current_tenant
|
|
95
|
-
else
|
|
96
|
-
Account.create(nombre: email, plan: 0)
|
|
97
|
-
end
|
|
98
|
-
ua = user_accounts.create(account:)
|
|
99
|
-
|
|
100
|
-
raise(Error, 'no se pudo crear la cuenta') unless ua.persisted?
|
|
101
|
-
end
|
|
102
|
-
|
|
103
73
|
def password_required?
|
|
104
74
|
!persisted? || !password.nil? || !password_confirmation.nil?
|
|
105
75
|
end
|
|
@@ -26,13 +26,14 @@ class UserAccount < ApplicationRecord
|
|
|
26
26
|
audited
|
|
27
27
|
include Hashid::Rails
|
|
28
28
|
|
|
29
|
-
belongs_to :user
|
|
30
|
-
|
|
29
|
+
belongs_to :user, inverse_of: :user_accounts
|
|
30
|
+
acts_as_tenant :account
|
|
31
31
|
|
|
32
32
|
belongs_to :creado_por, optional: true, class_name: 'User'
|
|
33
33
|
belongs_to :actualizado_por, optional: true, class_name: 'User'
|
|
34
34
|
|
|
35
35
|
# scope :kept, -> { undiscarded.joins(:account).merge(Account.kept) }
|
|
36
|
+
# FIXME: merge with User.kept
|
|
36
37
|
scope :kept, -> { joins(:account).merge(Account.kept) }
|
|
37
38
|
|
|
38
39
|
enumerize :profiles, in: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
ActsAsTenant.configure do |config|
|
|
2
|
-
config.require_tenant = lambda do
|
|
3
|
-
Current.namespace
|
|
2
|
+
config.require_tenant = lambda do |options|
|
|
3
|
+
Current.namespace.present? || !options[:model].in?([User, UserAccount, Email, EmailLog])
|
|
4
4
|
end
|
|
5
5
|
|
|
6
6
|
# Customize the query for loading the tenant in background jobs
|
|
@@ -92,9 +92,9 @@ es:
|
|
|
92
92
|
new:
|
|
93
93
|
sign_up: Crear una cuenta
|
|
94
94
|
passwords:
|
|
95
|
-
send_instructions: Vas a recibir un correo con instrucciones
|
|
95
|
+
send_instructions: Vas a recibir un correo con instrucciones para restablecer tu contraseña en unos pocos minutos.
|
|
96
96
|
new:
|
|
97
|
-
send_me_reset_password_instructions:
|
|
97
|
+
send_me_reset_password_instructions: Restablecer contraseña
|
|
98
98
|
forgot_your_password: ¿Olvidaste tu contraseña?
|
|
99
99
|
shared:
|
|
100
100
|
links:
|
data/pg_engine/config/routes.rb
CHANGED
|
@@ -19,6 +19,14 @@ module PgEngine
|
|
|
19
19
|
Dir.glob("#{overrides}/**/*.rb").each do |override|
|
|
20
20
|
load override
|
|
21
21
|
end
|
|
22
|
+
|
|
23
|
+
ActiveStorage::BaseController.class_eval do
|
|
24
|
+
around_action :set_without_tenant
|
|
25
|
+
|
|
26
|
+
def set_without_tenant(&)
|
|
27
|
+
ActsAsTenant.without_tenant(&)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
22
30
|
end
|
|
23
31
|
|
|
24
32
|
initializer 'pg_engine.set_exceptions_app' do
|
|
@@ -96,20 +96,24 @@ RSpec.describe Admin::UsersController do
|
|
|
96
96
|
|
|
97
97
|
describe 'POST #create' do
|
|
98
98
|
context 'with valid params' do
|
|
99
|
+
subject do
|
|
100
|
+
post :create, params: { user: valid_attributes }
|
|
101
|
+
end
|
|
102
|
+
|
|
99
103
|
it 'creates a new User' do
|
|
100
|
-
expect
|
|
101
|
-
post :create, params: { user: valid_attributes }
|
|
102
|
-
end.to change(User.unscoped, :count).by(1)
|
|
104
|
+
expect { subject }.to change(User.unscoped, :count).by(1)
|
|
103
105
|
end
|
|
104
106
|
|
|
105
107
|
it 'dont creates a new account' do
|
|
106
|
-
expect
|
|
107
|
-
|
|
108
|
-
|
|
108
|
+
expect { subject }.not_to change(Account.unscoped, :count)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'dont creates a new user account' do
|
|
112
|
+
expect { subject }.not_to change(UserAccount.unscoped, :count)
|
|
109
113
|
end
|
|
110
114
|
|
|
111
115
|
it 'redirects to the created user' do
|
|
112
|
-
|
|
116
|
+
subject
|
|
113
117
|
expect(response).to redirect_to([:admin, User.unscoped.last])
|
|
114
118
|
end
|
|
115
119
|
end
|
|
Binary file
|
|
@@ -15,52 +15,34 @@ RSpec.describe User do
|
|
|
15
15
|
expect(user.default_account).to be_present
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
context 'si es orphan' do
|
|
19
|
-
let(:user) { create(:user, orphan: true) }
|
|
20
|
-
|
|
21
|
-
it do
|
|
22
|
-
expect(user.accounts).to be_empty
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it do
|
|
26
|
-
expect { user.default_account }.to raise_error(User::Error)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context 'Si falla la creación de cuenta, que rollbackee la transaction de create user' do
|
|
31
|
-
# rubocop:disable Lint/SuppressedException
|
|
32
|
-
subject do
|
|
33
|
-
user.save
|
|
34
|
-
rescue User::Error
|
|
35
|
-
end
|
|
36
|
-
# rubocop:enable Lint/SuppressedException
|
|
37
|
-
|
|
38
|
-
let(:user) do
|
|
39
|
-
build(:user)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
before do
|
|
43
|
-
# rubocop:disable RSpec/MessageChain
|
|
44
|
-
allow(user).to receive_message_chain(:user_accounts, :create) {
|
|
45
|
-
instance_double(UserAccount, persisted?: false)
|
|
46
|
-
}
|
|
47
|
-
# rubocop:enable RSpec/MessageChain
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it do
|
|
51
|
-
expect { subject }.not_to change(described_class, :count)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it do
|
|
55
|
-
subject
|
|
56
|
-
expect(user).not_to be_persisted
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
18
|
describe 'search ransacker' do
|
|
61
19
|
it 'searchs' do
|
|
62
20
|
results = described_class.ransack(search_cont: user.nombre).result.to_a
|
|
63
21
|
expect(results).to eq [user]
|
|
64
22
|
end
|
|
65
23
|
end
|
|
24
|
+
|
|
25
|
+
describe 'default scope' do
|
|
26
|
+
before do
|
|
27
|
+
ActsAsTenant.current_tenant = nil
|
|
28
|
+
ActsAsTenant.test_tenant = nil
|
|
29
|
+
Current.reset
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'scopes according to tenant' do
|
|
33
|
+
account = create(:account)
|
|
34
|
+
other_account = create(:account)
|
|
35
|
+
usr1 = usr2 = usr3 = usr4 = nil
|
|
36
|
+
ActsAsTenant.with_tenant(other_account) do
|
|
37
|
+
usr3 = create(:user)
|
|
38
|
+
usr4 = create(:user)
|
|
39
|
+
end
|
|
40
|
+
ActsAsTenant.with_tenant(account) do
|
|
41
|
+
usr1 = create(:user)
|
|
42
|
+
usr2 = create(:user)
|
|
43
|
+
expect(described_class.all).to contain_exactly(usr1, usr2)
|
|
44
|
+
end
|
|
45
|
+
expect(described_class.all).to contain_exactly(usr1, usr2, usr3, usr4)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
66
48
|
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
describe 'representations controller' do
|
|
4
|
+
let(:file) { File.open("#{PgEngine::Engine.root}/spec/fixtures/test.pdf") }
|
|
5
|
+
|
|
6
|
+
it do
|
|
7
|
+
categoria = create :categoria_de_cosa
|
|
8
|
+
categoria.file.attach(io: file, filename: 'test.pdf')
|
|
9
|
+
path = polymorphic_url(categoria.file.preview(:thumb), only_path: true)
|
|
10
|
+
expect(path).to start_with '/rails/active_storage/representations/redirect/'
|
|
11
|
+
get path
|
|
12
|
+
ActiveStorage::Current.url_options = { host: 'www.example.com' }
|
|
13
|
+
expect(response).to have_http_status(:redirect)
|
|
14
|
+
expect(response.headers['location']).to include '/rails/active_storage/disk/'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
require 'rails_helper'
|
|
2
2
|
|
|
3
|
-
describe
|
|
4
|
-
render_views
|
|
5
|
-
|
|
6
|
-
before do
|
|
7
|
-
# rubocop:disable RSpec/InstanceVariable
|
|
8
|
-
@request.env['devise.mapping'] = Devise.mappings[:user]
|
|
9
|
-
# rubocop:enable RSpec/InstanceVariable
|
|
10
|
-
end
|
|
11
|
-
|
|
3
|
+
describe 'registrations controller' do
|
|
12
4
|
describe '#new' do
|
|
13
|
-
subject { get
|
|
5
|
+
subject { get '/users/sign_up' }
|
|
14
6
|
|
|
15
7
|
it do
|
|
16
8
|
subject
|
|
@@ -20,7 +12,12 @@ describe Users::RegistrationsController do
|
|
|
20
12
|
|
|
21
13
|
describe '#create' do
|
|
22
14
|
subject do
|
|
23
|
-
post
|
|
15
|
+
post '/users', params: { user: { nombre:, apellido:, email:, password:, password_confirmation: } }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
before do
|
|
19
|
+
ActsAsTenant.current_tenant = nil
|
|
20
|
+
ActsAsTenant.test_tenant = nil
|
|
24
21
|
end
|
|
25
22
|
|
|
26
23
|
let(:nombre) { Faker::Name.first_name }
|
|
@@ -33,6 +30,14 @@ describe Users::RegistrationsController do
|
|
|
33
30
|
expect { subject }.to change(User, :count).by(1)
|
|
34
31
|
end
|
|
35
32
|
|
|
33
|
+
it do
|
|
34
|
+
expect { subject }.to change(UserAccount, :count).by(1)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it do
|
|
38
|
+
expect { subject }.to change(Account, :count).by(1)
|
|
39
|
+
end
|
|
40
|
+
|
|
36
41
|
it do
|
|
37
42
|
subject
|
|
38
43
|
expect(response.body).to include I18n.t('devise.registrations.signed_up_but_unconfirmed')
|
|
@@ -46,10 +51,28 @@ describe Users::RegistrationsController do
|
|
|
46
51
|
expect(response).not_to be_successful
|
|
47
52
|
end
|
|
48
53
|
end
|
|
54
|
+
|
|
55
|
+
context 'cuando falla la creación de la UserAccount' do
|
|
56
|
+
before do
|
|
57
|
+
allow_any_instance_of(Users::RegistrationsController).to receive(:create_account_for).and_raise(StandardError)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it do
|
|
61
|
+
expect { subject }.not_to change(User, :count)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it do
|
|
65
|
+
expect { subject }.not_to change(UserAccount, :count)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it do
|
|
69
|
+
expect { subject }.not_to change(Account, :count)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
49
72
|
end
|
|
50
73
|
|
|
51
74
|
describe '#edit' do
|
|
52
|
-
subject { get
|
|
75
|
+
subject { get '/users/edit' }
|
|
53
76
|
|
|
54
77
|
let(:logger_user) { create :user, :developer }
|
|
55
78
|
|
|
@@ -38,11 +38,17 @@ describe 'redirection' do
|
|
|
38
38
|
|
|
39
39
|
context 'when has been removed from account' do
|
|
40
40
|
let!(:other_account) { create :account }
|
|
41
|
-
let!(:other_user_account)
|
|
41
|
+
let!(:other_user_account) do
|
|
42
|
+
ActsAsTenant.with_tenant(other_account) do
|
|
43
|
+
logged_user.user_accounts.create!
|
|
44
|
+
end
|
|
45
|
+
end
|
|
42
46
|
|
|
43
47
|
before do
|
|
44
48
|
third_account = create :account
|
|
45
|
-
|
|
49
|
+
ActsAsTenant.with_tenant(third_account) do
|
|
50
|
+
logged_user.user_accounts.create!
|
|
51
|
+
end
|
|
46
52
|
end
|
|
47
53
|
|
|
48
54
|
it 'redirects to switcher' do
|
|
@@ -29,7 +29,9 @@ describe 'Tenants' do
|
|
|
29
29
|
let(:other_account) { create :account }
|
|
30
30
|
|
|
31
31
|
before do
|
|
32
|
-
|
|
32
|
+
ActsAsTenant.with_tenant(other_account) do
|
|
33
|
+
logged_user.user_accounts.create!
|
|
34
|
+
end
|
|
33
35
|
end
|
|
34
36
|
|
|
35
37
|
it 'shows the switcher' do
|
data/pg_rails/lib/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pg_rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.5.
|
|
4
|
+
version: 7.5.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Martín Rosso
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-09-
|
|
11
|
+
date: 2024-09-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -849,7 +849,6 @@ files:
|
|
|
849
849
|
- pg_engine/spec/controllers/public/mensaje_contactos_controller_spec.rb
|
|
850
850
|
- pg_engine/spec/controllers/public/webhooks_controller_spec.rb
|
|
851
851
|
- pg_engine/spec/controllers/users/confirmations_controller_spec.rb
|
|
852
|
-
- pg_engine/spec/controllers/users/registrations_controller_spec.rb
|
|
853
852
|
- pg_engine/spec/decorators/email_decorator_spec.rb
|
|
854
853
|
- pg_engine/spec/factories/accounts.rb
|
|
855
854
|
- pg_engine/spec/factories/email_logs.rb
|
|
@@ -876,6 +875,7 @@ files:
|
|
|
876
875
|
- pg_engine/spec/models/user_spec.rb
|
|
877
876
|
- pg_engine/spec/overrides/audited_audit_spec.rb
|
|
878
877
|
- pg_engine/spec/pg_engine/pdf_preview_generator_spec.rb
|
|
878
|
+
- pg_engine/spec/requests/active_storage_spec.rb
|
|
879
879
|
- pg_engine/spec/requests/admin/eventos_spec.rb
|
|
880
880
|
- pg_engine/spec/requests/base_controller_requests_spec.rb
|
|
881
881
|
- pg_engine/spec/requests/current_attributes_spec.rb
|
|
@@ -883,6 +883,7 @@ files:
|
|
|
883
883
|
- pg_engine/spec/requests/users/accounts_spec.rb
|
|
884
884
|
- pg_engine/spec/requests/users/base_controller_spec.rb
|
|
885
885
|
- pg_engine/spec/requests/users/date_jumper_spec.rb
|
|
886
|
+
- pg_engine/spec/requests/users/registrations_spec.rb
|
|
886
887
|
- pg_engine/spec/requests/users/switcher_spec.rb
|
|
887
888
|
- pg_engine/spec/system/alerts_spec.rb
|
|
888
889
|
- pg_engine/spec/system/breadcrumbs_spec.rb
|