Skip to content
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

Implement discourse API #1

Open
MartinDelille opened this issue Dec 12, 2018 · 19 comments
Open

Implement discourse API #1

MartinDelille opened this issue Dec 12, 2018 · 19 comments

Comments

@MartinDelille
Copy link
Member

@tmortagne Ca m'a l'air niquel!

Petite question: je vais me faire un script bidon pour mes tests. Pourrais-tu me faire un petit exemple que je puisse invoquer en ligne de commande?

Exemple:

// main.java
import path/to/the/discourse/connector

void main() {
    BaseObject user("MartinDelille", "martin.delille@gmail.com", "Martin Delille");
    DiscourseUserSyncConnector connector("https://forum.atelier-medias.org");
    connector.createUser(user);
}

Puis:

$ java main.java

C'est sans doute bourré de faute ce que je te propose mais c'est une base de ce dont j'aurais besoin pour avancer.

@tmortagne
Copy link
Member

Pour test test je t'ai mis un début de test unitaire dans le premier commit, il te suffit de le lancer et ça appelle le connecteur.

@MartinDelille
Copy link
Member Author

comment je lance les tests unitaires?

@tmortagne
Copy link
Member

Maven les lance automatiquement quand tu build avec mvn install par example mais le plus pratique de loin je trouve c'est d'importer le projet dans Eclipse ou IntelliJ (ou autre IDE Java) et lance le test en debug directement dans ton IDE.

@MartinDelille
Copy link
Member Author

J'ai cette erreur:

$ mvn install
[INFO] Scanning for projects...
Downloading from central: https://repo.maven.apache.org/maven2/org/xwiki/contrib/parent-platform/9.11-5/parent-platform-9.11-5.pom
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for org.xwiki.contrib.mailinglist:usersync:1.0-SNAPSHOT: Could not find artifact org.xwiki.contrib:parent-platform:pom:9.11-5 in central (https://repo.maven.apache.org/maven2) and 'parent.relativePath' points at wrong local POM @ line 27, column 11
 @
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR]   The project org.xwiki.contrib.mailinglist:usersync:1.0-SNAPSHOT (/Users/martin/dev/adm/usersync/pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM for org.xwiki.contrib.mailinglist:usersync:1.0-SNAPSHOT: Could not find artifact org.xwiki.contrib:parent-platform:pom:9.11-5 in central (https://repo.maven.apache.org/maven2) and 'parent.relativePath' points at wrong local POM @ line 27, column 11 -> [Help 2]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException

@tmortagne
Copy link
Member

Ha oui j'ai oublié qu'il faut le repo de XWiki dans ton settings.xml. Je vais l'ajouter dans le pom, ce sera plus simple.

@tmortagne
Copy link
Member

Devrait aller mieux la.

@MartinDelille
Copy link
Member Author

J'ai un log très verbeux et très long quand je fais mvn test: https://pastebin.com/t5jY7Hhb

Ya pas moyen de lancer juste les tests?

@MartinDelille
Copy link
Member Author

@MartinDelille
Copy link
Member Author

Enfin quelle est la meilleure façon d'utiliser cette librairie? https://github.com/zeusbaba/discourse-api-client

J'affectionne les submodules mais je comprends pas comment les utiliser.

J'ai aussi testé https://jitpack.io/ sans succès: https://pastebin.com/31aXbvRY

@tmortagne
Copy link
Member

Sinon je suppose que je récupère l'url grâce à ça: https://github.com/atelierdesmedias/usersync/blob/master/usersync-connectors/usersync-connector-discourse/src/main/java/org/xwiki/contrib/usersync/discourse/internal/DiscourseUserSyncConnector.java#L42-L44

Dans le contexte de XWiki le composant ConfigurationSource va piocher dans WEB-INF/xwiki.properties par example entre autres. Dans le test unitaire que je t'ai démarré tu peut manipulater la conf via this.oldcore.getConfigurationSource().

@tmortagne
Copy link
Member

tmortagne commented Dec 19, 2018

Enfin quelle est la meilleure façon d'utiliser cette librairie? https://github.com/zeusbaba/discourse-api-client

Tu est sur que tu veut utiliser ça ? La dernière version est très ancienne et même à l'époque c'était manifestement une version relativement alpha a en juger par son nom et status. franchement a priori ça ne devrait pas être compliqué de manipuler l'API avec un truc un peu plus générique du genre gson qui est utilisé par cette lib (et il y as plein d'autre lib REST+JSON générique actives et maintenues depuis le temps).

En règle générale l'idéal pour un projet Maven ou Gradle (90% des projets Java à jour quoi) c'est d'ajouter dans le descripteur du projet les dépendences mais pour ça il faut que cette dep soit présente dans un repo Maven ce qui n'est pas le cas du truc que tu as trouvé malheureusement mais si cette lib marche bien je l'ajouterait dans le repo Maven de XWiki. En attendant tu peu simplement l'installer localement pour tes tests histoire que Maven le trouve quand tu build, regarde https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html.

@MartinDelille
Copy link
Member Author

Non pas du tout, c'est juste le premier truc que j'ai trouvé sur google et effectivement c'est pas sûr que ce soit super compatible avec notre version de Discourse.

As-tu une librairie REST+JSON déjà dans le repo maven d'Xwiki à me conseiller?

@tmortagne
Copy link
Member

tmortagne commented Dec 19, 2018

déjà dans le repo maven d'Xwiki

Pas besoin de te préoccuper de ça, prend plutôt Maven central comme référence mais en règle générale une lib Java active sera sur Maven central.

En ce qui concerne en conseiller une la dernière fois que j'ai fait du REST je l'ai fait "à la main" à coup de HTTP client et parseur JSON alors je ne sais pas trop ce qui est la référence du genre en ce moment. retrofit et jersey on l'air sympa (tous les deux très actifs et dispo sur Maven central)

@MartinDelille
Copy link
Member Author

Ok je t'avoue que je ne veux pas me lancer dans un truc à la main ni bencher toutes les librairies existantes. Je vais partir sur retrofit pour tout un tas de raison:

Pourrais-tu juste l'ajouter dans la dépendance de retrofit?

@tmortagne
Copy link
Member

le projet jersey est archivé: https://github.com/jersey/jersey

Il a juste bougé sur https://github.com/eclipse-ee4j/jersey manifestement.

Pourrais-tu juste l'ajouter dans la dépendance de retrofit?

Tu as le truc à ajouter dans le pom sur https://square.github.io/retrofit/#download.

@MartinDelille
Copy link
Member Author

Dans le contexte de XWiki le composant ConfigurationSource va piocher dans WEB-INF/xwiki.properties par example entre autres. Dans le test unitaire que je t'ai démarré tu peut manipulater la conf via this.oldcore.getConfigurationSource().

Peux-tu m'en dire plus? Je voudrais mettre l'url et la clé d'api dans un fichier non versionné pour pas publier ça sur github.

@tmortagne
Copy link
Member

Il n'y as rien de spécial pour les tests. J'imagine que le plus simple est dans beforeEach de charger un fichier properties et d'injecter ce qu'il contiens dans le MemoryConfigurationSource dont je t'ai parlé. Tu peut utiliser la classe Properties pour loader ce fichier.

@MartinDelille
Copy link
Member Author

ok je vais faire simple en évitant juste de commiter la clé d'api en dur dans la version locale.

@MartinDelille
Copy link
Member Author

Je sais pas si tu as vu, j'ai lancé des reviews ici: https://github.com/atelierdesmedias/usersync/pull/2/files

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants