Files
pillar-python-sdk/tests/test_nodes.py
Sybren A. Stüvel 8dfb0a193b Added Node.create_asset_from_file() utility function
This also adds some unittests using the Responses library.
2016-07-05 16:47:51 +02:00

257 lines
8.6 KiB
Python

import unittest
import responses
import pillarsdk
import pillarsdk.exceptions as sdk_exceptions
mock = responses.RequestsMock(assert_all_requests_are_fired=True)
class AssetNodesTests(unittest.TestCase):
def setUp(self):
self.endpoint = 'http://localhost:12345'
self.api = pillarsdk.Api(
endpoint=self.endpoint,
username='',
password='',
token='jemoeder',
)
self.project_id = 1234
@mock.activate
def test_create_asset_from_file__always_new_node(self):
parent_node_id = 24 * 'a'
mock.add(responses.POST,
'%s/nodes' % self.endpoint,
json={
'_id': 24 * 'b',
'parent': parent_node_id,
'name': 'test_nodes.py',
'project': self.project_id,
},
status=201)
mock.add(responses.POST,
'%s/storage/stream/%s' % (self.endpoint, self.project_id),
json={
'status': 'ok',
'file_id': 24 * 'c',
},
status=201)
node = pillarsdk.Node.create_asset_from_file(
project_id=self.project_id,
parent_node_id=parent_node_id,
asset_type='image',
filename=__file__,
always_create_new_node=True,
api=self.api)
self.assertEqual(node['_id'], 24 * 'b')
self.assertEqual(node['parent'], parent_node_id)
self.assertEqual(node['name'], 'test_nodes.py')
self.assertEqual(node['node_type'], 'asset')
self.assertEqual(node['properties']['content_type'], 'image')
self.assertEqual(node['properties']['file'], 24 * 'c')
@mock.activate
def test_create_asset_from_file__update_existing_node(self):
parent_node_id = 24 * 'a'
asset_node_id = 24 * 'b'
# Uploading the file
mock.add(responses.POST,
'%s/storage/stream/%s' % (self.endpoint, self.project_id),
json={
'status': 'ok',
'file_id': 24 * 'c',
},
status=201)
# Finding the existing node
mock.add(responses.GET,
'%s/nodes' % self.endpoint,
json={'_items': [{
'_id': asset_node_id,
'_etag': 'awesome-etag',
'name': 'test_nodes.py',
'node_type': 'asset',
'project': self.project_id,
'parent': parent_node_id,
'properties': {
'content_type': 'video',
'file': 24 * 'e',
}}
]
})
# Updating the node
mock.add(responses.PUT,
'%s/nodes/%s' % (self.endpoint, asset_node_id),
json={'_created': 'Wed, 29 Jun 2016 14:45:35 GMT',
'_deleted': False,
'_etag': 'df983fb8834802be83f0f657201cbf7a3d177a9c',
'_id': asset_node_id,
'_status': 'OK',
'_updated': 'Tue, 05 Jul 2016 14:12:27 GMT'},
status=200)
node = pillarsdk.Node.create_asset_from_file(
project_id=self.project_id,
parent_node_id=parent_node_id,
asset_type='image',
filename=__file__,
api=self.api)
self.assertEqual(node['_id'], asset_node_id)
self.assertEqual(node['parent'], parent_node_id)
self.assertEqual(node['name'], 'test_nodes.py')
self.assertEqual(node['node_type'], 'asset')
self.assertEqual(node['properties']['content_type'], 'image')
self.assertEqual(node['properties']['file'], 24 * 'c')
@mock.activate
def test_create_asset_from_file__create_new_node(self):
parent_node_id = 24 * 'a'
asset_node_id = 24 * 'b'
# Upload the file
mock.add(responses.POST,
'%s/storage/stream/%s' % (self.endpoint, self.project_id),
json={
'status': 'ok',
'file_id': 24 * 'c',
},
status=201)
# Try to find whether the node exists (it doesn't).
mock.add(responses.GET,
'%s/nodes' % self.endpoint,
json={'_items': []})
# Create a new node
mock.add(responses.POST,
'%s/nodes' % self.endpoint,
json={
'_id': asset_node_id,
'parent': parent_node_id,
'name': 'test_nodes.py',
'project': self.project_id,
},
status=201)
node = pillarsdk.Node.create_asset_from_file(
project_id=self.project_id,
parent_node_id=parent_node_id,
asset_type='image',
filename=__file__,
api=self.api)
self.assertEqual(node['_id'], asset_node_id)
self.assertEqual(node['parent'], parent_node_id)
self.assertEqual(node['name'], 'test_nodes.py')
self.assertEqual(node['node_type'], 'asset')
self.assertEqual(node['properties']['content_type'], 'image')
self.assertEqual(node['properties']['file'], 24 * 'c')
@mock.activate
def test_create_asset_from_file__upload_fails(self):
parent_node_id = 24 * 'a'
# Upload the file
mock.add(responses.POST,
'%s/storage/stream/%s' % (self.endpoint, self.project_id),
json={
'status': 'error',
'error': 'Internal server error'
},
status=500)
self.assertRaises(
sdk_exceptions.ServerError,
pillarsdk.Node.create_asset_from_file,
project_id=self.project_id,
parent_node_id=parent_node_id,
asset_type='image',
filename=__file__,
api=self.api)
@mock.activate
def test_create_asset_from_file__create_new_node_fails(self):
parent_node_id = 24 * 'a'
asset_node_id = 24 * 'b'
# Upload the file
mock.add(responses.POST,
'%s/storage/stream/%s' % (self.endpoint, self.project_id),
json={
'status': 'ok',
'file_id': 24 * 'c',
},
status=201)
# Try to find whether the node exists (it doesn't).
mock.add(responses.GET,
'%s/nodes' % self.endpoint,
json={'_items': []})
# Create a new node, which fails
mock.add(responses.POST,
'%s/nodes' % self.endpoint,
status=500)
self.assertRaises(
sdk_exceptions.ServerError,
pillarsdk.Node.create_asset_from_file,
project_id=self.project_id,
parent_node_id=parent_node_id,
asset_type='image',
filename=__file__,
api=self.api)
@mock.activate
def test_create_asset_from_file__update_existing_node_fails(self):
parent_node_id = 24 * 'a'
asset_node_id = 24 * 'b'
# Uploading the file
mock.add(responses.POST,
'%s/storage/stream/%s' % (self.endpoint, self.project_id),
json={
'status': 'ok',
'file_id': 24 * 'c',
},
status=201)
# Finding the existing node
mock.add(responses.GET,
'%s/nodes' % self.endpoint,
json={'_items': [{
'_id': asset_node_id,
'_etag': 'awesome-etag',
'name': 'test_nodes.py',
'node_type': 'asset',
'project': self.project_id,
'parent': parent_node_id,
'properties': {
'content_type': 'video',
'file': 24 * 'e',
}}
]
})
# Updating the node fails
mock.add(responses.PUT,
'%s/nodes/%s' % (self.endpoint, asset_node_id),
status=500)
self.assertRaises(
sdk_exceptions.ServerError,
pillarsdk.Node.create_asset_from_file,
project_id=self.project_id,
parent_node_id=parent_node_id,
asset_type='image',
filename=__file__,
api=self.api)