From 10eb0981da3e464d5215b414e7bfbe3c407319ae Mon Sep 17 00:00:00 2001 From: Gabriel Manika Koeb Date: Wed, 17 Jan 2024 10:58:48 -0300 Subject: [PATCH 01/11] Cria categoria de trabalho. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adiciona role no model User e configura enum. Cria model JobCategory, com campo nome. Cria formulário de criação de categoria de trabalhos --- app/controllers/job_categories_controller.rb | 5 +++++ app/models/job_category.rb | 2 ++ app/models/user.rb | 2 ++ app/views/job_categories/index.html.erb | 11 +++++++++++ app/views/layouts/application.html.erb | 3 +++ app/views/shared/_navbar.html.erb | 3 +++ config/environments/test.rb | 2 +- config/routes.rb | 5 ++--- db/migrate/20240117131132_add_role_to_user.rb | 5 +++++ .../20240117135059_create_job_categories.rb | 9 +++++++++ db/schema.rb | 9 ++++++++- spec/factories/job_categories.rb | 5 +++++ spec/factories/users.rb | 3 ++- spec/models/job_category_spec.rb | 4 ++++ spec/rails_helper.rb | 2 +- spec/system/admin_create_job_category_spec.rb | 16 ++++++++++++++++ 16 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 app/controllers/job_categories_controller.rb create mode 100644 app/models/job_category.rb create mode 100644 app/views/job_categories/index.html.erb create mode 100644 app/views/shared/_navbar.html.erb create mode 100644 db/migrate/20240117131132_add_role_to_user.rb create mode 100644 db/migrate/20240117135059_create_job_categories.rb create mode 100644 spec/factories/job_categories.rb create mode 100644 spec/models/job_category_spec.rb create mode 100644 spec/system/admin_create_job_category_spec.rb diff --git a/app/controllers/job_categories_controller.rb b/app/controllers/job_categories_controller.rb new file mode 100644 index 0000000..e1d2240 --- /dev/null +++ b/app/controllers/job_categories_controller.rb @@ -0,0 +1,5 @@ +class JobCategoriesController < ApplicationController + def index + @job_category = JobCategory.new + end +end diff --git a/app/models/job_category.rb b/app/models/job_category.rb new file mode 100644 index 0000000..9492e9a --- /dev/null +++ b/app/models/job_category.rb @@ -0,0 +1,2 @@ +class JobCategory < ApplicationRecord +end diff --git a/app/models/user.rb b/app/models/user.rb index dba897f..709b1b7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -5,4 +5,6 @@ class User < ApplicationRecord :recoverable, :rememberable, :validatable has_one :profile, dependent: :destroy has_many :posts, dependent: :destroy + + enum role: { user: 0, admin: 2 } end diff --git a/app/views/job_categories/index.html.erb b/app/views/job_categories/index.html.erb new file mode 100644 index 0000000..692be8e --- /dev/null +++ b/app/views/job_categories/index.html.erb @@ -0,0 +1,11 @@ +

Cadastro de categorias de trabalho

