Пример #1
0
    def test_combinations(self):
        # Test that shipment.verbose_status returns the expected strings

        # Shortcut names for statuses
        PROG = Shipment.STATUS_IN_PROGRESS
        READ = Shipment.STATUS_READY
        TRAN = Shipment.STATUS_IN_TRANSIT
        RCVD = Shipment.STATUS_RECEIVED
        ODUE = Shipment.STATUS_OVERDUE

        # test data is a 3-tuple:
        # * shipment status
        # * list of package statuses, one per package for that shipment (can be empty)
        # * expected status string.

        test_data = [
            (PROG, [], "In progress"),
            (PROG, [PROG], "In progress"),
            # This next one can't happen - setting pkg status sets shipment status ahead
            # (PROG, [TRAN], "In progress"),
            (READ, [], "Ready for pickup"),
            (READ, [PROG], "Ready for pickup"),
            (READ, [READ], "Ready for pickup"),
            (TRAN, [], "In transit"),
            (TRAN, [TRAN, PROG], "In transit (50%)"),
            (TRAN, [TRAN, TRAN], "In transit"),
            (TRAN, [TRAN, RCVD], "In transit (50%)"),
            (RCVD, [], "Received"),
            (RCVD, [TRAN, RCVD], "Received (50%)"),
            (RCVD, [RCVD, RCVD], "Received"),
            (ODUE, [], "Overdue"),
        ]

        # We'll run all the tests without stopping, but set `failed` if any fail
        # and then fail the test at the end.  That'll give us more fine-grained
        # results without having to write N separate tests.
        failed = False
        for shipment_status, package_statuses, expected_status in test_data:
            shipment = ShipmentFactory(status=shipment_status)
            for pkg_status in package_statuses:
                PackageFactory(shipment=shipment, status=pkg_status)
            shipment_from_view = ShipmentDBView.objects.get(pk=shipment.pk)
            shipment_status_str = status_as_string(shipment_status)
            got_status = shipment_from_view.get_verbose_status()
            package_statuses = ','.join(
                [status_as_string(stat) for stat in package_statuses])
            errmsg = "Test failed: with shipment status %s and package statuses %s, expected %s " \
                     "but got %s" % (shipment_status_str, package_statuses, expected_status,
                                     got_status)
            if not expected_status == got_status:
                failed = True
                print(errmsg)
            shipment.packages.all().delete()
            shipment.delete()
        if failed:
            self.fail("Test failed; see previous messages for details")
Пример #2
0
    def test_combinations(self):
        # Test that shipment.verbose_status returns the expected strings

        # Shortcut names for statuses
        PROG = Shipment.STATUS_IN_PROGRESS
        READ = Shipment.STATUS_READY
        TRAN = Shipment.STATUS_IN_TRANSIT
        RCVD = Shipment.STATUS_RECEIVED
        ODUE = Shipment.STATUS_OVERDUE

        # test data is a 3-tuple:
        # * shipment status
        # * list of package statuses, one per package for that shipment (can be empty)
        # * expected status string.

        test_data = [
            (PROG, [], "In progress"),
            (PROG, [PROG], "In progress"),
            # This next one can't happen - setting pkg status sets shipment status ahead
            # (PROG, [TRAN], "In progress"),
            (READ, [], "Ready for pickup"),
            (READ, [PROG], "Ready for pickup"),
            (READ, [READ], "Ready for pickup"),
            (TRAN, [], "In transit"),
            (TRAN, [TRAN, PROG], "In transit (50%)"),
            (TRAN, [TRAN, TRAN], "In transit"),
            (TRAN, [TRAN, RCVD], "In transit (50%)"),
            (RCVD, [], "Received"),
            (RCVD, [TRAN, RCVD], "Received (50%)"),
            (RCVD, [RCVD, RCVD], "Received"),
            (ODUE, [], "Overdue"),
        ]

        # We'll run all the tests without stopping, but set `failed` if any fail
        # and then fail the test at the end.  That'll give us more fine-grained
        # results without having to write N separate tests.
        failed = False
        for shipment_status, package_statuses, expected_status in test_data:
            shipment = ShipmentFactory(status=shipment_status)
            for pkg_status in package_statuses:
                PackageFactory(shipment=shipment, status=pkg_status)
            shipment_from_view = ShipmentDBView.objects.get(pk=shipment.pk)
            shipment_status_str = status_as_string(shipment_status)
            got_status = shipment_from_view.get_verbose_status()
            package_statuses = ','.join([status_as_string(stat) for stat in package_statuses])
            errmsg = "Test failed: with shipment status %s and package statuses %s, expected %s " \
                     "but got %s" % (shipment_status_str, package_statuses, expected_status,
                                     got_status)
            if not expected_status == got_status:
                failed = True
                print(errmsg)
            shipment.packages.all().delete()
            shipment.delete()
        if failed:
            self.fail("Test failed; see previous messages for details")