This repository has been archived by the owner on Apr 23, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 41
/
test_product.py
86 lines (66 loc) · 2.95 KB
/
test_product.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import pytest
from pygrocy.data_models.product import Product, ProductBarcode
from pygrocy.errors.grocy_error import GrocyError
class TestProduct:
@pytest.mark.vcr
def test_get_all_products(self, grocy):
products = grocy.all_products()
assert len(products) == 26
product = products[0]
assert product.id == 1
assert product.name == "Cookies"
@pytest.mark.vcr
def test_product_get_details_valid(self, grocy):
product = grocy.product(8)
assert isinstance(product, Product)
assert product.name == "Gulash soup"
assert product.available_amount == 5
assert product.product_group_id == 3
assert product.qu_factor_purchase_to_stock == 1.0
assert product.default_quantity_unit_purchase.id == 5
assert product.default_quantity_unit_purchase.name == "Tin"
assert product.default_quantity_unit_purchase.description is None
assert product.default_quantity_unit_purchase.name_plural == "Tins"
assert len(product.product_barcodes) == 2
barcode = product.product_barcodes[0]
assert isinstance(barcode, ProductBarcode)
assert barcode.barcode == "22111968"
@pytest.mark.vcr
def test_product_no_barcodes(self, grocy):
stock = grocy.stock()
product = next(prod for prod in stock if prod.id == 2)
assert product.name == "Chocolate"
assert product.product_barcodes is not None
assert isinstance(product.product_barcodes, list)
assert len(product.product_barcodes) == 0
@pytest.mark.vcr
def test_product_get_details_non_existant(self, grocy):
with pytest.raises(GrocyError) as exc_info:
grocy.product(200)
error = exc_info.value
assert error.status_code == 400
assert error.message == "Product does not exist or is inactive"
@pytest.mark.vcr
def test_add_product_pic_valid(self, grocy, mocker):
mocked_exists = mocker.patch("os.path.exists")
mocked_exists.return_value = True
mocker.patch("builtins.open", mocker.mock_open())
assert grocy.add_product_pic(20, "/somepath/pic.jpg") is None
@pytest.mark.vcr
def test_get_product_by_barcode(self, grocy):
product = grocy.product_by_barcode("42141099")
assert isinstance(product, Product)
assert product.name == "Crisps"
assert product.available_amount == 25
assert product.product_group_id == 1
assert len(product.product_barcodes) == 1
barcode = product.product_barcodes[0]
assert isinstance(barcode, ProductBarcode)
assert barcode.barcode == "42141099"
@pytest.mark.vcr
def test_product_by_barcode_get_details_non_existant(self, grocy):
with pytest.raises(GrocyError) as exc_info:
grocy.product_by_barcode(200)
error = exc_info.value
assert error.status_code == 400
assert error.message == "No product with barcode 200 found"