Big unit test with a complete delivery payload

This commit is contained in:
Lucidiot 2019-02-03 22:03:30 +01:00
parent 9c1d438eb1
commit 284fdf44b1
No known key found for this signature in database
GPG Key ID: AE3F7205692FA205
2 changed files with 354 additions and 0 deletions

202
urbantz/tests/test_full.py Normal file
View File

@ -0,0 +1,202 @@
from datetime import datetime, date
from unittest import TestCase
from urbantz.base import Coordinates
from urbantz.delivery import Location, Delivery
from urbantz.items import LogEntry, Item
from urbantz.utils import DictObject
import os.path
import json
FOLDER = os.path.dirname(os.path.realpath(__file__))
class TestFull(TestCase):
"""
Unit tests with a full delivery payload
"""
@classmethod
def setUpClass(cls):
super().setUpClass()
with open(os.path.join(FOLDER, 'test_payload.json')) as f:
cls.delivery = Delivery.fromJSON(json.load(f))
def test_types(self):
self.assertIsNone(self.delivery.tracking_code)
self.assertIsNone(self.delivery.last_updated)
self.assertIsInstance(self.delivery.payload, dict)
self.assertIsInstance(self.delivery.id, str)
self.assertIsInstance(self.delivery.date, date)
self.assertIsInstance(self.delivery.task_id, str)
self.assertIsInstance(self.delivery.platform_id, str)
self.assertIsInstance(self.delivery.driver_id, str)
self.assertIsInstance(self.delivery.round_id, str)
self.assertIsInstance(self.delivery.instructions, str)
self.assertIsInstance(self.delivery.progress, str)
self.assertIsInstance(self.delivery.status, str)
self.assertIsInstance(self.delivery.arrival_time, datetime)
self.assertIsInstance(self.delivery.eta_margin, int)
self.assertIsInstance(self.delivery.eta_rounding, int)
self.assertIsInstance(self.delivery.time_window, list)
for dt in self.delivery.time_window:
self.assertIsInstance(dt, datetime)
self.assertIsInstance(self.delivery.position, Coordinates)
self.assertIsInstance(self.delivery.destination, Location)
self.assertIsInstance(self.delivery.recipient, DictObject)
self.assertIsInstance(self.delivery.features, DictObject)
self.assertIsInstance(self.delivery.items, list)
for item in self.delivery.items:
self.assertIsInstance(item, Item)
self.assertIsInstance(self.delivery.logs, list)
for log in self.delivery.logs:
self.assertIsInstance(log, LogEntry)
self.assertIsInstance(self.delivery.theme, DictObject)
self.assertIsInstance(self.delivery.template, DictObject)
def test_attributes(self):
self.assertEqual(self.delivery.id, "cafe1234")
self.assertEqual(self.delivery.date, date(2019, 2, 3))
self.assertEqual(self.delivery.task_id, "123456789")
self.assertEqual(self.delivery.platform_id, "934")
self.assertEqual(self.delivery.driver_id, "987654e")
self.assertEqual(self.delivery.round_id, "552bc6f")
self.assertEqual(self.delivery.instructions, "Third floor")
self.assertEqual(self.delivery.progress, "COMPLETED")
self.assertEqual(self.delivery.status, "DELIVERED")
self.assertEqual(self.delivery.arrival_time,
datetime(2019, 2, 3, 6, 45, 7))
self.assertEqual(self.delivery.eta_margin, 20)
self.assertEqual(self.delivery.eta_rounding, 5)
self.assertEqual(self.delivery.time_window, [
datetime(2019, 2, 3, 8, 0, 0),
datetime(2019, 2, 3, 10, 0, 0),
])
def test_dictobjects(self):
self.assertEqual(self.delivery.recipient.account, "54321")
self.assertIsNone(self.delivery.recipient.name)
self.assertEqual(self.delivery.recipient.person, "M. Chuck Norris")
self.assertEqual(self.delivery.recipient.phone, "33800772424")
self.assertEqual(self.delivery.recipient.language, "fr")
self.assertTrue(self.delivery.features.driver_round_resequence)
self.assertTrue(self.delivery.features.driver_ratings)
self.assertFalse(self.delivery.features.consumer_modify_instructions)
self.assertTrue(self.delivery.features.allow_virtual_fleet)
self.assertFalse(self.delivery.features.cancel_optimization)
self.assertEqual(self.delivery.theme.primary, "#efefef")
self.assertEqual(self.delivery.theme.secondary, "rgb(30, 40, 50)")
self.assertEqual(self.delivery.template.map_availability, 60)
self.assertTrue(self.delivery.template.enabled)
self.assertEqual(self.delivery.template.email, "contact@example.com")
self.assertEqual(self.delivery.template.phone, "0999999999")
self.assertEqual(self.delivery.template.background_color,
"rgba(50, 40, 20, 0.95)")
self.assertEqual(self.delivery.template.primary_color, "#ffffff")
self.assertEqual(self.delivery.template.secondary_color, "#731246")
self.assertEqual(self.delivery.template.background_picture, "bg.png")
self.assertEqual(self.delivery.template.logo, "logo.png")
self.assertEqual(
self.delivery.template.image_path,
"https://backend.urbantz.com/pictures/platforms/934/",
)
self.assertEqual(self.delivery.template.name, "Something")
self.assertEqual(self.delivery.template.icon, "icon.png")
self.assertEqual(self.delivery.destination.address_lines, [
"Baker Street", "742", "GU16 7HF", "Nowhere", "UK",
])
self.assertEqual(self.delivery.destination.geocode_score, 98)
self.assertEqual(self.delivery.destination.clean_score, 0)
self.assertEqual(self.delivery.destination.number, "742")
self.assertEqual(self.delivery.destination.street, "Baker Street")
self.assertEqual(self.delivery.destination.city, "Nowhere")
self.assertEqual(self.delivery.destination.zip, "GU16 7HF")
self.assertEqual(self.delivery.destination.country, "UK")
self.assertEqual(self.delivery.destination.origin, "ARCGIS")
self.assertEqual(self.delivery.destination.precision, "point")
def test_objects(self):
self.assertEqual(self.delivery.position,
Coordinates(lat=32.2135467, lng=0.1234567))
self.assertEqual(self.delivery.destination.coordinates, Coordinates(
lat=42.18906577220902, lng=2.21154054884875))
self.assertListEqual(self.delivery.logs, [
LogEntry(
to="GEOCODED",
by=None,
when="2019-02-01T23:07:22.997Z",
),
LogEntry(
to="ASSIGNED",
by="65dc8",
when="2019-02-02T05:16:22.557Z",
),
LogEntry(
to="ONGOING",
by="f3251c86513d",
when="2019-02-03T07:08:32.107Z",
),
LogEntry(
_id="5416a321",
to="COMPLETED",
by="6513d54e",
when="2019-02-03T07:56:47.814Z",
),
])
self.assertEqual(len(self.delivery.items), 1)
item = self.delivery.items[0]
self.assertFalse(item.damage_confirmed)
self.assertListEqual(item.damage_pictures, [])
self.assertEqual(item.status, "DELIVERED")
self.assertEqual(item.quantity, 1)
self.assertListEqual(item.labels, [])
self.assertListEqual(item.skills, [])
self.assertEqual(item.id, "cafe1")
self.assertEqual(item.type, "COFFEE")
self.assertEqual(item.barcode, "133742133742")
self.assertEqual(item.barcode_encoding, "upc")
self.assertIsInstance(item.dimensions, DictObject)
self.assertEqual(item.dimensions.weight, 19.01)
self.assertEqual(item.dimensions.cardboard, 2)
self.assertIsInstance(item.metadata, DictObject)
self.assertIsNone(item.metadata.package_number)
self.assertEqual(item.metadata.quantity, 0)
self.assertEqual(item.metadata.order_id_ext, "5255887")
self.assertEqual(item.metadata.new_client, "No")
self.assertListEqual(item.logs, [
LogEntry(
by=None,
when="2019-02-02T10:32:27.621Z",
to="ARRIVED",
),
LogEntry(
by="dead",
when="2019-02-03T07:08:32.107Z",
to="DEPARTED",
),
LogEntry(
_id="106",
by="c0fe",
when="2019-02-03T07:56:47.814Z",
to="DELIVERED",
),
])
def test_properties(self):
self.assertListEqual(self.delivery.eta, [
datetime(2019, 2, 3, 6, 35, 0),
datetime(2019, 2, 3, 6, 55, 0),
])
self.assertListEqual([log.datetime for log in self.delivery.logs], [
datetime(2019, 2, 1, 23, 7, 22, 997000),
datetime(2019, 2, 2, 5, 16, 22, 557000),
datetime(2019, 2, 3, 7, 8, 32, 107000),
datetime(2019, 2, 3, 7, 56, 47, 814000),
])
self.assertListEqual(
[log.datetime for log in self.delivery.items[0].logs],
[
datetime(2019, 2, 2, 10, 32, 27, 621000),
datetime(2019, 2, 3, 7, 8, 32, 107000),
datetime(2019, 2, 3, 7, 56, 47, 814000),
]
)

