def test_order_creator(rf, admin_user): source = seed_source(admin_user) source.add_line( type=OrderLineType.PRODUCT, product=get_default_product(), supplier=get_default_supplier(), quantity=1, base_unit_price=source.create_price(10), ) source.add_line( type=OrderLineType.OTHER, quantity=1, base_unit_price=source.create_price(10), require_verification=True, ) request = apply_request_middleware(rf.get("/")) creator = OrderCreator(request) order = creator.create_order(source) assert get_data_dict(source.billing_address) == get_data_dict(order.billing_address) assert get_data_dict(source.shipping_address) == get_data_dict(order.shipping_address) assert source.customer == order.customer assert source.payment_method == order.payment_method assert source.shipping_method == order.shipping_method assert order.pk
def test_order_creator(admin_user): source = seed_source(admin_user) source.lines.append( SourceLine( type=OrderLineType.PRODUCT, product=get_default_product(), supplier=get_default_supplier(), quantity=1, unit_price=TaxlessPrice(10), )) source.lines.append( SourceLine( type=OrderLineType.OTHER, quantity=1, unit_price=TaxlessPrice(10), require_verification=True, )) creator = OrderCreator(request=None) order = creator.create_order(source) assert get_data_dict(source.billing_address) == get_data_dict( order.billing_address) assert get_data_dict(source.shipping_address) == get_data_dict( order.shipping_address) assert source.customer == order.customer assert source.payment_method == order.payment_method assert source.shipping_method == order.shipping_method assert order.pk
def test_new_mutable_address(): address = get_address() new_mutable = address.to_mutable() # New address should be unsaved assert new_mutable.pk == None assert isinstance(new_mutable, MutableAddress) assert get_data_dict(address).items() == get_data_dict(new_mutable).items()
def test_immutable_address(): address = get_address() new_immutable = address.to_immutable() # New address should be saved assert new_immutable.pk != None assert isinstance(new_immutable, ImmutableAddress) assert get_data_dict(address).items() == get_data_dict(new_immutable).items() # Taking immutable for same address should return same object assert new_immutable == address.to_immutable() # Taking immutable from new_immutable should return same item assert new_immutable == new_immutable.to_immutable()
def test_immutable_address(): address = get_address() new_immutable = address.to_immutable() # New address should be saved assert new_immutable.pk != None assert isinstance(new_immutable, ImmutableAddress) assert get_data_dict(address).items() == get_data_dict( new_immutable).items() # Taking immutable for same address should return same object assert new_immutable == address.to_immutable() # Taking immutable from new_immutable should return same item assert new_immutable == new_immutable.to_immutable()
def to_mutable(self): """ Get a new MutableAddress from self. :rtype: MutableAddress :return: Fresh unsaved MutableAddress with same data as self. """ data = get_data_dict(self) return MutableAddress.from_data(data)
def to_immutable(self): """ Get or create saved ImmutableAddress from self. :rtype: ImmutableAddress :return: Saved ImmutableAddress with same data as self. """ data = get_data_dict(self) return ImmutableAddress.from_data(data)
def from_data(cls, data): """ Get or create immutable address with given data. :param data: data for address :type data: dict[str,str] :return: Saved immutable address :rtype: ImmutableAddress """ # Populate all known address fields even if not originally in `data` data_with_all_fields = get_data_dict(cls(**data)) address = cls.objects.filter(**data_with_all_fields).first() return address if address else cls.objects.create(**data_with_all_fields)
def from_data(cls, data): """ Get or create immutable address with given data. :param data: data for address :type data: dict[str,str] :return: Saved immutable address :rtype: ImmutableAddress """ # Populate all known address fields even if not originally in `data` data_with_all_fields = get_data_dict(cls(**data)) address = cls.objects.filter(**data_with_all_fields).first() return address if address else cls.objects.create( **data_with_all_fields)
def test_order_creator(admin_user): source = seed_source(admin_user) source.lines.append(SourceLine( type=OrderLineType.PRODUCT, product=get_default_product(), supplier=get_default_supplier(), quantity=1, unit_price=TaxlessPrice(10), )) source.lines.append(SourceLine( type=OrderLineType.OTHER, quantity=1, unit_price=TaxlessPrice(10), require_verification=True, )) creator = OrderCreator(request=None) order = creator.create_order(source) assert get_data_dict(source.billing_address) == get_data_dict(order.billing_address) assert get_data_dict(source.shipping_address) == get_data_dict(order.shipping_address) assert source.customer == order.customer assert source.payment_method == order.payment_method assert source.shipping_method == order.shipping_method assert order.pk
def test_basic_address(): address = get_address() address.full_clean() string_repr = str(address) for field, value in get_data_dict(address).items(): if field == "country": # We can't test this right now, it's formatted in the repr continue if not value: continue assert value in string_repr, "Field %s is not represented in %r" % (field, string_repr) assert address.is_european_union, "Dog Fort, UK is in the EU" assert list(address.split_name) == ["Dog", "Hello"], "Names split correctly" assert address.first_name == "Dog", "Names split correctly" assert address.last_name == "Hello", "Names split correctly" assert address.full_name == "Sir Dog Hello , Esq.", "Names join correctly"
def try_get_exactly_like(self, object, ignore_fields=()): """ Try to find an immutable Address that is data-wise exactly like the given object. :param object: A model -- probably an Address :type object: Address|models.Model :param ignore_fields: Iterable of field names to ignore while comparing. :type ignore_fields: Iterable[str] :return: Address|None """ data = get_data_dict(object) for field_name in ignore_fields: data.pop(field_name, None) data["is_immutable"] = True return self.get_queryset().filter(**data).first()