60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
import datetime
|
|
|
|
import requests
|
|
from django.conf import settings
|
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|
from django.test import TestCase
|
|
|
|
from vbv_lernwelt.core.models import User
|
|
from vbv_lernwelt.files.integrations import s3_get_client
|
|
from vbv_lernwelt.files.models import UploadFile
|
|
|
|
|
|
class UploadFileIntegrationTest(TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.s3_client = s3_get_client()
|
|
|
|
def setUp(self):
|
|
self.user = User.objects.create(username="testuser")
|
|
# Creating a dummy file for upload
|
|
self.dummy_file = SimpleUploadedFile(
|
|
"testfile.txt", b"these are the file contents!"
|
|
)
|
|
self.upload_file = UploadFile.objects.create(
|
|
original_file_name="testfile.txt",
|
|
file_name="testfile123.txt",
|
|
file_type="text/plain",
|
|
uploaded_by=self.user,
|
|
file=self.dummy_file,
|
|
)
|
|
|
|
def tearDown(self):
|
|
self.upload_file.delete_file()
|
|
|
|
def test_upload_to_s3(self):
|
|
# Verify if file is uploaded to S3
|
|
response = self.s3_client.get_object(
|
|
Bucket=settings.AWS_STORAGE_BUCKET_NAME, Key=str(self.upload_file.file)
|
|
)
|
|
self.assertEqual(response["Body"].read(), b"these are the file contents!")
|
|
|
|
def test_url_property(self):
|
|
self.upload_file.upload_finished_at = datetime.datetime.now()
|
|
self.upload_file.save()
|
|
url = self.upload_file.url
|
|
response = requests.get(url)
|
|
# Assert that the URL is a valid presigned S3 URL and accessible
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.content, b"these are the file contents!")
|
|
|
|
def test_delete_file_method(self):
|
|
file_path = str(self.upload_file.file)
|
|
self.upload_file.delete_file()
|
|
# Assert that the file is deleted from S3
|
|
with self.assertRaises(self.s3_client.exceptions.NoSuchKey):
|
|
self.s3_client.get_object(
|
|
Bucket=settings.AWS_STORAGE_BUCKET_NAME, Key=file_path
|
|
)
|