This repository has been archived on 2022-08-04. You can view files and clone it, but cannot push or open issues or pull requests.
pyurbantz/urbantz/tests/test_full.py

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)