Skip to content

Commit c23fa7d

Browse files
Merge pull request #12 from piyush-jaiswal/bug/fetch-only-product-details-by-name
Return only product data by name and add test
2 parents 79a3088 + ab9ab40 commit c23fa7d

File tree

2 files changed

+37
-12
lines changed

2 files changed

+37
-12
lines changed

app/routes.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -881,16 +881,16 @@ def delete_product(p_id):
881881
return "Error occured", 500
882882

883883

884-
@app.route('/product/<string:name>', methods=['GET'])
885-
def get_product_by_name(name):
884+
@app.route('/product', methods=['GET'])
885+
def get_product_by_name():
886886
"""
887887
Get Product by Name
888888
---
889889
tags:
890890
- Product
891891
description: Get a product by name.
892892
parameters:
893-
- in: path
893+
- in: query
894894
name: name
895895
required: true
896896
type: string
@@ -903,18 +903,14 @@ def get_product_by_name(name):
903903
500:
904904
description: Error occurred.
905905
"""
906+
name = request.args.get('name')
907+
if not name:
908+
abort(400, description="Missing required query parameter 'name'")
909+
906910
product = Product.query.filter(Product.name == name).first()
907911
if product is None:
908912
abort(404)
909-
910-
try:
911-
product_json = product.to_json()
912-
subcategories = Subcategory.query.filter(Subcategory.id.in_(product_json["subcategories"]))
913-
c_ids = set(c.id for sc in subcategories for c in sc.categories)
914-
product_json["categories"] = list(c_ids)
915-
return product_json, 200
916-
except:
917-
return "Error occured", 500
913+
return jsonify(product.to_json()), 200
918914

919915

920916
@app.route('/products', methods=['GET'])

tests/test_product.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,35 @@ def test_delete_product(self, create_authenticated_headers, create_product):
114114
assert get_resp.status_code == 404
115115
self._verify_product_in_db("ToDelete", should_exist=False)
116116

117+
@pytest.mark.parametrize(
118+
"name",
119+
[
120+
"Test Product With Spaces And / And @",
121+
"Café",
122+
"C++",
123+
"20% off"
124+
]
125+
)
126+
def test_get_product_by_name(self, create_product, name):
127+
response = create_product(name, "desc")
128+
assert response.status_code == 201
129+
data = response.get_json()
130+
p_id = data["id"]
131+
132+
get_resp = self.client.get("/product", query_string={"name": name})
133+
assert get_resp.status_code == 200
134+
prod_data = get_resp.get_json()
135+
assert prod_data["id"] == p_id
136+
assert prod_data["name"] == name
137+
assert prod_data["description"] == "desc"
138+
139+
not_found_resp = self.client.get("/product", query_string={"name": "Non existent product"})
140+
assert not_found_resp.status_code == 404
141+
142+
def test_get_product_by_name_missing_param_returns_400(self):
143+
resp = self.client.get("/product") # no query param
144+
assert resp.status_code == 400
145+
117146
@pytest.mark.parametrize(
118147
"get_headers, expected_code",
119148
[

0 commit comments

Comments
 (0)