108 lines
4.1 KiB
Python
108 lines
4.1 KiB
Python
"""Tests for the FlaskInternal SDK."""
|
|
|
|
from os.path import join, dirname, abspath, exists
|
|
|
|
from flask import url_for
|
|
import pillarsdk
|
|
|
|
from pillar.tests import AbstractPillarTest
|
|
from pillar.sdk import FlaskInternalApi
|
|
|
|
blender_desktop_logo_path = join(dirname(abspath(__file__)), 'BlenderDesktopLogo.png')
|
|
assert exists(blender_desktop_logo_path)
|
|
|
|
|
|
class FlaskInternalApiTest(AbstractPillarTest):
|
|
def setUp(self, **kwargs):
|
|
AbstractPillarTest.setUp(self, **kwargs)
|
|
|
|
self.project_id, self.user_id = self.create_project_with_admin()
|
|
self.create_valid_auth_token(self.user_id, 'token')
|
|
|
|
self.sdk_api = FlaskInternalApi(
|
|
endpoint='/api/',
|
|
username=None,
|
|
password=None,
|
|
token='token'
|
|
)
|
|
|
|
def test_create_asset(self):
|
|
with self.app.test_request_context():
|
|
asset = pillarsdk.Node({'description': '',
|
|
'project': str(self.project_id),
|
|
'node_type': 'asset',
|
|
'user': str(self.user_id),
|
|
'properties': {'status': 'published',
|
|
'content_type': 'je moeder'},
|
|
'name': 'Test asset'})
|
|
created_ok = asset.create(api=self.sdk_api)
|
|
self.assertTrue(created_ok)
|
|
self.assertTrue(asset._id)
|
|
|
|
with self.app.test_request_context():
|
|
# Check the asset in MongoDB
|
|
resp = self.get(url_for('nodes|item_lookup', _id=asset._id), auth_token='token')
|
|
db_asset = resp.get_json()
|
|
self.assertEqual('Test asset', db_asset['name'])
|
|
|
|
return asset
|
|
|
|
def test_delete_asset(self):
|
|
from pillarsdk import ResourceNotFound
|
|
|
|
asset = self.test_create_asset()
|
|
with self.app.test_request_context():
|
|
asset.delete(api=self.sdk_api)
|
|
with self.assertRaises(ResourceNotFound):
|
|
pillarsdk.Node.find_one({'_id': asset['_id']}, api=self.sdk_api)
|
|
|
|
def test_upload_file_to_project(self):
|
|
with self.app.test_request_context():
|
|
resp = pillarsdk.File.upload_to_project(
|
|
self.project_id,
|
|
'image/png',
|
|
blender_desktop_logo_path,
|
|
api=self.sdk_api
|
|
)
|
|
file_id = resp['file_id']
|
|
self.assertTrue(file_id)
|
|
|
|
# Check the file in MongoDB
|
|
with self.app.test_request_context():
|
|
resp = self.get(url_for('files|item_lookup', _id=file_id), auth_token='token')
|
|
file_doc = resp.get_json()
|
|
self.assertEqual('BlenderDesktopLogo.png', file_doc['filename'])
|
|
|
|
def test_create_asset_from_file(self):
|
|
# Create a group node to serve as parent.
|
|
with self.app.test_request_context():
|
|
resp = self.post(url_for('nodes|resource'), auth_token='token',
|
|
json={
|
|
'name': 'Group node',
|
|
'node_type': 'group',
|
|
'project': self.project_id,
|
|
'properties': {}
|
|
},
|
|
expected_status=201)
|
|
parent_id = resp.get_json()['_id']
|
|
|
|
with self.app.test_request_context(), open(blender_desktop_logo_path, 'rb') as fileobj:
|
|
resp = pillarsdk.Node.create_asset_from_file(
|
|
str(self.project_id),
|
|
str(parent_id),
|
|
'image',
|
|
blender_desktop_logo_path,
|
|
mimetype='image/jpeg',
|
|
always_create_new_node=False,
|
|
fileobj=fileobj,
|
|
api=self.sdk_api)
|
|
|
|
node_id = resp._id
|
|
self.assertTrue(node_id)
|
|
|
|
# Check the node in MongoDB
|
|
with self.app.test_request_context():
|
|
resp = self.get(url_for('nodes|item_lookup', _id=node_id), auth_token='token')
|
|
node_doc = resp.get_json()
|
|
self.assertEqual('BlenderDesktopLogo.png', node_doc['name'])
|