pillar/tests/test_api/test_latest.py

306 lines
9.4 KiB
Python

from datetime import timedelta
import flask
from pillar.tests import AbstractPillarTest
class LatestAssetsTest(AbstractPillarTest):
def setUp(self, **kwargs):
super().setUp(**kwargs)
self.pid, _ = self.ensure_project_exists()
self.private_pid, _ = self.ensure_project_exists(project_overrides={
'_id': '5672beecc0261b2005ed1a34',
'is_private': True,
})
self.file_id, _ = self.ensure_file_exists(file_overrides={
'variations': [
{'format': 'mp4',
'duration': 3661 # 01:01:01
},
],
})
self.uid = self.create_user()
from pillar.api.utils import utcnow
self.fake_now = utcnow()
def test_latest_assets_returns_12_newest_assets(self):
base_node = {
'name': 'Just a node name',
'project': self.pid,
'description': '',
'node_type': 'asset',
'user': self.uid,
}
base_props = {
'status': 'published',
'file': self.file_id,
'content_type': 'video',
'order': 0
}
def create_asset(weeks):
return self.create_node({
**base_node,
'_created': self.fake_now - timedelta(weeks=weeks),
'properties': base_props,
})
all_asset_ids = [str(create_asset(i)) for i in range(20)]
expected_ids = all_asset_ids[:12] # The 12 newest assets are expected
with self.app.app_context():
url = flask.url_for('latest.latest_assets')
latest_assets = self.get(url).json['_items']
actual_ids = [asset['_id'] for asset in latest_assets]
self.assertListEqual(
expected_ids, actual_ids)
def test_latest_assets_ignore(self):
base_node = {
'name': 'Just a node name',
'project': self.pid,
'description': '',
'node_type': 'asset',
'user': self.uid,
}
base_props = {
'status': 'published',
'file': self.file_id,
'content_type': 'video',
'order': 0
}
ok_id = self.create_node({
**base_node,
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
})
# Private should be ignored
self.create_node({
**base_node,
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
'project': self.private_pid,
})
# Deleted should be ignored
self.create_node({
**base_node,
'_deleted': True,
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
})
# Node type comment should be ignored
self.create_node({
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
'name': 'Just a node name',
'project': self.pid,
'description': '',
'node_type': 'comment',
'user': self.uid,
})
with self.app.app_context():
url = flask.url_for('latest.latest_assets')
latest_assets = self.get(url).json['_items']
expected_ids = [str(ok_id)]
actual_ids = [asset['_id'] for asset in latest_assets]
self.assertListEqual(
expected_ids, actual_ids)
def test_latest_assets_data(self):
base_node = {
'name': 'Just a node name',
'project': self.pid,
'description': '',
'node_type': 'asset',
'user': self.uid,
}
base_props = {
'status': 'published',
'file': self.file_id,
'content_type': 'video',
'order': 0
}
ok_id = self.create_node({
**base_node,
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
})
with self.app.app_context():
url = flask.url_for('latest.latest_assets')
latest_assets = self.get(url).json['_items']
asset = latest_assets[0]
self.assertEquals(str(ok_id), asset['_id'])
self.assertEquals('Just a node name', asset['name'])
self.assertNotIn('user', asset)
class LatestCommentsTest(AbstractPillarTest):
def setUp(self, **kwargs):
super().setUp(**kwargs)
self.pid, _ = self.ensure_project_exists()
self.private_pid, _ = self.ensure_project_exists(project_overrides={
'_id': '5672beecc0261b2005ed1a34',
'is_private': True,
})
self.file_id, _ = self.ensure_file_exists(file_overrides={
'variations': [
{'format': 'mp4',
'duration': 3661 # 01:01:01
},
],
})
self.uid = self.create_user()
from pillar.api.utils import utcnow
self.fake_now = utcnow()
base_props = {
'status': 'published',
'file': self.file_id,
'content_type': 'video',
'order': 0
}
self.asset_node_id = self.create_node({
'name': 'Just a node name',
'project': self.pid,
'description': '',
'node_type': 'asset',
'user': self.uid,
'_created': self.fake_now - timedelta(weeks=52),
'properties': base_props,
})
def test_latest_comments_returns_10_newest_comments(self):
base_node = {
'name': 'Comment',
'project': self.pid,
'description': '',
'node_type': 'comment',
'user': self.uid,
'parent': self.asset_node_id,
}
base_props = {
'status': 'published',
'content': 'एनिमेशन is animation in Hindi',
}
def create_comment(weeks):
return self.create_node({
**base_node,
'_created': self.fake_now - timedelta(weeks=weeks),
'properties': base_props,
})
all_comment_ids = [str(create_comment(i)) for i in range(20)]
expected_ids = all_comment_ids[:10] # The 10 newest comments are expected
with self.app.app_context():
url = flask.url_for('latest.latest_comments')
latest_assets = self.get(url).json['_items']
actual_ids = [asset['_id'] for asset in latest_assets]
self.assertListEqual(
expected_ids, actual_ids)
def test_latest_comments_ignore(self):
base_node = {
'name': 'Comment',
'project': self.pid,
'description': '',
'node_type': 'comment',
'user': self.uid,
'parent': self.asset_node_id,
}
base_props = {
'status': 'published',
'content': 'एनिमेशन is animation in Hindi',
}
ok_id = self.create_node({
**base_node,
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
})
# Private should be ignored
self.create_node({
**base_node,
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
'project': self.private_pid,
})
# Deleted should be ignored
self.create_node({
**base_node,
'_deleted': True,
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
})
# Node type asset should be ignored
self.create_node({
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
'name': 'Just a node name',
'project': self.pid,
'description': '',
'node_type': 'asset',
'user': self.uid,
})
with self.app.app_context():
url = flask.url_for('latest.latest_comments')
latest_comments = self.get(url).json['_items']
expected_ids = [str(ok_id)]
actual_ids = [comment['_id'] for comment in latest_comments]
self.assertListEqual(
expected_ids, actual_ids)
def test_latest_comments_data(self):
base_node = {
'name': 'Comment',
'project': self.pid,
'description': '',
'node_type': 'comment',
'user': self.uid,
'parent': self.asset_node_id,
}
base_props = {
'status': 'published',
'content': 'एनिमेशन is animation in Hindi',
}
ok_id = self.create_node({
**base_node,
'_created': self.fake_now - timedelta(seconds=1),
'properties': base_props,
})
with self.app.app_context():
url = flask.url_for('latest.latest_comments')
latest_comments = self.get(url).json['_items']
comment = latest_comments[0]
self.assertEquals(str(ok_id), comment['_id'])
self.assertEquals('Comment', comment['name'])
self.assertEquals('एनिमेशन is animation in Hindi', comment['properties']['content'])
self.assertEquals('คนรักของผัดไทย', comment['user']['full_name'])