-
Notifications
You must be signed in to change notification settings - Fork 58
Expand file tree
/
Copy pathtest_pickup.py
More file actions
129 lines (88 loc) · 4.26 KB
/
test_pickup.py
File metadata and controls
129 lines (88 loc) · 4.26 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import pytest
from easypost.constant import (
_FILTERS_KEY,
_TEST_FAILED_INTENTIONALLY_ERROR,
NO_MORE_PAGES_ERROR,
)
from easypost.errors import FilteringError
from easypost.models import Pickup
@pytest.mark.vcr()
def test_pickup_create(one_call_buy_shipment, basic_pickup, test_client):
shipment = test_client.shipment.create(**one_call_buy_shipment)
pickup_data = basic_pickup
pickup_data["shipment"] = shipment
pickup = test_client.pickup.create(**pickup_data)
assert isinstance(pickup, Pickup)
assert str.startswith(pickup.id, "pickup_")
assert pickup.pickup_rates is not None
@pytest.mark.vcr()
def test_pickup_all(page_size, test_client):
pickups = test_client.pickup.all(page_size=page_size)
pickup_array = pickups["pickups"]
assert len(pickup_array) <= page_size
assert pickups["has_more"] is not None
assert all(isinstance(pickup, Pickup) for pickup in pickup_array)
@pytest.mark.vcr()
def test_pickup_get_next_page(page_size, test_client):
try:
first_page = test_client.pickup.all(page_size=page_size)
next_page = test_client.pickup.get_next_page(pickups=first_page, page_size=page_size)
first_id_of_first_page = first_page["pickups"][0].id
first_id_of_second_page = next_page["pickups"][0].id
assert first_id_of_first_page != first_id_of_second_page
# Verify that the filters are being passed along for behind-the-scenes reference
assert first_page[_FILTERS_KEY] == next_page[_FILTERS_KEY]
except Exception as e:
if e.message != NO_MORE_PAGES_ERROR:
raise Exception(_TEST_FAILED_INTENTIONALLY_ERROR)
@pytest.mark.vcr()
def test_pickup_retrieve(one_call_buy_shipment, basic_pickup, test_client):
shipment = test_client.shipment.create(**one_call_buy_shipment)
pickup_data = basic_pickup
pickup_data["shipment"] = shipment
pickup = test_client.pickup.create(**pickup_data)
retrieved_pickup = test_client.pickup.retrieve(pickup.id)
assert isinstance(retrieved_pickup, Pickup)
assert retrieved_pickup.id == pickup.id
@pytest.mark.vcr()
def test_pickup_buy(usps, one_call_buy_shipment, basic_pickup, pickup_service, test_client):
shipment = test_client.shipment.create(**one_call_buy_shipment)
pickup_data = basic_pickup
pickup_data["shipment"] = shipment
pickup = test_client.pickup.create(**pickup_data)
bought_pickup = test_client.pickup.buy(pickup.id, carrier=usps, service=pickup_service)
assert isinstance(bought_pickup, Pickup)
assert str.startswith(bought_pickup.id, "pickup_")
assert bought_pickup.confirmation is not None
assert bought_pickup.status == "scheduled"
@pytest.mark.vcr()
def test_pickup_cancel(usps, one_call_buy_shipment, basic_pickup, pickup_service, test_client):
shipment = test_client.shipment.create(**one_call_buy_shipment)
pickup_data = basic_pickup
pickup_data["shipment"] = shipment
pickup = test_client.pickup.create(**pickup_data)
bought_pickup = test_client.pickup.buy(pickup.id, carrier=usps, service=pickup_service)
cancelled_pickup = test_client.pickup.cancel(bought_pickup.id)
assert isinstance(cancelled_pickup, Pickup)
assert str.startswith(cancelled_pickup.id, "pickup_")
assert cancelled_pickup.status == "canceled"
@pytest.mark.vcr()
def test_pickup_lowest_rate(one_call_buy_shipment, basic_pickup, test_client):
"""Test various usage alterations of the lowest_rate method."""
shipment = test_client.shipment.create(**one_call_buy_shipment)
pickup_data = basic_pickup
pickup_data["shipment"] = shipment
pickup = test_client.pickup.create(**pickup_data)
# Test lowest rate with no filters
lowest_rate = pickup.lowest_rate()
assert lowest_rate.service == "NextDay"
assert lowest_rate.rate == "0.00"
assert lowest_rate.carrier == "USPS"
# Test lowest rate with service filter (should error due to bad service)
with pytest.raises(FilteringError) as error:
pickup.lowest_rate(services=["BAD SERVICE"])
assert str(error.value) == "No rates found."
# Test lowest rate with carrier filter (should error due to bad carrier)
with pytest.raises(FilteringError) as error:
pickup.lowest_rate(carriers=["BAD CARRIER"])
assert str(error.value) == "No rates found."