Align project paths with timeline model
This commit is contained in:
parent
9778b9023b
commit
7738c4e1c8
6 changed files with 56 additions and 55 deletions
|
|
@ -241,13 +241,14 @@ class DocumentTests(TestCase):
|
|||
# Transit-shaped, because that is what a leaf actually holds: a map with a
|
||||
# cache marker, keyword keys, and a frame-keyed inner map.
|
||||
return {
|
||||
"clip/c1/timing": ["^ ", "~:fps", 30, "~:frames", 48],
|
||||
"clip/c1/node/mouth": ["^ ", "~:id", "~:mouth", "~:z", "a1"],
|
||||
"clip/c1/channel/mouth/geom.pts": [
|
||||
"clip/c1/timing": ["^ ", "~:fps", 30],
|
||||
"clip/c1/timeline/main": ["^ ", "~:frames", 48],
|
||||
"clip/c1/timeline/main/node/mouth": ["^ ", "~:id", "~:mouth", "~:z", "a1"],
|
||||
"clip/c1/timeline/main/channel/mouth/geom.pts": [
|
||||
"^ ", "~:animated?", True, "~:dense",
|
||||
["^ ", "~:store", self.block, "~:offset", 0, "~:stride", 16],
|
||||
],
|
||||
"clip/c1/channel/mouth-in/vis": [
|
||||
"clip/c1/timeline/main/channel/mouth-in/vis": [
|
||||
"^ ", "~:animated?", True, "~:keys", ["^ ", "~i0", True, "~i12", False],
|
||||
],
|
||||
}
|
||||
|
|
@ -263,7 +264,7 @@ class DocumentTests(TestCase):
|
|||
def test_a_document_comes_back_exactly(self):
|
||||
response = self.save()
|
||||
self.assertEqual(200, response.status_code, response.content)
|
||||
self.assertEqual(4, len(response.json()["written"]))
|
||||
self.assertEqual(5, len(response.json()["written"]))
|
||||
|
||||
loaded = self.client.get(f"/api/projects/{self.project.id}").json()
|
||||
self.assertEqual(1, len(loaded["clips"]))
|
||||
|
|
@ -282,22 +283,23 @@ class DocumentTests(TestCase):
|
|||
self.save()
|
||||
first = {leaf.path: leaf.version for leaf in Leaf.objects.all()}
|
||||
moved = self.leaves()
|
||||
moved["clip/c1/channel/mouth-in/vis"] = [
|
||||
moved["clip/c1/timeline/main/channel/mouth-in/vis"] = [
|
||||
"^ ", "~:animated?", True, "~:keys", ["^ ", "~i0", False],
|
||||
]
|
||||
response = self.save(moved)
|
||||
self.assertEqual(["clip/c1/channel/mouth-in/vis"], response.json()["written"])
|
||||
self.assertEqual(3, response.json()["unchanged"])
|
||||
self.assertEqual(["clip/c1/timeline/main/channel/mouth-in/vis"], response.json()["written"])
|
||||
self.assertEqual(4, response.json()["unchanged"])
|
||||
after = {leaf.path: leaf.version for leaf in Leaf.objects.all()}
|
||||
self.assertEqual(2, after["clip/c1/channel/mouth-in/vis"])
|
||||
self.assertEqual(2, after["clip/c1/timeline/main/channel/mouth-in/vis"])
|
||||
self.assertEqual(first["clip/c1/timing"], after["clip/c1/timing"])
|
||||
|
||||
def test_a_removed_node_removes_its_leaf(self):
|
||||
self.save()
|
||||
fewer = {k: v for k, v in self.leaves().items() if k != "clip/c1/node/mouth"}
|
||||
fewer = {k: v for k, v in self.leaves().items()
|
||||
if k != "clip/c1/timeline/main/node/mouth"}
|
||||
response = self.save(fewer)
|
||||
self.assertEqual(["clip/c1/node/mouth"], response.json()["removed"])
|
||||
self.assertEqual(3, Leaf.objects.count())
|
||||
self.assertEqual(["clip/c1/timeline/main/node/mouth"], response.json()["removed"])
|
||||
self.assertEqual(4, Leaf.objects.count())
|
||||
|
||||
def test_a_save_does_not_disturb_another_clip(self):
|
||||
# A save is not the only way the document changes, so a save that cleared
|
||||
|
|
@ -329,7 +331,7 @@ class DocumentTests(TestCase):
|
|||
|
||||
def test_a_leaf_write_carries_an_etag(self):
|
||||
self.save()
|
||||
url = f"/api/projects/{self.project.id}/leaves/clip/c1/node/mouth"
|
||||
url = f"/api/projects/{self.project.id}/leaves/clip/c1/timeline/main/node/mouth"
|
||||
got = self.client.get(url)
|
||||
self.assertEqual('"1"', got["ETag"])
|
||||
|
||||
|
|
@ -345,7 +347,7 @@ class DocumentTests(TestCase):
|
|||
# take-theirs. A PUT that replaced unconditionally is the bug where the
|
||||
# loser's work disappears silently.
|
||||
self.save()
|
||||
url = f"/api/projects/{self.project.id}/leaves/clip/c1/node/mouth"
|
||||
url = f"/api/projects/{self.project.id}/leaves/clip/c1/timeline/main/node/mouth"
|
||||
self.put(url, {"value": ["^ ", "~:z", "a2"]}, HTTP_IF_MATCH='"1"')
|
||||
stale = self.put(url, {"value": ["^ ", "~:z", "a3"]}, HTTP_IF_MATCH='"1"')
|
||||
self.assertEqual(409, stale.status_code)
|
||||
|
|
@ -377,7 +379,7 @@ class DocumentTests(TestCase):
|
|||
)
|
||||
self.assertEqual(201, response.status_code)
|
||||
revision = Revision.objects.get()
|
||||
self.assertEqual(4, len(revision.document))
|
||||
self.assertEqual(5, len(revision.document))
|
||||
self.assertEqual(self.leaves(), revision.document)
|
||||
# Coarse on purpose: a save does not write one, because tier 1 will hold
|
||||
# cel polygons and a snapshot per save bloats the table.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue