Skip to content

fix: correction des tests unitaires et ajout de nouveau test#1170

Merged
iambibi merged 10 commits intoServerOpenMC:masterfrom
gtolontop:fix/tests-unitaires-spawner-extractor
Mar 20, 2026
Merged

fix: correction des tests unitaires et ajout de nouveau test#1170
iambibi merged 10 commits intoServerOpenMC:masterfrom
gtolontop:fix/tests-unitaires-spawner-extractor

Conversation

@gtolontop
Copy link
Contributor

Fixes les tests unitaires qui échouaient avec ClassNotFoundException.

Problème

SpawnerExtractorListener importe dev.lone.itemsadder.api.CustomStack, une dépendance compileOnly absente du classpath de test. Le classloader de MockBukkit résout les références de classes de façon eager, ce qui provoque un NoClassDefFoundError lors du chargement du plugin en test.

Le listener était enregistré sans le guard !isUnitTestVersion(), contrairement à ItemsAddersListener qui a le même problème et est déjà correctement protégé.

Correction

Déplacement de new SpawnerExtractorListener() à l'intérieur du bloc !OMCPlugin.isUnitTestVersion(), cohérent avec le fix FancyNpcsHook du commit bd1ab12.

TabList utilise PacketAdapter de ProtocolLib (dépendance compileOnly),
ce qui cause un ClassNotFoundException au lancement des tests MockBukkit.
MultiBlockManager.init() est appelé via loadWithItemsAdder() qui ne
s'exécute pas en environnement de test. config reste null et provoque
un NPE lors du onDisable.
Le BukkitRunnable (delay 0) s'exécute pendant le load du plugin,
donc le MOTD capturé est déjà le custom. Avec 2 entrées dans motd.yml,
Random peut piocher la même → assertNotEquals échoue 50% du temps.
Fix: forcer un MOTD connu avant de tick.
Le test testTransferBalanceWithReasonRegistersTransaction échoue car
la transaction est enregistrée via runTaskAsynchronously et performTicks
ne garantit pas la fin des tâches async. Ajout de waitAsyncTasksFinished()
pour attendre la complétion avant de vérifier.
@iambibi
Copy link
Member

iambibi commented Mar 11, 2026

Ah tu as réussi

@iambibi
Copy link
Member

iambibi commented Mar 11, 2026

Oui nirbose avait dit que les task en async faisait buger les tests ahaha j'ai pas pensé à te le dire

@iambibi iambibi added the ✨ Fixes Quelque chose a été patch label Mar 11, 2026
@iambibi iambibi added this to the 2.2.8 milestone Mar 11, 2026
@iambibi iambibi requested a review from ltuffery March 11, 2026 18:41
Copy link
Member

@iambibi iambibi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

j'attends la review de Nirbose, mais pour moi ça me va

@gtolontop
Copy link
Contributor Author

Il faut que je push encore une dernière version pour fix la dernière issue et se sera good :)

@gtolontop
Copy link
Contributor Author

Je suis entrain de les ajouter

Nouveaux tests:
- DateUtils: conversion secondes/millis/ticks, isBefore
- InputUtils: pluralize, edge cases null/empty/décimaux
- PaddingUtils: centrage, débordement, padding impair
- EnumUtils: match valide/invalide/null, valeur par défaut
- MathUtils: interpolation de couleurs (lerpColor)
- YmlUtils: deep copy de maps/listes imbriquées
- Queue: ajout, suppression, éviction LRU, taille max
- ColorUtils: conversions couleur/code/nom/matériau/RGB
- RandomUtils: bornes int/double/float, cas limites
- EconomyManager: formatage simplifié (k/M/B suffixes)
Ajout de waitAsyncTasksFinished() après performTicks() dans tous les
tests Economy qui vérifient des transactions enregistrées en async.
@gtolontop
Copy link
Contributor Author

Les tests on bloqué sur de l'ancien code je l'ai fix ça build ça devrais passer mais dcp y'a des test + les fix des résultats des test qui passais pas

@iambibi
Copy link
Member

iambibi commented Mar 12, 2026

Rename ta branche + le nom de ta pr dcp

Copy link
Contributor