+ +<%= form_with model: @job_category do |f| %> +
+ <%= f.label :name, 'Nome da categoria' %> + <%= f.text_field :name %> +
+
+ <%= f.submit 'Criar' %> +
+<% end %> \ No newline at end of file diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 92e4e38..73ab212 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -11,6 +11,9 @@ +
+ <%= render 'shared/navbar' %> +
<%= yield %>
diff --git a/app/views/shared/_navbar.html.erb b/app/views/shared/_navbar.html.erb new file mode 100644 index 0000000..1980122 --- /dev/null +++ b/app/views/shared/_navbar.html.erb @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/config/environments/test.rb b/config/environments/test.rb index adbb4a6..6e9f8e5 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -29,7 +29,7 @@ config.cache_store = :null_store # Render exception templates for rescuable exceptions and raise for other exceptions. - config.action_dispatch.show_exceptions = :rescuable + config.action_dispatch.show_exceptions = :none # Disable request forgery protection in test environment. config.action_controller.allow_forgery_protection = false diff --git a/config/routes.rb b/config/routes.rb index 7ba7400..48ca2ce 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,6 @@ Rails.application.routes.draw do devise_for :users - # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html - - # Defines the root path route ("/") root to: "home#index" + + resources :job_categories, only: %i[index create] end diff --git a/db/migrate/20240117131132_add_role_to_user.rb b/db/migrate/20240117131132_add_role_to_user.rb new file mode 100644 index 0000000..d88f7d1 --- /dev/null +++ b/db/migrate/20240117131132_add_role_to_user.rb @@ -0,0 +1,5 @@ +class AddRoleToUser < ActiveRecord::Migration[7.1] + def change + add_column :users, :role, :integer, default: 0 + end +end diff --git a/db/migrate/20240117135059_create_job_categories.rb b/db/migrate/20240117135059_create_job_categories.rb new file mode 100644 index 0000000..10f89e9 --- /dev/null +++ b/db/migrate/20240117135059_create_job_categories.rb @@ -0,0 +1,9 @@ +class CreateJobCategories < ActiveRecord::Migration[7.1] + def change + create_table :job_categories do |t| + t.string :name + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 00ebeef..1219f18 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,13 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_01_16_192231) do +ActiveRecord::Schema[7.1].define(version: 2024_01_17_135059) do + create_table "job_categories", force: :cascade do |t| + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "posts", force: :cascade do |t| t.integer "user_id", null: false t.string "title" @@ -37,6 +43,7 @@ t.datetime "remember_created_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "role", default: 0 t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end diff --git a/spec/factories/job_categories.rb b/spec/factories/job_categories.rb new file mode 100644 index 0000000..3e8b810 --- /dev/null +++ b/spec/factories/job_categories.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :job_category do + name { "MyString" } + end +end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 628434c..d1ca6eb 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -1,5 +1,6 @@ FactoryBot.define do factory :user do - + email { 'joao@almeida.com' } + password { '123456' } end end diff --git a/spec/models/job_category_spec.rb b/spec/models/job_category_spec.rb new file mode 100644 index 0000000..7a68a8d --- /dev/null +++ b/spec/models/job_category_spec.rb @@ -0,0 +1,4 @@ +require 'rails_helper' + +RSpec.describe JobCategory, type: :model do +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 389a52b..152a29c 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -3,7 +3,6 @@ add_filter 'channels' add_filter 'mailers' end - require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' require_relative '../config/environment' @@ -24,6 +23,7 @@ Capybara.disable_animation = true RSpec.configure do |config| + include Warden::Test::Helpers config.use_transactional_fixtures = true config.before(:each, type: :system) do diff --git a/spec/system/admin_create_job_category_spec.rb b/spec/system/admin_create_job_category_spec.rb new file mode 100644 index 0000000..76e067f --- /dev/null +++ b/spec/system/admin_create_job_category_spec.rb @@ -0,0 +1,16 @@ +require 'rails_helper' + +describe 'Usuário cria categoria de trabalho' do + it 'a partir do menu' do + user = create(:user, role: :admin) + + login_as user + visit root_path + click_on 'Categorias de trabalho' + + expect(page).to have_current_path(job_categories_path) + expect(page).to have_content('Cadastro de categorias de trabalho') + expect(page).to have_field('Nome da categoria') + expect(page).to have_button('Criar') + end +end From 9ee270d8518992db629b15ef0a7dbb648fb37948 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Wed, 17 Jan 2024 14:15:26 -0300 Subject: [PATCH 02/11] =?UTF-8?q?Inclui=20valida=C3=A7=C3=A3o=20para=20cam?= =?UTF-8?q?po=20Nome=20de=20JobCategory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cria configuração inicial do I18n para locale pt-BR Configura I18n para o model JobCategory --- app/models/job_category.rb | 1 + config/initializers/locale.rb | 5 + config/locales/job_category.pt-BR.yml | 7 + config/locales/rails.pt-BR.yml | 224 ++++++++++++++++++++++++++ spec/models/job_category_spec.rb | 10 ++ 5 files changed, 247 insertions(+) create mode 100644 config/initializers/locale.rb create mode 100644 config/locales/job_category.pt-BR.yml create mode 100644 config/locales/rails.pt-BR.yml diff --git a/app/models/job_category.rb b/app/models/job_category.rb index 9492e9a..262c6e4 100644 --- a/app/models/job_category.rb +++ b/app/models/job_category.rb @@ -1,2 +1,3 @@ class JobCategory < ApplicationRecord + validates :name, presence: true end diff --git a/config/initializers/locale.rb b/config/initializers/locale.rb new file mode 100644 index 0000000..f748d1b --- /dev/null +++ b/config/initializers/locale.rb @@ -0,0 +1,5 @@ +# Permitted locales available for the application +I18n.available_locales = [:en, :'pt-BR'] + +# Set default locale to something other than :en +I18n.default_locale = :'pt-BR' diff --git a/config/locales/job_category.pt-BR.yml b/config/locales/job_category.pt-BR.yml new file mode 100644 index 0000000..6a81ed4 --- /dev/null +++ b/config/locales/job_category.pt-BR.yml @@ -0,0 +1,7 @@ +pt-BR: + activerecord: + models: + job_category: 'Categoria de Trabalho' + attributes: + job_category: + name: 'Nome' \ No newline at end of file diff --git a/config/locales/rails.pt-BR.yml b/config/locales/rails.pt-BR.yml new file mode 100644 index 0000000..050824d --- /dev/null +++ b/config/locales/rails.pt-BR.yml @@ -0,0 +1,224 @@ +pt-BR: + activerecord: + errors: + messages: + record_invalid: 'A validação falhou: %{errors}' + restrict_dependent_destroy: + has_one: Não é possível excluir o registro pois existe um %{record} dependente + has_many: Não é possível excluir o registro pois existem %{record} dependentes + date: + abbr_day_names: + - dom + - seg + - ter + - qua + - qui + - sex + - sáb + abbr_month_names: + - + - jan + - fev + - mar + - abr + - mai + - jun + - jul + - ago + - set + - out + - nov + - dez + day_names: + - domingo + - segunda-feira + - terça-feira + - quarta-feira + - quinta-feira + - sexta-feira + - sábado + formats: + default: "%d/%m/%Y" + long: "%d de %B de %Y" + short: "%d de %B" + month_names: + - + - janeiro + - fevereiro + - março + - abril + - maio + - junho + - julho + - agosto + - setembro + - outubro + - novembro + - dezembro + order: + - :day + - :month + - :year + datetime: + distance_in_words: + about_x_hours: + one: aproximadamente %{count} hora + other: aproximadamente %{count} horas + about_x_months: + one: aproximadamente %{count} mês + other: aproximadamente %{count} meses + about_x_years: + one: aproximadamente %{count} ano + other: aproximadamente %{count} anos + almost_x_years: + one: quase %{count} ano + other: quase %{count} anos + half_a_minute: meio minuto + less_than_x_seconds: + one: menos de %{count} segundo + other: menos de %{count} segundos + less_than_x_minutes: + one: menos de um minuto + other: menos de %{count} minutos + over_x_years: + one: mais de %{count} ano + other: mais de %{count} anos + x_seconds: + one: "%{count} segundo" + other: "%{count} segundos" + x_minutes: + one: "%{count} minuto" + other: "%{count} minutos" + x_days: + one: "%{count} dia" + other: "%{count} dias" + x_months: + one: "%{count} mês" + other: "%{count} meses" + x_years: + one: "%{count} ano" + other: "%{count} anos" + prompts: + second: Segundo + minute: Minuto + hour: Hora + day: Dia + month: Mês + year: Ano + errors: + format: "%{attribute} %{message}" + messages: + accepted: deve ser aceito + blank: não pode ficar em branco + confirmation: não é igual a %{attribute} + empty: não pode ficar vazio + equal_to: deve ser igual a %{count} + even: deve ser par + exclusion: não está disponível + greater_than: deve ser maior que %{count} + greater_than_or_equal_to: deve ser maior ou igual a %{count} + in: deve estar em %{count} + inclusion: não está incluído na lista + invalid: não é válido + less_than: deve ser menor que %{count} + less_than_or_equal_to: deve ser menor ou igual a %{count} + model_invalid: 'A validação falhou: %{errors}' + not_a_number: não é um número + not_an_integer: não é um número inteiro + odd: deve ser ímpar + other_than: deve ser diferente de %{count} + present: deve ficar em branco + required: é obrigatório(a) + taken: já está em uso + too_long: + one: 'é muito longo (máximo: %{count} caracter)' + other: 'é muito longo (máximo: %{count} caracteres)' + too_short: + one: 'é muito curto (mínimo: %{count} caracter)' + other: 'é muito curto (mínimo: %{count} caracteres)' + wrong_length: + one: não possui o tamanho esperado (%{count} caracter) + other: não possui o tamanho esperado (%{count} caracteres) + template: + body: 'Por favor, verifique o(s) seguinte(s) campo(s):' + header: + one: 'Não foi possível gravar %{model}: %{count} erro' + other: 'Não foi possível gravar %{model}: %{count} erros' + helpers: + select: + prompt: Por favor selecione + submit: + create: Criar %{model} + submit: Salvar %{model} + update: Atualizar %{model} + number: + currency: + format: + delimiter: "." + format: "%u %n" + precision: 2 + separator: "," + significant: false + strip_insignificant_zeros: false + unit: R$ + format: + delimiter: "." + precision: 3 + round_mode: default + separator: "," + significant: false + strip_insignificant_zeros: false + human: + decimal_units: + format: "%n %u" + units: + billion: + one: bilhão + other: bilhões + million: + one: milhão + other: milhões + quadrillion: + one: quatrilhão + other: quatrilhões + thousand: mil + trillion: + one: trilhão + other: trilhões + unit: '' + format: + delimiter: '' + precision: 3 + significant: true + strip_insignificant_zeros: true + storage_units: + format: "%n %u" + units: + byte: + one: Byte + other: Bytes + eb: EB + gb: GB + kb: KB + mb: MB + pb: PB + tb: TB + percentage: + format: + delimiter: "." + format: "%n%" + precision: + format: + delimiter: "." + support: + array: + last_word_connector: " e " + two_words_connector: " e " + words_connector: ", " + time: + am: '' + formats: + default: "%a, %d de %B de %Y, %H:%M:%S %z" + long: "%d de %B de %Y, %H:%M" + short: "%d de %B, %H:%M" + pm: '' \ No newline at end of file diff --git a/spec/models/job_category_spec.rb b/spec/models/job_category_spec.rb index 7a68a8d..8d80302 100644 --- a/spec/models/job_category_spec.rb +++ b/spec/models/job_category_spec.rb @@ -1,4 +1,14 @@ require 'rails_helper' RSpec.describe JobCategory, type: :model do + describe '#valid?' do + it 'nome não pode ficar em branco' do + job_category = build(:job_category, name: '') + + result = job_category.valid? + + expect(result).to be false + expect(job_category.errors[:name]).to include('não pode ficar em branco') + end + end end From e5df33204532735cb1a6a18240d0ef39903cb977 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Wed, 17 Jan 2024 14:19:31 -0300 Subject: [PATCH 03/11] Configura Factory User com Trait admin --- spec/factories/users.rb | 5 +++++ spec/system/admin_create_job_category_spec.rb | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/factories/users.rb b/spec/factories/users.rb index d1ca6eb..2a153e6 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -2,5 +2,10 @@ factory :user do email { 'joao@almeida.com' } password { '123456' } + role { :user } + + trait :admin do + role { :admin } + end end end diff --git a/spec/system/admin_create_job_category_spec.rb b/spec/system/admin_create_job_category_spec.rb index 76e067f..3b76718 100644 --- a/spec/system/admin_create_job_category_spec.rb +++ b/spec/system/admin_create_job_category_spec.rb @@ -2,7 +2,7 @@ describe 'Usuário cria categoria de trabalho' do it 'a partir do menu' do - user = create(:user, role: :admin) + user = create(:user, :admin) login_as user visit root_path From 3e4fb49b7419f86b19cb49725ed704df88698207 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Wed, 17 Jan 2024 15:06:11 -0300 Subject: [PATCH 04/11] =?UTF-8?q?Autentica=20usu=C3=A1rio=20na=20p=C3=A1gi?= =?UTF-8?q?na=20de=20categorias=20de=20trabalho?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Configura tradução do I18n para o devise --- app/controllers/job_categories_controller.rb | 2 + app/views/layouts/application.html.erb | 4 + config/locales/devise.pt-BR.yml | 147 ++++++++++++++++++ spec/system/admin_create_job_category_spec.rb | 7 + 4 files changed, 160 insertions(+) create mode 100644 config/locales/devise.pt-BR.yml diff --git a/app/controllers/job_categories_controller.rb b/app/controllers/job_categories_controller.rb index e1d2240..748fa91 100644 --- a/app/controllers/job_categories_controller.rb +++ b/app/controllers/job_categories_controller.rb @@ -1,4 +1,6 @@ class JobCategoriesController < ApplicationController + before_action :authenticate_user! + def index @job_category = JobCategory.new end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 73ab212..cdea826 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -15,6 +15,10 @@ <%= render 'shared/navbar' %>
+
+ <%= alert %> + <%= notice %> +
<%= yield %>
diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml new file mode 100644 index 0000000..172efa4 --- /dev/null +++ b/config/locales/devise.pt-BR.yml @@ -0,0 +1,147 @@ +pt-BR: + activerecord: + attributes: + user: + confirmation_sent_at: Confirmação enviada em + confirmation_token: Token de confirmação + confirmed_at: Confirmado em + created_at: Criado em + current_password: Senha atual + current_sign_in_at: Atualmente logado em + current_sign_in_ip: IP do acesso atual + email: E-mail + encrypted_password: Senha criptografada + failed_attempts: Tentativas sem sucesso + last_sign_in_at: Último acesso em + last_sign_in_ip: Último IP de acesso + locked_at: Bloqueado em + password: Senha + password_confirmation: Confirme sua senha + remember_created_at: Lembrar criado em + remember_me: Lembre-se de mim + reset_password_sent_at: Resetar senha enviado em + reset_password_token: Resetar token de senha + sign_in_count: Contagem de acessos + unconfirmed_email: E-mail não confirmado + unlock_token: Token de desbloqueio + updated_at: Atualizado em + models: + user: + one: Usuário + other: Usuários + devise: + confirmations: + confirmed: A sua conta foi confirmada com sucesso. + new: + resend_confirmation_instructions: Reenviar instruções de confirmação + send_instructions: Dentro de minutos, você receberá um email com as instruções de confirmação da sua conta. + send_paranoid_instructions: Se o seu e-mail existir em nosso banco de dados, você receberá um email com instruções sobre como confirmar sua conta em alguns minutos. + failure: + already_authenticated: Você já está autenticado. + inactive: A sua conta ainda não foi ativada. + invalid: "%{authentication_keys} ou senha inválidos." + last_attempt: Você tem mais uma única tentativa antes de sua conta ser bloqueada. + locked: A sua conta está bloqueada. + not_found_in_database: "%{authentication_keys} ou senha inválidos." + timeout: A sua sessão expirou, por favor, faça login novamente para continuar. + unauthenticated: Para continuar, faça login ou registre-se. + unconfirmed: Antes de continuar, confirme a sua conta. + mailer: + confirmation_instructions: + action: Confirmar minha conta + greeting: Bem-vindo %{recipient}! + instruction: 'Você pode confirmar sua conta através do link abaixo:' + subject: Instruções de confirmação + email_changed: + greeting: Olá %{recipient}! + message: Estamos entrando em contato para notificá-lo de que seu e-mail está sendo alterado para %{email}. + message_unconfirmed: Estamos entrando em contato para notificá-lo de que seu e-mail está sendo alterado para %{email}. + subject: E-mail alterado + password_change: + greeting: Olá %{recipient}! + message: Estamos entrando em contato para notificá-lo de que sua senha foi alterada. + subject: Senha alterada + reset_password_instructions: + action: Redefinir minha senha + greeting: Olá %{recipient}! + instruction: Alguém fez o pedido para redefinir sua senha, e você pode fazer isso clicando no link abaixo. + instruction_2: Se você não fez este pedido, por favor ignore este e-mail. + instruction_3: Sua senha não será alterada até que você acesse o link acima e crie uma nova. + subject: Instruções de redefinição de senha + unlock_instructions: + action: Desbloquear minha conta + greeting: Olá %{recipient}! + instruction: 'Clique no link abaixo para desbloquear sua conta:' + message: Sua conta foi bloqueada devido ao excessivo número de tentativas acesso inválidas. + subject: Instruções de desbloqueio + omniauth_callbacks: + failure: Não foi possível autorizar de uma conta de %{kind} porque "%{reason}". + success: Autorizado com sucesso de uma conta de %{kind}. + passwords: + edit: + change_my_password: Alterar minha senha + change_your_password: Alterar sua senha + confirm_new_password: Confirme sua nova senha + new_password: Nova senha + new: + forgot_your_password: Esqueceu sua senha? + send_me_reset_password_instructions: Enviar instruções para redefinição da senha + no_token: Você não pode acessar esta página sem estar logado. Se você veio de um email de redefinição de senha, por favor certifique-se de ter digitado a URL corretamente. + send_instructions: Dentro de minutos, você receberá um e-mail com as instruções de redefinição da sua senha. + send_paranoid_instructions: Se o seu email existir em nosso banco de dados, você receberá um email com um link para recuperação da senha. + updated: A sua senha foi alterada com sucesso. Você está autenticado. + updated_not_active: Sua senha foi alterada com sucesso. + registrations: + destroyed: Adeus! A sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve. + edit: + are_you_sure: Você tem certeza? + cancel_my_account: Cancelar minha conta + currently_waiting_confirmation_for_email: 'No momento esperando por: %{email}' + leave_blank_if_you_don_t_want_to_change_it: deixe em branco caso não queira alterá-la + title: Editar %{resource} + unhappy: Não está contente? + update: Atualizar + we_need_your_current_password_to_confirm_your_changes: precisamos da sua senha atual para confirmar suas mudanças + new: + sign_up: Inscrever-se + signed_up: Boas vindas 👋 Você realizou seu cadastro com sucesso. + signed_up_but_inactive: Você se inscreveu com sucesso, porém nós não podemos autenticá-lo porque sua conta ainda não foi ativada. + signed_up_but_locked: Você se inscreveu com sucesso. Porém nós não podemos autenticá-lo porque sua conta está bloqueada. + signed_up_but_unconfirmed: Uma mensagem com um link de confirmação foi enviada para o seu e-mail. Por favor, acesse o link para ativar sua conta. + update_needs_confirmation: Sua conta foi atualizada com sucesso, mas nós precisamos verificar o novo endereço de email. Por favor, verifique seu e-mail e clique no link de confirmação para finalizar confirmando o seu novo e-mail. + updated: A sua conta foi atualizada com sucesso. + updated_but_not_signed_in: Sua conta foi atualizada com sucesso, uma vez que sua senha foi alterada será necessário realizar o login novamente. + sessions: + already_signed_out: Logout efetuado com sucesso. + new: + sign_in: Login + signed_in: Login efetuado com sucesso. + signed_out: Logout efetuado com sucesso. + shared: + links: + back: Voltar + didn_t_receive_confirmation_instructions: Não recebeu instruções de confirmação? + didn_t_receive_unlock_instructions: Não recebeu instruções de desbloqueio? + forgot_your_password: Esqueceu sua senha? + sign_in: Login + sign_in_with_provider: Entrar com %{provider} + sign_up: Inscrever-se + minimum_password_length: + one: "(Mínimo de %{count} caractere)" + other: "(Mínimo de %{count} caracteres)" + unlocks: + new: + resend_unlock_instructions: Reenviar instruções de desbloqueio + send_instructions: Dentro de minutos, você receberá um e-mail com instruções de desbloqueio da sua conta. + send_paranoid_instructions: Se sua conta existir em nosso banco de dados, você receberá em breve um e-mail com instruções para desbloquear ela. + unlocked: A sua conta foi desbloqueada com sucesso. Efetue login para continuar. + errors: + messages: + already_confirmed: já foi confirmado + confirmation_period_expired: É necessário ser confirmado dentro do período %{period}, por favor requisite um novo usuário. + expired: expirou, por favor solicite uma nova + not_found: não encontrado + not_locked: não foi bloqueado + not_saved: + one: 'Não foi possível salvar %{resource}: 1 erro' + other: 'Não foi possível salvar %{resource}: %{count} erros.' \ No newline at end of file diff --git a/spec/system/admin_create_job_category_spec.rb b/spec/system/admin_create_job_category_spec.rb index 3b76718..70a1e0d 100644 --- a/spec/system/admin_create_job_category_spec.rb +++ b/spec/system/admin_create_job_category_spec.rb @@ -1,6 +1,13 @@ require 'rails_helper' describe 'Usuário cria categoria de trabalho' do + it 'deve estar logado' do + visit job_categories_path + + expect(current_path).to eq(new_user_session_path) + expect(page).to have_content('Para continuar, faça login ou registre-se.') + end + it 'a partir do menu' do user = create(:user, :admin) From 364c6514ddc4e1e52a0ab02f3ec168db6dfecdab Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Wed, 17 Jan 2024 17:36:19 -0300 Subject: [PATCH 05/11] =?UTF-8?q?Termina=20o=20fluxo=20de=20cria=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20categoria=20de=20trabalho?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cria autorização no JobCategoryController Cria arquivos de tradução do I18n(notices, alerts) Co-authored-by: Gabriel Manika --- app/controllers/job_categories_controller.rb | 20 +++++++++++++++- app/views/job_categories/index.html.erb | 4 ++++ config/locales/alerts.pt-BR.yml | 3 +++ config/locales/notices.pt-BR.yml | 3 +++ db/schema.rb | 2 +- spec/system/admin_create_job_category_spec.rb | 24 ++++++++++++++++++- 6 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 config/locales/alerts.pt-BR.yml create mode 100644 config/locales/notices.pt-BR.yml diff --git a/app/controllers/job_categories_controller.rb b/app/controllers/job_categories_controller.rb index 748fa91..f6ad239 100644 --- a/app/controllers/job_categories_controller.rb +++ b/app/controllers/job_categories_controller.rb @@ -1,7 +1,25 @@ class JobCategoriesController < ApplicationController - before_action :authenticate_user! + before_action :authenticate_user!, :is_user_admin? def index @job_category = JobCategory.new + @job_categories = JobCategory.all + end + + def create + job_category_params = params.require(:job_category).permit(:name) + @job_category = JobCategory.new(job_category_params) + if @job_category.save + return redirect_to job_categories_path, notice: t('notices.job_category_created') + end + render :index + end + + private + + def is_user_admin? + unless current_user.admin? + return redirect_to root_path, alert: t('alerts.unauthorized') + end end end diff --git a/app/views/job_categories/index.html.erb b/app/views/job_categories/index.html.erb index 692be8e..ec04f0d 100644 --- a/app/views/job_categories/index.html.erb +++ b/app/views/job_categories/index.html.erb @@ -8,4 +8,8 @@
<%= f.submit 'Criar' %>
+<% end %> + +<% @job_categories.each do |category| %> + <%= category.name %> <% end %> \ No newline at end of file diff --git a/config/locales/alerts.pt-BR.yml b/config/locales/alerts.pt-BR.yml new file mode 100644 index 0000000..a23026e --- /dev/null +++ b/config/locales/alerts.pt-BR.yml @@ -0,0 +1,3 @@ +pt-BR: + alerts: + unauthorized: 'Você não têm permissão para realizar essa ação.' \ No newline at end of file diff --git a/config/locales/notices.pt-BR.yml b/config/locales/notices.pt-BR.yml new file mode 100644 index 0000000..be68ad3 --- /dev/null +++ b/config/locales/notices.pt-BR.yml @@ -0,0 +1,3 @@ +pt-BR: + notices: + job_category_created: Categoria de Trabalho criada com sucesso! \ No newline at end of file diff --git a/db/schema.rb b/db/schema.rb index e467d21..b73e504 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -42,8 +42,8 @@ t.datetime "remember_created_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.integer "role", default: 0 t.string "full_name" + t.integer "role", default: 0 t.string "citizen_id_number" t.index ["citizen_id_number"], name: "index_users_on_citizen_id_number" t.index ["email"], name: "index_users_on_email", unique: true diff --git a/spec/system/admin_create_job_category_spec.rb b/spec/system/admin_create_job_category_spec.rb index 70a1e0d..b5adc8d 100644 --- a/spec/system/admin_create_job_category_spec.rb +++ b/spec/system/admin_create_job_category_spec.rb @@ -1,12 +1,21 @@ require 'rails_helper' describe 'Usuário cria categoria de trabalho' do - it 'deve estar logado' do + it 'e deve estar logado' do visit job_categories_path expect(current_path).to eq(new_user_session_path) expect(page).to have_content('Para continuar, faça login ou registre-se.') end + it 'e deve ser administrador' do + user = create(:user) + + login_as user + visit job_categories_path + + expect(page).to have_current_path(root_path) + expect(page).to have_content('Você não têm permissão para realizar essa ação.') + end it 'a partir do menu' do user = create(:user, :admin) @@ -20,4 +29,17 @@ expect(page).to have_field('Nome da categoria') expect(page).to have_button('Criar') end + + it 'com sucesso' do + admin = create(:user, :admin) + + login_as admin + visit job_categories_path + fill_in 'Nome da categoria', with: 'Web Design' + click_on 'Criar' + + expect(page).to have_current_path(job_categories_path) + expect(page).to have_content('Categoria de Trabalho criada com sucesso!') + expect(page).to have_content('Web Design') + end end From ee54dfeef6b295807c5e4d2549b0e6d9bb3f651d Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Wed, 17 Jan 2024 17:52:34 -0300 Subject: [PATCH 06/11] Corrige ofensas do rubocop Co-authored-by: Gabriel Manika --- app/controllers/job_categories_controller.rb | 15 ++++++++------- spec/factories/job_categories.rb | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/controllers/job_categories_controller.rb b/app/controllers/job_categories_controller.rb index f6ad239..e6d1954 100644 --- a/app/controllers/job_categories_controller.rb +++ b/app/controllers/job_categories_controller.rb @@ -1,5 +1,5 @@ class JobCategoriesController < ApplicationController - before_action :authenticate_user!, :is_user_admin? + before_action :authenticate_user!, :user_admin? def index @job_category = JobCategory.new @@ -10,16 +10,17 @@ def create job_category_params = params.require(:job_category).permit(:name) @job_category = JobCategory.new(job_category_params) if @job_category.save - return redirect_to job_categories_path, notice: t('notices.job_category_created') + redirect_to job_categories_path, notice: t('notices.job_category_created') + else + render :index end - render :index end private - def is_user_admin? - unless current_user.admin? - return redirect_to root_path, alert: t('alerts.unauthorized') - end + def user_admin? + return if current_user.admin? + + redirect_to root_path, alert: t('alerts.unauthorized') end end diff --git a/spec/factories/job_categories.rb b/spec/factories/job_categories.rb index 3e8b810..f60d469 100644 --- a/spec/factories/job_categories.rb +++ b/spec/factories/job_categories.rb @@ -1,5 +1,5 @@ FactoryBot.define do factory :job_category do - name { "MyString" } + name { 'Web Design' } end end From b015d794ff7a37a5bf1f846c6c32a681c7ae2bee Mon Sep 17 00:00:00 2001 From: Gabriel Manika Koeb Date: Thu, 18 Jan 2024 10:28:36 -0300 Subject: [PATCH 07/11] =?UTF-8?q?Adiciona=20alertas=20de=20erro=20em=20cas?= =?UTF-8?q?os=20de=20falha=20de=20envio=20de=20formul=C3=A1rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Paulo Henrique Reis --- app/controllers/job_categories_controller.rb | 4 +++- app/views/job_categories/index.html.erb | 12 ++++++++++-- config/locales/alerts.pt-BR.yml | 3 ++- spec/system/admin_create_job_category_spec.rb | 12 ++++++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/app/controllers/job_categories_controller.rb b/app/controllers/job_categories_controller.rb index e6d1954..38210ac 100644 --- a/app/controllers/job_categories_controller.rb +++ b/app/controllers/job_categories_controller.rb @@ -12,7 +12,9 @@ def create if @job_category.save redirect_to job_categories_path, notice: t('notices.job_category_created') else - render :index + @job_categories = JobCategory.all + flash.now[:alert] = t('alerts.job_category_fail') + render 'index', status: :internal_server_error end end diff --git a/app/views/job_categories/index.html.erb b/app/views/job_categories/index.html.erb index ec04f0d..7f06079 100644 --- a/app/views/job_categories/index.html.erb +++ b/app/views/job_categories/index.html.erb @@ -1,4 +1,13 @@

