Merge fix_membership into master #13
13 changed files with 189 additions and 113 deletions
4
.dockerignore
Normal file
4
.dockerignore
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
erd.pdf
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.gitattributes
|
||||||
65
Dockerfile
Normal file
65
Dockerfile
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
#
|
||||||
|
# This is an unofficial Alpine image embedding rbenv
|
||||||
|
# Inspired by https://github.com/didlich/docker-alpine-rbenv/blob/master/Dockerfile
|
||||||
|
#
|
||||||
|
|
||||||
|
FROM alpine:3.15
|
||||||
|
|
||||||
|
RUN apk add --update \
|
||||||
|
bash \
|
||||||
|
git \
|
||||||
|
wget \
|
||||||
|
curl \
|
||||||
|
vim \
|
||||||
|
build-base \
|
||||||
|
readline-dev \
|
||||||
|
openssl-dev \
|
||||||
|
zlib-dev \
|
||||||
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
|
# rbenv
|
||||||
|
ENV PATH /usr/local/rbenv/shims:/usr/local/rbenv/bin:$PATH
|
||||||
|
ENV RBENV_ROOT /usr/local/rbenv
|
||||||
|
ENV RUBY_VERSION 3.0.2
|
||||||
|
ENV CONFIGURE_OPTS --disable-install-doc
|
||||||
|
|
||||||
|
RUN apk add --update \
|
||||||
|
linux-headers \
|
||||||
|
imagemagick-dev \
|
||||||
|
libffi-dev \
|
||||||
|
libffi-dev \
|
||||||
|
libpq-dev \
|
||||||
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
|
RUN git clone --depth 1 git://github.com/sstephenson/rbenv.git ${RBENV_ROOT} \
|
||||||
|
&& git clone --depth 1 https://github.com/sstephenson/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build \
|
||||||
|
&& git clone --depth 1 git://github.com/jf/rbenv-gemset.git ${RBENV_ROOT}/plugins/rbenv-gemset \
|
||||||
|
&& ${RBENV_ROOT}/plugins/ruby-build/install.sh
|
||||||
|
|
||||||
|
RUN echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh
|
||||||
|
|
||||||
|
RUN rbenv install $RUBY_VERSION \
|
||||||
|
&& rbenv global $RUBY_VERSION
|
||||||
|
|
||||||
|
RUN gem install bundler
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Getting required gems
|
||||||
|
COPY Gemfile ./
|
||||||
|
RUN bundle install
|
||||||
|
|
||||||
|
COPY [^Gemfile]* ./
|
||||||
|
|
||||||
|
# RUN RAILS_ENV=production / db:create
|
||||||
|
# RUN / db:migrate
|
||||||
|
|
||||||
|
# Deleting useless packages
|
||||||
|
# RUN apk del git wget curl build-base \
|
||||||
|
# rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
|
EXPOSE 9000
|
||||||
|
|
||||||
|
CMD [ "top" ]
|
||||||
|
|
||||||
|
# CMD [ "rails", "server", "-p 9000", "-b 127.0.0.1", "-e production" ]
|
||||||
76
README.md
76
README.md
|
|
@ -16,7 +16,7 @@ PostgreSQL 11 minimum et la gem associée (`pg`).
|
||||||
3. `rails server` pour lancer un serveur local de développement sur le port 3000
|
3. `rails server` pour lancer un serveur local de développement sur le port 3000
|
||||||
|
|
||||||
### 2. Endpoints
|
### 2. Endpoints
|
||||||
La commande `rails routes` fournie l'ensemble des endpoints et requêtes HTTP disponibles. L'ensemble des requêtes se font sur la base : localhost:3000/api/v1.
|
La commande `rails routes` fournie l'ensemble des endpoints et requêtes HTTP disponibles. L'ensemble des requêtes se font sur la base : domaine.tld/api/v1.
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
|
|
@ -70,42 +70,38 @@ Patch et delete permettent de modifier ou supprimer une donnée qui a été cré
|
||||||
|
|
||||||
### Routes
|
### Routes
|
||||||
|
|
||||||
| Prefix | Verb | URI Pattern | Controller#Action |
|
| Prefix | Verb | URI Pattern | Controller#Action |
|
||||||
| -------------------- | ------ | ---------------------------------------------------------- | ------------------------------------------- |
|
| --------------------- | ------ | ---------------------------------------------------------- | ------------------------------------------- |
|
||||||
| api_v1_users| GET | /api/v1/users(.:format) | api/v1/users#index {:format=>:json} |
|
| api_v1_users| GET | /api/v1/users(.:format) | api/v1/users#index {:format=>:json} |
|
||||||
| | POST | /api/v1/users(.:format) | api/v1/users#create {:format=>:json} |
|
| | POST | /api/v1/users(.:format) | api/v1/users#create {:format=>:json} |
|
||||||
| api_v1_user| GET | /api/v1/users/:id(.:format) | api/v1/users#show {:format=>:json} |
|
| api_v1_user| GET | /api/v1/users/:id(.:format) | api/v1/users#show {:format=>:json} |
|
||||||
| | PATCH | /api/v1/users/:id(.:format) | api/v1/users#update {:format=>:json} |
|
| | PATCH | /api/v1/users/:id(.:format) | api/v1/users#update {:format=>:json} |
|
||||||
| | PUT | /api/v1/users/:id(.:format) | api/v1/users#update {:format=>:json} |
|
| | PUT | /api/v1/users/:id(.:format) | api/v1/users#update {:format=>:json} |
|
||||||
| | DELETE | /api/v1/users/:id(.:format) | api/v1/users#destroy {:format=>:json} |
|
| | DELETE | /api/v1/users/:id(.:format) | api/v1/users#destroy {:format=>:json} |
|
||||||
| api_v1_tokens| POST | /api/v1/tokens(.:format) | api/v1/tokens#create {:format=>:json} |
|
| api_v1_tokens| POST | /api/v1/tokens(.:format) | api/v1/tokens#create {:format=>:json} |
|
||||||
| api_v1_teams| GET | /api/v1/teams(.:format) | api/v1/teams#index {:format=>:json} |
|
|api_v1_team_memberships| GET | /api/v1/teams/:team_id/memberships(.:format) | api/v1/memberships#index {:format=>:json} |
|
||||||
| | POST | /api/v1/teams(.:format) | api/v1/teams#create {:format=>:json} |
|
| | POST | /api/v1/teams/:team_id/memberships(.:format) | api/v1/memberships#create {:format=>:json} |
|
||||||
| api_v1_team| GET | /api/v1/teams/:id(.:format) | api/v1/teams#show {:format=>:json} |
|
| api_v1_team_membership| GET | /api/v1/teams/:team_id/memberships/:id(.:format) | api/v1/memberships#show {:format=>:json} |
|
||||||
| | PATCH | /api/v1/teams/:id(.:format) | api/v1/teams#update {:format=>:json} |
|
| |PATCH | /api/v1/teams/:team_id/memberships/:id(.:format) | api/v1/memberships#update {:format=>:json} |
|
||||||
| | PUT | /api/v1/teams/:id(.:format) | api/v1/teams#update {:format=>:json} |
|
| | PUT | /api/v1/teams/:team_id/memberships/:id(.:format) | api/v1/memberships#update {:format=>:json} |
|
||||||
| | DELETE | /api/v1/teams/:id(.:format) | api/v1/teams#destroy {:format=>:json} |
|
| | DELETE | /api/v1/teams/:team_id/memberships/:id(.:format) | api/v1/memberships#destroy {:format=>:json} |
|
||||||
| api_v1_memberships| GET | /api/v1/memberships(.:format) | api/v1/memberships#index {:format=>:json} |
|
| api_v1_teams| GET | /api/v1/teams(.:format) | api/v1/teams#index {:format=>:json} |
|
||||||
| | POST | /api/v1/memberships(.:format) | api/v1/memberships#create {:format=>:json} |
|
| | POST | /api/v1/teams(.:format) | api/v1/teams#create {:format=>:json} |
|
||||||
| api_v1_membership| GET | /api/v1/memberships/:id(.:format) | api/v1/memberships#show {:format=>:json} |
|
| api_v1_team| GET | /api/v1/teams/:id(.:format) | api/v1/teams#show {:format=>:json} |
|
||||||
| | PATCH | /api/v1/memberships/:id(.:format) | api/v1/memberships#update {:format=>:json} |
|
| | PATCH | /api/v1/teams/:id(.:format) | api/v1/teams#update {:format=>:json} |
|
||||||
| | PUT | /api/v1/memberships/:id(.:format) | api/v1/memberships#update {:format=>:json} |
|
| | PUT | /api/v1/teams/:id(.:format) | api/v1/teams#update {:format=>:json} |
|
||||||
| | DELETE | /api/v1/memberships/:id(.:format) | api/v1/memberships#destroy {:format=>:json} |
|
| | DELETE | /api/v1/teams/:id(.:format) | api/v1/teams#destroy {:format=>:json} |
|
||||||
| api_v1_activity_tasks| GET | /api/v1/activities/:activity_id/tasks(.:format) | api/v1/tasks#index {:format=>:json} |
|
| api_v1_memberships | GET | /api/v1/memberships(.:format) |api/v1/memberships#index {:format=>:json} |
|
||||||
| | POST | /api/v1/activities/:activity_id/tasks(.:format) | api/v1/tasks#create {:format=>:json} |
|
| api_v1_activity_tasks| GET | /api/v1/activities/:activity_id/tasks(.:format) | api/v1/tasks#index {:format=>:json} |
|
||||||
| api_v1_activity_task| GET | /api/v1/activities/:activity_id/tasks/:id(.:format) | api/v1/tasks#show {:format=>:json} |
|
| | POST | /api/v1/activities/:activity_id/tasks(.:format) | api/v1/tasks#create {:format=>:json} |
|
||||||
| | PATCH | /api/v1/activities/:activity_id/tasks/:id(.:format) | api/v1/tasks#update {:format=>:json} |
|
| api_v1_activity_task| GET | /api/v1/activities/:activity_id/tasks/:id(.:format) | api/v1/tasks#show {:format=>:json} |
|
||||||
| | PUT | /api/v1/activities/:activity_id/tasks/:id(.:format) | api/v1/tasks#update {:format=>:json} |
|
| | PATCH | /api/v1/activities/:activity_id/tasks/:id(.:format) | api/v1/tasks#update {:format=>:json} |
|
||||||
| | DELETE | /api/v1/activities/:activity_id/tasks/:id(.:format) | api/v1/tasks#destroy {:format=>:json} |
|
| | PUT | /api/v1/activities/:activity_id/tasks/:id(.:format) | api/v1/tasks#update {:format=>:json} |
|
||||||
| api_v1_activities| GET | /api/v1/activities(.:format) | api/v1/activities#index {:format=>:json} |
|
| | DELETE | /api/v1/activities/:activity_id/tasks/:id(.:format) | api/v1/tasks#destroy {:format=>:json} |
|
||||||
| | POST | /api/v1/activities(.:format) | api/v1/activities#create {:format=>:json} |
|
| api_v1_activities| GET | /api/v1/activities(.:format) | api/v1/activities#index {:format=>:json} |
|
||||||
| api_v1_activity| GET | /api/v1/activities/:id(.:format) | api/v1/activities#show {:format=>:json} |
|
| | POST | /api/v1/activities(.:format) | api/v1/activities#create {:format=>:json} |
|
||||||
| | PATCH | /api/v1/activities/:id(.:format) | api/v1/activities#update {:format=>:json} |
|
| api_v1_activity| GET | /api/v1/activities/:id(.:format) | api/v1/activities#show {:format=>:json} |
|
||||||
| | PUT | /api/v1/activities/:id(.:format) | api/v1/activities#update {:format=>:json} |
|
| | PATCH | /api/v1/activities/:id(.:format) | api/v1/activities#update {:format=>:json} |
|
||||||
| | DELETE | /api/v1/activities/:id(.:format) | api/v1/activities#destroy {:format=>:json} |
|
| | PUT | /api/v1/activities/:id(.:format) | api/v1/activities#update {:format=>:json} |
|
||||||
| api_v1_tasks| GET | /api/v1/tasks(.:format) | api/v1/tasks#index {:format=>:json} |
|
| | DELETE | /api/v1/activities/:id(.:format) | api/v1/activities#destroy {:format=>:json} |
|
||||||
| | POST | /api/v1/tasks(.:format) | api/v1/tasks#create {:format=>:json} |
|
| api_v1_tasks| GET | /api/v1/tasks(.:format) | api/v1/tasks#index {:format=>:json} |
|
||||||
| api_v1_task| GET | /api/v1/tasks/:id(.:format) | api/v1/tasks#show {:format=>:json} |
|
|
||||||
| | PATCH | /api/v1/tasks/:id(.:format) | api/v1/tasks#update {:format=>:json} |
|
|
||||||
| | PUT | /api/v1/tasks/:id(.:format) | api/v1/tasks#update {:format=>:json} |
|
|
||||||
| | DELETE | /api/v1/tasks/:id(.:format) | api/v1/tasks#destroy {:format=>:json} |
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,11 @@ class Api::V1::MembershipsController < ApplicationController
|
||||||
before_action :check_login
|
before_action :check_login
|
||||||
|
|
||||||
def index
|
def index
|
||||||
render json: MembershipSerializer.new(Membership.all).serializable_hash.to_json
|
if !params[:team_id]
|
||||||
|
render json: MembershipSerializer.new(Membership.all).serializable_hash.to_json
|
||||||
|
else
|
||||||
|
render json: MembershipSerializer.new(Team.find(params[:team_id]).memberships).serializable_hash.to_json
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
|
@ -11,10 +15,8 @@ class Api::V1::MembershipsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
member_id = User.where(username: params[:membership][:username])[0].id
|
membership = current_user.memberships.build(membership_params)
|
||||||
team_id = Team.where(name: params[:membership][:team_name])[0].id
|
membership.team_id = params[:team_id]
|
||||||
|
|
||||||
membership = Membership.new(team_id: team_id, member_id: member_id, can_edit: false)
|
|
||||||
|
|
||||||
if membership.save
|
if membership.save
|
||||||
render json: MembershipSerializer.new(membership).serializable_hash.to_json, status: :created
|
render json: MembershipSerializer.new(membership).serializable_hash.to_json, status: :created
|
||||||
|
|
@ -25,7 +27,7 @@ class Api::V1::MembershipsController < ApplicationController
|
||||||
|
|
||||||
def update
|
def update
|
||||||
if params[:membership][:can_edit]
|
if params[:membership][:can_edit]
|
||||||
if @membership.update(memberships_params)
|
if @membership.update(membership_params)
|
||||||
render json: MembershipSerializer.new(@membership).serializable_hash.to_json, status: :ok
|
render json: MembershipSerializer.new(@membership).serializable_hash.to_json, status: :ok
|
||||||
else
|
else
|
||||||
render json: @membership.errors, status: :unprocessable_entity
|
render json: @membership.errors, status: :unprocessable_entity
|
||||||
|
|
@ -42,7 +44,7 @@ class Api::V1::MembershipsController < ApplicationController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def memberships_params
|
def membership_params
|
||||||
params.require(:membership).permit(:can_edit)
|
params.require(:membership).permit(:can_edit)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
class Membership < ApplicationRecord
|
class Membership < ApplicationRecord
|
||||||
# attr_readonly :member
|
|
||||||
# attr_readonly :team
|
|
||||||
|
|
||||||
validates :member, presence: :true
|
validates :member, presence: :true
|
||||||
validates :team, presence: :true
|
validates :team, presence: :true
|
||||||
validates_uniqueness_of :member, scope: :team, message: "user already part of this team"
|
validates_uniqueness_of :member, scope: :team, message: "user already part of this team"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
class Task < ApplicationRecord
|
class Task < ApplicationRecord
|
||||||
|
belongs_to :activity
|
||||||
|
belongs_to :owner, class_name: "User"
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :owner, presence: true
|
validates :owner, presence: true
|
||||||
validates :activity, presence: true
|
validates :activity, presence: true
|
||||||
validates :start_time, presence: true
|
validates :start_time, presence: true
|
||||||
|
|
||||||
belongs_to :activity
|
|
||||||
belongs_to :owner, class_name: "User"
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,21 @@
|
||||||
# SQLite. Versions 3.8.0 and up are supported.
|
|
||||||
# gem install sqlite3
|
|
||||||
#
|
|
||||||
# Ensure the SQLite 3 gem is defined in your Gemfile
|
|
||||||
# gem 'sqlite3'
|
|
||||||
#
|
|
||||||
default: &default
|
default: &default
|
||||||
# adapter: sqlite3
|
adapter: postgresql
|
||||||
adapter: postgresql
|
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
|
||||||
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
|
timeout: 5000
|
||||||
timeout: 5000
|
username: <%= ENV['PG_USER'] %>
|
||||||
username: <%= ENV['PG_USER'] %>
|
password: <%= ENV['PG_USER_PWD'] %>
|
||||||
password: <%= ENV['PG_USER_PWD'] %>
|
|
||||||
|
|
||||||
development:
|
|
||||||
<<: *default
|
|
||||||
# database: db/development.sqlite3
|
|
||||||
database: chronobriq_development
|
|
||||||
|
|
||||||
# Warning: The database defined as "test" will be erased and
|
# Warning: The database defined as "test" will be erased and
|
||||||
# re-generated from your development database when you run "rake".
|
# re-generated from your development database when you run "rake".
|
||||||
# Do not set this db to the same as development or production.
|
# Do not set this db to the same as development or production.
|
||||||
test:
|
test:
|
||||||
<<: *default
|
<<: *default
|
||||||
# database: db/test.sqlite3
|
database: chronobriq_test
|
||||||
database: chronobriq_test
|
|
||||||
|
development:
|
||||||
|
<<: *default
|
||||||
|
database: chronobriq_development
|
||||||
|
|
||||||
production:
|
production:
|
||||||
<<: *default
|
<<: *default
|
||||||
# database: db/production.sqlite3
|
database: chronobriq_production
|
||||||
database: chronobriq_production
|
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,14 @@ Rails.application.routes.draw do
|
||||||
namespace :v1 do
|
namespace :v1 do
|
||||||
resources :users
|
resources :users
|
||||||
resources :tokens, only: %i[create]
|
resources :tokens, only: %i[create]
|
||||||
resources :teams
|
resources :teams do
|
||||||
resources :memberships
|
resources :memberships
|
||||||
|
end
|
||||||
|
resources :memberships, only: %i[index]
|
||||||
resources :activities do
|
resources :activities do
|
||||||
resources :tasks
|
resources :tasks
|
||||||
end
|
end
|
||||||
resources :tasks
|
resources :tasks, only: %i[index]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
15
docker-compose.yml
Normal file
15
docker-compose.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
chronobriq-api:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
db:
|
||||||
|
image: postgres:12-alpine
|
||||||
|
volumes:
|
||||||
|
- database:/var/lib/postgresql/chronobriq-api
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
database:
|
||||||
|
|
@ -10,48 +10,58 @@ class Api::V1::MembershipsControllerTest < ActionDispatch::IntegrationTest
|
||||||
end
|
end
|
||||||
|
|
||||||
# INDEX
|
# INDEX
|
||||||
test "should access Membership index" do
|
test "should access Membership index - specifix team" do
|
||||||
|
get api_v1_team_memberships_url(@team),
|
||||||
|
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
||||||
|
as: :json
|
||||||
|
assert_response :success
|
||||||
|
|
||||||
|
json_response = JSON.parse(self.response.body)
|
||||||
|
assert_equal @membership.member_id, json_response['data'][0]['attributes']['member_id']
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should access Membership index - all teams" do
|
||||||
get api_v1_memberships_url,
|
get api_v1_memberships_url,
|
||||||
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
||||||
as: :json
|
as: :json
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
test "should forbid Membership index" do
|
test "should not access Membership index" do
|
||||||
get api_v1_memberships_url,
|
get api_v1_team_memberships_url(@team),
|
||||||
as: :json
|
as: :json
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
# SHOW
|
# SHOW
|
||||||
test "should show Membership" do
|
test "should show Membership" do
|
||||||
get api_v1_memberships_url(@membership),
|
get api_v1_team_memberships_url(@team, @membership),
|
||||||
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
||||||
as: :json
|
as: :json
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
test "should forbid show Membership" do
|
test "should forbid show Membership" do
|
||||||
get api_v1_memberships_url(@membership),
|
get api_v1_team_memberships_url(@team, @membership),
|
||||||
as: :json
|
as: :json
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
# CREATE
|
#CREATE
|
||||||
# test "should create membership" do
|
test "should create membership" do
|
||||||
# assert_difference("Membership.count") do
|
assert_difference("Membership.count") do
|
||||||
# post api_v1_memberships_url,
|
post api_v1_team_memberships_url(@team),
|
||||||
# params: { membership: { team_id: @team.id, member_id: @user.id, can_edit: false } },
|
params: { membership: { can_edit: false, member_id: @user2, team_id: @team } },
|
||||||
# headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
headers: { Authorization: JsonWebToken.encode(user_id: @user2.id) },
|
||||||
# as: :json
|
as: :json
|
||||||
# end
|
end
|
||||||
# assert_response :created
|
assert_response :created
|
||||||
# end
|
end
|
||||||
|
|
||||||
test "should forbid create membership" do
|
test "should forbid create membership" do
|
||||||
assert_no_difference("Membership.count") do
|
assert_no_difference("Membership.count") do
|
||||||
post api_v1_memberships_url,
|
post api_v1_team_memberships_url(@team),
|
||||||
params: { membership: { team_id: @team.id, member_id: @user.id, can_edit: false } },
|
params: { membership: { can_edit: false } },
|
||||||
as: :json
|
as: :json
|
||||||
end
|
end
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
|
|
@ -59,7 +69,7 @@ class Api::V1::MembershipsControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
# UPDATE
|
# UPDATE
|
||||||
test "should update membership" do
|
test "should update membership" do
|
||||||
patch api_v1_membership_url(@membership),
|
patch api_v1_team_membership_url(@team, @membership),
|
||||||
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
||||||
params: { membership: { can_edit: true } },
|
params: { membership: { can_edit: true } },
|
||||||
as: :json
|
as: :json
|
||||||
|
|
@ -67,14 +77,14 @@ class Api::V1::MembershipsControllerTest < ActionDispatch::IntegrationTest
|
||||||
end
|
end
|
||||||
|
|
||||||
test "should forbid update membership" do
|
test "should forbid update membership" do
|
||||||
patch api_v1_membership_url(@membership),
|
patch api_v1_team_membership_url(@team, @membership),
|
||||||
params: { membership: { can_edit: true } },
|
params: { membership: { can_edit: true } },
|
||||||
as: :json
|
as: :json
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
test "should forbid update read_only attributes - team_id" do
|
test "should forbid update read_only attributes - team_id" do
|
||||||
patch api_v1_membership_url(@membership),
|
patch api_v1_team_membership_url(@team, @membership),
|
||||||
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
||||||
params: { membership: { team_id: @team2.id, member_id: @user2.id } },
|
params: { membership: { team_id: @team2.id, member_id: @user2.id } },
|
||||||
as: :json
|
as: :json
|
||||||
|
|
@ -84,7 +94,7 @@ class Api::V1::MembershipsControllerTest < ActionDispatch::IntegrationTest
|
||||||
# DESTROY
|
# DESTROY
|
||||||
test "should destroy membership" do
|
test "should destroy membership" do
|
||||||
assert_difference('Membership.count', -1) do
|
assert_difference('Membership.count', -1) do
|
||||||
delete api_v1_membership_url(@membership),
|
delete api_v1_team_membership_url(@team, @membership),
|
||||||
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
||||||
as: :json
|
as: :json
|
||||||
end
|
end
|
||||||
|
|
@ -93,7 +103,7 @@ class Api::V1::MembershipsControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
test "should forbid destroy membership" do
|
test "should forbid destroy membership" do
|
||||||
assert_no_difference('Membership.count') do
|
assert_no_difference('Membership.count') do
|
||||||
delete api_v1_membership_url(@membership), as: :json
|
delete api_v1_team_membership_url(@team, @membership), as: :json
|
||||||
end
|
end
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -44,17 +44,17 @@ class Api::V1::TasksControllerTest < ActionDispatch::IntegrationTest
|
||||||
test "should create task" do
|
test "should create task" do
|
||||||
assert_difference("Task.count") do
|
assert_difference("Task.count") do
|
||||||
post api_v1_activity_tasks_url(@activity),
|
post api_v1_activity_tasks_url(@activity),
|
||||||
params: { task: { name: @task.name, description: @task.description, owner_id: @user, activity_id: @activity, start_time: DateTime.now } },
|
params: { task: { name: @task.name, description: @task.description, owner_id: @user, start_time: DateTime.now } },
|
||||||
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
headers: { Authorization: JsonWebToken.encode(user_id: @user.id) },
|
||||||
as: :json
|
as: :json
|
||||||
end
|
end
|
||||||
assert_response :created
|
assert_response :created
|
||||||
end
|
end
|
||||||
|
|
||||||
test "should not create task" do
|
test "should not create task - not logged in" do
|
||||||
assert_no_difference("Task.count") do
|
assert_no_difference("Task.count") do
|
||||||
post api_v1_activity_tasks_url(@activity),
|
post api_v1_activity_tasks_url(@activity),
|
||||||
params: { task: { name: @task.name, description: @task.description, owner_id: @user, activity_id: @activity } },
|
params: { task: { name: @task.name, description: @task.description, owner_id: @user } },
|
||||||
as: :json
|
as: :json
|
||||||
end
|
end
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
|
|
|
||||||
5
test/fixtures/memberships.yml
vendored
5
test/fixtures/memberships.yml
vendored
|
|
@ -8,8 +8,3 @@ one:
|
||||||
team: one
|
team: one
|
||||||
member: one
|
member: one
|
||||||
can_edit: true
|
can_edit: true
|
||||||
|
|
||||||
two:
|
|
||||||
team: one
|
|
||||||
member: two
|
|
||||||
can_edit: false
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue