Skip to content

Draft: Resolve "[ORCID] Intégration de la procédure d'identification des auteurs dans le site Érudit"

Augusto Latgé requested to merge 3030-orcid-authors-authentication into master

Qu'est-ce que le MR fait ?

Ajoute la réclamation de la paternité de l'article avec l'API de membres d'ORCID.

Comment tester ?

Configurations de l'environnement local

  1. Avoir un Fedora local, car le "claim" ORCID met à jour l’EA XML dans Fedora ;
  2. Ingérer dans Fedora les revues, numéros et articles dans le fichier pids (avec fedora-docker) ;
  3. Dépublier tous les numéros des revues utilisées pour les tests ;
python eruditorg/manage.py dbshell
update erudit_issue set is_published = 0 where journal_id in (24, 57, 68, 473);
  1. Importer les numéros utilisés pour les tests :
python eruditorg/manage.py import_journals_from_fedora --issue-localid images08324
python eruditorg/manage.py import_journals_from_fedora --issue-localid meta04930
python eruditorg/manage.py import_journals_from_fedora --issue-localid theologi1829862
python eruditorg/manage.py import_journals_from_fedora --issue-localid bioethics07048
  1. Configurer les variables: FEDORA_ROOT, FEDORA_USER et FEDORA_PASSWORD du fichier .env pour pointer sur le Fedora local ;
  2. Configurer aussi dans le ficheir .env les variables d'environnement pour la version de tests de l'API de membres d'ORCID : ORCID_CLIENT_ID, ORCID_CLIENT_SECRET, ORCID_REDIRECT_URI et ORCID_DOMAIN. Contacter @augusto pour avoir les valeurs des variables.


Rouler le serveur avec django-extensions

Pour pouvoir interagir avec l'ORCID API, nous avons besoin d'un certificat SSL. Donc, on utilise la librairie django-extensions pour le faire. Voir la documentation de django-extensions pour plus d'informations : https://django-extensions.readthedocs.io/en/latest/runserver_plus.html?highlight=cert#certificates-paths.

  1. Installer les dépendances pour la configuration ssl_dev :
pip install -r requirements-ssl-dev.txt
  1. Rouler le serveur avec la commande
python eruditorg/manage.py runserver_plus --settings base.settings.ssl_dev --cert-file /tmp/cert.crt
  1. Accéder à www avec l'URL https://127.0.0.1:8000/ (ne pas utiliser https://localhost:8000/).


Test de l'authentification avec ORCID (Oauth)

  1. Créer un ORCID de test dans l'API de tests d'ORCID à l'adresse : https://sandbox.orcid.org/register (plus d'informations à propos de comment se créer un compte à https://info.orcid.org/documentation/integration-guide/sandbox-testing-server/) ;
  2. Ouvrir en local la page d'un article (par exemple: https://127.0.0.1:8000/fr/revues/images/2023-n207-images08324/102683ac/) ;
  3. Accéder au menu d'ORCID dans la page de l'article (en haut à droite) et cliquer sur l'option "Connexion" ;
  4. Se connecter avec ORCID Oauth ;
  5. Vérifier que l'on est bien connecté à ORCID en accédant le menu d'ORCID de nouveau. Le nom de l'auteur ORCID doit y apparaître. Une boîte avec l'ORCID de l'auteur et la transaction permise doit apparaître en dessous des noms d'auteurs. L'option "À propos d'ORCID" menu à une section du site "À propos" d'Érudit que situe l'auteur par rapport aux interactions possibles avec ORCID à partir de www. L'option "Déconnexion" sera aussi présente. En cliquant sur "Mon dossier", on doit être envoyé à la page ORCID de l'auteur (dans un nouvel onglet) ;
  6. Tester la déconnexion en cliquant sur le bouton "Déconnexion" dans le menu d'ORCID.

Screencast_from_2024-02-06_08_31_18_AM



