-
Notifications
You must be signed in to change notification settings - Fork 162
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refactoring du module des forums #2697
Conversation
|
Une chance que ça améliore les perfs globale ? (voir #2623). C'est pas une obligation, mais puisque t'es dans le coin ... |
A ce jour, j'ai pas refactorisé en gardant en tête d'améliorer les performances. Juste de refactoriser les anciennes vues vers CBV. |
Je m'en doutais, mais c'est pas grave. Garde le ticket en tête, ceci étant dit ^^ |
Alors voici le resultat de mes tests. Globalement tout roule SAUF:
J'espere ne rien avoir laisse passer... |
Ah si aussi quand on met un filtre dans la liste des sujets (avec/sans reponses par exemple) ca marche au debut puis merde quand on change de page via le paginator |
1. Deletes index function in forum/views.py file. 2. Creates CategoriesForumsListView to replace the old function. 3. Changes templates with new data returns. 4. Creates forum/tests/tests_views.py file to test this new class. ZEP-30
1. Deletes cat_details function in forum/views.py file. 2. Creates CategoryForumsDetailView class to replace the old function. 3. Creates 2 new tests in forum/tests/tests_views.py file. ZEP-30
|
Comme tu as trop la classe !! Tout marche tres bien ! Par contre landscape montre des trucs nouveau assez simple a corriger... |
Voilà le caribou. :) |
|
1. Deletes details function in forum/views.py file. 2. Creates TopicsListView class to replace the old function. 3. Creates a new mixin in utils/mixins.py file, FilterMixin. This mixin is used to apply a filter on a list. 4. Adds some tests in forums/tests/tests_views.py file. 5. Builds url of the paginator in list of tipics with filters. ZEP-30
1. Deletes topic function in forum/views.py file. 2. Creates TopicPostsListView class to replace the old function. 3. Adds some tests in forum/tests/tests_views.py file. 4. Refactors tests to regroup all tests in specific test classes. ZEP-30
1. Deletes new function in forum/views.py file. 2. Creates TopicNew class to replace the old function. 3. Adds some tests in TopicNewTest in forum/tests/tests_views.py file. ZEP-30
1. Deletes edit and move functions in forum/views.py file. 2. Creates EditTopic class to replace edit old functions. 3. Creates commons.py to regroup all commons codes. 4. Creates and uses EditTopicMixin in forum/commons.py file. 5. Adds some tests in EditTopicTest in forum/tests/tests_views.py file. 6. Refactors existing tests. ZEP-30
1. Delete find_topic function in forum/views.py file. 2. Creates FindTopic class to replace old functions. 3. Adds some tests in FindTopicTest in forum/tests/tests_views.py file. ZEP-30
1. Deletes find_topic_by_tag function in forum/views.py file. 2. Creates FindTopicByTag class to replace old function. 3. Adds some tests in FindTopicByTagTest in forum/tests/tests_views.py file. ZEP-30
1. Deletes new function in forum/views.py file. 2. Creates PostNew class to replace old function. 3. Refactors send_post function to send a e-mail. 4. Creates CreatePostView in utils/forums.py file. This class is used to refactor forum and mp view to create a post in a topic or a private topic. 5. Uses this super class in PostNew in forum and mp modules. 6. Adds some tests in the mp module. 7. Adds some tests in PostNewTest in forum/tests/tests_views.py file. Closes #2642 and ZEP-30
1. Gets business logic from edit_post function in forum/views.py file. 2. Merges this business logic about edition of a topic in EditTopic class. 3. Adds some tests in EditTopicTest in forum/tests/tests_views.py file. ZEP-30
1. Deletes edit_post function in forum/views.py file. 2. Creates PostEdit class to replace old function. 3. Adds some tests in PostEditTest in forum/tests/tests_views.py file. ZEP-30
1. Deletes post_useful function in forum/views.py file. 2. Creates PostUseful class to replace old function. 3. Creates SinglePostObjectMixin to use it in all classes. 4. Adds some tests in PostUsefulTest in forum/tests/tests_views.py file. ZEP-30
1. Deletes post_unread function in forum/views.py file. 2. Creates PostUnread class to replace old function. 3. Adds some tests in PostUnreadTest in forum/tests/tests_views.py file. ZEP-30
1. Deletes post_like and post_dislike functions in forum/views.py file. 2. Creates PostLike and PostDisLike classes to replace old functions. 3. Adds some tests in PostLikeDisLikeTest in forum/tests/tests_views.py file. ZEP-30
1. Deletes find_post function in forum/views.py file. 2. Creates FindPost class to replace old function and use FindTopic. 3. Adds some tests in FindPostTest in forum/tests/tests_views.py file. ZEP-30
return follow_by_email(topic, user) | ||
|
||
@staticmethod | ||
def perform_solved(user, topic): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cette méthode mérite un commentaire. Car en lisant perform_solved
on pourrait penser que la méthode se contente de mettre un topic en résolu. Mais ce n'est pas le cas, elle mets en résolu si celui-ci n'est pas encore résolu, et elle mets en "non-résolu" si le topic est résolu.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je préfère mettre un nom de méthode plus explicite qui sera plus naturel de mettre à jour à l'avenir. Est-ce que perform_solve_or_unsolve
te conviendrait ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Est-ce que
perform_solve_or_unsolve
te conviendrait ?
tout à fait.
Je ne sais meme pas qu'elle définition on donnerait a un mixin, mais le fait que tu ait introduit cette nomenclature fait que je me demande pourquoi ce n'était pas fait sur les autres classes qui jouent le même role ?
il y'a plusieurs choses dans les MPs. Le modèle de donnée, les vues, et les templates. Autant ça ne sert a rien de fusionner le modèle des MPs avec quoique ce soit (surtout pour des raisons de sécurité et de perfs), autant certaines vues ont un intéret ( @GerardPaligot en a fusionné quelques unes d'ailleurs dans cette PR ). Et il me semble que le code des template est déjà fusionné au maximum. Mon commentaire donc se limite à la fusion de certains morceaux qui reviennent dans les vues comme l'édition d'un message, l'envoi d'un message, la citation d'un message, l'aperçu d'un message. En gros, un message du forum, n'est conceptuellement qu'une extension d'un message de mp. |
Je plussoie fortement ce commentaire, parce que je m'étais fait exactement la même réflexion pour les commentaires d'articles/tutos (l'idée de proposer une ZEP m'est même passée par la tête, mais je me suis arrêté sur le point des MPs, justement). Par contre, gardez en tête que cette PR s'appelle "refactoring", et là on tape gentiment dans l'évolution. Je soutiens l'idée à 200%, mais ça demande une PR à part :) |
@firm1 Modifications faites. |
|
Chui chaud pour merge, j'attends juste @firm1 :) |
Je regarde ça cette nuit promis. Le dim. 17 mai 2015 09:37, Eskimon notifications@github.com a écrit :
|
La PR est vraiment énorme. Je me suis concentré un peu plus sur les tests unitaires pour cette fois (désolé pas le temps de regarder plus). Voici les petites remarques :
Voilà, pour un premier jet quelques remarques qui s'appliquent aux tests en général. Je crois que vu la taille du fichier de test_views, tu pourrais en profiter pour le splitter en plusieurs afin de le rendre lisible. Là, il faut le vouloir pour s'y retrouver. |
|
Justement, avant (juste avant la sortie en 1.0) c'était des
Je trouve que ça nuit pas mal à la lisibilité des tests, et ça rallonge inutilement le code, et je n'imagine même pas ce que ça doit donner comme millefeuille lorsqu'on veut faire bouger une règle de gestion, il faut retrouver tous les contextes dans chaque mini-fonction. Après, je ne fais que donner mon avis, tu en fais ce que tu veux derrière.
Je suis bien d'accord. Mais vu que tu refais les vues du modules, je trouve ça normal de tester tous les cas introduis par ton code. Ce n'est pas a toi que je vais vendre l'utilité des tests dans un projet. ça serait dommage qu'on découvre un bug qui aurait pu être trouvé avec un test unitaire. |
Pour tenter de te convaincre, plusieurs points qui me séduisent dans ma manière de faire :
Nous sommes d'accord pour dire que les tests c'est important dans un projet mais ce refactoring touche à tout. Autrement dit, tu me demandes une couverture à 100%. Tout en sachant que les anciens tests sont toujours valides et test un bon nombre de choses. Tout ceci étant dit firm1, je pense que nous avons une façon de tester complètement différente (puisque tu es à l'origine d'un grand nombre de test dans ZdS), nous ne pourrons pas nous mettre complètement d'accord je pense. Si vraiment tu n'es pas d'accord, je laisse @SpaceFox trancher sur la question. |
Si je suis bien la conversation, on a une différence d'approche/philosophie. Ca arrive, c'est normal. Mais le coeur du problème aussi est : Le code/la facon de faire est-il ok pour tout le monde en mettant en marche sa tolérance personnelle sur l'approche à avoir |
Mon commentaire mélange à la fois l'approche et la couverture de test. Je conçois que chacun peut avoir une approche différente. Cependant pour la question de la couverture de tests j'ai noté celles qui manquent, car mine de rien on a une refacto sur un gros module et le risque de bug est elevé. Donc je laisse @SpaceFox juger si ça lui parait assez. |
Si je ne m'abuse la couverture augmente de 0.75%, donc @GerardPaligot fait même mieux qu'avant non ? |
ça signifie surtout que les tests passent sur plus de lignes de code qu'avant, et ça c'est bien. Là ou c'est moins bien, c'est que les tests se contentent de passer, sans vraiment vérifier que l'on a ce qu'on voulait. On a plein d'exemple comme celui-ci qui est censé créer un topic. Comment peut-on dire qu'on a testé cette fonctionnalité, si on n'a pas vérifié qu'après le |
Je vais bien être patient mais pas me répéter. Allez lire mes précédents commentaires pour savoir pourquoi. PR si welcome sur cette branche si vous voulez compléter. Basta. |
Vous m'avez un peu perdu avec vos pavés. Ce que j'en dis c'est que :
J'espère que j'ai répondu à toutes vos inquiétudes ? |
J'attendais la refacto du module des fofo pour reprendre les tests et les rediviser comme on fait pour les autres (tests_forms, tests_models, tests_views). Quand ici ce sera merge j'aimerais faire ca bientôt après.
Du coup par rapport a ma remarque je garderais ceci en tête pour y faire attention... J'en profite pour rappeler que j'avais fait une QA assez globale a la main et que cette dernière était concluante... |
Du côté de mes tests, je ne fais pas de vérification après (pas tout le temps). Du côté des tests existants, ils le font.
Tous les nouveaux tests ne sont que des tests de vues. Si on veut les découper, ça sera par fonctionnalité et non plus par type de tests. |
Bon... Au vu de ce qui est dit, j'aimerais déclarer "OK" pour merge. Ma QA passe, les tests sont les memes voire mieux qu'avant (puisqu'on garde une partie de l'ancien) et plus on attends plus c'est chiant car on bloque tout le module des fofos avec cette PR. Du coup @SpaceFox si tu es OK avec moi, je te laisse merger au plus tôt... |
OK. |
Refactoring du module des forums
Que dois faire la QA :
Voilà, n'hésitez pas à chercher les cas tordus et have fun!