Skip to content

Commit 50aa3a1

Browse files
committed
Add some delays to integration tests
1 parent 0b35c73 commit 50aa3a1

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed

tests/integration/test_inventory.py

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import uuid
2+
import time
23
from datetime import datetime, timedelta
4+
from typing import Optional
35

6+
from square.core.api_error import ApiError
47
from square.requests.catalog_item import CatalogItemParams
58
from square.requests.catalog_item_variation import CatalogItemVariationParams
69
from square.requests.catalog_object_item_variation import (
@@ -14,6 +17,27 @@
1417
from . import helpers
1518

1619

20+
def retry_on_rate_limit(func):
21+
"""Decorator to retry functions on rate limit errors"""
22+
def wrapper(*args, **kwargs):
23+
max_retries = 5
24+
base_delay = 2 # seconds
25+
26+
for attempt in range(max_retries):
27+
try:
28+
return func(*args, **kwargs)
29+
except ApiError as e:
30+
if e.status_code == 429 and attempt < max_retries - 1:
31+
delay = base_delay * (2 ** attempt) # exponential backoff
32+
print(f"Rate limited. Retrying in {delay} seconds...")
33+
time.sleep(delay)
34+
continue
35+
raise
36+
return None
37+
return wrapper
38+
39+
40+
@retry_on_rate_limit
1741
def create_catalog_item_variation() -> str:
1842
client = helpers.test_client()
1943

@@ -67,7 +91,8 @@ def create_catalog_item_variation() -> str:
6791
return item_variation_ids[0]
6892

6993

70-
def create_initial_adjustment(item_variation_id: str):
94+
@retry_on_rate_limit
95+
def create_initial_adjustment(item_variation_id: str) -> Optional[str]:
7196
"""
7297
Create an initial inventory adjustment and return the physical count ID
7398
"""
@@ -91,6 +116,9 @@ def create_initial_adjustment(item_variation_id: str):
91116
],
92117
)
93118

119+
# Add delay after the first operation
120+
time.sleep(2)
121+
94122
changes = response.changes
95123
assert changes is not None
96124
assert len(changes) > 0
@@ -115,6 +143,9 @@ def create_initial_adjustment(item_variation_id: str):
115143
],
116144
)
117145

146+
# Add delay after the second operation
147+
time.sleep(2)
148+
118149
physical_changes_response = client.inventory.batch_get_changes(
119150
types=["PHYSICAL_COUNT"],
120151
catalog_object_ids=[item_variation_id],
@@ -133,7 +164,9 @@ def create_initial_adjustment(item_variation_id: str):
133164
def test_batch_change_inventory():
134165
client = helpers.test_client()
135166
item_variation_id = create_catalog_item_variation()
167+
time.sleep(2) # Add delay after catalog operation
136168
create_initial_adjustment(item_variation_id)
169+
time.sleep(2) # Add delay after adjustment
137170

138171
response = client.inventory.batch_create_changes(
139172
idempotency_key=str(uuid.uuid4()),
@@ -163,7 +196,9 @@ def test_batch_change_inventory():
163196
def test_batch_retrieve_inventory_changes():
164197
client = helpers.test_client()
165198
item_variation_id = create_catalog_item_variation()
199+
time.sleep(2) # Add delay after catalog operation
166200
create_initial_adjustment(item_variation_id)
201+
time.sleep(2) # Add delay after adjustment
167202

168203
response = client.inventory.batch_get_changes(
169204
catalog_object_ids=[item_variation_id]
@@ -175,7 +210,9 @@ def test_batch_retrieve_inventory_changes():
175210
def test_batch_retrieve_inventory_counts():
176211
client = helpers.test_client()
177212
item_variation_id = create_catalog_item_variation()
213+
time.sleep(2) # Add delay after catalog operation
178214
create_initial_adjustment(item_variation_id)
215+
time.sleep(2) # Add delay after adjustment
179216

180217
response = client.inventory.batch_get_counts(catalog_object_ids=[item_variation_id])
181218
assert response.items is not None
@@ -185,7 +222,9 @@ def test_batch_retrieve_inventory_counts():
185222
def test_retrieve_inventory_changes():
186223
client = helpers.test_client()
187224
item_variation_id = create_catalog_item_variation()
225+
time.sleep(2) # Add delay after catalog operation
188226
create_initial_adjustment(item_variation_id)
227+
time.sleep(2) # Add delay after adjustment
189228

190229
response = client.inventory.get(catalog_object_id=item_variation_id)
191230
assert response.items is not None
@@ -195,7 +234,9 @@ def test_retrieve_inventory_changes():
195234
def test_retrieve_inventory_counts():
196235
client = helpers.test_client()
197236
item_variation_id = create_catalog_item_variation()
237+
time.sleep(2) # Add delay after catalog operation
198238
physical_count_id = create_initial_adjustment(item_variation_id)
239+
time.sleep(2) # Add delay after adjustment
199240

200241
response = client.inventory.get_physical_count(physical_count_id=physical_count_id)
201242
assert response.count is not None
@@ -204,7 +245,9 @@ def test_retrieve_inventory_counts():
204245
def test_retrieve_inventory_adjustments():
205246
client = helpers.test_client()
206247
item_variation_id = create_catalog_item_variation()
248+
time.sleep(2) # Add delay after catalog operation
207249
create_initial_adjustment(item_variation_id)
250+
time.sleep(2) # Add delay after adjustment
208251

209252
response = client.inventory.batch_create_changes(
210253
idempotency_key=str(uuid.uuid4()),
@@ -230,6 +273,9 @@ def test_retrieve_inventory_adjustments():
230273
assert isinstance(changes[0].adjustment, InventoryAdjustment)
231274
assert changes[0].adjustment.id is not None
232275
adjustment_id = changes[0].adjustment.id
276+
277+
time.sleep(2) # Add delay before retrieve
278+
233279
retrieve_response = client.inventory.get_adjustment(adjustment_id=adjustment_id)
234280
retrieve_adjustment = retrieve_response.adjustment
235281
assert retrieve_adjustment is not None
@@ -238,4 +284,4 @@ def test_retrieve_inventory_adjustments():
238284
assert retrieve_adjustment_id is not None
239285

240286
assert retrieve_response.adjustment is not None
241-
assert adjustment_id == retrieve_adjustment_id
287+
assert adjustment_id == retrieve_adjustment_id

0 commit comments

Comments
 (0)