Please for some reason one of my test is failing on Travis CI but passes locally.
This is the code for the test:
@pytest.mark.django_db(transaction=True)
class TestCreateItem:
def test_successful_item_creation(self, client, seller_token):
"""
Test for successful item creation
GIVEN: A seller enters name, price, image and description of items
WHEN: The seller submits the form
THEN: They should get a success response of status code 201, A message that says 'Item has been created successfully'
"""
with open('tests/test_item/0_U8TbUaajSO7rXk1j.jpg', 'rb') as image:
data = {
"name": "An Item",
"price": 15000.55,
"description": "This is a random item",
"image": image
}
response = client.post("/items/create_item", data=data, **seller_token)
response_data = response.json()
print(response_data)
assert response.status_code == 201
assert response_data["message"] == "Item has been created successfully"
When I run the test locally, it passes, but when it is ran on Travis CI it fails without any descriptive information as to what went wrong. Below is a snippet of the error:
tests/test_item/test_fetch_item_queryset.py .... [ 21%]
tests/test_seller/test_seller_authentication.py ........ [ 63%]
tests/test_item/test_create_item.py F...... [100%]
=================================== FAILURES ===================================
_________________ TestCreateItem.test_successful_item_creation _________________
self = CreateItemSerializer(data=<QueryDict: {'name': ['An Item'], 'price': ['15000.55'], 'description': ['This is a random i...digits=10)
image = ImageField(max_length=100)
description = CharField(style={'base_template': 'textarea.html'})
validated_data = {'description': 'This is a random item', 'image': <InMemoryUploadedFile: 0_U8TbUaajSO7rXk1j.jpg (image/jpeg)>, 'name': 'An Item', 'price': Decimal('15000.55'), ...}
def create(self, validated_data):
"""
We have a bit of extra checking around this in order to provide
descriptive messages when something goes wrong, but this method is
essentially just:
return ExampleModel.objects.create(**validated_data)
If there are many to many fields present on the instance then they
cannot be set until the model is instantiated, in which case the
implementation is like so:
example_relationship = validated_data.pop('example_relationship')
instance = ExampleModel.objects.create(**validated_data)
instance.example_relationship = example_relationship
return instance
The default implementation also does not handle nested relationships.
If you want to support writable nested relationships you'll need
to write an explicit `.create()` method.
"""
raise_errors_on_nested_writes('create', self, validated_data)
ModelClass = self.Meta.model
# Remove many-to-many relationships from validated_data.
# They are not valid arguments to the default `.create()` method,
# as they require that the instance has already been saved.
info = model_meta.get_field_info(ModelClass)
many_to_many = {}
for field_name, relation_info in info.relations.items():
if relation_info.to_many and (field_name in validated_data):
many_to_many[field_name] = validated_data.pop(field_name)
try:
> instance = ModelClass._default_manager.create(**validated_data)
../../../virtualenv/python3.9.12/lib/python3.9/site-packages/rest_framework/serializers.py:939:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <django.db.models.manager.Manager object at 0x7f6e234c47f0>, args = ()
kwargs = {'description': 'This is a random item', 'image': <InMemoryUploadedFile: 0_U8TbUaajSO7rXk1j.jpg (image/jpeg)>, 'name': 'An Item', 'price': Decimal('15000.55'), ...}
def manager_method(self, *args, **kwargs):
> return getattr(self.get_queryset(), name)(*args, **kwargs)
../../../virtualenv/python3.9.12/lib/python3.9/site-packages/django/db/models/manager.py:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <QuerySet []>
kwargs = {'description': 'This is a random item', 'image': <InMemoryUploadedFile: 0_U8TbUaajSO7rXk1j.jpg (image/jpeg)>, 'name': 'An Item', 'price': Decimal('15000.55'), ...}
obj = <Items: johndoe@gmail.com An Item>
def create(self, **kwargs):
"""
Create a new object with the given kwargs, saving it to the database
and returning the created object.
"""
obj = self.model(**kwargs)
self._for_write = True
> obj.save(force_insert=True, using=self.db)
I would appreciate any pointers as to what the problem is
Please for some reason one of my test is failing on Travis CI but passes locally.
This is the code for the test:
When I run the test locally, it passes, but when it is ran on Travis CI it fails without any descriptive information as to what went wrong. Below is a snippet of the error: