|
1 | 1 | import json |
2 | | -from datetime import datetime |
| 2 | +from datetime import datetime, timedelta |
3 | 3 | import pytest |
4 | 4 | from urlobject import URLObject |
5 | 5 | from requests import RequestException |
@@ -150,3 +150,117 @@ def test_free_busy_single_email(mocked_responses, api_client): |
150 | 150 | assert data["emails"] == [email] |
151 | 151 | assert data["start_time"] == 946684800 |
152 | 152 | assert data["end_time"] == 951868800 |
| 153 | + |
| 154 | + |
| 155 | +@pytest.mark.usefixtures("mock_availability") |
| 156 | +def test_availability_datetime(mocked_responses, api_client): |
| 157 | + emails = ["one@example.com", "two@example.com", "three@example.com"] |
| 158 | + duration = timedelta(minutes=30) |
| 159 | + interval = timedelta(hours=1, minutes=30) |
| 160 | + start_at = datetime(2020, 1, 1) |
| 161 | + end_at = datetime(2020, 1, 2) |
| 162 | + availability = api_client.availability(emails, duration, interval, start_at, end_at) |
| 163 | + |
| 164 | + assert isinstance(availability, dict) |
| 165 | + assert "time_slots" in availability |
| 166 | + |
| 167 | + request = mocked_responses.calls[-1].request |
| 168 | + assert URLObject(request.url).path == "/calendars/availability" |
| 169 | + data = json.loads(request.body) |
| 170 | + assert data["emails"] == emails |
| 171 | + assert data["duration_minutes"] == 30 |
| 172 | + assert data["interval_minutes"] == 90 |
| 173 | + assert data["start_time"] == 1577836800 |
| 174 | + assert data["end_time"] == 1577923200 |
| 175 | + assert data["free_busy"] == [] |
| 176 | + |
| 177 | + |
| 178 | +@pytest.mark.usefixtures("mock_availability") |
| 179 | +def test_availability_timestamp(mocked_responses, api_client): |
| 180 | + emails = ["one@example.com", "two@example.com", "three@example.com"] |
| 181 | + duration = 30 |
| 182 | + interval = 60 |
| 183 | + start_time = 1580511600 |
| 184 | + end_time = 1580598000 |
| 185 | + availability = api_client.availability( |
| 186 | + emails, duration, interval, start_time, end_time |
| 187 | + ) |
| 188 | + |
| 189 | + assert isinstance(availability, dict) |
| 190 | + assert "time_slots" in availability |
| 191 | + |
| 192 | + request = mocked_responses.calls[-1].request |
| 193 | + assert URLObject(request.url).path == "/calendars/availability" |
| 194 | + data = json.loads(request.body) |
| 195 | + assert data["emails"] == emails |
| 196 | + assert data["duration_minutes"] == 30 |
| 197 | + assert data["interval_minutes"] == 60 |
| 198 | + assert data["start_time"] == 1580511600 |
| 199 | + assert data["end_time"] == 1580598000 |
| 200 | + assert data["free_busy"] == [] |
| 201 | + |
| 202 | + |
| 203 | +@pytest.mark.usefixtures("mock_availability") |
| 204 | +def test_availability_single_email(mocked_responses, api_client): |
| 205 | + email = "ben@bitdiddle.com" |
| 206 | + duration = timedelta(minutes=60) |
| 207 | + interval = 5 |
| 208 | + start_at = datetime(2000, 1, 1) |
| 209 | + end_at = datetime(2000, 3, 1) |
| 210 | + availability = api_client.availability(email, duration, interval, start_at, end_at) |
| 211 | + |
| 212 | + assert isinstance(availability, dict) |
| 213 | + assert "time_slots" in availability |
| 214 | + |
| 215 | + request = mocked_responses.calls[-1].request |
| 216 | + assert URLObject(request.url).path == "/calendars/availability" |
| 217 | + data = json.loads(request.body) |
| 218 | + assert data["emails"] == [email] |
| 219 | + assert data["duration_minutes"] == 60 |
| 220 | + assert data["interval_minutes"] == 5 |
| 221 | + assert data["start_time"] == 946684800 |
| 222 | + assert data["end_time"] == 951868800 |
| 223 | + assert data["free_busy"] == [] |
| 224 | + |
| 225 | + |
| 226 | +@pytest.mark.usefixtures("mock_availability") |
| 227 | +def test_availability_with_free_busy(mocked_responses, api_client): |
| 228 | + emails = [ |
| 229 | + "one@example.com", |
| 230 | + "two@example.com", |
| 231 | + "three@example.com", |
| 232 | + "visitor@external.net", |
| 233 | + ] |
| 234 | + duration = 48 |
| 235 | + interval = timedelta(minutes=18) |
| 236 | + start_at = datetime(2020, 1, 1) |
| 237 | + end_at = datetime(2020, 1, 2) |
| 238 | + free_busy = [ |
| 239 | + { |
| 240 | + "email": "visitor@external.net", |
| 241 | + "time_slots": [ |
| 242 | + { |
| 243 | + "object": "time_slot", |
| 244 | + "status": "busy", |
| 245 | + "start_time": 1584377898, |
| 246 | + "end_time": 1584379800, |
| 247 | + } |
| 248 | + ], |
| 249 | + } |
| 250 | + ] |
| 251 | + availability = api_client.availability( |
| 252 | + emails, duration, interval, start_at, end_at, free_busy=free_busy |
| 253 | + ) |
| 254 | + |
| 255 | + assert isinstance(availability, dict) |
| 256 | + assert "time_slots" in availability |
| 257 | + |
| 258 | + request = mocked_responses.calls[-1].request |
| 259 | + assert URLObject(request.url).path == "/calendars/availability" |
| 260 | + data = json.loads(request.body) |
| 261 | + assert data["emails"] == emails |
| 262 | + assert data["duration_minutes"] == 48 |
| 263 | + assert data["interval_minutes"] == 18 |
| 264 | + assert data["start_time"] == 1577836800 |
| 265 | + assert data["end_time"] == 1577923200 |
| 266 | + assert data["free_busy"] == free_busy |
0 commit comments