From bec488083e8862aa322efdf024948fb486a7a16a Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 16:06:51 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=AA=20Add=20unit=20tests=20for=20`gene?= =?UTF-8?q?rate=5Fsavings`=20in=20generate=5Fapps.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: lsb11 <269203137+lsb11@users.noreply.github.com> --- scripts/generate_apps.py | 60 +++++++++++++++-------------- tests/scripts/test_generate_apps.py | 24 ++++++++++++ 2 files changed, 56 insertions(+), 28 deletions(-) create mode 100644 tests/scripts/test_generate_apps.py diff --git a/scripts/generate_apps.py b/scripts/generate_apps.py index 1f45690..3f6280c 100644 --- a/scripts/generate_apps.py +++ b/scripts/generate_apps.py @@ -84,36 +84,40 @@ def generate_savings(cost_str): return "100% of subscription cost" return "100% of subscription cost" -output_data = [] +def main(): + output_data = [] -# Load existing apps.json to preserve the original 5 -existing_path = "src/data/apps.json" -if os.path.exists(existing_path): - with open(existing_path, "r") as f: - output_data = json.load(f) + # Load existing apps.json to preserve the original 5 + existing_path = "src/data/apps.json" + if os.path.exists(existing_path): + with open(existing_path, "r") as f: + output_data = json.load(f) -existing_ids = set(app["id"] for app in output_data) + existing_ids = set(app["id"] for app in output_data) -for app in apps: - app_id = app["name"].lower().replace(" ", "-").replace(".", "") - if app_id in existing_ids: - continue - - savings = generate_savings(app["cost"]) - - obj = { - "id": app_id, - "name": app["name"], - "category": app["category"], - "monthlyCost": app["cost"], - "replacement": app["replacement"], - "savings": savings, - "description": f"{app['name']} is a premium {app['category']} app for Shopify.", - "stackarchitectAlternativeLink": app["link"] - } - output_data.append(obj) + for app in apps: + app_id = app["name"].lower().replace(" ", "-").replace(".", "") + if app_id in existing_ids: + continue + + savings = generate_savings(app["cost"]) + + obj = { + "id": app_id, + "name": app["name"], + "category": app["category"], + "monthlyCost": app["cost"], + "replacement": app["replacement"], + "savings": savings, + "description": f"{app['name']} is a premium {app['category']} app for Shopify.", + "stackarchitectAlternativeLink": app["link"] + } + output_data.append(obj) + + with open(existing_path, "w") as f: + json.dump(output_data, f, indent=2) -with open(existing_path, "w") as f: - json.dump(output_data, f, indent=2) + print(f"Generated {len(output_data)} apps in {existing_path}") -print(f"Generated {len(output_data)} apps in {existing_path}") +if __name__ == "__main__": + main() diff --git a/tests/scripts/test_generate_apps.py b/tests/scripts/test_generate_apps.py new file mode 100644 index 0000000..aa581ac --- /dev/null +++ b/tests/scripts/test_generate_apps.py @@ -0,0 +1,24 @@ +import unittest +import sys +import os + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))) + +from generate_apps import generate_savings + +class TestGenerateSavings(unittest.TestCase): + def test_happy_paths(self): + self.assertEqual(generate_savings("$59+"), "$708/yr") + self.assertEqual(generate_savings("$1,000+"), "$12,000/yr") + self.assertEqual(generate_savings("$20"), "$240/yr") + + def test_error_conditions(self): + self.assertEqual(generate_savings("$invalid"), "100% of subscription cost") + self.assertEqual(generate_savings("$100.50"), "100% of subscription cost") + + def test_non_dollar_strings(self): + self.assertEqual(generate_savings("Free"), "100% of subscription cost") + self.assertEqual(generate_savings("Custom"), "100% of subscription cost") + +if __name__ == '__main__': + unittest.main()