Skip to content
GitLab
Explorer
Connexion
S'inscrire
Navigation principale
Rechercher ou aller à…
Projet
P
parlote-facil
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Wiki
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Extraits de code
Compilation
Pipelines
Jobs
Planifications de pipeline
Artéfacts
Déploiement
Releases
Registre de paquets
Registre de conteneur
Registre de modèles
Opération
Environnements
Modules Terraform
Surveillance
Incidents
Analyse
Données d'analyse des chaînes de valeur
Analyse des contributeurs
Données d'analyse CI/CD
Données d'analyse du dépôt
Expériences du modèle
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté
Contribuer à GitLab
Donner votre avis
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
facil
parlote-facil
Validations
2772cb6e
Non vérifiée
Valider
2772cb6e
rédigé
8 years ago
par
Steffen van Bergerem
Validation de
Benjamin Neff
8 years ago
Parcourir les fichiers
Options
Téléchargements
Correctifs
Plain Diff
Refactor likes controller using like service
parent
f9312486
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Modifications
2
Masquer les modifications d'espaces
En ligne
Côte à côte
Affichage de
2 fichiers modifiés
app/controllers/likes_controller.rb
+14
-35
14 ajouts, 35 suppressions
app/controllers/likes_controller.rb
spec/controllers/likes_controller_spec.rb
+105
-128
105 ajouts, 128 suppressions
spec/controllers/likes_controller_spec.rb
avec
119 ajouts
et
163 suppressions
app/controllers/likes_controller.rb
+
14
−
35
Voir le fichier @
2772cb6e
...
...
@@ -11,42 +11,27 @@ class LikesController < ApplicationController
:json
def
create
begin
@like
=
if
target
current_user
.
like!
(
target
)
end
rescue
ActiveRecord
::
RecordNotFound
,
ActiveRecord
::
RecordInvalid
=>
e
# do nothing
end
if
@like
respond_to
do
|
format
|
format
.
html
{
render
:nothing
=>
true
,
:status
=>
201
}
format
.
mobile
{
redirect_to
post_path
(
@like
.
post_id
)
}
format
.
json
{
render
:json
=>
@like
.
as_api_response
(
:backbone
),
:status
=>
201
}
end
else
render
text:
I18n
.
t
(
"likes.create.error"
),
status:
422
like
=
like_service
.
create
(
params
[
:post_id
])
rescue
ActiveRecord
::
RecordNotFound
,
ActiveRecord
::
RecordInvalid
render
text:
I18n
.
t
(
"likes.create.error"
),
status:
422
else
respond_to
do
|
format
|
format
.
html
{
render
nothing:
true
,
status:
201
}
format
.
mobile
{
redirect_to
post_path
(
like
.
post_id
)
}
format
.
json
{
render
json:
like
.
as_api_response
(
:backbone
),
status:
201
}
end
end
def
destroy
begin
@like
=
Like
.
find_by_id_and_author_id!
(
params
[
:id
],
current_user
.
person
.
id
)
rescue
ActiveRecord
::
RecordNotFound
if
like_service
.
destroy
(
params
[
:id
])
render
nothing:
true
,
status:
204
else
render
text:
I18n
.
t
(
"likes.destroy.error"
),
status:
404
return
end
current_user
.
retract
(
@like
)
respond_to
do
|
format
|
format
.
json
{
render
:nothing
=>
true
,
:status
=>
204
}
end
end
#I can go when the old stream goes.
def
index
@likes
=
target
.
likes
.
includes
(
:
author
=>
:profile
)
@likes
=
like_service
.
find_for_post
(
params
[
:post_id
])
.
includes
(
author
:
:profile
)
@people
=
@likes
.
map
(
&
:author
)
respond_to
do
|
format
|
...
...
@@ -57,13 +42,7 @@ class LikesController < ApplicationController
private
def
target
@target
||=
if
params
[
:post_id
]
current_user
.
find_visible_shareable_by_id
(
Post
,
params
[
:post_id
])
||
raise
(
ActiveRecord
::
RecordNotFound
.
new
)
else
Comment
.
find
(
params
[
:comment_id
]).
tap
do
|
comment
|
raise
(
ActiveRecord
::
RecordNotFound
.
new
)
unless
current_user
.
find_visible_shareable_by_id
(
Post
,
comment
.
commentable_id
)
end
end
def
like_service
@like_service
||=
LikeService
.
new
(
current_user
)
end
end
Ce diff est replié.
Cliquez pour l'agrandir.
spec/controllers/likes_controller_spec.rb
+
105
−
128
Voir le fichier @
2772cb6e
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
describe
LikesController
,
:
type
=>
:controller
do
describe
LikesController
,
type
:
:controller
do
before
do
@alices_aspect
=
alice
.
aspects
.
where
(
:name
=>
"generic"
).
first
@bobs_aspect
=
bob
.
aspects
.
where
(
:name
=>
"generic"
).
first
...
...
@@ -10,137 +10,114 @@ describe LikesController, :type => :controller do
sign_in
(
alice
,
scope: :user
)
end
[
Comment
,
Post
].
each
do
|
class_const
|
context
class_const
.
to_s
do
let
(
:id_field
){
"
#{
class_const
.
to_s
.
underscore
}
_id"
}
describe
'#create'
do
let
(
:like_hash
)
{
{
:positive
=>
1
,
id_field
=>
"
#{
@target
.
id
}
"
}
}
let
(
:dislike_hash
)
{
{
:positive
=>
0
,
id_field
=>
"
#{
@target
.
id
}
"
}
}
context
"on my own post"
do
it
'succeeds'
do
@target
=
alice
.
post
:status_message
,
:text
=>
"AWESOME"
,
:to
=>
@alices_aspect
.
id
@target
=
alice
.
comment!
(
@target
,
"hey"
)
if
class_const
==
Comment
post
:create
,
like_hash
.
merge
(
:format
=>
:json
)
expect
(
response
.
code
).
to
eq
(
'201'
)
end
end
context
"on a post from a contact"
do
before
do
@target
=
bob
.
post
(
:status_message
,
:text
=>
"AWESOME"
,
:to
=>
@bobs_aspect
.
id
)
@target
=
bob
.
comment!
(
@target
,
"hey"
)
if
class_const
==
Comment
end
it
'likes'
do
post
:create
,
like_hash
expect
(
response
.
code
).
to
eq
(
'201'
)
end
it
'dislikes'
do
post
:create
,
dislike_hash
expect
(
response
.
code
).
to
eq
(
'201'
)
end
it
"doesn't post multiple times"
do
alice
.
like!
(
@target
)
post
:create
,
dislike_hash
expect
(
response
.
code
).
to
eq
(
'422'
)
end
end
context
"on a post from a stranger"
do
before
do
@target
=
eve
.
post
:status_message
,
:text
=>
"AWESOME"
,
:to
=>
eve
.
aspects
.
first
.
id
@target
=
eve
.
comment!
(
@target
,
"hey"
)
if
class_const
==
Comment
end
it
"doesn't post"
do
expect
(
alice
).
not_to
receive
(
:like!
)
post
:create
,
like_hash
expect
(
response
.
code
).
to
eq
(
'422'
)
end
end
context
"when an the exception is raised"
do
before
do
@target
=
alice
.
post
:status_message
,
:text
=>
"AWESOME"
,
:to
=>
@alices_aspect
.
id
@target
=
alice
.
comment!
(
@target
,
"hey"
)
if
class_const
==
Comment
end
it
"should be catched when it means that the target is not found"
do
params
=
like_hash
.
merge
(
format: :json
,
id_field
=>
-
1
)
post
:create
,
params
expect
(
response
.
code
).
to
eq
(
'422'
)
end
it
"should not be catched when it is unexpected"
do
@target
=
alice
.
post
:status_message
,
:text
=>
"AWESOME"
,
:to
=>
@alices_aspect
.
id
@target
=
alice
.
comment!
(
@target
,
"hey"
)
if
class_const
==
Comment
allow
(
alice
).
to
receive
(
:like!
).
and_raise
(
"something"
)
allow
(
@controller
).
to
receive
(
:current_user
).
and_return
(
alice
)
expect
{
post
:create
,
like_hash
.
merge
(
:format
=>
:json
)
}.
to
raise_error
(
"something"
)
end
end
describe
"#create"
do
let
(
:like_hash
)
{
{
post_id:
@target
.
id
}
}
context
"on my own post"
do
it
"succeeds"
do
@target
=
alice
.
post
:status_message
,
text:
"AWESOME"
,
to:
@alices_aspect
.
id
post
:create
,
like_hash
.
merge
(
format: :json
)
expect
(
response
.
code
).
to
eq
(
"201"
)
end
end
context
"on a post from a contact"
do
before
do
@target
=
bob
.
post
(
:status_message
,
text:
"AWESOME"
,
to:
@bobs_aspect
.
id
)
end
it
"likes"
do
post
:create
,
like_hash
expect
(
response
.
code
).
to
eq
(
"201"
)
end
it
"doesn't post multiple times"
do
alice
.
like!
(
@target
)
post
:create
,
like_hash
expect
(
response
.
code
).
to
eq
(
"422"
)
end
end
describe
'#index'
do
before
do
@message
=
alice
.
post
(
:status_message
,
:text
=>
"hey"
,
:to
=>
@alices_aspect
.
id
)
@message
=
alice
.
comment!
(
@message
,
"hey"
)
if
class_const
==
Comment
end
it
'returns a 404 for a post not visible to the user'
do
sign_in
eve
expect
{
get
:index
,
id_field
=>
@message
.
id
}.
to
raise_error
(
ActiveRecord
::
RecordNotFound
)
end
it
'returns an array of likes for a post'
do
like
=
bob
.
like!
(
@message
)
get
:index
,
id_field
=>
@message
.
id
expect
(
assigns
[
:likes
].
map
(
&
:id
)).
to
eq
(
@message
.
likes
.
map
(
&
:id
))
end
it
'returns an empty array for a post with no likes'
do
get
:index
,
id_field
=>
@message
.
id
expect
(
assigns
[
:likes
]).
to
eq
([])
end
context
"on a post from a stranger"
do
before
do
@target
=
eve
.
post
:status_message
,
text:
"AWESOME"
,
to:
eve
.
aspects
.
first
.
id
end
describe
'#destroy'
do
before
do
@message
=
bob
.
post
(
:status_message
,
:text
=>
"hey"
,
:to
=>
@alices_aspect
.
id
)
@message
=
bob
.
comment!
(
@message
,
"hey"
)
if
class_const
==
Comment
@like
=
alice
.
like!
(
@message
)
end
it
'lets a user destroy their like'
do
current_user
=
controller
.
send
(
:current_user
)
expect
(
current_user
).
to
receive
(
:retract
).
with
(
@like
)
delete
:destroy
,
:format
=>
:json
,
id_field
=>
@like
.
target_id
,
:id
=>
@like
.
id
expect
(
response
.
status
).
to
eq
(
204
)
end
it
'does not let a user destroy other likes'
do
like2
=
eve
.
like!
(
@message
)
like_count
=
Like
.
count
delete
:destroy
,
:format
=>
:json
,
id_field
=>
like2
.
target_id
,
:id
=>
like2
.
id
expect
(
response
.
status
).
to
eq
(
404
)
expect
(
response
.
body
).
to
eq
(
I18n
.
t
(
"likes.destroy.error"
))
expect
(
Like
.
count
).
to
eq
(
like_count
)
end
it
"doesn't post"
do
expect
(
alice
).
not_to
receive
(
:like!
)
post
:create
,
like_hash
expect
(
response
.
code
).
to
eq
(
"422"
)
end
end
context
"when an the exception is raised"
do
before
do
@target
=
alice
.
post
:status_message
,
text:
"AWESOME"
,
to:
@alices_aspect
.
id
end
it
"should be catched when it means that the target is not found"
do
params
=
like_hash
.
merge
(
format: :json
,
post_id:
-
1
)
post
:create
,
params
expect
(
response
.
code
).
to
eq
(
"422"
)
end
it
"should not be catched when it is unexpected"
do
@target
=
alice
.
post
:status_message
,
text:
"AWESOME"
,
to:
@alices_aspect
.
id
allow
(
alice
).
to
receive
(
:like!
).
and_raise
(
"something"
)
allow
(
@controller
).
to
receive
(
:current_user
).
and_return
(
alice
)
expect
{
post
:create
,
like_hash
.
merge
(
format: :json
)
}.
to
raise_error
(
"something"
)
end
end
end
describe
"#index"
do
before
do
@message
=
alice
.
post
(
:status_message
,
text:
"hey"
,
to:
@alices_aspect
.
id
)
end
it
"returns a 404 for a post not visible to the user"
do
sign_in
eve
expect
{
get
:index
,
post_id:
@message
.
id
}.
to
raise_error
(
ActiveRecord
::
RecordNotFound
)
end
it
"returns an array of likes for a post"
do
bob
.
like!
(
@message
)
get
:index
,
post_id:
@message
.
id
expect
(
assigns
[
:likes
].
map
(
&
:id
)).
to
eq
(
@message
.
likes
.
map
(
&
:id
))
end
it
"returns an empty array for a post with no likes"
do
get
:index
,
post_id:
@message
.
id
expect
(
assigns
[
:likes
]).
to
eq
([])
end
end
describe
"#destroy"
do
before
do
@message
=
bob
.
post
(
:status_message
,
text:
"hey"
,
to:
@alices_aspect
.
id
)
@like
=
alice
.
like!
(
@message
)
end
it
"lets a user destroy their like"
do
current_user
=
controller
.
send
(
:current_user
)
expect
(
current_user
).
to
receive
(
:retract
).
with
(
@like
)
delete
:destroy
,
format: :json
,
post_id:
@message
.
id
,
id:
@like
.
id
expect
(
response
.
status
).
to
eq
(
204
)
end
it
"does not let a user destroy other likes"
do
like2
=
eve
.
like!
(
@message
)
like_count
=
Like
.
count
delete
:destroy
,
format: :json
,
post_id:
@message
.
id
,
id:
like2
.
id
expect
(
response
.
status
).
to
eq
(
404
)
expect
(
response
.
body
).
to
eq
(
I18n
.
t
(
"likes.destroy.error"
))
expect
(
Like
.
count
).
to
eq
(
like_count
)
end
end
end
Ce diff est replié.
Cliquez pour l'agrandir.
Aperçu
0%
Chargement en cours
Veuillez réessayer
ou
joindre un nouveau fichier
.
Annuler
You are about to add
0
people
to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Enregistrer le commentaire
Annuler
Veuillez vous
inscrire
ou vous
se connecter
pour commenter