207 lines
9.2 KiB
Python
207 lines
9.2 KiB
Python
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.payload = json.load(f)
|
|
cls.delivery = Delivery.fromJSON(cls.payload)
|
|
|
|
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.assertEqual(repr(item), '<Item cafe1>')
|
|
self.assertEqual(item.toJSON(), self.payload['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),
|
|
]
|
|
)
|
|
self.assertEqual(self.delivery.toJSON(), self.payload)
|