1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- from __future__ import annotations
- import os
- from copy import deepcopy
- from typing import Any
- from fixtures.integrations import FIXTURE_DIRECTORY
- from sentry.utils import json
- class StubService:
- """
- A stub is a service that replicates the functionality of a real software
- system by returning valid data without actually implementing any business
- logic. For example, a stubbed random dice_roll function might always return
- 6. Stubs can make tests simpler and more reliable because they can replace
- flaky or slow networks call or allow you to have wider coverage in end-to-
- end tests.
- """
- stub_data_cache: dict[str, Any] = {}
- service_name: str
- @staticmethod
- def get_stub_json(service_name, name):
- """
- Get the stubbed data as a JSON string.
- :param service_name: string
- :param name: string
- :return: string
- """
- path = os.path.join(FIXTURE_DIRECTORY, service_name, "stubs", name)
- with open(path) as f:
- return f.read()
- @staticmethod
- def get_stub_data(service_name, name):
- """
- Get the stubbed data as a python object.
- :param service_name: string
- :param name: string
- :return: object
- """
- cache_key = f"{service_name}.{name}"
- cached = StubService.stub_data_cache.get(cache_key)
- if cached:
- data = cached
- else:
- data = json.loads(StubService.get_stub_json(service_name, name))
- StubService.stub_data_cache[cache_key] = data
- return deepcopy(data)
- def _get_stub_data(self, name):
- return StubService.get_stub_data(self.service_name, name)
|