You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
2.2 KiB
Python
49 lines
2.2 KiB
Python
import base64
|
|
from unittest.mock import patch
|
|
from django.test import TestCase, Client
|
|
from django.urls import reverse
|
|
from rest_framework import status
|
|
from django.contrib.auth import get_user_model
|
|
from containers.models import Container, ContainerPhotos
|
|
from common.models import LinesModel, ContainerTypeModel
|
|
from preinfo.models import Preinfo
|
|
|
|
class DamagesAPITestCase(TestCase):
|
|
def setUp(self):
|
|
self.client = Client()
|
|
DepotUser = get_user_model()
|
|
self.user = DepotUser.objects.create_user(username='testuser', password='password', user_type='E')
|
|
self.client.login(username='testuser', password='password')
|
|
self.line = LinesModel.objects.create(name='Test Line')
|
|
self.container_type = ContainerTypeModel.objects.create(name='20ft')
|
|
self.preinfo = Preinfo.objects.create(number='PRE123', line=self.line, container_type=self.container_type)
|
|
self.container = Container.objects.create(
|
|
number='TEST1234567',
|
|
line=self.line,
|
|
container_type=self.container_type,
|
|
received_by=self.user,
|
|
preinfo=self.preinfo
|
|
)
|
|
|
|
@patch('damages_api.views.upload_damage_photo')
|
|
def test_damage_photo_upload(self, mock_upload):
|
|
mock_upload.return_value = 'http://mock-url.com/photo.jpg'
|
|
photo_data = base64.b64encode(b'test photo data').decode('utf-8')
|
|
response = self.client.post(reverse('damages-api', args=[self.container.id]), {
|
|
'photo': photo_data,
|
|
'photo_extension': 'jpg',
|
|
}, content_type='application/json')
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
self.assertTrue(ContainerPhotos.objects.filter(container=self.container).exists())
|
|
|
|
@patch('damages_api.views.boto3.client')
|
|
def test_damage_photo_retrieval(self, mock_boto_client):
|
|
mock_s3 = mock_boto_client.return_value
|
|
mock_s3.list_objects_v2.return_value = {
|
|
'Contents': [
|
|
{'Key': f'{self.container.id}/test.jpg'}
|
|
]
|
|
}
|
|
response = self.client.get(reverse('damages-api', args=[self.container.id]))
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.assertIn('url', response.data[0]) |