@ltuffery ltuffery left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ça ne paraît pas OK. J’ai juste cette remarque, puis je ferai la review finale.

@gtolontop
Copy link
Contributor Author

Je termine tous proprement quand je rentre chez moi et se sera good

@gtolontop
Copy link
Contributor Author

et quel son les soucis ?

Évite d'itérer inutilement sur les multiblocks si config n'a pas
été initialisé (init() appelé uniquement via loadWithItemsAdder).
@gtolontop gtolontop changed the title fix: Tests unitaires cassés à cause du SpawnerExtractorListener fix: correction des tests unitaires et ajout de nouveau test Mar 12, 2026
@gtolontop
Copy link
Contributor Author

Tous devrais être bon :)

@gtolontop gtolontop marked this pull request as draft March 12, 2026 20:29
@iambibi iambibi modified the milestones: 2.2.8, 2.2.9 Mar 14, 2026
@gtolontop
Copy link
Contributor Author

Vous voulez que je fasse des changements supplémentaire ?

@iambibi
Copy link
Member

iambibi commented Mar 15, 2026

Bah je sais pas trop pour moi c'est OK, mais je crois que @ltuffery n'a pas encore fait sa review

@gtolontop
Copy link
Contributor Author

Bah je sais pas trop pour moi c'est OK, mais je crois que @ltuffery n'a pas encore fait sa review

Okay hésitez :)
(si tu as d'autre issue a fix je peux les fix se soir je suis dispo)

@iambibi
Copy link
Member

iambibi commented Mar 16, 2026

Ouais désolé si ça prends un peu de temps (regarde le nombre de pr que j'ai, la majorité c'est des une lignes rien passe, je crois qu'ils ont pas encore compris que ça a commencé 🤡).
En parallèle si tu veux encore contribuer mais tu sais pas quelle issue je peux t'en donner une

@gtolontop
Copy link
Contributor Author

Ouais désolé si ça prends un peu de temps (regarde le nombre de pr que j'ai, la majorité c'est des une lignes rien passe, je crois qu'ils ont pas encore compris que ça a commencé 🤡).
En parallèle si tu veux encore contribuer mais tu sais pas quelle issue je peux t'en donner une

mdrrrr t'inquiète pas de soucis, mais yep si ta des issue je peux check

@ltuffery
Copy link
Contributor

@gtolontop c'est ready for review cette PR ? Car actuellement tu la mis draft

@gtolontop
Copy link
Contributor Author

@gtolontop c'est ready for review cette PR ? Car actuellement tu la mis draft

Yep je la met

@gtolontop gtolontop marked this pull request as ready for review March 16, 2026 11:19
@iambibi
Copy link
Member

iambibi commented Mar 16, 2026

Ouais désolé si ça prends un peu de temps (regarde le nombre de pr que j'ai, la majorité c'est des une lignes rien passe, je crois qu'ils ont pas encore compris que ça a commencé 🤡).
En parallèle si tu veux encore contribuer mais tu sais pas quelle issue je peux t'en donner une

mdrrrr t'inquiète pas de soucis, mais yep si ta des issue je peux check

La liaison Minecraft-Discord
#455
Ou si tu veux t'amuser tu peux faire une feature de bingo qui est actif pdt les week ends
#661

@iambibi
Copy link
Member

iambibi commented Mar 16, 2026

Après si tu veux pas faire de features comme tu veux mais ça a peu de valeur de fixer des bugs, fin c'est cool mais le joueur va pas réellement le remarquer ahah

@gtolontop
Copy link
Contributor Author

Je joue pas vraiment j'ai pas trop d'idée donc si vous voulez des truc dite le moi et je vous le ferez sans soucis mais faut me dire se que vous voulez, feature etc

@gtolontop
Copy link
Contributor Author

Je vais check les deux issue que tu as send merci

@iambibi
Copy link
Member

iambibi commented Mar 16, 2026

Je joue pas vraiment j'ai pas trop d'idée donc si vous voulez des truc dite le moi et je vous le ferez sans soucis mais faut me dire se que vous voulez, feature etc

Faudra qd même jouer pour tester ta feature hein

@iambibi
Copy link
Member

iambibi commented Mar 16, 2026

Pour la liaison discord tu peux check le repo Plugin (de la v1), il contenait un système qui faisait la liaison discord, (avec juste une interaction base de donnée)

@gtolontop
Copy link
Contributor Author

Je joue pas vraiment j'ai pas trop d'idée donc si vous voulez des truc dite le moi et je vous le ferez sans soucis mais faut me dire se que vous voulez, feature etc

Faudra qd même jouer pour tester ta feature hein

Oui je sais mdrrr je disais juste je joue pas en tant que joueur xd et c'est pour ça que j'ai pas forcément des idées de se qu'il faudrait ajouter

@gtolontop
Copy link
Contributor Author

Pour la liaison discord tu peux check le repo Plugin (de la v1), il contenait un système qui faisait la liaison discord, (avec juste une interaction base de donnée)

Je vais check j'en avais fais un à l'époque

@iambibi
Copy link
Member

iambibi commented Mar 16, 2026

Pour la liaison discord tu peux check le repo Plugin (de la v1), il contenait un système qui faisait la liaison discord, (avec juste une interaction base de donnée)

Je vais check j'en avais fais un à l'époque

N'implemente pas un bot discord dans le plugin ahah
#456 (comme cette personne)
Conseil que j'avais donné au mec la :
Donc sur la V1 on avait un système où le plugin mettait un lien dans la DB et ensuite dans une periode précise si le joueur ne fait pas la commande /link sur discord alors on supprime le lien dans le db. Et le bot a lui aussi acces a la db donc il peut regarder si le code existe et apres il mets dans la db un lien uuid minecraft et id discord

Exemple : LinkerApi https://github.com/ServerOpenMC/Plugin/blob/main/src/main/java/fr/communaywen/core/utils/LinkerAPI.java Commande /link https://github.com/ServerOpenMC/Plugin/blob/main/src/main/java/fr/communaywen/core/commands/link/LinkCommand.java

@gtolontop
Copy link
Contributor Author

Pour la liaison discord tu peux check le repo Plugin (de la v1), il contenait un système qui faisait la liaison discord, (avec juste une interaction base de donnée)

Je vais check j'en avais fais un à l'époque

N'implemente pas un bot discord dans le plugin ahah #456 (comme cette personne) Conseil que j'avais donné au mec la : Donc sur la V1 on avait un système où le plugin mettait un lien dans la DB et ensuite dans une periode précise si le joueur ne fait pas la commande /link sur discord alors on supprime le lien dans le db. Et le bot a lui aussi acces a la db donc il peut regarder si le code existe et apres il mets dans la db un lien uuid minecraft et id discord

Exemple : LinkerApi https://github.com/ServerOpenMC/Plugin/blob/main/src/main/java/fr/communaywen/core/utils/LinkerAPI.java Commande /link https://github.com/ServerOpenMC/Plugin/blob/main/src/main/java/fr/communaywen/core/commands/link/LinkCommand.java

mdrrrrrrrrrrrrrrr j'avais pas prévue de foutre un bot 😂

Copy link
Member

@PuppyTransGirl PuppyTransGirl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

la plupart sont les mêmes reviews mais à des endroits différents

String motd = getComponentContent(server.motd());

new MotdUtils();
server.getScheduler().performTicks(12001L);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

est-ce que le performTicks est encore utile vu que tu changes le motd instantanément ?

@iambibi
Copy link
Member

iambibi commented Mar 18, 2026

tu as des reviews @gtolontop si tu avais pas vu

- Suppression des performTicks redondants avant waitAsyncTasksFinished
- Ajout de tests NaN, Infinity, -Infinity dans InputUtilsTest
- Suppression du bloc testLogging de debug dans build.gradle
- Fix locale EconomyFormattingTest pour éviter les échecs liés au séparateur décimal
@iambibi
Copy link
Member

iambibi commented Mar 19, 2026

Re review nécessaire par les auteurs des changements, ensuite on pourra la merge

Copy link
Contributor

@ltuffery ltuffery left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGFM

@iambibi iambibi merged commit 8aa0787 into ServerOpenMC:master Mar 20, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Fixes Quelque chose a été patch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants