Add photo replace endpoints

This commit is contained in:
sneakypete81 2013-09-12 17:53:16 +01:00
parent 3da64a59cc
commit c635c7c0c0
4 changed files with 147 additions and 36 deletions

View file

@ -170,9 +170,18 @@ class TestPhotos(test_base.TestBase):
self.assertEqual(next_prev["next"][0].id, self.photos[2].id)
def test_replace(self):
""" If photo.replace gets implemented, write a test! """
with self.assertRaises(NotImplementedError):
self.client.photo.replace(None, None)
""" Test that a photo can be replaced with another """
# Replace the first photo with a copy of the second
original_hash = self.photos[0].hash
self.assertNotEqual(original_hash, self.photos[1].hash)
self.photos[0].replace("tests/data/test_photo2.jpg",
allowDuplicate=True)
# Check that its new hash is correct
self.assertEqual(self.photos[0].hash, self.photos[1].hash)
# Put it back
self.photos[0].replace("tests/data/test_photo1.jpg",
allowDuplicate=True)
self.assertEqual(self.photos[0].hash, original_hash)
def test_replace_encoded(self):
""" If photo.replace_encoded gets implemented, write a test! """

View file

@ -180,41 +180,107 @@ class TestPhotoDeleteSource(TestPhotos):
class TestPhotoReplace(TestPhotos):
@mock.patch.object(trovebox.Trovebox, 'post')
def test_photo_replace(self, _):
""" If photo.replace gets implemented, write a test! """
with self.assertRaises(NotImplementedError):
self.client.photo.replace(self.test_photos[0], self.test_file)
def test_photo_replace(self, mock_post):
"""Check that an existing photo can be replaced"""
mock_post.return_value = self._return_value(self.test_photos_dict[0])
result = self.client.photo.replace(self.test_photos[1],
self.test_file, title="Test")
# It's not possible to compare the file object,
# so check each parameter individually
endpoint = mock_post.call_args[0]
title = mock_post.call_args[1]["title"]
files = mock_post.call_args[1]["files"]
self.assertEqual(endpoint,
("/photo/%s/replace.json" % self.test_photos[1].id,))
self.assertEqual(title, "Test")
self.assertIn("photo", files)
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
@mock.patch.object(trovebox.Trovebox, 'post')
def test_photo_replace_id(self, _):
""" If photo.replace gets implemented, write a test! """
with self.assertRaises(NotImplementedError):
self.client.photo.replace("1a", self.test_file)
def test_photo_replace_id(self, mock_post):
"""Check that an existing photo can be replaced using its ID"""
mock_post.return_value = self._return_value(self.test_photos_dict[0])
result = self.client.photo.replace(self.test_photos[1].id,
self.test_file, title="Test")
# It's not possible to compare the file object,
# so check each parameter individually
endpoint = mock_post.call_args[0]
title = mock_post.call_args[1]["title"]
files = mock_post.call_args[1]["files"]
self.assertEqual(endpoint,
("/photo/%s/replace.json" % self.test_photos[1].id,))
self.assertEqual(title, "Test")
self.assertIn("photo", files)
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
@mock.patch.object(trovebox.Trovebox, 'post')
def test_photo_object_replace(self, _):
""" If photo.replace gets implemented, write a test! """
with self.assertRaises(NotImplementedError):
self.test_photos[0].replace(self.test_file)
def test_photo_object_replace(self, mock_post):
"""
Check that an existing photo can be replaced when using the
Photo object directly.
"""
photo_id = self.test_photos[1].id
mock_post.return_value = self._return_value(self.test_photos_dict[0])
self.test_photos[1].replace(self.test_file, title="Test")
# It's not possible to compare the file object,
# so check each parameter individually
endpoint = mock_post.call_args[0]
title = mock_post.call_args[1]["title"]
files = mock_post.call_args[1]["files"]
self.assertEqual(endpoint, ("/photo/%s/replace.json" % photo_id,))
self.assertEqual(title, "Test")
self.assertIn("photo", files)
self.assertEqual(self.test_photos[1].get_fields(),
self.test_photos_dict[0])
@mock.patch.object(trovebox.Trovebox, 'post')
def test_photo_replace_encoded(self, _):
""" If photo.replace_encoded gets implemented, write a test! """
with self.assertRaises(NotImplementedError):
self.client.photo.replace_encoded(self.test_photos[0],
self.test_file)
def test_photo_replace_encoded(self, mock_post):
"""
Check that a photo can be uploaded using Base64 encoding to
replace an existing photo.
"""
mock_post.return_value = self._return_value(self.test_photos_dict[0])
result = self.client.photo.replace_encoded(self.test_photos[1],
self.test_file, title="Test")
with open(self.test_file, "rb") as in_file:
encoded_file = base64.b64encode(in_file.read())
mock_post.assert_called_with("/photo/%s/replace.json"
% self.test_photos[1].id,
photo=encoded_file, title="Test")
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
@mock.patch.object(trovebox.Trovebox, 'post')
def test_photo_replace_encoded_id(self, _):
""" If photo.replace_encoded gets implemented, write a test! """
with self.assertRaises(NotImplementedError):
self.client.photo.replace_encoded("1a", self.test_file)
def test_photo_replace_encoded_id(self, mock_post):
"""
Check that a photo can be uploaded using Base64 encoding to
replace an existing photo using its ID.
"""
mock_post.return_value = self._return_value(self.test_photos_dict[0])
result = self.client.photo.replace_encoded(self.test_photos[1].id,
self.test_file, title="Test")
with open(self.test_file, "rb") as in_file:
encoded_file = base64.b64encode(in_file.read())
mock_post.assert_called_with("/photo/%s/replace.json"
% self.test_photos[1].id,
photo=encoded_file, title="Test")
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
@mock.patch.object(trovebox.Trovebox, 'post')
def test_photo_object_replace_encoded(self, _):
""" If photo.replace_encoded gets implemented, write a test! """
with self.assertRaises(NotImplementedError):
self.test_photos[0].replace_encoded(photo_file=self.test_file)
def test_photo_object_replace_encoded(self, mock_post):
"""
Check that a photo can be uploaded using Base64 encoding to
replace an existing photo when using the Photo object directly.
"""
photo_id = self.test_photos[1].id
mock_post.return_value = self._return_value(self.test_photos_dict[0])
self.test_photos[1].replace_encoded(self.test_file, title="Test")
with open(self.test_file, "rb") as in_file:
encoded_file = base64.b64encode(in_file.read())
mock_post.assert_called_with("/photo/%s/replace.json"
% photo_id,
photo=encoded_file, title="Test")
self.assertEqual(self.test_photos[1].get_fields(),
self.test_photos_dict[0])
class TestPhotoUpdate(TestPhotos):
@mock.patch.object(trovebox.Trovebox, 'post')