From 880ad97d65e5e4db9a30fe275588880d760dad3b Mon Sep 17 00:00:00 2001 From: Gabriel Manika Koeb Date: Mon, 12 Feb 2024 11:49:46 -0300 Subject: [PATCH] =?UTF-8?q?Refactor/Ajuste=20na=20tela=20de=20configura?= =?UTF-8?q?=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Mudamos as actions de privacidade/disponivel para trabalho do profiles_controller para o settings_controller - Também foi alterada a localização dos botões nas views Co-authored-by: Caique Arruda --- app/controllers/profiles_controller.rb | 24 +------ app/controllers/settings_controller.rb | 22 +++++++ app/views/profiles/show.html.erb | 20 ------ app/views/settings/index.html.erb | 62 +++++++++++++------ config/locales/profile.pt-BR.yml | 6 -- config/locales/settings.pt-BR.yml | 9 ++- config/routes.rb | 7 +-- .../profiles/user_changes_work_status_spec.rb | 55 ---------------- .../user_changes_profile_to_private_spec.rb | 22 ++----- .../settings/user_changes_work_status_spec.rb | 32 ++++++++++ .../user_views_profile_settings_spec.rb | 4 +- 11 files changed, 116 insertions(+), 147 deletions(-) delete mode 100644 spec/system/profiles/user_changes_work_status_spec.rb rename spec/system/{profiles => settings}/user_changes_profile_to_private_spec.rb (86%) create mode 100644 spec/system/settings/user_changes_work_status_spec.rb diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index 3b35ae7..cb98688 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -28,27 +28,7 @@ def show @personal_info = personal_info end - def work_unavailable - @profile = current_user.profile - @profile.unavailable! - redirect_to profile_path(@profile), notice: t('.success') - end - - def open_to_work - @profile = current_user.profile - @profile.open_to_work! - redirect_to profile_path(@profile), notice: t('.success') - end - - def change_privacy - @profile = current_user.profile - if @profile.public_profile? - @profile.private_profile! - else - @profile.public_profile! - end - redirect_to profile_path(@profile), notice: t('.success') - end + private def private_profile? return if @profile.user == current_user @@ -59,8 +39,6 @@ def private_profile? redirect_to root_path, alert: t('.private') end - private - def profile_params params.require(:profile).permit(:photo) end diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index ff30745..57e328f 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -15,6 +15,28 @@ def delete_account redirect_to root_path, notice: t('delete_account') end + def change_privacy + @profile = current_user.profile + if @profile.public_profile? + @profile.private_profile! + else + @profile.public_profile! + end + redirect_to profile_settings_path(@profile), notice: t('.success') + end + + def work_unavailable + @profile = current_user.profile + @profile.unavailable! + redirect_to profile_settings_path(@profile), notice: t('.success') + end + + def open_to_work + @profile = current_user.profile + @profile.open_to_work! + redirect_to profile_settings_path(@profile), notice: t('.success') + end + private def redirect_unauthorized_access diff --git a/app/views/profiles/show.html.erb b/app/views/profiles/show.html.erb index cbf7fa2..2a0b640 100644 --- a/app/views/profiles/show.html.erb +++ b/app/views/profiles/show.html.erb @@ -29,7 +29,6 @@
<%= render 'profile_photo' %>
- <%= link_to 'Alterar foto', edit_profile_path(@profile), class: 'badge bg-secondary' if current_user == @profile.user %>

<%= @user.full_name %>

@@ -44,25 +43,6 @@ <% end %>
-
- <% if @profile.open_to_work? %> -
<%= t Profile.human_attribute_name("work_status.#{@profile.work_status}") %>
- <%= button_to 'alterar disponibilidade', work_unavailable_path, method: :patch, class: 'btn btn-outline-primary btn-sm' if current_user.profile == @profile %> - <% else %> -
<%= t Profile.human_attribute_name("work_status.#{@profile.work_status}") %>
- <%= button_to 'alterar disponibilidade', open_to_work_path, method: :patch, class: 'btn btn-outline-primary btn-sm' if current_user.profile == @profile %> - <% end %> -
-
- <% if current_user.profile == @profile %> - <% if @profile.public_profile? %> -
<%= t Profile.human_attribute_name("privacy.#{@profile.privacy}") %>
- <% else %> -
<%= t Profile.human_attribute_name("privacy.#{@profile.privacy}") %>
- <% end %> - <%= button_to 'alterar privacidade', change_privacy_path, method: :patch, class: 'btn btn-outline-primary btn-sm' %> - <% end %> -

<% if current_user.profile != @profile %> diff --git a/app/views/settings/index.html.erb b/app/views/settings/index.html.erb index 9331f0d..6860a40 100644 --- a/app/views/settings/index.html.erb +++ b/app/views/settings/index.html.erb @@ -1,20 +1,44 @@ -

Configurações

-
- <%= form_with(url: deactivate_profile_path, method: :patch) do |form| %> -

Atenção: Todos os dados relacionados ao seu perfil serão ARQUIVADOS. Você pode reativar sua conta fazendo log-in novamente.

