Fixed bug when parsing node without content type property
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
from flask import Markup
|
from flask import Markup
|
||||||
|
|
||||||
from pillarsdk import Node
|
from pillarsdk import Node
|
||||||
@@ -8,6 +10,7 @@ from flask_login import current_user
|
|||||||
from pillar.web import system_util
|
from pillar.web import system_util
|
||||||
|
|
||||||
GROUP_NODES = {'group', 'storage', 'group_texture', 'group_hdri'}
|
GROUP_NODES = {'group', 'storage', 'group_texture', 'group_hdri'}
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def jstree_parse_node(node, children=None):
|
def jstree_parse_node(node, children=None):
|
||||||
@@ -17,6 +20,9 @@ def jstree_parse_node(node, children=None):
|
|||||||
node_type = node.node_type
|
node_type = node.node_type
|
||||||
# Define better the node type
|
# Define better the node type
|
||||||
if node_type == 'asset':
|
if node_type == 'asset':
|
||||||
|
if not node.properties or not node.properties.content_type:
|
||||||
|
log.warning('Asset node %s has no node.properties.content_type: %s', node._id, node)
|
||||||
|
else:
|
||||||
node_type = node.properties.content_type
|
node_type = node.properties.content_type
|
||||||
|
|
||||||
parsed_node = dict(
|
parsed_node = dict(
|
||||||
|
67
tests/test_web/test_jstree.py
Normal file
67
tests/test_web/test_jstree.py
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
from bson import ObjectId
|
||||||
|
from dateutil.parser import parse
|
||||||
|
from flask import Markup
|
||||||
|
|
||||||
|
from pillarsdk import Node
|
||||||
|
from pillar.tests import AbstractPillarTest
|
||||||
|
|
||||||
|
|
||||||
|
class JSTreeTest(AbstractPillarTest):
|
||||||
|
def test_jstree_parse_node(self):
|
||||||
|
from pillar.web.utils.jstree import jstree_parse_node
|
||||||
|
|
||||||
|
node_doc = {'_id': ObjectId('55f338f92beb3300c4ff99fe'),
|
||||||
|
'_created': parse('2015-09-11T22:26:33.000+0200'),
|
||||||
|
'_updated': parse('2015-10-30T22:44:27.000+0100'),
|
||||||
|
'_etag': '5248485b4ea7e55e858ff84b1bd4aae88917a37c',
|
||||||
|
'picture': ObjectId('55f338f92beb3300c4ff99de'),
|
||||||
|
'description': 'Play the full movie and see how it was cobbled together.',
|
||||||
|
'parent': ObjectId('55f338f92beb3300c4ff99f9'),
|
||||||
|
'project': ObjectId('55f338f92beb3300c4ff99e5'),
|
||||||
|
'node_type': 'asset',
|
||||||
|
'user': ObjectId('552b066b41acdf5dec4436f2'),
|
||||||
|
'properties': {'status': 'published',
|
||||||
|
'file': ObjectId('55f338f92beb3300c4ff99c2'),
|
||||||
|
'content_type': 'file'},
|
||||||
|
'name': 'Live <strong>Edit</strong>'}
|
||||||
|
|
||||||
|
# Mocking url_for_node prevents us from setting up a project and an URLer service.
|
||||||
|
with mock.patch('pillar.web.nodes.routes.url_for_node') as mock_url_for_node:
|
||||||
|
mock_url_for_node.return_value = '/the/url'
|
||||||
|
parsed = jstree_parse_node(Node(node_doc))
|
||||||
|
|
||||||
|
self.assertEqual(parsed, {
|
||||||
|
'id': 'n_55f338f92beb3300c4ff99fe',
|
||||||
|
'a_attr': {'href': '/the/url'},
|
||||||
|
'li_attr': {'data-node-type': 'asset'},
|
||||||
|
'text': Markup('Live <strong>Edit</strong>'),
|
||||||
|
'type': 'file',
|
||||||
|
'children': False,
|
||||||
|
})
|
||||||
|
def test_jstree_parse_just_created_node(self):
|
||||||
|
from pillar.web.utils.jstree import jstree_parse_node
|
||||||
|
|
||||||
|
node_doc = {'_id': ObjectId('55f338f92beb3300c4ff99fe'),
|
||||||
|
'_created': parse('2015-09-11T22:26:33.000+0200'),
|
||||||
|
'_updated': parse('2015-10-30T22:44:27.000+0100'),
|
||||||
|
'_etag': '5248485b4ea7e55e858ff84b1bd4aae88917a37c',
|
||||||
|
'project': ObjectId('55f338f92beb3300c4ff99e5'),
|
||||||
|
'node_type': 'asset',
|
||||||
|
'user': ObjectId('552b066b41acdf5dec4436f2'),
|
||||||
|
'name': 'Live <strong>Edit</strong>'}
|
||||||
|
|
||||||
|
# Mocking url_for_node prevents us from setting up a project and an URLer service.
|
||||||
|
with mock.patch('pillar.web.nodes.routes.url_for_node') as mock_url_for_node:
|
||||||
|
mock_url_for_node.return_value = '/the/url'
|
||||||
|
parsed = jstree_parse_node(Node(node_doc))
|
||||||
|
|
||||||
|
self.assertEqual(parsed, {
|
||||||
|
'id': 'n_55f338f92beb3300c4ff99fe',
|
||||||
|
'a_attr': {'href': '/the/url'},
|
||||||
|
'li_attr': {'data-node-type': 'asset'},
|
||||||
|
'text': Markup('Live <strong>Edit</strong>'),
|
||||||
|
'type': 'asset',
|
||||||
|
'children': False,
|
||||||
|
})
|
Reference in New Issue
Block a user