From 284fdf44b173d29c06ddfdff4d70a4f5211b8aee Mon Sep 17 00:00:00 2001 From: Lucidiot Date: Sun, 3 Feb 2019 22:03:30 +0100 Subject: [PATCH] Big unit test with a complete delivery payload --- urbantz/tests/test_full.py | 202 ++++++++++++++++++++++++++++++++ urbantz/tests/test_payload.json | 152 ++++++++++++++++++++++++ 2 files changed, 354 insertions(+) create mode 100644 urbantz/tests/test_full.py create mode 100644 urbantz/tests/test_payload.json diff --git a/urbantz/tests/test_full.py b/urbantz/tests/test_full.py new file mode 100644 index 0000000..262ba3a --- /dev/null +++ b/urbantz/tests/test_full.py @@ -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), + ] + ) diff --git a/urbantz/tests/test_payload.json b/urbantz/tests/test_payload.json new file mode 100644 index 0000000..f3ea8c8 --- /dev/null +++ b/urbantz/tests/test_payload.json @@ -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)" + } +}