I need to mock 2 external API responses in 1 unit test. I simulate the responses from a paginated API call. I am trying to make it with unittest mock patch.multiple decorator. But patch always failed. How should I use patch.multiple?
my unit test (movie_test.py):
from unittest.mock import patch, DEFAULT, Mock
import pytest
import json
from src.app import create_app
app = create_app() # pylint: disable=invalid-name
@pytest.fixture
def client():
app.config['TESTING'] = True
yield app.test_client()
@pytest.fixture
def movie_search_sort_verification_page_1():
with open("tests/fixtures/movie_search_sort_verification_page_1.json") as f:
return json.load(f)
@pytest.fixture
def movie_search_sort_verification_page_2():
with open("tests/fixtures/movie_search_sort_verification_page_2.json") as f:
return json.load(f)
@patch.multiple("app.routes.requests.get", create=True, movie_search_sort_verification_page_1=DEFAULT, movie_search_sort_verification_page_2=DEFAULT)
def test_movie_search_sort_verification_using_mock(movie_search_sort_verification_page_1, movie_search_sort_verification_page_2, client):
movie_search_sort_verification_page_1.return_value = Mock(ok=True)
movie_search_sort_verification_page_1.return_value.json.return_value = movie_search_sort_verification_page_1()
movie_search_sort_verification_page_2.return_value = Mock(ok=True)
movie_search_sort_verification_page_2.return_value.json.return_value = movie_search_sort_verification_page_2()
resp = client.get('/v1/movies/search?\
query=terminator\
®ion=en_US\
&genres=878\
&sort=title,asc,1\
&sort=release_date,desc,2\
&sort=vote_average,desc,3')
assert len(resp.json['results']) == 4
assert resp.status_code == 200
Thank you