/
kickrich
/
ProjectUniversityPractice
Обзор
Документация
Войти
/
kickrich
/
ProjectUniversityPractice
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/controllers/tasks_controller.rb
91 строка
2 KB
kickrich
add tests for projects controller and tasks controller
18 июл 2025, 01:43
18 июл 2025, 01:43
2c3bf7e
Код
Авторство
О чём код?
class TasksController < ApplicationController before_action :authenticate_user! before_action :set_project before_action :set_task, only: [ :show, :edit, :update, :destroy, :update_status ] def index @project = current_user.projects.find(params[:project_id]) @tasks_by_status = @project.tasks.group_by(&:status) @statuses = [ "To Do", "In Progress", "In Testing", "Rejected", "Done" ] end def show redirect_to project_tasks_path(@project) end def new redirect_to project_tasks_path(@project) end def create @task = @project.tasks.new(task_params.merge(status: "To Do")) @task.save redirect_to project_tasks_path(@project) end def edit respond_to do |format| format.js format.any { redirect_to project_tasks_path(@project) } end end def update @task.update(task_params) redirect_to project_tasks_path(@project) end def destroy @task.destroy redirect_to project_tasks_path(@project) end def update_status old_status = @task.status new_status = task_params[:status] if old_status == new_status render json: { message: "Status not changed" }, status: :ok return end unless valid_status_transitions?(old_status, new_status) render json: { errors: [ "Invalid status transition from #{old_status} to #{new_status}" ] }, status: :unprocessable_entity return end if @task.update(status: new_status) render json: { message: "Status updated successfully" }, status: :ok else render json: { errors: @task.errors.full_messages }, status: :unprocessable_entity end end private def valid_status_transitions?(old_status, new_status) allowed_transitions = { "To Do" => [ "In Progress" ], "In Progress" => [ "In Testing", "To Do" ], "In Testing" => [ "Done", "Rejected" ], "Rejected" => [ "In Progress" ] } allowed_transitions[old_status]&.include?(new_status) || false end def set_project @project = current_user.projects.find_by(id: params[:project_id]) if @project.nil? redirect_to root_path end end def set_task @task = @project.tasks.find(params[:id]) end def task_params params.require(:task).permit(:status, :title, :description) end end