Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions django/applications/catmaid/control/skeleton.py
Original file line number Diff line number Diff line change
Expand Up @@ -2354,6 +2354,7 @@ def is_same_or_downstream(node_id, upstream_node_id):
WHERE treenode.id = v.id
''' % ','.join(['(%s,%s,%s)' % node for node in new_parents]))

rootnode.refresh_from_db(fields=['parent_id', 'confidence', 'edition_time'])
return rootnode

except Exception as e:
Expand Down
32 changes: 30 additions & 2 deletions django/applications/catmaid/tests/apis/test_skeletons.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from unittest import skipIf
from urllib.parse import urlencode

from django.core.serializers.json import DjangoJSONEncoder
from django.db import connection, transaction
from django.shortcuts import get_object_or_404
from guardian.shortcuts import assign_perm
Expand All @@ -33,6 +34,11 @@ def get_last_concept_id():
""")
return cursor.fetchone()[0]


def encode_datetime(value):
return json.loads(json.dumps(value, cls=DjangoJSONEncoder))


class SkeletonsApiTests(CatmaidApiTestCase):
def compare_swc_data(self, s1, s2):
def swc_string_to_sorted_matrix(s):
Expand Down Expand Up @@ -787,8 +793,9 @@ def test_reroot_and_join_skeletons(self):
{'treenode_id': new_root})
self.assertStatus(response)
parsed_response = json.loads(response.content.decode('utf-8'))
rerooted_treenode = get_object_or_404(Treenode, id=new_root)
expected_result:Dict[str, Any] = {
'edition_time': '2011-12-09T08:01:48.933Z',
'edition_time': encode_datetime(rerooted_treenode.edition_time),
'newroot': 2394,
'skeleton_id': 2388}
self.assertEqual(expected_result, parsed_response)
Expand Down Expand Up @@ -1028,8 +1035,9 @@ def test_reroot_skeleton(self):
{'treenode_id': new_root})
self.assertStatus(response)
parsed_response = json.loads(response.content.decode('utf-8'))
rerooted_treenode = get_object_or_404(Treenode, id=new_root)
expected_result = {
'edition_time': '2011-12-05T13:51:36.955Z',
'edition_time': encode_datetime(rerooted_treenode.edition_time),
'newroot': 407,
'skeleton_id': 373}
self.assertEqual(expected_result, parsed_response)
Expand All @@ -1044,6 +1052,26 @@ def assertHasParent(treenode_id, parent_id):
assertHasParent(407, None)


def test_reroot_skeleton_response_uses_updated_edition_time(self):
self.fake_authentication()

new_root = 407
pre_reroot_edition_time = get_object_or_404(Treenode, id=new_root).edition_time

response = self.client.post(
'/%d/skeleton/reroot' % self.test_project_id,
{'treenode_id': new_root})
self.assertStatus(response)
parsed_response = json.loads(response.content.decode('utf-8'))

rerooted_treenode = get_object_or_404(Treenode, id=new_root)
self.assertIsNone(rerooted_treenode.parent_id)
self.assertNotEqual(pre_reroot_edition_time, rerooted_treenode.edition_time)
self.assertEqual(
encode_datetime(rerooted_treenode.edition_time),
parsed_response['edition_time'])


def test_review_status(self):
self.fake_authentication()

Expand Down