methods index show create pour le controller JoinedTeamUser

This commit is contained in:
Lou 2021-08-05 16:08:57 +02:00
commit 4d1ff2a451
7 changed files with 107 additions and 5 deletions

View file

@ -0,0 +1,35 @@
class Api::V1::JoinedTeamUsersController < ApplicationController
before_action :set_joinedTeamUsers, only: %i[show update destroy]
before_action :check_login
def index
render json: JoinedTeamUserSerializer.new(JoinedTeamUser.all).serializable_hash.to_json
end
def show
render json: JoinedTeamUserSerializer.new(@joinedTeamUser).serializable_hash.to_json
end
def create
userId = User.find_by(username: params[:joinedTeamUser][:username]).id
teamId = Team.find_by(name: params[:joinedTeamUser][:team_name]).id
jtu = JoinedTeamUser.new(team_id: teamId, user_id: userId, can_edit: false)
if jtu.save
render json: JoinedTeamUserSerializer.new(jtu).serializable_hash.to_json, status: :created
else
render json: { errors: jtu.errors }, status: :unprocessable_entity
end
end
private
def joinedTeamUsers_params
params.require(:joinedTeamUser).permit(:team_id, :user_id, :can_edit, :created_at, :updated_at)
end
def set_joinedTeamUsers
@joinedTeamUser = JoinedTeamUser.find(params[:id])
end
end

View file

@ -1,7 +1,8 @@
class JoinedTeamUser < ApplicationRecord
# validates_associated :team, on: :create
# validates_associated :user, on: :create
validates_uniqueness_of :user_id, scope: :team_id, message: "user already part of this team"
belongs_to :user
belongs_to :team
validates_associated :user, on: :create
validates_associated :team, on: :create
end

View file

@ -0,0 +1,6 @@
class JoinedTeamUserSerializer
include JSONAPI::Serializer
attributes :team_id, :user_id, :can_edit
cache_options store: Rails.cache, namespace: 'jsonapi-serializer', expires_in: 1.hour
end

View file

@ -4,6 +4,7 @@ Rails.application.routes.draw do
resources :users
resources :tokens, only: %i[create]
resources :teams
resources :joined_team_users
resources :activities do
resources :tasks
end

View file

@ -42,7 +42,7 @@ end
team_id: Team.all.sample.id,
can_edit: true
)
puts "USER ##{joined_team_users.user_id} joined TEAM ##{joined_team_users.team_id}"
# puts "USER ##{joined_team_users.user_id} joined TEAM ##{joined_team_users.team_id}"
end
User.create! username: "admin", email: "admin@email.com", password: "azerty", is_admin: true

View file

@ -0,0 +1,59 @@
require "test_helper"
class Api::V1::JoinedTeamUsersControllerTest < ActionDispatch::IntegrationTest
setup do
@joinedTeamUser = joined_team_users(:one)
@user = users(:one)
@team = teams(:one)
end
# INDEX
test "should access JoinedTeamUser index" do
get api_v1_joined_team_users_url,
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
as: :json
assert_response :success
end
test "should forbid JoinedTeamUser index" do
get api_v1_joined_team_users_url,
as: :json
assert_response :forbidden
end
# SHOW
test "should show JoinedTeamUser" do
get api_v1_joined_team_users_url(@joinedTeamUser),
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
as: :json
assert_response :success
end
test "should forbid show JoinedTeamUser" do
get api_v1_joined_team_users_url(@joinedTeamUser),
as: :json
assert_response :forbidden
end
# CREATE
test "should create joinedTeamUser" do
assert_difference("JoinedTeamUser.count") do
post api_v1_joined_team_users_url,
params: { joinedTeamUser: { team_id: @team.id, user_id: @user.id, can_edit: false } },
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
as: :json
end
assert_response :created
end
test "should forbid create joinedTeamUser" do
assert_no_difference("JoinedTeamUser.count") do
post api_v1_joined_team_users_url,
params: { joinedTeamUser: { team_id: @team.id, user_id: @user.id, can_edit: false } },
as: :json
end
assert_response :forbidden
end
end

View file

@ -44,7 +44,7 @@ class Api::V1::TeamsControllerTest < ActionDispatch::IntegrationTest
assert_response :created
end
test "should forbid create team when not logged in" do
test "should forbid create team" do
assert_no_difference('Team.count') do
post api_v1_teams_url,
params: { team: { name: "Random name", description: "Random description" } },