Tester l'ajout d'un ORCID au nom d'auteur (un seul auteur)

  1. S’authentifier à ORCID et accéder à l'article : https://127.0.0.1:8000/fr/revues/bioethics/2022-v5-n2-bioethics07048/1089786ar/;
  2. Une fois authentifié avec ORCID, le bouton "Lier à votre identifiant ORCID" apparaîtra sous les noms des auteurs dans la boîte d'interaction avec ORCID, si l'auteur ORCID courant n'a pas fait un "claim" sur l'article auparavant (sinon la transaction de suppression de l'ORCID sera affichée) ;
  3. Cliquer sur le bouton pour commencer l'ajout de l'ORCID. Le formulaire de choix de noms d'auteurs apparaîtra dans la boîte d'interaction avec ORCID;
  4. Dans le cas d'un seul auteur dans l’EA, le nom de l'auteur est déjà présélectionné. Cliquer sur le bouton "Confirmer" pour continuer ;
  5. Vérifier que l'icône d'ORCID (verte) s'ajoute au nom de l'auteur sélectionné (et dans la section "...plus d'informations" avec l'ORCID iD compacte) et que le bouton "Dissocier votre identifiant ORCID de cet article" a remplacé le bouton "Lier à votre identifiant ORCID". L'icône ORCID avant l'ORCID iD dans la boîte de transactions d'ORCID devient verte aussi.
  6. Vérifier que le message "L’article a été lié à votre identifiant ORCID" est affiché et disparaît en suite (après 5 seconds).
  7. Regarder le XML de l'article pour voir que l'identifiant y a été ajouté correctement (<grauteur><auteur><idpublic scheme="orcid">...)

Screencast_from_2024-02-06_08_59_33_AM



Test de la suppression d'un ORCID préalablement ajouté

  1. Une fois authentifié avec ORCID, et dans le cas où le "claim" avec ORCID à déjà été fait pour le présent article par l'auteur ORCID courant, le bouton "Dissocier votre identifiant ORCID de cet article" sera affiché ;
  2. Cliquer sur le bouton pour enlever l'ORCID. L'icône d'ORCID doit disparaître de devant le nom de l'auteur (aussi dans la section "...plus d'informations") et le bouton "Lier à votre identifiant ORCID" doit s'afficher.
  3. Le message "Votre identifiant ORCID n’est plus associé à cet article" doit être affiché et disparaître après 5 seconds.
  4. Regarder le XML de l'article pour voir que l'identifiant y a été supprimé (<grauteur><auteur>... sans <idpublic scheme="orcid">...)

Screencast_from_2024-02-06_09_03_57_AM



Tester l'ajout d'un ORCID au nom d'auteur parmi plusieurs (sans similarité entre les noms)

  1. Accéder à l'article suivant : https://127.0.0.1:8000/fr/revues/bioethics/2022-v5-n2-bioethics07048/1089781ar/ ;
  2. Cliquer sur le bouton "Lier à votre identifiant ORCID" ;
  3. Comme il n'y a pas de similarité entre les noms, il n'y a pas de nom présélectionné. Sélectionner le nom de l'auteur ("Alexandra Sweeney Beaudry", par exemple). Cliquer sur le bouton "Confirmer" ;
  4. Vérifier que l'icône d'ORCID s'ajoute au nom de l'auteur sélectionné et que le bouton "Dissocier votre identifiant ORCID de cet article" a remplacé le bouton "Lier à votre identifiant ORCID".
  5. Vérifier l'XML pour voir que l'ajout du identifiant ORCID a été fait au bon auteur.

Screencast_from_2024-02-06_09_14_27_AM



Tester l'ajout d'un ORCID au nom d'auteur parmi plusieurs (avec similarité entre les noms)

  1. Changer le nom de l'auteur dans le compte de test d'ORCID à : prénom "Louise" et nom "Bernier" ;
  2. Accéder à l'article suivant : https://127.0.0.1:8000/fr/revues/bioethics/2022-v5-n2-bioethics07048/1089781ar/, pour lequel un des auteurs est "Louise Bernier" ;
  3. Cliquer sur le bouton "Lier à votre identifiant ORCID" ;
  4. Comme il y a une similarité entre les noms (de l’EA et d'ORCID), le nom "Louise Bernier" est présélectionné. Cliquer sur le bouton "Confirmer" ;
  5. Vérifier que l'icône d'ORCID s'ajoute au nom "de l'auteur sélectionné "Louise Bernier" et que le bouton "Supprimer l'article d'ORCID" a remplacé le bouton "Ajouter l'article à ORCID".
  6. Vérifier l'XML pour voir que l'ajout du identifiant ORCID a été fait au bon auteur.

Screencast_from_2024-02-06_09_22_56_AM



Test d'ajout d'ORCID dans un article avec des <membre><nompers>

  1. Accéder à l'article : https://127.0.0.1:8000/fr/revues/meta/2019-v64-n1-meta04930/1065336ar/, qui contient des <membre><nompers>

Screencast_from_2024-02-06_09_29_47_AM



Tester que le bouton d'ajout n'apparaît pas quand on est sur un article sans <nompers>

  1. Accéder à l'article : https://127.0.0.1:8000/fr/revues/theologi/2010-v18-n2-theologi1829862/1007476ar/, qui ne contient pas des <nompers>;
  2. Vérifier que le boîte de transactions d'ORCID ne s'affiche pas.

image



Tester le formulaire de selection du nom de l'auteur (lors de l'ajout d'un ORCID) quand il y a déjà des ORCID iD pour certains auteurs

  1. Accéder à l'article suivant : https://127.0.0.1:8000/fr/revues/bioethics/2022-v5-n2-bioethics07048/1089799ar/, pour lequel deux auteurs ont déjà des ORCID iD ;
  2. Cliquer le bouton "Lier à votre identifiant ORCID" ;
  3. Vérifier que les noms des auteurs ayant déjà des ORCID iD ne sont pas sélectionnables et ont une couleur de police grise ;
  4. Vérifier qu'un message s'affiche donnant des instructions de comment procéder en cas de conflit de noms (ORCID iDs déjà présentes pour le nom qu'on voudrait sélectionner).

Screencast_from_2024-02-06_11_27_05_AM



Tester l'erreur qui s'affiche dans le formulaire de selection du nom de l'auteur (lors de l'ajout d'un ORCID) quand aucun nom d'auteur est sé

  1. Accéder à l'article suivant : https://127.0.0.1:8000/fr/revues/bioethics/2022-v5-n2-bioethics07048/1089799ar/, pour lequel deux auteurs ont déjà des ORCID iD ;
  2. Cliquer le bouton "Lier à votre identifiant ORCID" ;
  3. Cliquer le bouton "Confirmer" sans sélectionner aucun nom d'auteur ;
  4. Vérifier que l'erreur "Ce champ est obligatoire." s'affiche ;
  5. Sélectionner le nom d'un auteur et cliquer sur "Confirmer" ;
  6. Valider qui l'ORCID a été associé correctement.

Screencast_from_2024-02-06_11_34_19_AM



Tester l'ajout d'un ORCID quand tous les auteurs ont déjà un ORCID iD associé

  1. Accéder à l'article suivant : https://127.0.0.1:8000/fr/revues/bioethics/2022-v5-n2-bioethics07048/1089785ar/. Cette article a un seul auteur ayant déjà un ORCID iD associé ;
  2. Vérifier que aucun nom peut être sélectionné ;
  3. Vérifier que le bouton "Confirmer" n'est pas présent ;
  4. Vérifier qu'un message s'affiche donnant des instructions de comment procéder en cas de conflit de noms (ORCID iDs déjà présentes pour le nom qu'on voudrait sélectionner).

image



Tester l'authentification d'un ORCID iD existant (ajouté par le Production)

Pour ce test il faut manipuler le code du projet pour ajouter l'ORCID iD non authentifié du testeur dans le XML de l'article. On le fait comme suit :

Préparation du test

  1. Changer l'attribut authentifie à "false" dans la fonction apps.public.orcid.utils.add_idpublic_to_element :
def add_idpublic_to_element(el: Element, orcid_id: str) -> None:
    """Add the ORCID `idpublic` to the XML element."""
    idpublic = etree.Element(
        f"{{{el.nsmap[None]}}}idpublic",
+       **{"scheme": "orcid", "authentifie": "false"},
-       **{"scheme": "orcid", "authentifie": "true"},
        nsmap=el.nsmap,
    )
    idpublic.text = f"https://orcid.org/{orcid_id}"
    el.insert(0, idpublic)
  1. Commenter les lignes qui envoient le ORCID work à l'ORCID Membre API et qui mettent à jour la DB dans la fonction apps.public.orcid.utils.execute_orcid_addition, comme suit :
def execute_orcid_addition(
    orcid_id: str,
    access_token: str,
    ea_and_orcid_info: EAAndOrcidInfo,
    orcid_author_name_in_ea: EAAuthorNames,
) -> None:
    """Execute the following operations:
    1) Add the author's ORCID ID to the Érudit Article XML;
    2) Send the Érudit Article as an ORCID work to the author's ORCID record;
    3) Create an `ORCIDAuthorArticle` object to allow future interaction with the ORCID
    Member API related to the current Érudit Article;
    4) Update the Érudit Article XML in Fedora.
    """
    updated_article_xml = add_orcid_to_xml(
        ea_and_orcid_info.article_xml,
        orcid_author_name_in_ea,
        ea_and_orcid_info.orcid_id,
    )
    if not fedora_is_up():
        logger.error(
            f"Fedora not available. Failed to add the ORCID iD {orcid_id} to the article"
            f" {ea_and_orcid_info.article_pid}."
        )
        raise FailedORCIDTransaction
+   # response = add_to_orcid_record(
+   #     orcid_id, access_token, orcid_work.conversion(remove_xml_namespaces(updated_article_xml))
+   # )
+   # if response.status_code > 300:
+   #     logger.error(
+   #         f"Communication error with ORCID Member API. Failed to add the ORCID iD {orcid_id} to "
+   #         f"the article {ea_and_orcid_info.article_pid}."
+   #     )
+   #     raise FailedORCIDTransaction
+   # OrcidAuthorArticle.objects.create(
+   #     orcid_author=ea_and_orcid_info.orcid_author,
+   #     article_pid=ea_and_orcid_info.article_pid,
+   #     put_code=response.headers["location"].split("/")[-1],
+   #     ea_author_given_names=orcid_author_name_in_ea.given_names,
+   #     ea_author_family_name=orcid_author_name_in_ea.family_name,
+   # )
-   response = add_to_orcid_record(
-       orcid_id, access_token, orcid_work.conversion(remove_xml_namespaces(updated_article_xml))
-   )
-   if response.status_code > 300:
-       logger.error(
-           f"Communication error with ORCID Member API. Failed to add the ORCID iD {orcid_id} to "
-           f"the article {ea_and_orcid_info.article_pid}."
-       )
-       raise FailedORCIDTransaction
-   OrcidAuthorArticle.objects.create(
-       orcid_author=ea_and_orcid_info.orcid_author,
-       article_pid=ea_and_orcid_info.article_pid,
-       put_code=response.headers["location"].split("/")[-1],
-       ea_author_given_names=orcid_author_name_in_ea.given_names,
-       ea_author_family_name=orcid_author_name_in_ea.family_name,
-   )
    update_article_xml(ea_and_orcid_info.article_pid, etree.tostring(updated_article_xml))
  1. Accéder à l'article suivant : https://127.0.0.1:8000/fr/revues/bioethics/2022-v5-n2-bioethics07048/1089781ar/ ;

  2. Exécuter l'addition de l'ORCID à un nom d'auteur. Seulement le XML sera touché ;

  3. Rafraîchir la page pour voir que l'auteur sélectionné possède maintenant le même ORCID iD que le testeur, mais non authentifié ;

Screencast_from_2024-02-06_01_06_46_PM

  1. Défaire les changements dans le code.

Exécution du test

  1. Dans la boîte de transactions d'ORCID de la page de l'article, on devrait voir s'afficher deux transactions possibles (boutons) s'afficher : "Authentifier votre identifiant ORCID" et "Dissocier votre identifiant ORCID de cet article" ;
  2. Cliquer sur le bouton "Authentifier votre identifiant ORCID" ;
  3. Vérifier que l'ORCID iD de l'auteur est passé à authentifié (aussi dans l'XML) ;
  4. Vérifier que la transaction que s'affiche maintenant est la suppression avec le bouton "Dissocier votre identifiant ORCID de cet article".

Screencast_from_2024-02-06_01_21_53_PM



Tester les messages d'erreur lors de l'exécution des transactions (avec la transaction d'addition dans ce cas)

Préparation du test

  1. Ajouter une execption dans la vue apps.public.orcid.views.add_orcid comme suit :
@orcid_authentication_required
def add_orcid(request: HttpRequest, issue_localid: str, article_localid: str) -> HttpResponse:
    """This view does the following:
    1) Render the EA authors names selection form;
    2) Check if there is an EA author name that is similar to the ORCID author name. In this case
    the name is the initial choice in the names selection form. If the similar name already has an
    ORCID iD it will not be pre-selected and that name choice will be disabled. Similar names with
    existing ORCID iDs are treated in the "authentication or removal" transaction.
    3) Check the list of existing ORCID iDs. The selection of EA authors names with ORCID iDs will
    be disabled in the form.
    4) If all EA authors have an ORCID iD, all selections will be disabled as well as the addition
    form "Confirmation" button.
    5) If the EA author name selection is successful, execute the ORCID addition and make the
    "ORCID removal" transaction available."""
    ea_and_orcid_info = get_ea_and_orcid_info(
        request.session["orcid_session_info"]["orcid"], issue_localid, article_localid
    )
    ea_authors_names_and_orcid = get_ea_authors_names_and_orcid(ea_and_orcid_info.article_xml)
    similar_names_and_orcid = get_similar_names_and_orcid(
        ea_authors_names_and_orcid, ea_and_orcid_info.orcid_author.name
    )
    existing_orcids = [
        ea_author_names_and_orcid.orcid_id
        for ea_author_names_and_orcid in ea_authors_names_and_orcid
    ]
    has_disabled_authors_names = any(existing_orcids)
    full_orcids = all(existing_orcids)
    form = SelectEAAuthorNameForm(
        ea_authors_names_and_orcid=ea_authors_names_and_orcid,
        similar_names_and_orcid=similar_names_and_orcid,
        no_initial=full_orcids,
    )
    if request.method == "POST":
        form = SelectEAAuthorNameForm(
            request.POST, ea_authors_names_and_orcid=ea_authors_names_and_orcid
        )
        if form.is_valid():
            selected_names = EAAuthorNames(**json.loads(form.data["names"]))
            # Once the ORCID is added to the article, the next possible transaction will be to
            # remove it
+           from django.http import Http404
+           raise Http404
            return execute_transaction(
                request,
                issue_localid,
                article_localid,
                ea_and_orcid_info,
                selected_names,
                execute_orcid_addition,
                RemoveOrcidTransaction,
            )
    return render(
        request,
        "public/orcid/partials/orcid_transaction.html",
        {
            "orcid_transaction": AddOrcidTransaction(
                orcid_id=request.session["orcid_session_info"]["orcid"],
                issue_localid=issue_localid,
                article_localid=article_localid,
            ),
            "form": form,
            "action_url": reverse("public:orcid:add", args=[issue_localid, article_localid]),
            "disable_confirmation": full_orcids,
            "has_disabled_authors_names": has_disabled_authors_names,
        },
    )

Exécution du test

  1. Accéder à l'article suivant : https://127.0.0.1:8000/fr/revues/bioethics/2022-v5-n2-bioethics07048/1089781ar/ ;
  2. Exécuter l'addition de l'ORCID à un nom d'auteur ;
  3. Vérifier le message d'erreur que s'affiche ;

Screencast_from_2024-02-06_01_34_29_PM

  1. Défaire le changement dans le code.


Git

  • Est-ce que le message de commit est clair et décrit bien les changements ?
  • Est-ce que le MR est exempt de commits qui modifient des commits qui ont été ajoutés dans le même MR ?

Correction de bogues

  • Est-ce qu'il y a un test de régression ?

Nouvelle fonctionnalité

  • Est-ce que la fonctionnalité est documentée et testée ?

Autres vérifications

  • Internationalisation
    • Est-ce que les chaînes de caractères sont internationalisées ?
    • Est-ce que la langue de base est le français ?
  • Changements au code
    • Est-ce que tous les print / console.log ont été enlevés ?
    • Est-ce que les requêtes HTTP ont un timeout explicite ?
  • Front-end
    • Est-ce que les classes adhèrent à la convention de nommage : traits d'union pour le Sass et camelCase pour JavaScript ?
    • Est-ce que le code suit notre guide javascript ?
  • URLs
    • Est-ce que les URLs contiennent uniquement des lettres et des caractères de soulignement ?
  • Templates
    • Est-ce que les noms des templates contiennent uniquement des lettres et des caractères de soulignement ?
    • Est-ce que les "partials" sont dans les répertoires "partials" ?

Related to #3030

Edited by Augusto Latgé

Merge request reports