Летом закончила курсы по Rails, до этого много лет работала бухгалтером. Сделала тестовое: API для заметок на Rails 7.1 с регистрацией, CRUD и пагинацией, сидела неделю. Ответ пришёл через три дня одной строкой: «слабовато, удачи». Что именно слабовато, не написали. Кусок контроллера ниже, тесты есть только на модель.
class NotesController < ApplicationController
def index
@notes = Note.where(user_id: params[:user_id]).page(params[:page])
render json: @notes
end
def update
note = Note.find(params[:id])
note.update(params.require(:note).permit(:title, :body))
render json: note
end
end
Подскажите, куда смотреть. Это уже четвёртое тестовое, и я начинаю думать, что дело во мне.
Дело не в тебе, а в двух вещах, которые видно сразу. Первая: user_id берётся из параметров, то есть любой прочитает чужие заметки, а в update заметка ищется вообще без привязки к пользователю. На безопасность смотрят первым делом и часто дальше уже не читают. Вторая: результат update не проверяется, при ошибке валидации клиент получит 200 и старые данные. И для API нужны тесты на запросы. Код при этом аккуратный, дотянуть несложно.
Как это может выглядеть после правок, о которых пишет Егор:
def index
notes = current_user.notes.order(created_at: :desc).page(params[:page])
render json: notes
end
def update
note = current_user.notes.find(params[:id])
if note.update(note_params)
render json: note
else
render json: { errors: note.errors }, status: :unprocessable_entity
end
end
current_user.notes.find заодно бесплатно даёт 404 на чужую заметку. И положи README, его читают раньше кода.
В Москве на тестовые отвечают так же односложно. Помогает строчка в письме: «вот что я бы доделала, будь у меня ещё день»
Спасибо всем, и Егор64 отдельно за прямоту. Переделала: всё через current_user, ошибки валидации с 422, добавила восемь request-спеков и README. Отправила на следующую вакансию, и меня позвали на техническое собеседование в офис на Петроградке. Из Кудрово ехать час с лишним, но ради такого доеду. Про собеседование напишу, когда переживу)