KeycloakGetError: 404 - "User not found" when testing [DRF API Pytest factory_boy]

41 Views Asked by At

I've been encountering an issue in my Django Rest Framework (DRF) API tests where I'm using factories to create instances for various models, including User, Workflow, and DynamicActivity. The main test, test_useractivity_operations in test_user_activity.py

test_user_activity.py:

from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient

from tests.base import BaseTestCase
from tests.factories.events.dynamic_activity import DynamicActivityFactory
from tests.factories.events.user_activity_data import UserActivityDataFactory
from tests.factories.events.workflow import WorkflowFactory
from tests.factories.others import UserFactory

class TestUserActivity(BaseTestCase):
    @classmethod
    def setUpTestData(cls):
        cls.api = APIClient()
        cls.user = UserFactory()

        cls.useractivity_1 = UserActivityDataFactory()
        cls.api.force_authenticate(user=cls.user)
        cls.useractivity_data = {
            # "user_id": str(cls.user.id),
            "user": UserFactory().pk,
            "workflow_id" : WorkflowFactory().pk,
            "dynamic_activity_ids" : DynamicActivityFactory().pk,
            "input_data": {"key1": "value1"},
            "output_data": {"key2": "value2"} 
        }

    def _test_get_single_useractivity(self):
        url = reverse("useractivitydata-detail", kwargs={"pk": self.useractivity_1.pk})
        resp = self.api.get(url)
        assert resp.status_code == status.HTTP_200_OK

    def test_useractivity_operations(self):
        self._test_get_single_useractivity()

user_activity_data_factory.py

import factory
from events.user_activity_data.models import UserActivityData
from tests.factories.events.dynamic_activity import DynamicActivityFactory
from tests.factories.events.workflow import WorkflowFactory
from tests.factories.others import UserFactory
import json


class JSONFactory(factory.DictFactory):
    """
    Use with factory.Dict to make JSON strings.
    """
    @classmethod
    def _generate(cls, create, attrs):
        obj = super()._generate(create, attrs)
        return json.dumps(obj)
    
class UserActivityDataFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = UserActivityData

    user = factory.SubFactory(UserFactory)
    workflow_id = factory.SubFactory(WorkflowFactory)
    input_data = factory.Dict({
        'badger': ['stoat'],
    }, dict_factory=JSONFactory)
    output_data = factory.Dict({
        'badger12': ['stoat12'],
    }, dict_factory=JSONFactory)
    dynamic_activity_ids = factory.SubFactory(DynamicActivityFactory)

this is my User factory

class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = KeycloakUser

    id = factory.Faker("uuid4")
    is_staff = False
    is_superuser = False
    is_active = True
    date_joined = factory.Faker("date_time")
    username = factory.Faker("user_name")

Workflow Factory

import factory
from events.workflow.models import Workflow


class WorkflowFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Workflow

    workflow_name = "Workflow 1"

DynamicActivityFactory

import factory.fuzzy

from events.dynamic_activity.models import DynamicActivity
from tests.factories.events.workflow import WorkflowFactory


class DynamicActivityFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = DynamicActivity

    workflow_id = factory.SubFactory(WorkflowFactory)
    activity_name = factory.Faker("text")
    type_of_activity = factory.Faker(
        "random_element", elements=["SIMPLE", "CONDITIONAL"]
    )

Getting this following issue after running the test_user_activity.py keycloak.exceptions.KeycloakGetError: 404: b'{"error":"User not found"}' ================================================================= short test summary info ================================================================= FAILED tests/events/test_user_activity.py::TestUserActivity::test_useractivity_operations - keycloak.exceptions.KeycloakGetError: 404: b'{"error":"User not found"}'

Thank you

0

There are 0 best solutions below