from decimal import Decimal as D

from django.core.exceptions import ValidationError
from django.test import TestCase

from oscar.apps.shipping import models


class TestWeightBasedMethod(TestCase):
    def test_doesnt_allow_negative_default_weights(self):
        method = models.WeightBased(name="Dummy", default_weight=D("-0.1"))
        with self.assertRaises(ValidationError):
            method.full_clean()


class TestWeightBand(TestCase):
    def test_doesnt_allow_negative_upper_limit(self):
        band = models.WeightBand(upper_limit=D("-0.1"))
        with self.assertRaises(ValidationError) as cm:
            band.full_clean()
        self.assertTrue("upper_limit" in cm.exception.message_dict)

    def test_doesnt_allow_negative_charge(self):
        band = models.WeightBand(charge=D("-0.1"))
        with self.assertRaises(ValidationError) as cm:
            band.full_clean()
        self.assertTrue("charge" in cm.exception.message_dict)
