2012-04-22 1 views
3

la méthode .move_to() ne fonctionne pas pour moi. J'ai regardé d'autres messages que les gens recommandent d'enregistrer l'instance, ainsi que de recharger les instances de nœuds. Mais aucune de ces solutions ne fonctionne dans ce cas de test. J'ai aussi essayé de faire ._tree_manager.rebuild(), qui ne fonctionne pas non plus. Mon code de test ci-dessous:django-mptt: .move_to ne fonctionne pas dans le testeur

def test_reorder_pages(self): 
    p = Page.objects.get(slug='page-1') 
    p2 = Page.objects.get(slug='page-2') 

    self.assertEqual(1, p.lft) 
    self.assertEqual(3, p2.lft) 

    p2.move_to(p, 'left') 

    p = Page.objects.get(slug='page-1') 
    p2 = Page.objects.get(slug='page-2') 

    ## Values should now be reversed 
    self.assertEqual(3, p.lft) 
    self.assertEqual(1, p2.lft) 

En fait ce que je me attends arriver est que la page 2 est placé 'avant' (à gauche ...) page-1. Mais les deux dernières affirmations échouent. J'ai aussi vérifié toutes les autres valeurs (lft, rght, level, tree_id), et aucun d'entre eux a changé.

Est-ce que quelqu'un sait ce que je fais mal?

EDIT: Après une suggestion par mossplix, j'ai essayé à nouveau Page.tree.rebuild(). Cela ne fonctionne toujours pas, mais j'ai remarqué un comportement étrange. Avant la MOVE_TO() ces tests passerait:

self.assertEqual(0, p.level) 
    self.assertEqual(1, p.lft) 
    self.assertEqual(2, p.rght) 
    self.assertEqual(1, p.tree_id) 

    self.assertEqual(0, p2.level) 
    self.assertEqual(3, p2.lft) 
    self.assertEqual(4, p2.rght) 
    self.assertEqual(1, p.tree_id) 

Après la MOVE_TO() et reconstruisent() ce que je me attends est ceci:

self.assertEqual(0, np.level) 
    self.assertEqual(3, np.lft) 
    self.assertEqual(4, np.rght) 
    self.assertEqual(1, p.tree_id) 

    self.assertEqual(0, np2.level) 
    self.assertEqual(1, np2.lft) 
    self.assertEqual(2, np2.rght) 
    self.assertEqual(1, p.tree_id) 

Les tests échouent au-dessus cependant, et en y regardant de plus près, les deux pages ont maintenant des valeurs identiques pour tous ces attributs (lft, rght, level, tree_id). Sûrement c'est faux puisque cela impliquerait qu'ils occupent exactement la même position dans l'arbre?

Dernière mise à jour: On dirait que l'utilisation de runserver, fonctionne parfaitement. Les problèmes que je rencontre semblent être liés au cadre de test. J'ai essayé d'utiliser TransactionTestCase mais cela n'a pas résolu le problème non plus. Titre mis à jour pour refléter le fait qu'il s'agit de tests.

Répondre

0

vous devrez peut-être appeler explicitement

Page.tree.rebuild()
après le déplacement des noeuds

+0

J'ai essayé cela avant, et cela n'a pas fonctionné. après votre suggestion, j'ai encore essayé. Ça ne marche toujours pas mais j'ai remarqué quelque chose d'étrange. Il modifie _both_ pages de sorte qu'elles aient des valeurs identiques pour lft, rght, level, tree_id. – Andre

+0

Édité mon post original pour refléter le comportement étrange. – Andre

Questions connexes