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

Perte de texte avec le système de prévention de l'édition simultanée #6643

Open
Arnaud-D opened this issue Sep 15, 2024 · 3 comments
Open
Labels
Bloquant Ticket qui doit être traité avant la prochaine mise à jour C-Back Concerne le back-end Django C-Front Concerne l'interface du site S-BUG Corrige un problème

Comments

@Arnaud-D
Copy link
Contributor

Description du bug

Dans certains cas, la protection contre l'édition simultanée crée plus de problème qu'elle n'en résout.

Comment reproduire ?

  • Créer un contenu.
  • Ouvrir un formulaire de modification "éditer" pour modifier l'intro, écrivez quelque chose mais ne pas valider.
  • Se connecter dans une deuxième fenêtre et modifier l'intro (en validant).
  • Valider dans la première fenêtre : le formulaire échoue avec "une nouvelle version [...]" et vous avez la nouvelle version chargée dans le formulaire : vous avez perdu ce que vous écriviez.

Comportement attendu

Il faudrait avoir le choix d'écraser la version distante ou non, pouvoir comparer, et surtout ne pas perdre ce qu'on vient d'écrire.

Informations techniques

Dans la version de dev à l'heure où j'écris ça (75989e6).

@Arnaud-D Arnaud-D added S-BUG Corrige un problème C-Front Concerne l'interface du site C-Back Concerne le back-end Django labels Sep 15, 2024
@philippemilink philippemilink added the Bloquant Ticket qui doit être traité avant la prochaine mise à jour label Sep 22, 2024
@philippemilink philippemilink moved this from À trier to À reproduire in Suivi des tickets Sep 22, 2024
@philippemilink
Copy link
Member

Pour info, le code en question :

if current_hash != form.cleaned_data["last_hash"]:
data = form.data.copy()
data["last_hash"] = current_hash
data["introduction"] = versioned.get_introduction()
data["conclusion"] = versioned.get_conclusion()
form.data = data
messages.error(self.request, _("Une nouvelle version a été postée avant que vous ne validiez."))
return self.form_invalid(form)

et un test aussi lié :

def test_the_editor_forgets_its_content_on_form_submission(self):
selenium = self.selenium
author = ProfileFactory()
self.login(author)
selenium.execute_script('localStorage.setItem("editor_choice", "new")') # we want the new editor
new_article_url = self.live_server_url + reverse(
"content:create-content", kwargs={"created_content_type": "ARTICLE"}
)
selenium.get(new_article_url)
WebDriverWait(self.selenium, 10).until(ec.element_to_be_clickable((By.CSS_SELECTOR, "#id_title"))).click()
self.find_element("#id_title").send_keys("Oulipo")
intro = self.find_element("div#div_id_introduction div.CodeMirror")
action_chains = ActionChains(selenium)
scrollDriverTo(selenium, 0, 312)
action_chains.click(intro).perform()
action_chains.send_keys("Le cadavre exquis boira le vin nouveau.").perform()
self.find_element(".content-container button[type=submit]").click()
self.assertTrue(WebDriverWait(selenium, 10).until(ec.title_contains("Oulipo")))
selenium.get(new_article_url)
self.assertEqual("", self.find_element(".md-editor#id_introduction").get_attribute("value"))

@Arnaud-D
Copy link
Contributor Author

@Arnaud-D
Copy link
Contributor Author

Une idée connexe intéressante, avec possibilité de fusionner les deux versions : #3251

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bloquant Ticket qui doit être traité avant la prochaine mise à jour C-Back Concerne le back-end Django C-Front Concerne l'interface du site S-BUG Corrige un problème
Projects
Status: À reproduire
Development

No branches or pull requests

2 participants