Cadastro de categorias de trabalho

+<% if @job_category.errors.any? %> +
+
    + <% @job_category.errors.each do |error| %> +
  • <%= error.full_message %>
  • + <% end %> +
+
+<% end %> <%= form_with model: @job_category do |f| %>
@@ -9,7 +18,6 @@ <%= f.submit 'Criar' %>
<% end %> - <% @job_categories.each do |category| %> <%= category.name %> -<% end %> \ No newline at end of file +<% end %> diff --git a/config/locales/alerts.pt-BR.yml b/config/locales/alerts.pt-BR.yml index a23026e..c3040f9 100644 --- a/config/locales/alerts.pt-BR.yml +++ b/config/locales/alerts.pt-BR.yml @@ -1,3 +1,4 @@ pt-BR: alerts: - unauthorized: 'Você não têm permissão para realizar essa ação.' \ No newline at end of file + unauthorized: 'Você não têm permissão para realizar essa ação.' + job_category_fail: Não foi possível cadastrar Categoria de Trabalho. \ No newline at end of file diff --git a/spec/system/admin_create_job_category_spec.rb b/spec/system/admin_create_job_category_spec.rb index b5adc8d..6ee3432 100644 --- a/spec/system/admin_create_job_category_spec.rb +++ b/spec/system/admin_create_job_category_spec.rb @@ -7,6 +7,7 @@ expect(current_path).to eq(new_user_session_path) expect(page).to have_content('Para continuar, faça login ou registre-se.') end + it 'e deve ser administrador' do user = create(:user) @@ -42,4 +43,15 @@ expect(page).to have_content('Categoria de Trabalho criada com sucesso!') expect(page).to have_content('Web Design') end + + it 'com dados faltando' do + admin = create(:user, :admin) + + login_as admin + visit job_categories_path + click_on 'Criar' + + expect(page).to have_content('Não foi possível cadastrar Categoria de Trabalho.') + expect(page).to have_content('Nome não pode ficar em branco') + end end From 33382ce5899205221084c8881ef2d7917d6d1f8b Mon Sep 17 00:00:00 2001 From: Gabriel Manika Koeb Date: Thu, 18 Jan 2024 10:44:37 -0300 Subject: [PATCH 08/11] =?UTF-8?q?Protege=20link=20de=20cria=C3=A7=C3=A3o?= =?UTF-8?q?=20de=20categorias=20de=20trabalho?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Garante que o link de criação de categorias de trabalho apareça somente para usuários administradores --- app/views/shared/_navbar.html.erb | 6 ++++- spec/system/admin_views_job_category_spec.rb | 25 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 spec/system/admin_views_job_category_spec.rb diff --git a/app/views/shared/_navbar.html.erb b/app/views/shared/_navbar.html.erb index 1980122..5ae067a 100644 --- a/app/views/shared/_navbar.html.erb +++ b/app/views/shared/_navbar.html.erb @@ -1,3 +1,7 @@ \ No newline at end of file diff --git a/spec/system/admin_views_job_category_spec.rb b/spec/system/admin_views_job_category_spec.rb new file mode 100644 index 0000000..66d5df3 --- /dev/null +++ b/spec/system/admin_views_job_category_spec.rb @@ -0,0 +1,25 @@ +require 'rails_helper' + +describe 'Usuário vê categorias de trabalho' do + it 'a partir da home' do + admin = create(:user, :admin) + create(:job_category, name: 'Web Design') + create(:job_category, name: 'Professor') + + login_as admin + visit root_path + click_on 'Categorias de trabalho' + + expect(page).to have_content 'Web Design' + expect(page).to have_content 'Professor' + end + + it 'e não vê o link se não for administrador' do + user = create(:user) + + login_as user + visit root_path + + expect(page).not_to have_link 'Categorias de trabalho' + end +end From 1b0c8a5d073e27ecc99b1940fa8a8c239b34ae21 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Thu, 18 Jan 2024 02:42:24 -0300 Subject: [PATCH 09/11] =?UTF-8?q?Cria=20testes=20de=20requests=20e=20unit?= =?UTF-8?q?=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Testa post na rota de criação de categoria de trabalho Cria nova validação de unicidade para nome de categoria de trabalho Co-authored-by: Gabriel Manika --- app/models/job_category.rb | 1 + app/views/shared/_navbar.html.erb | 6 ++---- spec/models/job_category_spec.rb | 10 ++++++++++ .../requests/admin_create_job_category_spec.rb | 18 ++++++++++++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 spec/requests/admin_create_job_category_spec.rb diff --git a/app/models/job_category.rb b/app/models/job_category.rb index 262c6e4..bf39734 100644 --- a/app/models/job_category.rb +++ b/app/models/job_category.rb @@ -1,3 +1,4 @@ class JobCategory < ApplicationRecord validates :name, presence: true + validates :name, uniqueness: { case_sensitive: false } end diff --git a/app/views/shared/_navbar.html.erb b/app/views/shared/_navbar.html.erb index 5ae067a..440e18b 100644 --- a/app/views/shared/_navbar.html.erb +++ b/app/views/shared/_navbar.html.erb @@ -1,7 +1,5 @@ \ No newline at end of file diff --git a/spec/models/job_category_spec.rb b/spec/models/job_category_spec.rb index 8d80302..4f7d887 100644 --- a/spec/models/job_category_spec.rb +++ b/spec/models/job_category_spec.rb @@ -10,5 +10,15 @@ expect(result).to be false expect(job_category.errors[:name]).to include('não pode ficar em branco') end + + it 'nome deve ser único' do + create(:job_category, name: 'Web Design') + job_category = build(:job_category, name: 'web design') + + result = job_category.valid? + + expect(result).to be false + expect(job_category.errors[:name]).to include('já está em uso') + end end end diff --git a/spec/requests/admin_create_job_category_spec.rb b/spec/requests/admin_create_job_category_spec.rb new file mode 100644 index 0000000..36db214 --- /dev/null +++ b/spec/requests/admin_create_job_category_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +describe 'Usuário cria categoria de trabalho' do + it 'e deve estar logado' do + post job_categories_path, params: { job_category: { name: 'Web Design' } } + + expect(response).to redirect_to(new_user_session_path) + end + + it 'e deve ser administrador' do + user = create(:user) + + login_as user + post job_categories_path, params: { job_category: { name: 'Web Design' } } + + expect(response).to redirect_to(root_path) + end +end From 287e1a0a502b880cceb946550f01a33dbd66fa2e Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Thu, 18 Jan 2024 02:52:06 -0300 Subject: [PATCH 10/11] Corrige ofensas rubocop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cria validação de unicidade para nome de categoria de trabalho no banco de dados Co-authored-by: Gabriel Manika --- ...40118054350_add_unique_constraint_to_job_category_name.rb | 5 +++++ db/schema.rb | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20240118054350_add_unique_constraint_to_job_category_name.rb diff --git a/db/migrate/20240118054350_add_unique_constraint_to_job_category_name.rb b/db/migrate/20240118054350_add_unique_constraint_to_job_category_name.rb new file mode 100644 index 0000000..3cfc12b --- /dev/null +++ b/db/migrate/20240118054350_add_unique_constraint_to_job_category_name.rb @@ -0,0 +1,5 @@ +class AddUniqueConstraintToJobCategoryName < ActiveRecord::Migration[7.1] + def change + add_index :job_categories, :name, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index b73e504..91e6a29 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,12 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_01_17_135059) do +ActiveRecord::Schema[7.1].define(version: 2024_01_18_054350) do create_table "job_categories", force: :cascade do |t| t.string "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.index ["name"], name: "index_job_categories_on_name", unique: true end create_table "posts", force: :cascade do |t| From 6a85ec616de934a9cd94629b2e6f3cb9191960d0 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Fri, 19 Jan 2024 10:31:03 -0300 Subject: [PATCH 11/11] =?UTF-8?q?Aplica=20sugest=C3=B5es=20feitas=20na=20r?= =?UTF-8?q?eview=20do=20PR.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Altera testes de requests para ficarem mais completos. Muda enum de role do usuário. Muda nome de método de autorização de admin. Co-authored-by: Gabriel Manika --- app/controllers/job_categories_controller.rb | 4 +- app/models/user.rb | 2 +- app/views/job_categories/index.html.erb | 44 ++++++++++++------- spec/models/job_category_spec.rb | 8 +--- .../admin_create_job_category_spec.rb | 16 +++++++ spec/system/admin_create_job_category_spec.rb | 26 +++++------ 6 files changed, 61 insertions(+), 39 deletions(-) diff --git a/app/controllers/job_categories_controller.rb b/app/controllers/job_categories_controller.rb index 38210ac..b113ca2 100644 --- a/app/controllers/job_categories_controller.rb +++ b/app/controllers/job_categories_controller.rb @@ -1,5 +1,5 @@ class JobCategoriesController < ApplicationController - before_action :authenticate_user!, :user_admin? + before_action :authenticate_user!, :authorize! def index @job_category = JobCategory.new @@ -20,7 +20,7 @@ def create private - def user_admin? + def authorize! return if current_user.admin? redirect_to root_path, alert: t('alerts.unauthorized') diff --git a/app/models/user.rb b/app/models/user.rb index 709b1b7..c9f596f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -6,5 +6,5 @@ class User < ApplicationRecord has_one :profile, dependent: :destroy has_many :posts, dependent: :destroy - enum role: { user: 0, admin: 2 } + enum role: { user: 0, admin: 10 } end diff --git a/app/views/job_categories/index.html.erb b/app/views/job_categories/index.html.erb index 7f06079..b2d038d 100644 --- a/app/views/job_categories/index.html.erb +++ b/app/views/job_categories/index.html.erb @@ -1,23 +1,33 @@