View File

@ -0,0 +1,152 @@
{
"_id": "cafe1234",
"date": "2019-02-03T00:00:00.000Z",
"taskId": "123456789",
"type": "delivery",
"by": "beef",
"contact": {
"account": "54321",
"name": null,
"person": "M. Chuck Norris",
"phone": "33800772424",
"language": "fr"
},
"instructions": "Third floor",
"items": [
{
"damaged": {
"confirmed": false,
"pictures": []
},
"status": "DELIVERED",
"quantity": 1,
"labels": [],
"skills": [],
"_id": "cafe1",
"type": "COFFEE",
"barcode": "133742133742",
"barcodeEncoding": "upc",
"dimensions": {
"weight": 19.01,
"cardboard": 2
},
"log": [
{
"by": null,
"when": "2019-02-02T10:32:27.621Z",
"to": "ARRIVED"
},
{
"by": "dead",
"when": "2019-02-03T07:08:32.107Z",
"to": "DEPARTED"
},
{
"_id": "106",
"by": "c0fe",
"when": "2019-02-03T07:56:47.814Z",
"to": "DELIVERED"
}
],
"metadata": {
"packageNumber": null,
"quantity": 0,
"orderIdExt": "5255887",
"newClient": "No"
}
}
],
"location": {
"location": {
"type": "Point",
"geometry": [
2.21154054884875,
42.18906577220902
]
},
"addressLines": [
"Baker Street",
"742",
"GU16 7HF",
"Nowhere",
"UK"
],
"geocodeScore": 98,
"cleanScore": 0,
"number": "742",
"street": "Baker Street",
"city": "Nowhere",
"zip": "GU16 7HF",
"country": "UK",
"origin": "ARCGIS",
"precision": "point"
},
"log": [
{
"to": "GEOCODED",
"when": "2019-02-01T23:07:22.997Z",
"by": null
},
{
"by": "65dc8",
"when": "2019-02-02T05:16:22.557Z",
"to": "ASSIGNED"
},
{
"by": "f3251c86513d",
"when": "2019-02-03T07:08:32.107Z",
"to": "ONGOING"
},
{
"_id": "5416a321",
"by": "6513d54e",
"when": "2019-02-03T07:56:47.814Z",
"to": "COMPLETED"
}
],
"platform": "934",
"progress": "COMPLETED",
"serviceTime": 13,
"status": "DELIVERED",
"timeWindow": {
"start": "2019-02-03T08:00:00.000Z",
"stop": "2019-02-03T10:00:00.000Z"
},
"when": "2019-02-01T23:07:16.734Z",
"arriveTime": "2019-02-03T06:45:07.000Z",
"driver": "987654e",
"round": "552bc6f",
"position": [
0.1234567,
32.2135467
],
"template": {
"mapAvailability": 60,
"enabled": true,
"email": "contact@example.com",
"phone": "0999999999",
"backgroundColor": "rgba(50, 40, 20, 0.95)",
"primaryColor": "#ffffff",
"secondaryColor": "#731246",
"backgroundPicture": "bg.png",
"logo": "logo.png",
"imagePath": "https://backend.urbantz.com/pictures/platforms/934/",
"name": "Something",
"icon": "icon.png"
},
"features": {
"driverRoundResequence": true,
"driverRatings": true,
"consumerModifyInstructions": false,
"allowVirtualFleet": true,
"cancelOptimization": false
},
"eta": {
"margin": 20,
"rounding": 5
},
"theme": {
"primary": "#efefef",
"secondary": "rgb(30, 40, 50)"
}
}