Adds def create and test units, must fix a test

This commit is contained in:
Lou 2021-05-10 21:34:13 +02:00
commit bfda3e561b
6 changed files with 47 additions and 5 deletions

View file

@ -10,10 +10,21 @@ class Api::V1::TasksController < ApplicationController
render json: TaskSerializer.new(@task).serializable_hash.to_json
end
def create
task = current_user.tasks.build(task_params)
task.activity_id = params[:activity_id]
if task.save
render json: TaskSerializer.new(task).serializable_hash.to_json,
status: :created
else
render json: { errors: activity.errors }, status: :unprocessable_entity
end
end
private
def task_params
params.require(:task).permit(:name, :description, :user_id, :activity_id)
params.require(:task).permit(:name, :description, :activity_id)
end
def set_task

View file

@ -1,7 +1,8 @@
class CreateTasks < ActiveRecord::Migration[6.1]
def change
create_table :tasks do |t|
t.string :name, index: true
t.string :name, null: false
t.index :name
t.text :description
t.references :activity, null: false
t.references :user, null: false

View file

@ -33,7 +33,7 @@ ActiveRecord::Schema.define(version: 2021_05_10_133939) do
end
create_table "tasks", force: :cascade do |t|
t.string "name"
t.string "name", null: false
t.text "description"
t.integer "activity_id", null: false
t.integer "user_id", null: false

View file

@ -29,7 +29,7 @@ Task.reset_pk_sequence
end
end
10.times do |i|
30.times do |i|
task = Task.create(
name: Faker::Fantasy::Tolkien.character,
description: Faker::Fantasy::Tolkien.poem,

View file

@ -51,7 +51,7 @@ class Api::V1::ActivitiesControllerTest < ActionDispatch::IntegrationTest
test "should create activity" do
assert_difference("Activity.count") do
post api_v1_activities_url,
params: { activity: { name: @activity.name, client: @activity.client, description: @activity.description, author_id: @user }},
params: { activity: { name: @activity.name, client: @activity.client, description: @activity.description, author_id: @user } },
headers: { Authorization: JsonWebToken.encode(user_id: @activity.author_id) },
as: :json
end

View file

@ -34,4 +34,34 @@ class Api::V1::TasksControllerTest < ActionDispatch::IntegrationTest
as: :json
assert_response :forbidden
end
# CREATE
test "should create task" do
assert_difference("Task.count") do
post api_v1_activity_tasks_url(@activity),
params: { task: { name: @task.name, description: @task.description, user_id: @user, activity_id: @activity } },
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
as: :json
end
assert_response :created
end
test "should forbid create task - not logged in" do
assert_no_difference("Task.count") do
post api_v1_activity_tasks_url(@activity),
params: { task: { name: @task.name, description: @task.description, user_id: @user, activity_id: @activity } },
as: :json
end
assert_response :forbidden
end
test "should forbid create task - missing user or activity id" do
assert_no_difference("Task.count") do
post api_v1_activity_tasks_url(@activity),
params: { task: { name: @task.name, description: @task.description } },
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
as: :json
end
assert_response :forbidden
end
end