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

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])