Skip to content

Commit dad1977

Browse files
authored
chore(source-woocommerce): migrate woocommerce integration tests to use new mocking utils (#44037)
1 parent 731ae13 commit dad1977

27 files changed

+276
-1252
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2+
3+
from typing import Any, MutableMapping, Optional
4+
5+
import source_woocommerce
6+
from airbyte_cdk import AbstractSource
7+
from airbyte_cdk.connector_builder.connector_builder_handler import resolve_manifest
8+
9+
10+
def config() -> MutableMapping[str, Any]:
11+
return {
12+
"api_key": "test_api_key",
13+
"api_secret": "test_api_secret",
14+
"shop": "airbyte.store",
15+
"start_date": "2017-01-01",
16+
}
17+
18+
19+
def source() -> AbstractSource:
20+
return source_woocommerce.SourceWoocommerce()
21+
22+
23+
def url_base() -> str:
24+
url = resolve_manifest(source()).record.data["manifest"]["definitions"]["requester"]["url_base"]
25+
url = url.replace("{{ config['shop'] }}", config()["shop"])
26+
return url
27+
28+
29+
def common_params():
30+
return "orderby=id&order=asc&dates_are_gmt=true&per_page=100"
31+
32+
33+
def build_url(resource_path: str, is_regex: bool = False, modified_after: str = None, modified_before: str = None) -> str:
34+
"""Build a URL for a WooCommerce API endpoint."""
35+
separator = "." if is_regex else "?"
36+
url = f"{url_base()}/{resource_path}{separator}{common_params()}"
37+
if modified_after:
38+
url = f"{url}&modified_after={modified_after}"
39+
if modified_before:
40+
url = f"{url}&modified_before={modified_before}"
41+
42+
return url
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2+
3+
from airbyte_cdk.test.utils.data import read_resource_file_contents
4+
5+
from .common import build_url
6+
7+
8+
def request_response_mapping(stream_name, method="GET", custom_resource=None, is_regex=False, modified_after=None, modified_before=None,
9+
custom_json_filename=None, status_code=200, response=None):
10+
"""Create an HTTP request-response mapping for a stream."""
11+
json_filename = f"{stream_name}.json" if custom_json_filename is None else custom_json_filename
12+
resource = stream_name if custom_resource is None else custom_resource
13+
14+
response_map = response
15+
if response is None:
16+
response_map = {"text": read_resource_file_contents(json_filename, __file__), "status_code": status_code}
17+
18+
return {
19+
"request": {
20+
"url": build_url(resource, modified_after=modified_after, modified_before=modified_before, is_regex=is_regex),
21+
"is_regex": is_regex,
22+
"method": method,
23+
},
24+
"response": response_map,
25+
}
26+
27+
28+
def orders_http_calls():
29+
return [request_response_mapping("orders")]
30+
31+
32+
def coupons_http_calls():
33+
return [request_response_mapping("coupons")]
34+
35+
36+
def customers_http_calls():
37+
return [request_response_mapping("customers")]
38+
39+
40+
def payment_gateways_http_calls():
41+
return [request_response_mapping("payment_gateways")]
42+
43+
44+
def product_attributes_http_calls():
45+
return [request_response_mapping("product_attributes", custom_resource="products/attributes")]
46+
47+
48+
def product_categories_http_calls():
49+
return [request_response_mapping("product_categories", custom_resource="products/categories")]
50+
51+
52+
def product_reviews_http_calls():
53+
return [request_response_mapping("product_reviews", custom_resource="products/reviews")]
54+
55+
56+
def products_http_calls():
57+
return [request_response_mapping("products")]
58+
59+
60+
def product_shipping_classes_http_calls():
61+
return [request_response_mapping("product_shipping_classes", custom_resource="products/shipping_classes")]
62+
63+
64+
def product_tags_http_calls():
65+
return [request_response_mapping("product_tags", custom_resource="products/tags")]
66+
67+
68+
def shipping_methods_http_calls():
69+
return [request_response_mapping("shipping_methods", custom_resource="shipping_methods")]
70+
71+
72+
def shipping_zones_http_calls():
73+
return [request_response_mapping("shipping_zones", custom_resource="shipping/zones")]
74+
75+
76+
def system_status_tools_http_calls():
77+
return [request_response_mapping("system_status_tools", custom_resource="system_status/tools")]
78+
79+
80+
def order_notes_http_calls():
81+
return [
82+
request_response_mapping("orders", modified_after="2017-01-01.+", modified_before="2017-01-29.+", is_regex=True),
83+
request_response_mapping("order_notes", custom_resource="orders/(727|723)/notes", is_regex=True),
84+
]
85+
86+
87+
def product_attribute_terms_http_calls():
88+
return [
89+
request_response_mapping("product_attributes", custom_resource="products/attributes"),
90+
request_response_mapping("product_attribute_terms", custom_resource="products/attributes/.+/terms", is_regex=True),
91+
]
92+
93+
94+
def product_variations_http_calls():
95+
return [
96+
request_response_mapping("products"),
97+
request_response_mapping("product_variations", custom_resource="products/(799|794)/variations", is_regex=True),
98+
]
99+
100+
101+
def refunds_http_calls():
102+
return [
103+
request_response_mapping("orders"),
104+
request_response_mapping("refunds", custom_resource="orders/(727|723)/refunds", is_regex=True),
105+
]
106+
107+
108+
def shipping_zone_locations_http_calls():
109+
return [
110+
request_response_mapping("shipping_zones", custom_resource="shipping/zones"),
111+
request_response_mapping("shipping_zone_locations", custom_resource="shipping/zones/(0|5)/locations", is_regex=True),
112+
]
113+
114+
115+
def shipping_zone_methods_http_calls():
116+
return [
117+
request_response_mapping("shipping_zones", custom_resource="shipping/zones"),
118+
request_response_mapping("shipping_zone_methods", custom_resource="shipping/zones/(0|5)/methods", is_regex=True),
119+
]
120+
121+
122+
def tax_classes_http_calls():
123+
return [request_response_mapping("tax_classes", custom_resource="taxes/classes")]
124+
125+
126+
def tax_rates_http_calls():
127+
return [request_response_mapping("tax_rates", custom_resource="taxes")]
128+
129+
130+
def orders_empty_last_page():
131+
return [
132+
request_response_mapping("orders", is_regex=True, modified_after=".+", modified_before="2017-01-30.+"),
133+
request_response_mapping("orders", is_regex=True, modified_after=".+", modified_before="2017-02-10.+", response={"text": "[]"}),
134+
]

0 commit comments

Comments
 (0)