mirror of https://github.com/zulip/zulip.git
tests: Create new test mode for generating stripe fixtures.
This commit is contained in:
parent
ca74cd6e37
commit
a48845c8fb
|
@ -9,11 +9,13 @@ import sys
|
||||||
from typing import Any, Callable, Dict, List, Optional, TypeVar, Tuple, cast
|
from typing import Any, Callable, Dict, List, Optional, TypeVar, Tuple, cast
|
||||||
import ujson
|
import ujson
|
||||||
import json
|
import json
|
||||||
|
import responses
|
||||||
|
|
||||||
from django.core import signing
|
from django.core import signing
|
||||||
from django.urls.resolvers import get_resolver
|
from django.urls.resolvers import get_resolver
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.utils.timezone import utc as timezone_utc
|
from django.utils.timezone import utc as timezone_utc
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
import stripe
|
import stripe
|
||||||
|
|
||||||
|
@ -35,7 +37,6 @@ from corporate.models import Customer, CustomerPlan, LicenseLedger
|
||||||
|
|
||||||
CallableT = TypeVar('CallableT', bound=Callable[..., Any])
|
CallableT = TypeVar('CallableT', bound=Callable[..., Any])
|
||||||
|
|
||||||
GENERATE_STRIPE_FIXTURES = False
|
|
||||||
STRIPE_FIXTURES_DIR = "corporate/tests/stripe_fixtures"
|
STRIPE_FIXTURES_DIR = "corporate/tests/stripe_fixtures"
|
||||||
|
|
||||||
# TODO: check that this creates a token similar to what is created by our
|
# TODO: check that this creates a token similar to what is created by our
|
||||||
|
@ -77,8 +78,10 @@ def generate_and_save_stripe_fixture(decorated_function_name: str, mocked_functi
|
||||||
mock = operator.attrgetter(mocked_function_name)(sys.modules[__name__])
|
mock = operator.attrgetter(mocked_function_name)(sys.modules[__name__])
|
||||||
fixture_path = stripe_fixture_path(decorated_function_name, mocked_function_name, mock.call_count)
|
fixture_path = stripe_fixture_path(decorated_function_name, mocked_function_name, mock.call_count)
|
||||||
try:
|
try:
|
||||||
# Talk to Stripe
|
with responses.RequestsMock() as request_mock:
|
||||||
stripe_object = mocked_function(*args, **kwargs)
|
request_mock.add_passthru("https://api.stripe.com")
|
||||||
|
# Talk to Stripe
|
||||||
|
stripe_object = mocked_function(*args, **kwargs)
|
||||||
except stripe.error.StripeError as e:
|
except stripe.error.StripeError as e:
|
||||||
with open(fixture_path, 'w') as f:
|
with open(fixture_path, 'w') as f:
|
||||||
error_dict = e.__dict__
|
error_dict = e.__dict__
|
||||||
|
@ -183,7 +186,7 @@ def mock_stripe(tested_timestamp_fields: List[str]=[],
|
||||||
def _mock_stripe(decorated_function: CallableT) -> CallableT:
|
def _mock_stripe(decorated_function: CallableT) -> CallableT:
|
||||||
generate_fixture = generate
|
generate_fixture = generate
|
||||||
if generate_fixture is None:
|
if generate_fixture is None:
|
||||||
generate_fixture = GENERATE_STRIPE_FIXTURES
|
generate_fixture = settings.GENERATE_STRIPE_FIXTURES
|
||||||
for mocked_function_name in MOCKED_STRIPE_FUNCTION_NAMES:
|
for mocked_function_name in MOCKED_STRIPE_FUNCTION_NAMES:
|
||||||
mocked_function = operator.attrgetter(mocked_function_name)(sys.modules[__name__])
|
mocked_function = operator.attrgetter(mocked_function_name)(sys.modules[__name__])
|
||||||
if generate_fixture:
|
if generate_fixture:
|
||||||
|
|
|
@ -17,8 +17,7 @@ Stripe makes pretty regular updates to their API. The process for upgrading
|
||||||
our code is:
|
our code is:
|
||||||
* Go to <https://dashboard.stripe.com/developers> in your Stripe account.
|
* Go to <https://dashboard.stripe.com/developers> in your Stripe account.
|
||||||
* Upgrade the API version.
|
* Upgrade the API version.
|
||||||
* Set `GENERATE_STRIPE_FIXTURES = True` in `test_stripe.py`.
|
* Run `tools/test-backend --generate-stripe-fixtures`
|
||||||
* Run `tools/test-backend corporate/tests/test_stripe.py`
|
|
||||||
* Fix any failing tests, and manually look through `git diff` to understand
|
* Fix any failing tests, and manually look through `git diff` to understand
|
||||||
the changes.
|
the changes.
|
||||||
* If there are no material changes, commit the diff, and open a PR.
|
* If there are no material changes, commit the diff, and open a PR.
|
||||||
|
|
|
@ -259,6 +259,10 @@ def main() -> None:
|
||||||
action="store_true",
|
action="store_true",
|
||||||
default=False,
|
default=False,
|
||||||
help=("Include webhook tests. By default, they are skipped for performance."))
|
help=("Include webhook tests. By default, they are skipped for performance."))
|
||||||
|
parser.add_argument('--generate-stripe-fixtures', dest="generate_stripe_fixtures",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help=("Generate Stripe test fixtures by making requests to Stripe test network"))
|
||||||
parser.add_argument('args', nargs='*')
|
parser.add_argument('args', nargs='*')
|
||||||
|
|
||||||
options = parser.parse_args()
|
options = parser.parse_args()
|
||||||
|
@ -344,6 +348,14 @@ def main() -> None:
|
||||||
if full_suite and include_webhooks:
|
if full_suite and include_webhooks:
|
||||||
suites.append("zerver.webhooks")
|
suites.append("zerver.webhooks")
|
||||||
|
|
||||||
|
if options.generate_stripe_fixtures:
|
||||||
|
if full_suite:
|
||||||
|
suites = [
|
||||||
|
"corporate.tests.test_stripe",
|
||||||
|
]
|
||||||
|
full_suite = False
|
||||||
|
os.environ["GENERATE_STRIPE_FIXTURES"] = "1"
|
||||||
|
|
||||||
assert_provisioning_status_ok(options.force)
|
assert_provisioning_status_ok(options.force)
|
||||||
|
|
||||||
if options.coverage:
|
if options.coverage:
|
||||||
|
|
|
@ -68,6 +68,8 @@ TUTORIAL_ENABLED = True
|
||||||
CASPER_TESTS = False
|
CASPER_TESTS = False
|
||||||
# This is overridden in test_settings.py for the test suites
|
# This is overridden in test_settings.py for the test suites
|
||||||
RUNNING_OPENAPI_CURL_TEST = False
|
RUNNING_OPENAPI_CURL_TEST = False
|
||||||
|
# This is overridden in test_settings.py for the test suites
|
||||||
|
GENERATE_STRIPE_FIXTURES = False
|
||||||
|
|
||||||
# Google Compute Engine has an /etc/boto.cfg that is "nicely
|
# Google Compute Engine has an /etc/boto.cfg that is "nicely
|
||||||
# configured" to work with GCE's storage service. However, their
|
# configured" to work with GCE's storage service. However, their
|
||||||
|
|
|
@ -54,6 +54,9 @@ if "CASPER_TESTS" in os.environ:
|
||||||
if "RUNNING_OPENAPI_CURL_TEST" in os.environ:
|
if "RUNNING_OPENAPI_CURL_TEST" in os.environ:
|
||||||
RUNNING_OPENAPI_CURL_TEST = True
|
RUNNING_OPENAPI_CURL_TEST = True
|
||||||
|
|
||||||
|
if "GENERATE_STRIPE_FIXTURES" in os.environ:
|
||||||
|
GENERATE_STRIPE_FIXTURES = True
|
||||||
|
|
||||||
# Decrease the get_updates timeout to 1 second.
|
# Decrease the get_updates timeout to 1 second.
|
||||||
# This allows CasperJS to proceed quickly to the next test step.
|
# This allows CasperJS to proceed quickly to the next test step.
|
||||||
POLL_TIMEOUT = 1000
|
POLL_TIMEOUT = 1000
|
||||||
|
|
Loading…
Reference in New Issue