- <%= form.submit 'Desativar Perfil', - class: "btn btn-danger", - data: { turbo_confirm: 'Seu perfil será DESATIVADO, deseja prosseguir?' } - %> - <% end %> -
+

Configurações

-
- <%= form_with(url: delete_account_path, method: :delete) do |form| %> -

Atenção: Todos os dados relacionados a conta serão EXCLUÍDOS e não poderão ser recuperados.

- <%= form.submit 'Excluir Conta', - class: "btn btn-danger", - data: { turbo_confirm: 'Sua conta será EXCLUÍDA, deseja prosseguir?' } - %> - <% end %> -
+
+

Privacidade

+
+ <% if @profile.public_profile? %> +

<%= t Profile.human_attribute_name("privacy.#{@profile.privacy}") %>

+ <% else %> +

<%= t Profile.human_attribute_name("privacy.#{@profile.privacy}") %>

+ <% end %> + <%= button_to 'Alterar Privacidade', change_privacy_path, method: :patch, class: 'btn btn-outline-primary btn-sm' %> +
+
+ <% if @profile.open_to_work? %> +

<%= t Profile.human_attribute_name("work_status.#{@profile.work_status}") %>

+ <%= button_to 'Alterar Disponibilidade', work_unavailable_path, method: :patch, class: 'btn btn-outline-primary btn-sm' if current_user.profile == @profile %> + <% else %> +

<%= t Profile.human_attribute_name("work_status.#{@profile.work_status}") %>

+ <%= button_to 'Alterar Disponibilidade', open_to_work_path, method: :patch, class: 'btn btn-outline-primary btn-sm' if current_user.profile == @profile %> + <% end %> +
+
+
+

Remoção de conta

+

Atenção: Ao desativar o perfil todos os dados relacionados serão ARQUIVADOS. Você pode reativar sua conta fazendo login novamente.