Cadastro de categorias de trabalho

-<% if @job_category.errors.any? %> -
+ + <% if @job_category.errors.any? %>
    <% @job_category.errors.each do |error| %> -
  • <%= error.full_message %>
  • +
  • <%= error.full_message %>
  • <% end %>
-
-<% end %> + <% end %> + + <%= form_with model: @job_category do |f| %> + <%= f.label :name, 'Nome da categoria', class: "form-label" %> +
+
+ <%= f.text_field :name, class: "form-control", placeholder: "Ex: Web Design, Modelagem 3D" %> +
+
+ <%= f.submit 'Criar', class: "btn btn-primary" %> +
+
+ <% end %> + +
+

Categorias de trabalho cadastradas

+
    + <% @job_categories.each do |category| %> +
  • <%= category.name %>
  • + <% end %> +
+
+ + -<%= form_with model: @job_category do |f| %> -
- <%= f.label :name, 'Nome da categoria' %> - <%= f.text_field :name %> -
-
- <%= f.submit 'Criar' %> -
-<% end %> -<% @job_categories.each do |category| %> - <%= category.name %> -<% end %> diff --git a/spec/models/job_category_spec.rb b/spec/models/job_category_spec.rb index 4f7d887..d2a8a2a 100644 --- a/spec/models/job_category_spec.rb +++ b/spec/models/job_category_spec.rb @@ -5,9 +5,7 @@ it 'nome não pode ficar em branco' do job_category = build(:job_category, name: '') - result = job_category.valid? - - expect(result).to be false + expect(job_category).not_to be_valid expect(job_category.errors[:name]).to include('não pode ficar em branco') end @@ -15,9 +13,7 @@ create(:job_category, name: 'Web Design') job_category = build(:job_category, name: 'web design') - result = job_category.valid? - - expect(result).to be false + expect(job_category).not_to be_valid expect(job_category.errors[:name]).to include('já está em uso') end end diff --git a/spec/requests/admin_create_job_category_spec.rb b/spec/requests/admin_create_job_category_spec.rb index 36db214..e8d028f 100644 --- a/spec/requests/admin_create_job_category_spec.rb +++ b/spec/requests/admin_create_job_category_spec.rb @@ -1,10 +1,24 @@ require 'rails_helper' describe 'Usuário cria categoria de trabalho' do + it 'com sucesso' do + admin = create(:user, :admin) + + login_as admin + post job_categories_path, params: { job_category: { name: 'Web Design' } } + + expect(response).to redirect_to(job_categories_path) + expect(JobCategory.count).to eq(1) + expect(JobCategory.last.name).to eq('Web Design') + expect(flash[:notice]).to eq('Categoria de Trabalho criada com sucesso!') + end + it 'e deve estar logado' do post job_categories_path, params: { job_category: { name: 'Web Design' } } expect(response).to redirect_to(new_user_session_path) + expect(JobCategory.count).to eq(0) + expect(flash[:alert]).to eq('Para continuar, faça login ou registre-se.') end it 'e deve ser administrador' do @@ -14,5 +28,7 @@ post job_categories_path, params: { job_category: { name: 'Web Design' } } expect(response).to redirect_to(root_path) + expect(JobCategory.count).to eq(0) + expect(flash[:alert]).to eq('Você não têm permissão para realizar essa ação.') end end diff --git a/spec/system/admin_create_job_category_spec.rb b/spec/system/admin_create_job_category_spec.rb index 6ee3432..68ac534 100644 --- a/spec/system/admin_create_job_category_spec.rb +++ b/spec/system/admin_create_job_category_spec.rb @@ -1,6 +1,19 @@ require 'rails_helper' describe 'Usuário cria categoria de trabalho' do + it 'com sucesso' do + admin = create(:user, :admin) + + login_as admin + visit job_categories_path + fill_in 'Nome da categoria', with: 'Web Design' + click_on 'Criar' + + expect(page).to have_current_path(job_categories_path) + expect(page).to have_content('Categoria de Trabalho criada com sucesso!') + expect(page).to have_content('Web Design') + end + it 'e deve estar logado' do visit job_categories_path @@ -31,19 +44,6 @@ expect(page).to have_button('Criar') end - it 'com sucesso' do - admin = create(:user, :admin) - - login_as admin - visit job_categories_path - fill_in 'Nome da categoria', with: 'Web Design' - click_on 'Criar' - - expect(page).to have_current_path(job_categories_path) - expect(page).to have_content('Categoria de Trabalho criada com sucesso!') - expect(page).to have_content('Web Design') - end - it 'com dados faltando' do admin = create(:user, :admin)