-
Notifications
You must be signed in to change notification settings - Fork 4
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
feat(upload): Handle archived users in upload #2754
Conversation
|
||
def batch_update_params | ||
params.expect( | ||
user_rows: [[:id, :selected_for_user_save, :selected_for_invitation]] |
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.
Pourquoi [[]]
?
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.
c'est comme ça qu'on définit qu'on attend un array maintenant: https://medium.com/@rzvirfan/rails-8-introducing-params-expect-f99c4f1fec10
end | ||
|
||
def show_row_attribute?(attribute_name, user_list_upload) | ||
user_list_upload.restricted_user_attributes.exclude?(attribute_name.to_sym) | ||
end | ||
|
||
def checkbox_to_select_all_checked?(attribute_name, user_list_upload_id) | ||
cookies["checkbox_to_select_all_#{attribute_name}_checked_#{user_list_upload_id}"] != "false" |
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 suis partagé sur le fait d'utiliser les cookies pour partager de l'info de cette façon, ça marche mais que se passe t-il si la personne arrête de toucher son navigateur pendant les 10 minutes ? La requête suivante va échouer non ?
J'ai peur qu'on se retrouve dans des state un peu bizarres, aussi toujours un peu peur d'overflow les cookies
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.
Non ça n'échoue pas, c'est juste que la checkbox va être désélectionnée par défaut.
J'avoue c'est peut-être pas la meilleure utilisation mais pour moi c'était logique que cet état de "préférences" soit lié au navigateur.
J'ai augmenté leur durée à 1h et explicité un peu mieux le mécanisme ici: c573f65
Si on voit que ça crée des soucis on pourra changer et avoir ça en back-end dans le cache
static targets = ["checkbox", "invitationFormatOption"] | ||
|
||
connect() { | ||
/* eslint-disable prefer-destructuring */ |
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.
Faudrait peut-être changer la règle car j'avoue que destructurer pour mettre sur this me semble douteux ^^
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.
Oui y a pas de moyen de disable la règle juste pour ces cas malheureusement.
const form = document.createElement("form") | ||
form.method = "post" | ||
form.action = url | ||
form.innerHTML = DOMPurify.sanitize(` | ||
<input type="hidden" name="_method" value="patch"> | ||
<input type="hidden" name="authenticity_token" value="${document.querySelector("meta[name='csrf-token']").content}"> |
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.
Ne pourrait-on pas créer un object Javascript pour servir de helper, il commence à y avoir pas mal de cas où on doit faire ça manuellement.
Je pense que cette méthode pourrait se réduire à
Server.fetch(url, { method: "patch", payload: { [`user_row[${attribute}]`]: value })
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.
Bonne idée, on peut faire un ticket pour faire ça quand on aura un peu plus de temps.
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.
## Both rows are checked by default | ||
expect(find("input[type='checkbox'][data-user-row-id='#{hernan_row.id}']")).to be_checked | ||
expect(find("input[type='checkbox'][data-user-row-id='#{christian_row.id}']")).to be_checked | ||
|
||
expect(hernan_row.reload.selected_for_user_save).to be_truthy | ||
expect(christian_row.reload.selected_for_user_save).to be_truthy | ||
expect(page).to have_content("2 usagers sélectionnés") | ||
|
||
# Uncheck all rows | ||
check_all_button = find("input[type='checkbox'][data-action='click->select-user-rows#toggleAll']") | ||
expect(check_all_button).to be_checked | ||
check_all_button.click | ||
|
||
expect(page).to have_content("Aucun usager sélectionné", wait: 5) | ||
expect(christian_row.reload.selected_for_user_save).to be_falsey | ||
expect(hernan_row.reload.selected_for_user_save).to be_falsey | ||
expect(page).to have_css("input[type='checkbox'][data-user-row-id='#{christian_row.id}']:not(:checked)") | ||
expect(page).to have_css("input[type='checkbox'][data-user-row-id='#{hernan_row.id}']:not(:checked)") | ||
|
||
# Check all rows | ||
check_all_button.click | ||
|
||
expect(page).to have_content("2 usagers sélectionnés", wait: 5) | ||
expect(christian_row.reload.selected_for_user_save).to be_truthy | ||
expect(hernan_row.reload.selected_for_user_save).to be_truthy | ||
expect(page).to have_css("input[type='checkbox'][data-user-row-id='#{hernan_row.id}']:checked") | ||
expect(page).to have_css("input[type='checkbox'][data-user-row-id='#{christian_row.id}']:checked") | ||
|
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.
Ça me va en l'état mais peut-être qu'il serait plus sain de faire ça en plusieurs tests, ça affinerait un peu et donnerait des erreurs un peu plus parlante en cas d'échec
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.
Oui je comprends mais j'ai pensé que c'était bien aussi d'avoir un test e2e où on fait toutes les actions sur la même session.
Pour les comportements spécifiques j'ai fait des tests séparés.
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.
Juste quelques petits retours mais globalement ça me va 🙌
594b2bd
to
72ec8d9
Compare
Merci @Michaelvilleneuve , j'ai répondu à tes commentaires et appliqué des suggestions ! |
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.
Merci pour les petits changements 👍
Closes #2670 , #2672 , #2674 , #2660.
Contexte
Cette PR regroupe les résolutions de plusieurs issues avant le déploiement de la nouvelle fonctionnalité d'upload.
J'explicite ci-dessous les différents sujets qu'elle traite. Elle se lit bien commit par commit aussi.
Usagers archivés et dossiers traités
Sauvegarde de la sélection des dossiers
Je reprends les travaux initiés dans #2697 .
marked_for_user_save
etmarked_for_invitation
enselected_for_user_save
etselected_for_invitation
qui sont plus parlantselected_for_user_save
au moment de la création de lauser_row
, et dépend de nos règles métiers pour savoir si on sélectionne par défaut ou nonbatch_update
qui permet d'updater plusieurs rows d'un coup lorsqu'on sélectionne/déselectionne toutselected_for_invitation
lorsque la sauvegarde de l'usager a réussi en fonction de nos règles métiersBug sur les matching users
Il y avait un bug sur le matching des users au début du fait qu'on ne formattait les attributs de nos rows au moment de requêter les matchs potentiels: b961f7a
Ajout des features tests
Je rajoute plusieurs features tests pour prendre en compte nos nouvelles règles métiers et vérifier que les interactions fonctionnent correctement sur l'UI: 2eb7977