+
+
+ <%= form_with(url: deactivate_profile_path, method: :patch) do |form| %> + <%= form.submit 'Desativar Perfil', + class: "btn btn-danger", + data: { turbo_confirm: 'Seu perfil será DESATIVADO, deseja prosseguir?' } + %> + <% end %> +
+ +
+ <%= form_with(url: delete_account_path, method: :delete) do |form| %> + <%= form.submit 'Excluir Conta', + class: "btn btn-danger", + data: { turbo_confirm: 'Sua conta será EXCLUÍDA, deseja prosseguir?' } + %> + <% end %> +
+
diff --git a/config/locales/profile.pt-BR.yml b/config/locales/profile.pt-BR.yml index b23fb5c..c5f81e2 100644 --- a/config/locales/profile.pt-BR.yml +++ b/config/locales/profile.pt-BR.yml @@ -27,12 +27,6 @@ pt-BR: results: one: 'resultado' other: 'resultados' - work_unavailable: - success: Alteração salva com sucesso - open_to_work: - success: Alteração salva com sucesso - change_privacy: - success: Privacidade alterada com sucesso show: private: O perfil que você acessou é privado profile: diff --git a/config/locales/settings.pt-BR.yml b/config/locales/settings.pt-BR.yml index 781fc86..bdec9d4 100644 --- a/config/locales/settings.pt-BR.yml +++ b/config/locales/settings.pt-BR.yml @@ -1,3 +1,10 @@ pt-BR: deactivate_profile: Perfil desativado com sucesso - delete_account: Conta excluída com sucesso \ No newline at end of file + delete_account: Conta excluída com sucesso + settings: + change_privacy: + success: Privacidade alterada com sucesso + work_unavailable: + success: Alteração salva com sucesso + open_to_work: + success: Alteração salva com sucesso \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index c14fbcb..81a3c0b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -24,7 +24,7 @@ resources :users, only: [] do resources :posts, shallow: true, only: %i[show edit update] resources :profiles, shallow: true, only: %i[edit show update] do - resources 'settings', only: %i[index] + resources :settings, only: %i[index] patch :remove_photo, on: :member resources :connections, only: %i[create index] do patch 'unfollow', 'follow_again' @@ -34,10 +34,7 @@ end delete 'delete_account', controller: :settings - patch 'deactivate_profile', controller: :settings - patch 'work_unavailable', controller: :profiles - patch 'open_to_work', controller: :profiles - patch 'change_privacy', controller: :profiles + patch 'deactivate_profile', 'work_unavailable', 'open_to_work', 'change_privacy', controller: :settings resources :likes, only: %i[create destroy] resources :job_categories, only: %i[index create] diff --git a/spec/system/profiles/user_changes_work_status_spec.rb b/spec/system/profiles/user_changes_work_status_spec.rb deleted file mode 100644 index 9c181e5..0000000 --- a/spec/system/profiles/user_changes_work_status_spec.rb +++ /dev/null @@ -1,55 +0,0 @@ -require 'rails_helper' - -describe 'Usuário altera o status de disponibilidade de trabalho' do - context 'de disponível para indisponível' do - it 'com sucesso' do - user = create(:user) - - login_as user - visit profile_path(user.profile) - click_on 'alterar disponibilidade' - - expect(page).to have_current_path profile_path(user.profile) - expect(page).to have_content 'Alteração salva com sucesso' - expect(page).to have_content 'Indisponível Para Trabalho' - end - - it 'apenas do seu próprio perfil' do - user_a = create(:user) - user_b = create(:user) - - login_as user_b - visit profile_path(user_a.profile) - - expect(page).to have_content 'Disponível Para Trabalho' - expect(page).not_to have_button 'alterar disponibilidade' - end - end - - context 'de indisponível para disponível' do - it 'com sucesso' do - user = create(:user) - user.profile.unavailable! - - login_as user - visit profile_path(user.profile) - click_on 'alterar disponibilidade' - - expect(page).to have_current_path profile_path(user.profile) - expect(page).to have_content 'Alteração salva com sucesso' - expect(page).to have_content 'Disponível Para Trabalho' - end - - it 'apenas do seu próprio perfil' do - user_a = create(:user) - user_b = create(:user) - user_a.profile.unavailable! - - login_as user_b - visit profile_path(user_a.profile) - - expect(page).to have_content 'Indisponível Para Trabalho' - expect(page).not_to have_button 'alterar disponibilidade' - end - end -end diff --git a/spec/system/profiles/user_changes_profile_to_private_spec.rb b/spec/system/settings/user_changes_profile_to_private_spec.rb similarity index 86% rename from spec/system/profiles/user_changes_profile_to_private_spec.rb rename to spec/system/settings/user_changes_profile_to_private_spec.rb index 669156b..43d11bb 100644 --- a/spec/system/profiles/user_changes_profile_to_private_spec.rb +++ b/spec/system/settings/user_changes_profile_to_private_spec.rb @@ -6,24 +6,14 @@ user = create(:user) login_as user - visit profile_path(user.profile) - click_on 'alterar privacidade' + visit profile_settings_path(user.profile) + click_on 'Alterar Privacidade' - expect(page).to have_current_path profile_path(user.profile) + expect(page).to have_current_path profile_settings_path(user.profile) expect(page).to have_content 'Privacidade alterada com sucesso' expect(page).to have_content 'Perfil Privado' end - it 'apenas do seu próprio perfil' do - user = create(:user) - another_user = create(:user) - - login_as another_user - visit profile_path(user.profile) - - expect(page).not_to have_button 'alterar privacidade' - end - it 'e não aparece nas buscas' do job_category = create(:job_category, name: 'C++') private_user = create(:user) @@ -100,10 +90,10 @@ user.profile.private_profile! login_as user - visit profile_path(user.profile) - click_on 'alterar privacidade' + visit profile_settings_path(user.profile) + click_on 'Alterar Privacidade' - expect(page).to have_current_path profile_path(user.profile) + expect(page).to have_current_path profile_settings_path(user.profile) expect(page).to have_content 'Privacidade alterada com sucesso' expect(page).to have_content 'Perfil Público' end diff --git a/spec/system/settings/user_changes_work_status_spec.rb b/spec/system/settings/user_changes_work_status_spec.rb new file mode 100644 index 0000000..0e8dda5 --- /dev/null +++ b/spec/system/settings/user_changes_work_status_spec.rb @@ -0,0 +1,32 @@ +require 'rails_helper' + +describe 'Usuário altera o status de disponibilidade de trabalho' do + context 'de disponível para indisponível' do + it 'com sucesso' do + user = create(:user) + + login_as user + visit profile_settings_path(user.profile) + click_on 'Alterar Disponibilidade' + + expect(page).to have_current_path profile_settings_path(user.profile) + expect(page).to have_content 'Alteração salva com sucesso' + expect(page).to have_content 'Indisponível Para Trabalho' + end + end + + context 'de indisponível para disponível' do + it 'com sucesso' do + user = create(:user) + user.profile.unavailable! + + login_as user + visit profile_settings_path(user.profile) + click_on 'Alterar Disponibilidade' + + expect(page).to have_current_path profile_settings_path(user.profile) + expect(page).to have_content 'Alteração salva com sucesso' + expect(page).to have_content 'Disponível Para Trabalho' + end + end +end diff --git a/spec/system/settings/user_views_profile_settings_spec.rb b/spec/system/settings/user_views_profile_settings_spec.rb index 9e49acf..2db447d 100644 --- a/spec/system/settings/user_views_profile_settings_spec.rb +++ b/spec/system/settings/user_views_profile_settings_spec.rb @@ -12,9 +12,9 @@ within 'h2' do expect(page).to have_content 'Configurações' end - expect(page).to have_content 'Todos os dados relacionados ao seu perfil serão ARQUIVADOS' + expect(page).to have_content 'Atenção: Ao desativar o perfil todos os dados relacionados serão ARQUIVADOS.' + expect(page).to have_content 'Você pode reativar sua conta fazendo login novamente.' expect(page).to have_button 'Desativar Perfil' - expect(page).to have_content 'Todos os dados relacionados a conta serão EXCLUÍDOS e não poderão ser recuperados' expect(page).to have_button 'Excluir Conta' end