Skip to content

Update ruby and rails#24

Open
SKuripko wants to merge 2 commits intokodolabs:masterfrom
SKuripko:master
Open

Update ruby and rails#24
SKuripko wants to merge 2 commits intokodolabs:masterfrom
SKuripko:master

Conversation

@SKuripko
Copy link
Copy Markdown

No description provided.

@@ -1,16 +1,17 @@
source 'https://rubygems.org'

ruby '2.6.3'
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

когда делаются апдейты разного рода, как здесь, например - их нужно делать не просто разными коммитами, но и разными ПРами, чтобы можно было рассматривать и принимать раздельно

# frozen_string_literal: true

class PayrollsController < ApplicationController
skip_before_action :verify_authenticity_token
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а с чего бы тут отменять верификацию формы?
это делается только если контроллер принимает внешние запросы

end

def create
CreatePayrollQuery.new(start_date: params[:start_date], end_date: params[:end_date]).invoke
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

в условиях задачи нет ручного ввода даты, поэтому непонятно зачем тут они передаются

@new_payroll = Payroll.new
end
end
end No newline at end of file
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

отсутствует перенос строки в конце файла, это нарушение code style

# frozen_string_literal: true

class CreatePayrollQuery
DEFAULT_START_DATE = DateTime.new(Time.now.year, Time.now.month, 5)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

изначально, созданием ДВУХ констант ты ограничиваешь свободу и лишаешь себя возможности гибко настроить систему на одну или три даты

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

дублирование кода Time.now.year/Time.now.month
к тому же нет гарантии что эти даты будут в прошлом или будущем

RSpec.describe CreatePayrollQuery do
describe '#invoke' do
it 'should return new pay_roll with first half of month' do
Payroll.destroy_all
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это лишнее, в начале тестов БД очищается автоматически


RSpec.describe CreatePayrollQuery do
describe '#invoke' do
it 'should return new pay_roll with first half of month' do
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

давно уже плохой стиль использовать "should" в тестах (потому что масло масляное)
нужно писать в императивном стиле it 'returns new payroll'
если есть какие-то условия, то тест оборачивается в context

context 'with existing payroll' do 
  it 'creates payroll with closest dates' do 
  end
end

last_pay_roll = Payroll.last

expect(Payroll.count).to eq(2)
expect(last_pay_roll.starts_at.day).to eq(20)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

в тесте нет полной проверки даты, так что какой-нибудь 21 год тоже даст зеленый тест, но это будет ошибкой

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

разные проверки нужно разносить в разные тесты

context 'with existing payroll' do 
  before { create payroll }

  it 'increases DB entities' do 
    expect {described_class.new({}).invoke}.to change(Payroll, :count).by(1) 
  end
 
  it 'creates payroll with correct dates' do 
    ...
  end
end


last_pay_roll = Payroll.last

expect(Payroll.count).to eq(2)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

некоторые проверки нет смысла повторять из теста в тест - достаточно одного раза

expect(last_pay_roll.ends_at.day).to eq(19)
end

it 'should return new pay_roll with specific date' do
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тест должен быть настолько минималистичен, насколько это возможно
все общие места выносятся в before

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants