""" Factories for generating fake commerce-related data. """
import factory
from factory.fuzzy import FuzzyText


class OrderFactory(factory.Factory):
    """ Factory for stubbing orders resources from Ecommerce (v2). """
    class Meta(object):
        model = dict

    number = factory.Sequence(lambda n: 'edx-%d' % n)
    date_placed = '2016-01-01T10:00:00Z'
    status = 'Complete'
    currency = 'USD'
    total_excl_tax = '100.00'
    lines = []


class OrderLineFactory(factory.Factory):
    """ Factory for stubbing order lines resources from Ecommerce (v2). """
    class Meta(object):
        model = dict

    title = FuzzyText(prefix='Seat in ')
    quantity = 1
    description = FuzzyText()
    status = 'Complete'
    line_price_excl_tax = '100.00'
    unit_price_excl_tax = '100.00'
    product = {}


class ProductFactory(factory.Factory):
    """ Factory for stubbing Product resources from Ecommerce (v2). """
    class Meta(object):
        model = dict

    id = factory.Sequence(lambda n: n)  # pylint: disable=invalid-name
    url = 'http://test/api/v2/products/' + str(id)
    product_class = 'Seat'
    title = FuzzyText(prefix='Seat in ')
    price = '100.00'
    attribute_values = []


class ProductAttributeFactory(factory.Factory):
    """ Factory for stubbing product attribute resources from
    Ecommerce (v2).
    """
    class Meta(object):
        model = dict

    name = FuzzyText()
    code = FuzzyText()
    value = FuzzyText()