Example #1
0
def test_product_image_create_mutation(admin_api_client, product):
    query = """
    mutation createProductImage($image: Upload!, $product: ID!) {
        productImageCreate(input: {image: $image, product: $product}) {
            productImage {
                id
                image
                url
                sortOrder
            }
        }
    }
    """
    image_file, image_name = create_image()
    variables = {
        'product': graphene.Node.to_global_id('Product', product.id),
        'image': image_name}
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = admin_api_client.post_multipart(reverse('api'), body)
    content = get_graphql_content(response)
    assert 'errors' not in content
    data = content['data']['productImageCreate']
    file_name = data['productImage']['image']
    product.refresh_from_db()
    assert product.images.first().image.file
    assert product.images.first().image.name == file_name
Example #2
0
def digital_content(category, media_root) -> DigitalContent:
    product_type = ProductType.objects.create(
        name="Digital Type",
        has_variants=True,
        is_shipping_required=False,
        is_digital=True,
    )
    product = Product.objects.create(
        name="Test digital product",
        price=Money("10.00", "USD"),
        product_type=product_type,
        category=category,
    )
    product_variant = ProductVariant.objects.create(
        product=product,
        sku="SKU_554",
        cost_price=Money(1, "USD"),
        quantity=5,
        quantity_allocated=3,
    )

    assert product_variant.is_digital()

    image_file, image_name = create_image()
    d_content = DigitalContent.objects.create(
        content_file=image_file,
        product_variant=product_variant,
        use_default_settings=True,
    )
    return d_content
Example #3
0
def test_create_collection(admin_api_client, product_list):
    query = """
        mutation createCollection(
            $name: String!, $slug: String!, $products: [ID], $backgroundImage: Upload!, $isPublished: Boolean!) {
            collectionCreate(
                input: {name: $name, slug: $slug, products: $products, backgroundImage: $backgroundImage, isPublished: $isPublished}) {
                collection {
                    name
                    slug
                    products {
                        totalCount
                    }
                }
            }
        }
    """
    product_ids = [
        to_global_id('Product', product.pk) for product in product_list]
    image_file, image_name = create_image()
    name = 'test-name'
    slug = 'test-slug'
    variables = {
        'name': name, 'slug': slug, 'products': product_ids,
        'backgroundImage': image_name, 'isPublished': True}
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = admin_api_client.post_multipart(reverse('api'), body)
    content = get_graphql_content(response)
    assert 'errors' not in content
    data = content['data']['collectionCreate']['collection']
    assert data['name'] == name
    assert data['slug'] == slug
    assert data['products']['totalCount'] == len(product_ids)
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image.file
Example #4
0
def test_create_collection(admin_api_client, product_list):
    query = """
        mutation createCollection(
            $name: String!, $slug: String!, $products: [ID], $backgroundImage: Upload!, $isPublished: Boolean!) {
            collectionCreate(
                input: {name: $name, slug: $slug, products: $products, backgroundImage: $backgroundImage, isPublished: $isPublished}) {
                collection {
                    name
                    slug
                    products {
                        totalCount
                    }
                }
            }
        }
    """
    product_ids = [
        to_global_id('Product', product.pk) for product in product_list]
    image_file, image_name = create_image()
    name = 'test-name'
    slug = 'test-slug'
    variables = {
        'name': name, 'slug': slug, 'products': product_ids,
        'backgroundImage': image_name, 'isPublished': True}
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = admin_api_client.post_multipart(reverse('api'), body)
    content = get_graphql_content(response)
    assert 'errors' not in content
    data = content['data']['collectionCreate']['collection']
    assert data['name'] == name
    assert data['slug'] == slug
    assert data['products']['totalCount'] == len(product_ids)
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image.file
def test_digital_content_create_mutation_default_settings(
        monkeypatch, staff_api_client, variant, permission_manage_products):
    query = """
    mutation digitalCreate($variant: ID!, 
        $input: DigitalContentUploadInput!) {
        digitalContentCreate(variantId: $variant, input: $input) {
            variant {
                id
            }
        }
    }
    """

    image_file, image_name = create_image()

    variables = {
        'variant': graphene.Node.to_global_id('ProductVariant', variant.id),
        'input': {
            'useDefaultSettings': True,
            'contentFile': image_name
        }
    }

    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    get_graphql_content(response)
    variant.refresh_from_db()
    assert variant.digital_content.content_file
    assert variant.digital_content.use_default_settings
Example #6
0
def test_product_image_create_mutation(monkeypatch, staff_api_client, product,
                                       permission_manage_products):
    query = """
    mutation createProductImage($image: Upload!, $product: ID!) {
        productImageCreate(input: {image: $image, product: $product}) {
            image {
                id
            }
        }
    }
    """

    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(('saleor.graphql.product.mutations.products.'
                         'create_product_thumbnails.delay'),
                        mock_create_thumbnails)

    image_file, image_name = create_image()
    variables = {
        'product': graphene.Node.to_global_id('Product', product.id),
        'image': image_name
    }
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    get_graphql_content(response)
    product.refresh_from_db()
    product_image = product.images.last()
    assert product_image.image.file

    # The image creation should have triggered a warm-up
    mock_create_thumbnails.assert_called_once_with(product_image.pk)
def test_digital_content_create_mutation_removes_old_content(
        monkeypatch, staff_api_client, variant, permission_manage_products):
    query = """
    mutation digitalCreate($variant: ID!, 
        $input: DigitalContentUploadInput!) {
        digitalContentCreate(variantId: $variant, input: $input) {
            variant {
                id
            }
        }
    }
    """

    image_file, image_name = create_image()

    d_content = DigitalContent.objects.create(
        content_file=image_file, product_variant=variant,
        use_default_settings=True)

    variables = {
        'variant': graphene.Node.to_global_id('ProductVariant', variant.id),
        'input': {
            'useDefaultSettings': True,
            'contentFile': image_name
        }
    }

    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    get_graphql_content(response)
    variant.refresh_from_db()
    assert variant.digital_content.content_file
    assert variant.digital_content.use_default_settings
    assert not DigitalContent.objects.filter(id=d_content.id).exists()
Example #8
0
def test_delete_image(client):
    user = f.create_user(email='*****@*****.**', password='******')
    client.login(user=user)

    url = reverse('posts-list')
    post = {
        'text': 'Announcement!',
        'posted_at': 'fb',
        'scheduled_time': '2018-10-09T18:30:00Z'
    }
    response = client.json.post(url, json.dumps(post))

    assert response.status_code == 201
    post_id = response.data['id']

    # Delete image before uploading
    url = reverse('posts-delete-image', kwargs={'pk': post_id})
    response = client.post(url)
    assert response.status_code == 400

    image = u.create_image(None, 'avatar.png')
    image = SimpleUploadedFile('front.png', image.getvalue())
    url = reverse('posts-upload-image', kwargs={'pk': post_id})
    response = client.post(url, {'image': image}, format='multipart')
    assert response.status_code == 200
    assert response.data["image"] is not None

    url = reverse('posts-delete-image', kwargs={'pk': post_id})
    response = client.post(url)
    assert response.status_code == 200
    assert response.data["image"] is None
Example #9
0
def test_product_image_create_mutation(admin_api_client, product):
    query = """
    mutation createProductImage($image: Upload!, $product: ID!) {
        productImageCreate(input: {image: $image, product: $product}) {
            productImage {
                id
                image
                url
                sortOrder
            }
        }
    }
    """
    image_file, image_name = create_image()
    variables = {
        'product': graphene.Node.to_global_id('Product', product.id),
        'image': image_name
    }
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = admin_api_client.post_multipart(reverse('api'), body)
    content = get_graphql_content(response)
    assert 'errors' not in content
    data = content['data']['productImageCreate']
    file_name = data['productImage']['image']
    product.refresh_from_db()
    assert product.images.first().image.file
    assert product.images.first().image.name == file_name
Example #10
0
def test_update_collection_with_background_image(
        monkeypatch, staff_api_client, collection, permission_manage_products):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ('saleor.dashboard.collection.forms.'
         'create_collection_background_image_thumbnails.delay'),
        mock_create_thumbnails)

    image_file, image_name = create_image()
    image_alt = 'Alt text for an image.'
    variables = {
        'name': 'new-name',
        'slug': 'new-slug',
        'id': to_global_id('Collection', collection.id),
        'backgroundImage': image_name,
        'backgroundImageAlt': image_alt,
        'isPublished': True}
    body = get_multipart_request_body(
        MUTATION_UPDATE_COLLECTION_WITH_BACKGROUND_IMAGE, variables,
        image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content['data']['collectionUpdate']
    assert not data['errors']
    slug = data['collection']['slug']
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image
    mock_create_thumbnails.assert_called_once_with(collection.pk)
    assert data['collection']['backgroundImage']['alt'] == image_alt
Example #11
0
def test_category_image_query(user_api_client, non_default_category):
    category = non_default_category
    image_file, image_name = create_image()
    category.background_image = image_file
    category.save()
    category_id = graphene.Node.to_global_id('Category', category.pk)
    query = """
        query fetchCategory($id: ID!){
            category(id: $id) {
                backgroundImage {
                   url(size: 120)
                }
            }
        }
    """
    variables = json.dumps({'id': category_id})
    response = user_api_client.post(reverse('api'), {
        'query': query,
        'variables': variables
    })
    content = get_graphql_content(response)
    assert 'errors' not in content
    data = content['data']['category']
    thumbnail_url = category.background_image.thumbnail['120x120'].url
    assert data['backgroundImage']['url'] == thumbnail_url
Example #12
0
def test_digital_content_create_mutation_default_settings(
        monkeypatch, staff_api_client, variant, permission_manage_products,
        media_root):
    query = """
    mutation digitalCreate($variant: ID!,
        $input: DigitalContentUploadInput!) {
        digitalContentCreate(variantId: $variant, input: $input) {
            variant {
                id
            }
        }
    }
    """

    image_file, image_name = create_image()

    variables = {
        "variant": graphene.Node.to_global_id("ProductVariant", variant.id),
        "input": {
            "useDefaultSettings": True,
            "contentFile": image_name
        },
    }

    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    get_graphql_content(response)
    variant.refresh_from_db()
    assert variant.digital_content.content_file
    assert variant.digital_content.use_default_settings
Example #13
0
def test_fulfill_digital_lines(
    mock_digital_settings, mock_email_fulfillment, order_with_lines, media_root
):
    mock_digital_settings.return_value = {"automatic_fulfillment": True}
    line = order_with_lines.lines.all()[0]

    image_file, image_name = create_image()
    variant = line.variant
    digital_content = DigitalContent.objects.create(
        content_file=image_file, product_variant=variant, use_default_settings=True
    )

    line.variant.digital_content = digital_content
    line.is_shipping_required = False
    line.save()

    order_with_lines.refresh_from_db()
    automatically_fulfill_digital_lines(order_with_lines)
    line.refresh_from_db()
    fulfillment = Fulfillment.objects.get(order=order_with_lines)
    fulfillment_lines = fulfillment.lines.all()

    assert fulfillment_lines.count() == 1
    assert line.digital_content_url
    assert mock_email_fulfillment.delay.called
Example #14
0
def test_fulfill_digital_lines(
    mock_digital_settings, mock_email_fulfillment, order_with_lines, media_root
):
    mock_digital_settings.return_value = {"automatic_fulfillment": True}
    line = order_with_lines.lines.all()[0]

    image_file, image_name = create_image()
    variant = line.variant
    digital_content = DigitalContent.objects.create(
        content_file=image_file, product_variant=variant, use_default_settings=True
    )

    line.variant.digital_content = digital_content
    line.is_shipping_required = False
    line.save()

    order_with_lines.refresh_from_db()
    automatically_fulfill_digital_lines(order_with_lines)
    line.refresh_from_db()
    fulfillment = Fulfillment.objects.get(order=order_with_lines)
    fulfillment_lines = fulfillment.lines.all()

    assert fulfillment_lines.count() == 1
    assert line.digital_content_url
    assert mock_email_fulfillment.delay.called
Example #15
0
def test_update_collection_with_background_image(
        monkeypatch, staff_api_client, collection, permission_manage_products,
        media_root):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ('saleor.dashboard.collection.forms.'
         'create_collection_background_image_thumbnails.delay'),
        mock_create_thumbnails)

    image_file, image_name = create_image()
    image_alt = 'Alt text for an image.'
    variables = {
        'name': 'new-name',
        'slug': 'new-slug',
        'id': to_global_id('Collection', collection.id),
        'backgroundImage': image_name,
        'backgroundImageAlt': image_alt,
        'isPublished': True}
    body = get_multipart_request_body(
        MUTATION_UPDATE_COLLECTION_WITH_BACKGROUND_IMAGE, variables,
        image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content['data']['collectionUpdate']
    assert not data['errors']
    slug = data['collection']['slug']
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image
    mock_create_thumbnails.assert_called_once_with(collection.pk)
    assert data['collection']['backgroundImage']['alt'] == image_alt
Example #16
0
def test_category_update_mutation(staff_api_client, category,
                                  permission_manage_products):
    query = """
        mutation($id: ID!, $name: String, $slug: String, $backgroundImage: Upload, $description: String) {
            categoryUpdate(
                id: $id
                input: {
                    name: $name
                    description: $description
                    backgroundImage: $backgroundImage
                    slug: $slug
                }
            ) {
                category {
                    id
                    name
                    description
                    parent {
                        id
                    }
                }
                errors {
                    field
                    message
                }
            }
        }
    """
    # create child category and test that the update mutation won't change
    # it's parent
    child_category = category.children.create(name='child')

    category_name = 'Updated name'
    category_slug = slugify(category_name)
    category_description = 'Updated description'
    image_file, image_name = create_image()

    category_id = graphene.Node.to_global_id('Category', child_category.pk)
    variables = {
        'name': category_name,
        'description': category_description,
        'backgroundImage': image_name,
        'id': category_id,
        'slug': category_slug
    }
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content['data']['categoryUpdate']
    assert data['errors'] == []
    assert data['category']['id'] == category_id
    assert data['category']['name'] == category_name
    assert data['category']['description'] == category_description

    parent_id = graphene.Node.to_global_id('Category', category.pk)
    assert data['category']['parent']['id'] == parent_id
    category = Category.objects.get(name=category_name)
    assert category.background_image.file
def test_create_collection(monkeypatch, staff_api_client, product_list,
                           permission_manage_products):
    query = """
        mutation createCollection(
            $name: String!, $slug: String!, $description: String, $products: [ID], $backgroundImage: Upload!, $backgroundImageAlt: String, $isPublished: Boolean!) {
            collectionCreate(
                input: {name: $name, slug: $slug, description: $description, products: $products, backgroundImage: $backgroundImage, backgroundImageAlt: $backgroundImageAlt, isPublished: $isPublished}) {
                collection {
                    name
                    slug
                    description
                    products {
                        totalCount
                    }
                    backgroundImage{
                        alt
                    }
                }
            }
        }
    """

    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ('saleor.dashboard.collection.forms.'
         'create_collection_background_image_thumbnails.delay'),
        mock_create_thumbnails)

    product_ids = [
        to_global_id('Product', product.pk) for product in product_list
    ]
    image_file, image_name = create_image()
    image_alt = 'Alt text for an image.'
    name = 'test-name'
    slug = 'test-slug'
    description = 'test-description'
    variables = {
        'name': name,
        'slug': slug,
        'description': description,
        'products': product_ids,
        'backgroundImage': image_name,
        'backgroundImageAlt': image_alt,
        'isPublished': True
    }
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content['data']['collectionCreate']['collection']
    assert data['name'] == name
    assert data['slug'] == slug
    assert data['description'] == description
    assert data['products']['totalCount'] == len(product_ids)
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image.file
    mock_create_thumbnails.assert_called_once_with(collection.pk)
    assert data['backgroundImage']['alt'] == image_alt
Example #18
0
def test_warmer(product_in_stock, product_type):
    Category.objects.create(name='b', slug='b')
    category = Category.objects.create(name='c', slug='c', image=create_image()[0])
    product = Product.objects.create(name='b', price=Decimal('1.00'), product_type=product_type, category=category)

    product_warmer = ProductWarmer.all()
    category_warmer = CategoryWarmer.all()

    assert category_warmer._wrapper.query_set.count() == 3
    assert product_warmer._wrapper.query_set.count() == 0

    assert category_warmer() == 1 * len(CATEGORY_IMAGE_SETS)
    assert product_warmer() == 0

    for i in range(1, 3):
        ProductImage.objects.create(product=product, image=create_image()[0])
        assert ProductWarmer.all()._wrapper.query_set.count() == i
        assert ProductWarmer.all()() == len(PRODUCT_IMAGE_SETS)
def test_update_collection_with_background_image(monkeypatch, staff_api_client,
                                                 collection,
                                                 permission_manage_products):
    query = """
        mutation updateCollection(
            $name: String!, $slug: String!, $id: ID!, $backgroundImage: Upload, $backgroundImageAlt: String, $isPublished: Boolean!) {
            collectionUpdate(
                id: $id, input: {
                    name: $name,
                    slug: $slug,
                    backgroundImage: $backgroundImage,
                    backgroundImageAlt: $backgroundImageAlt,
                    isPublished: $isPublished
                }
            ) {
                collection {
                    slug
                    backgroundImage{
                        alt
                    }
                }
                errors {
                    field
                    message
                }
            }
        }
    """

    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ('saleor.dashboard.collection.forms.'
         'create_collection_background_image_thumbnails.delay'),
        mock_create_thumbnails)

    image_file, image_name = create_image()
    image_alt = 'Alt text for an image.'
    variables = {
        'name': 'new-name',
        'slug': 'new-slug',
        'id': to_global_id('Collection', collection.id),
        'backgroundImage': image_name,
        'backgroundImageAlt': image_alt,
        'isPublished': True
    }
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content['data']['collectionUpdate']
    assert not data['errors']
    slug = data['collection']['slug']
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image
    mock_create_thumbnails.assert_called_once_with(collection.pk)
    assert data['collection']['backgroundImage']['alt'] == image_alt
Example #20
0
def test_category_image_query(user_api_client, non_default_category):
    category = non_default_category
    image_file, image_name = create_image()
    category.background_image = image_file
    category.save()
    category_id = graphene.Node.to_global_id('Category', category.pk)
    variables = {'id': category_id}
    response = user_api_client.post_graphql(FETCH_CATEGORY_QUERY, variables)
    content = get_graphql_content(response)
    data = content['data']['category']
    thumbnail_url = category.background_image.thumbnail['120x120'].url
    assert thumbnail_url in data['backgroundImage']['url']
Example #21
0
def test_collection_image_query(user_api_client, collection):
    alt_text = 'Alt text for an image.'
    image_file, image_name = create_image()
    collection.background_image = image_file
    collection.background_image_alt = alt_text
    collection.save()
    collection_id = graphene.Node.to_global_id('Collection', collection.pk)
    variables = {'id': collection_id}
    response = user_api_client.post_graphql(FETCH_COLLECTION_QUERY, variables)
    content = get_graphql_content(response)
    data = content['data']['collection']
    thumbnail_url = collection.background_image.thumbnail['120x120'].url
    assert thumbnail_url in data['backgroundImage']['url']
    assert data['backgroundImage']['alt'] == alt_text
Example #22
0
def test_collection_image_query(user_api_client, collection, media_root):
    alt_text = 'Alt text for an image.'
    image_file, image_name = create_image()
    collection.background_image = image_file
    collection.background_image_alt = alt_text
    collection.save()
    collection_id = graphene.Node.to_global_id('Collection', collection.pk)
    variables = {'id': collection_id}
    response = user_api_client.post_graphql(FETCH_COLLECTION_QUERY, variables)
    content = get_graphql_content(response)
    data = content['data']['collection']
    thumbnail_url = collection.background_image.thumbnail['120x120'].url
    assert thumbnail_url in data['backgroundImage']['url']
    assert data['backgroundImage']['alt'] == alt_text
Example #23
0
def test_collection_image_query(user_api_client, collection, media_root):
    alt_text = "Alt text for an image."
    image_file, image_name = create_image()
    collection.background_image = image_file
    collection.background_image_alt = alt_text
    collection.save()
    collection_id = graphene.Node.to_global_id("Collection", collection.pk)
    variables = {"id": collection_id}
    response = user_api_client.post_graphql(FETCH_COLLECTION_QUERY, variables)
    content = get_graphql_content(response)
    data = content["data"]["collection"]
    thumbnail_url = collection.background_image.thumbnail["120x120"].url
    assert thumbnail_url in data["backgroundImage"]["url"]
    assert data["backgroundImage"]["alt"] == alt_text
Example #24
0
def test_collection_image_query(user_api_client, collection, media_root):
    alt_text = "Alt text for an image."
    image_file, image_name = create_image()
    collection.background_image = image_file
    collection.background_image_alt = alt_text
    collection.save()
    collection_id = graphene.Node.to_global_id("Collection", collection.pk)
    variables = {"id": collection_id}
    response = user_api_client.post_graphql(FETCH_COLLECTION_QUERY, variables)
    content = get_graphql_content(response)
    data = content["data"]["collection"]
    thumbnail_url = collection.background_image.thumbnail["120x120"].url
    assert thumbnail_url in data["backgroundImage"]["url"]
    assert data["backgroundImage"]["alt"] == alt_text
def test_category_update_mutation(
    monkeypatch, staff_api_client, category, permission_manage_products, media_root
):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        (
            "saleor.product.thumbnails."
            "create_category_background_image_thumbnails.delay"
        ),
        mock_create_thumbnails,
    )

    # create child category and test that the update mutation won't change
    # it's parent
    child_category = category.children.create(name="child")

    category_name = "Updated name"
    category_slug = slugify(category_name)
    category_description = "Updated description"
    image_file, image_name = create_image()
    image_alt = "Alt text for an image."

    category_id = graphene.Node.to_global_id("Category", child_category.pk)
    variables = {
        "name": category_name,
        "description": category_description,
        "backgroundImage": image_name,
        "backgroundImageAlt": image_alt,
        "id": category_id,
        "slug": category_slug,
    }
    body = get_multipart_request_body(
        MUTATION_CATEGORY_UPDATE_MUTATION, variables, image_file, image_name
    )
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products]
    )
    content = get_graphql_content(response)
    data = content["data"]["categoryUpdate"]
    assert data["errors"] == []
    assert data["category"]["id"] == category_id
    assert data["category"]["name"] == category_name
    assert data["category"]["description"] == category_description

    parent_id = graphene.Node.to_global_id("Category", category.pk)
    assert data["category"]["parent"]["id"] == parent_id
    category = Category.objects.get(name=category_name)
    assert category.background_image.file
    mock_create_thumbnails.assert_called_once_with(category.pk)
    assert data["category"]["backgroundImage"]["alt"] == image_alt
Example #26
0
def test_category_update_mutation(
    monkeypatch, staff_api_client, category, permission_manage_products, media_root
):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        (
            "saleor.dashboard.category.forms."
            "create_category_background_image_thumbnails.delay"
        ),
        mock_create_thumbnails,
    )

    # create child category and test that the update mutation won't change
    # it's parent
    child_category = category.children.create(name="child")

    category_name = "Updated name"
    category_slug = slugify(category_name)
    category_description = "Updated description"
    image_file, image_name = create_image()
    image_alt = "Alt text for an image."

    category_id = graphene.Node.to_global_id("Category", child_category.pk)
    variables = {
        "name": category_name,
        "description": category_description,
        "backgroundImage": image_name,
        "backgroundImageAlt": image_alt,
        "id": category_id,
        "slug": category_slug,
    }
    body = get_multipart_request_body(
        MUTATION_CATEGORY_UPDATE_MUTATION, variables, image_file, image_name
    )
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products]
    )
    content = get_graphql_content(response)
    data = content["data"]["categoryUpdate"]
    assert data["errors"] == []
    assert data["category"]["id"] == category_id
    assert data["category"]["name"] == category_name
    assert data["category"]["description"] == category_description

    parent_id = graphene.Node.to_global_id("Category", category.pk)
    assert data["category"]["parent"]["id"] == parent_id
    category = Category.objects.get(name=category_name)
    assert category.background_image.file
    mock_create_thumbnails.assert_called_once_with(category.pk)
    assert data["category"]["backgroundImage"]["alt"] == image_alt
def test_category_image_query(user_api_client, non_default_category, media_root):
    alt_text = "Alt text for an image."
    category = non_default_category
    image_file, image_name = create_image()
    category.background_image = image_file
    category.background_image_alt = alt_text
    category.save()
    category_id = graphene.Node.to_global_id("Category", category.pk)
    variables = {"id": category_id}
    response = user_api_client.post_graphql(FETCH_CATEGORY_QUERY, variables)
    content = get_graphql_content(response)
    data = content["data"]["category"]
    thumbnail_url = category.background_image.thumbnail["120x120"].url
    assert thumbnail_url in data["backgroundImage"]["url"]
    assert data["backgroundImage"]["alt"] == alt_text
Example #28
0
def test_category_image_query(user_api_client, non_default_category, media_root):
    alt_text = "Alt text for an image."
    category = non_default_category
    image_file, image_name = create_image()
    category.background_image = image_file
    category.background_image_alt = alt_text
    category.save()
    category_id = graphene.Node.to_global_id("Category", category.pk)
    variables = {"id": category_id}
    response = user_api_client.post_graphql(FETCH_CATEGORY_QUERY, variables)
    content = get_graphql_content(response)
    data = content["data"]["category"]
    thumbnail_url = category.background_image.thumbnail["120x120"].url
    assert thumbnail_url in data["backgroundImage"]["url"]
    assert data["backgroundImage"]["alt"] == alt_text
Example #29
0
def test_category_image_query(user_api_client, non_default_category):
    alt_text = 'Alt text for an image.'
    category = non_default_category
    image_file, image_name = create_image()
    category.background_image = image_file
    category.background_image_alt = alt_text
    category.save()
    category_id = graphene.Node.to_global_id('Category', category.pk)
    variables = {'id': category_id}
    response = user_api_client.post_graphql(FETCH_CATEGORY_QUERY, variables)
    content = get_graphql_content(response)
    data = content['data']['category']
    thumbnail_url = category.background_image.thumbnail['120x120'].url
    assert thumbnail_url in data['backgroundImage']['url']
    assert data['backgroundImage']['alt'] == alt_text
Example #30
0
def test_category_add_with_background_image(monkeypatch, admin_client):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ('saleor.dashboard.category.forms.'
         'create_category_background_image_thumbnails.delay'),
        mock_create_thumbnails)

    url = reverse('dashboard:category-add')
    image, image_name = create_image()
    data = {
        'name': 'Cars',
        'description': 'Super fast!',
        'background_image': image}
    response = admin_client.post(url, data, follow=True)
    assert response.status_code == 200

    mock_create_thumbnails.assert_called_once_with(Category.objects.last().pk)
Example #31
0
def test_category_add_with_background_image(monkeypatch, admin_client, media_root):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        (
            "saleor.dashboard.category.forms."
            "create_category_background_image_thumbnails.delay"
        ),
        mock_create_thumbnails,
    )

    url = reverse("dashboard:category-add")
    image, image_name = create_image()
    data = {"name": "Cars", "description": "Super fast!", "background_image": image}
    response = admin_client.post(url, data, follow=True)
    assert response.status_code == 200

    mock_create_thumbnails.assert_called_once_with(Category.objects.last().pk)
def test_category_add_with_background_image(monkeypatch, admin_client):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(('remote_works.dashboard.category.forms.'
                         'create_category_background_image_thumbnails.delay'),
                        mock_create_thumbnails)

    url = reverse('dashboard:category-add')
    image, image_name = create_image()
    data = {
        'name': 'Cars',
        'description': 'Super fast!',
        'background_image': image
    }
    response = admin_client.post(url, data, follow=True)
    assert response.status_code == 200

    mock_create_thumbnails.assert_called_once_with(Category.objects.last().pk)
Example #33
0
def digital_content(category):
    product_type = ProductType.objects.create(
        name='Digital Type', has_variants=True, is_shipping_required=False,
        is_digital=True
    )
    product = Product.objects.create(
        name='Test digital product', price=Money('10.00', 'USD'),
        product_type=product_type, category=category)
    product_variant = ProductVariant.objects.create(
        product=product, sku='SKU_554', cost_price=Money(1, 'USD'), quantity=5,
        quantity_allocated=3)

    image_file, image_name = create_image()
    d_content = DigitalContent.objects.create(
        content_file=image_file, product_variant=product_variant,
        use_default_settings=True)
    return d_content
Example #34
0
def test_category_update_mutation(monkeypatch, staff_api_client, category,
                                  permission_manage_products):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(('saleor.dashboard.category.forms.'
                         'create_category_background_image_thumbnails.delay'),
                        mock_create_thumbnails)

    # create child category and test that the update mutation won't change
    # it's parent
    child_category = category.children.create(name='child')

    category_name = 'Updated name'
    category_slug = slugify(category_name)
    category_description = 'Updated description'
    image_file, image_name = create_image()
    image_alt = 'Alt text for an image.'

    category_id = graphene.Node.to_global_id('Category', child_category.pk)
    variables = {
        'name': category_name,
        'description': category_description,
        'backgroundImage': image_name,
        'backgroundImageAlt': image_alt,
        'id': category_id,
        'slug': category_slug
    }
    body = get_multipart_request_body(MUTATION_CATEGORY_UPDATE_MUTATION,
                                      variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content['data']['categoryUpdate']
    assert data['errors'] == []
    assert data['category']['id'] == category_id
    assert data['category']['name'] == category_name
    assert data['category']['description'] == category_description

    parent_id = graphene.Node.to_global_id('Category', category.pk)
    assert data['category']['parent']['id'] == parent_id
    category = Category.objects.get(name=category_name)
    assert category.background_image.file
    mock_create_thumbnails.assert_called_once_with(category.pk)
    assert data['category']['backgroundImage']['alt'] == image_alt
Example #35
0
def digital_content(category, media_root):
    product_type = ProductType.objects.create(
        name='Digital Type', has_variants=True, is_shipping_required=False,
        is_digital=True
    )
    product = Product.objects.create(
        name='Test digital product', price=Money('10.00', 'USD'),
        product_type=product_type, category=category)
    product_variant = ProductVariant.objects.create(
        product=product, sku='SKU_554', cost_price=Money(1, 'USD'), quantity=5,
        quantity_allocated=3)

    assert product_variant.is_digital()

    image_file, image_name = create_image()
    d_content = DigitalContent.objects.create(
        content_file=image_file, product_variant=product_variant,
        use_default_settings=True)
    return d_content
Example #36
0
def test_category_edit_with_background_image(
        monkeypatch, admin_client, category):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ('saleor.dashboard.category.forms.'
         'create_category_background_image_thumbnails.delay'),
        mock_create_thumbnails)

    url = reverse('dashboard:category-edit', kwargs={'root_pk': category.pk})
    image, image_name = create_image()
    data = {
        'name': 'Cars',
        'description': 'Super fast!',
        'background_image': image}
    response = admin_client.post(url, data, follow=True)
    assert response.status_code == 200

    category.refresh_from_db()
    assert category.background_image
    mock_create_thumbnails.assert_called_once_with(category.pk)
def test_category_add_with_background_image(monkeypatch, admin_client,
                                            media_root):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ("saleor.dashboard.category.forms."
         "create_category_background_image_thumbnails.delay"),
        mock_create_thumbnails,
    )

    url = reverse("dashboard:category-add")
    image, image_name = create_image()
    data = {
        "name": "Cars",
        "description": "Super fast!",
        "background_image": image
    }
    response = admin_client.post(url, data, follow=True)
    assert response.status_code == 200

    mock_create_thumbnails.assert_called_once_with(Category.objects.last().pk)
Example #38
0
def test_collection_image_query(user_api_client, collection):
    image_file, image_name = create_image()
    collection.background_image = image_file
    collection.save()
    collection_id = graphene.Node.to_global_id('Collection', collection.pk)
    query = """
        query fetchCollection($id: ID!){
            collection(id: $id) {
                backgroundImage {
                   url(size: 120)
                }
            }
        }
    """
    variables = {'id': collection_id}
    response = user_api_client.post_graphql(query, variables)
    content = get_graphql_content(response)
    data = content['data']['collection']
    thumbnail_url = collection.background_image.thumbnail['120x120'].url
    assert data['backgroundImage']['url'] == thumbnail_url
def test_category_edit_with_background_image(monkeypatch, admin_client,
                                             category):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(('remote_works.dashboard.category.forms.'
                         'create_category_background_image_thumbnails.delay'),
                        mock_create_thumbnails)

    url = reverse('dashboard:category-edit', kwargs={'root_pk': category.pk})
    image, image_name = create_image()
    data = {
        'name': 'Cars',
        'description': 'Super fast!',
        'background_image': image
    }
    response = admin_client.post(url, data, follow=True)
    assert response.status_code == 200

    category.refresh_from_db()
    assert category.background_image
    mock_create_thumbnails.assert_called_once_with(category.pk)
Example #40
0
def test_category_edit_with_background_image(
    monkeypatch, admin_client, category, media_root
):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        (
            "saleor.dashboard.category.forms."
            "create_category_background_image_thumbnails.delay"
        ),
        mock_create_thumbnails,
    )

    url = reverse("dashboard:category-edit", kwargs={"root_pk": category.pk})
    image, image_name = create_image()
    data = {"name": "Cars", "description": "Super fast!", "background_image": image}
    response = admin_client.post(url, data, follow=True)
    assert response.status_code == 200

    category.refresh_from_db()
    assert category.background_image
    mock_create_thumbnails.assert_called_once_with(category.pk)
Example #41
0
def test_category_update_mutation(
        monkeypatch, staff_api_client, category, permission_manage_products):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ('saleor.dashboard.category.forms.'
         'create_category_background_image_thumbnails.delay'),
        mock_create_thumbnails)

    # create child category and test that the update mutation won't change
    # it's parent
    child_category = category.children.create(name='child')

    category_name = 'Updated name'
    category_slug = slugify(category_name)
    category_description = 'Updated description'
    image_file, image_name = create_image()
    image_alt = 'Alt text for an image.'

    category_id = graphene.Node.to_global_id('Category', child_category.pk)
    variables = {
        'name': category_name, 'description': category_description,
        'backgroundImage': image_name, 'backgroundImageAlt': image_alt,
        'id': category_id, 'slug': category_slug}
    body = get_multipart_request_body(
        MUTATION_CATEGORY_UPDATE_MUTATION, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content['data']['categoryUpdate']
    assert data['errors'] == []
    assert data['category']['id'] == category_id
    assert data['category']['name'] == category_name
    assert data['category']['description'] == category_description

    parent_id = graphene.Node.to_global_id('Category', category.pk)
    assert data['category']['parent']['id'] == parent_id
    category = Category.objects.get(name=category_name)
    assert category.background_image.file
    mock_create_thumbnails.assert_called_once_with(category.pk)
    assert data['category']['backgroundImage']['alt'] == image_alt
Example #42
0
def test_collection_image_query(user_api_client, collection):
    image_file, image_name = create_image()
    collection.background_image = image_file
    collection.save()
    collection_id = graphene.Node.to_global_id('Collection', collection.pk)
    query = """
        query fetchCollection($id: ID!){
            collection(id: $id) {
                backgroundImage {
                   url(size: 120)
                }
            }
        }
    """
    variables = json.dumps({'id': collection_id})
    response = user_api_client.post(
        reverse('api'), {'query': query, 'variables': variables})
    content = get_graphql_content(response)
    assert 'errors' not in content
    data = content['data']['collection']
    thumbnail_url = collection.background_image.thumbnail['120x120'].url
    assert data['backgroundImage']['url'] == thumbnail_url
def test_update_collection_with_background_image(
    monkeypatch, staff_api_client, collection, permission_manage_products, media_root
):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        (
            "saleor.dashboard.collection.forms."
            "create_collection_background_image_thumbnails.delay"
        ),
        mock_create_thumbnails,
    )

    image_file, image_name = create_image()
    image_alt = "Alt text for an image."
    variables = {
        "name": "new-name",
        "slug": "new-slug",
        "id": to_global_id("Collection", collection.id),
        "backgroundImage": image_name,
        "backgroundImageAlt": image_alt,
        "isPublished": True,
    }
    body = get_multipart_request_body(
        MUTATION_UPDATE_COLLECTION_WITH_BACKGROUND_IMAGE,
        variables,
        image_file,
        image_name,
    )
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products]
    )
    content = get_graphql_content(response)
    data = content["data"]["collectionUpdate"]
    assert not data["errors"]
    slug = data["collection"]["slug"]
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image
    mock_create_thumbnails.assert_called_once_with(collection.pk)
    assert data["collection"]["backgroundImage"]["alt"] == image_alt
Example #44
0
def test_digital_content_create_mutation_custom_settings(
        monkeypatch, staff_api_client, variant, permission_manage_products,
        media_root):
    query = """
    mutation createDigitalContent($variant: ID!,
        $input: DigitalContentUploadInput!) {
        digitalContentCreate(variantId: $variant, input: $input) {
            variant {
                id
            }
        }
    }
    """

    image_file, image_name = create_image()
    url_valid_days = 3
    max_downloads = 5

    variables = {
        "variant": graphene.Node.to_global_id("ProductVariant", variant.id),
        "input": {
            "useDefaultSettings": False,
            "maxDownloads": max_downloads,
            "urlValidDays": url_valid_days,
            "automaticFulfillment": True,
            "contentFile": image_name,
        },
    }

    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    get_graphql_content(response)
    variant.refresh_from_db()
    assert variant.digital_content.content_file
    assert variant.digital_content.max_downloads == max_downloads
    assert variant.digital_content.url_valid_days == url_valid_days
    assert variant.digital_content.automatic_fulfillment
    assert not variant.digital_content.use_default_settings
def test_category_edit_with_background_image(monkeypatch, admin_client,
                                             category, media_root):
    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ("saleor.dashboard.category.forms."
         "create_category_background_image_thumbnails.delay"),
        mock_create_thumbnails,
    )

    url = reverse("dashboard:category-edit", kwargs={"root_pk": category.pk})
    image, image_name = create_image()
    data = {
        "name": "Cars",
        "description": "Super fast!",
        "background_image": image
    }
    response = admin_client.post(url, data, follow=True)
    assert response.status_code == 200

    category.refresh_from_db()
    assert category.background_image
    mock_create_thumbnails.assert_called_once_with(category.pk)
Example #46
0
def test_product_image_create_mutation(staff_api_client, product,
                                       permission_manage_products):
    query = """
    mutation createProductImage($image: Upload!, $product: ID!) {
        productImageCreate(input: {image: $image, product: $product}) {
            image {
                id
            }
        }
    }
    """
    image_file, image_name = create_image()
    variables = {
        'product': graphene.Node.to_global_id('Product', product.id),
        'image': image_name
    }
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    product.refresh_from_db()
    assert product.images.first().image.file
def test_digital_content_create_mutation_custom_settings(
        monkeypatch, staff_api_client, variant, permission_manage_products):
    query = """
    mutation createDigitalContent($variant: ID!, 
        $input: DigitalContentUploadInput!) {
        digitalContentCreate(variantId: $variant, input: $input) {
            variant {
                id  
            }
        }
    }
    """

    image_file, image_name = create_image()
    url_valid_days = 3
    max_downloads = 5

    variables = {
        'variant': graphene.Node.to_global_id('ProductVariant', variant.id),
        'input': {
            'useDefaultSettings': False,
            'maxDownloads': max_downloads,
            'urlValidDays': url_valid_days,
            'automaticFulfillment': True,
            'contentFile': image_name
        }
    }

    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    get_graphql_content(response)
    variant.refresh_from_db()
    assert variant.digital_content.content_file
    assert variant.digital_content.max_downloads == max_downloads
    assert variant.digital_content.url_valid_days == url_valid_days
    assert variant.digital_content.automatic_fulfillment
    assert not variant.digital_content.use_default_settings
Example #48
0
def test_create_collection(monkeypatch, staff_api_client, product_list,
                           media_root, permission_manage_products):
    query = """
        mutation createCollection(
                $name: String!, $slug: String!, $description: String,
                $descriptionJson: JSONString, $products: [ID],
                $backgroundImage: Upload!, $backgroundImageAlt: String,
                $isPublished: Boolean!, $publicationDate: Date) {
            collectionCreate(
                input: {
                    name: $name,
                    slug: $slug,
                    description: $description,
                    descriptionJson: $descriptionJson,
                    products: $products,
                    backgroundImage: $backgroundImage,
                    backgroundImageAlt: $backgroundImageAlt,
                    isPublished: $isPublished,
                    publicationDate: $publicationDate}) {
                collection {
                    name
                    slug
                    description
                    descriptionJson
                    products {
                        totalCount
                    }
                    publicationDate
                    backgroundImage{
                        alt
                    }
                }
            }
        }
    """

    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ("saleor.dashboard.collection.forms."
         "create_collection_background_image_thumbnails.delay"),
        mock_create_thumbnails,
    )

    product_ids = [
        to_global_id("Product", product.pk) for product in product_list
    ]
    image_file, image_name = create_image()
    image_alt = "Alt text for an image."
    name = "test-name"
    slug = "test-slug"
    description = "test-description"
    description_json = json.dumps({"content": "description"})
    publication_date = date.today()
    variables = {
        "name": name,
        "slug": slug,
        "description": description,
        "descriptionJson": description_json,
        "products": product_ids,
        "backgroundImage": image_name,
        "backgroundImageAlt": image_alt,
        "isPublished": True,
        "publicationDate": publication_date,
    }
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content["data"]["collectionCreate"]["collection"]
    assert data["name"] == name
    assert data["slug"] == slug
    assert data["description"] == description
    assert data["descriptionJson"] == description_json
    assert data["publicationDate"] == publication_date.isoformat()
    assert data["products"]["totalCount"] == len(product_ids)
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image.file
    mock_create_thumbnails.assert_called_once_with(collection.pk)
    assert data["backgroundImage"]["alt"] == image_alt
Example #49
0
def test_category_create_mutation(
        monkeypatch, staff_api_client, permission_manage_products):
    query = """
        mutation(
                $name: String, $slug: String, $description: String,
                $descriptionJson: JSONString, $backgroundImage: Upload,
                $backgroundImageAlt: String, $parentId: ID) {
            categoryCreate(
                input: {
                    name: $name
                    slug: $slug
                    description: $description
                    descriptionJson: $descriptionJson
                    backgroundImage: $backgroundImage
                    backgroundImageAlt: $backgroundImageAlt
                },
                parent: $parentId
            ) {
                category {
                    id
                    name
                    slug
                    description
                    descriptionJson
                    parent {
                        name
                        id
                    }
                    backgroundImage{
                        alt
                    }
                }
                errors {
                    field
                    message
                }
            }
        }
    """

    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ('saleor.dashboard.category.forms.'
         'create_category_background_image_thumbnails.delay'),
        mock_create_thumbnails)

    category_name = 'Test category'
    category_slug = slugify(category_name)
    category_description = 'Test description'
    category_description_json = json.dumps({'content': 'description'})
    image_file, image_name = create_image()
    image_alt = 'Alt text for an image.'

    # test creating root category
    variables = {
        'name': category_name, 'description': category_description,
        'descriptionJson': category_description_json,
        'backgroundImage': image_name, 'backgroundImageAlt': image_alt,
        'slug': category_slug}
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content['data']['categoryCreate']
    assert data['errors'] == []
    assert data['category']['name'] == category_name
    assert data['category']['description'] == category_description
    assert data['category']['descriptionJson'] == category_description_json
    assert not data['category']['parent']
    category = Category.objects.get(name=category_name)
    assert category.background_image.file
    mock_create_thumbnails.assert_called_once_with(category.pk)
    assert data['category']['backgroundImage']['alt'] == image_alt

    # test creating subcategory
    parent_id = data['category']['id']
    variables = {
        'name': category_name, 'description': category_description,
        'parentId': parent_id, 'slug': category_slug}
    response = staff_api_client.post_graphql(query, variables)
    content = get_graphql_content(response)
    data = content['data']['categoryCreate']
    assert data['errors'] == []
    assert data['category']['parent']['id'] == parent_id
Example #50
0
def test_create_collection(
        monkeypatch, staff_api_client, product_list, permission_manage_products):
    query = """
        mutation createCollection(
                $name: String!, $slug: String!, $description: String,
                $descriptionJson: JSONString, $products: [ID],
                $backgroundImage: Upload!, $backgroundImageAlt: String,
                $isPublished: Boolean!, $publicationDate: Date) {
            collectionCreate(
                input: {
                    name: $name,
                    slug: $slug,
                    description: $description,
                    descriptionJson: $descriptionJson,
                    products: $products,
                    backgroundImage: $backgroundImage,
                    backgroundImageAlt: $backgroundImageAlt,
                    isPublished: $isPublished,
                    publicationDate: $publicationDate}) {
                collection {
                    name
                    slug
                    description
                    descriptionJson
                    products {
                        totalCount
                    }
                    publicationDate
                    backgroundImage{
                        alt
                    }
                }
            }
        }
    """

    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        ('saleor.dashboard.collection.forms.'
         'create_collection_background_image_thumbnails.delay'),
        mock_create_thumbnails)

    product_ids = [
        to_global_id('Product', product.pk) for product in product_list]
    image_file, image_name = create_image()
    image_alt = 'Alt text for an image.'
    name = 'test-name'
    slug = 'test-slug'
    description = 'test-description'
    description_json = json.dumps({'content': 'description'})
    publication_date = date.today()
    variables = {
        'name': name, 'slug': slug, 'description': description,
        'descriptionJson': description_json, 'products': product_ids,
        'backgroundImage': image_name, 'backgroundImageAlt': image_alt,
        'isPublished': True, 'publicationDate': publication_date}
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products])
    content = get_graphql_content(response)
    data = content['data']['collectionCreate']['collection']
    assert data['name'] == name
    assert data['slug'] == slug
    assert data['description'] == description
    assert data['descriptionJson'] == description_json
    assert data['publicationDate'] == publication_date.isoformat()
    assert data['products']['totalCount'] == len(product_ids)
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image.file
    mock_create_thumbnails.assert_called_once_with(collection.pk)
    assert data['backgroundImage']['alt'] == image_alt
Example #51
0
def test_create_collection(
    monkeypatch, staff_api_client, product_list, media_root, permission_manage_products
):
    query = """
        mutation createCollection(
                $name: String!, $slug: String!, $description: String,
                $descriptionJson: JSONString, $products: [ID],
                $backgroundImage: Upload!, $backgroundImageAlt: String,
                $isPublished: Boolean!, $publicationDate: Date) {
            collectionCreate(
                input: {
                    name: $name,
                    slug: $slug,
                    description: $description,
                    descriptionJson: $descriptionJson,
                    products: $products,
                    backgroundImage: $backgroundImage,
                    backgroundImageAlt: $backgroundImageAlt,
                    isPublished: $isPublished,
                    publicationDate: $publicationDate}) {
                collection {
                    name
                    slug
                    description
                    descriptionJson
                    products {
                        totalCount
                    }
                    publicationDate
                    backgroundImage{
                        alt
                    }
                }
            }
        }
    """

    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        (
            "saleor.dashboard.collection.forms."
            "create_collection_background_image_thumbnails.delay"
        ),
        mock_create_thumbnails,
    )

    product_ids = [to_global_id("Product", product.pk) for product in product_list]
    image_file, image_name = create_image()
    image_alt = "Alt text for an image."
    name = "test-name"
    slug = "test-slug"
    description = "test-description"
    description_json = json.dumps({"content": "description"})
    publication_date = date.today()
    variables = {
        "name": name,
        "slug": slug,
        "description": description,
        "descriptionJson": description_json,
        "products": product_ids,
        "backgroundImage": image_name,
        "backgroundImageAlt": image_alt,
        "isPublished": True,
        "publicationDate": publication_date,
    }
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products]
    )
    content = get_graphql_content(response)
    data = content["data"]["collectionCreate"]["collection"]
    assert data["name"] == name
    assert data["slug"] == slug
    assert data["description"] == description
    assert data["descriptionJson"] == description_json
    assert data["publicationDate"] == publication_date.isoformat()
    assert data["products"]["totalCount"] == len(product_ids)
    collection = Collection.objects.get(slug=slug)
    assert collection.background_image.file
    mock_create_thumbnails.assert_called_once_with(collection.pk)
    assert data["backgroundImage"]["alt"] == image_alt
Example #52
0
def test_category_create_mutation(
    monkeypatch, staff_api_client, permission_manage_products, media_root
):
    query = """
        mutation(
                $name: String, $slug: String, $description: String,
                $descriptionJson: JSONString, $backgroundImage: Upload,
                $backgroundImageAlt: String, $parentId: ID) {
            categoryCreate(
                input: {
                    name: $name
                    slug: $slug
                    description: $description
                    descriptionJson: $descriptionJson
                    backgroundImage: $backgroundImage
                    backgroundImageAlt: $backgroundImageAlt
                },
                parent: $parentId
            ) {
                category {
                    id
                    name
                    slug
                    description
                    descriptionJson
                    parent {
                        name
                        id
                    }
                    backgroundImage{
                        alt
                    }
                }
                errors {
                    field
                    message
                }
            }
        }
    """

    mock_create_thumbnails = Mock(return_value=None)
    monkeypatch.setattr(
        (
            "saleor.dashboard.category.forms."
            "create_category_background_image_thumbnails.delay"
        ),
        mock_create_thumbnails,
    )

    category_name = "Test category"
    category_slug = slugify(category_name)
    category_description = "Test description"
    category_description_json = json.dumps({"content": "description"})
    image_file, image_name = create_image()
    image_alt = "Alt text for an image."

    # test creating root category
    variables = {
        "name": category_name,
        "description": category_description,
        "descriptionJson": category_description_json,
        "backgroundImage": image_name,
        "backgroundImageAlt": image_alt,
        "slug": category_slug,
    }
    body = get_multipart_request_body(query, variables, image_file, image_name)
    response = staff_api_client.post_multipart(
        body, permissions=[permission_manage_products]
    )
    content = get_graphql_content(response)
    data = content["data"]["categoryCreate"]
    assert data["errors"] == []
    assert data["category"]["name"] == category_name
    assert data["category"]["description"] == category_description
    assert data["category"]["descriptionJson"] == category_description_json
    assert not data["category"]["parent"]
    category = Category.objects.get(name=category_name)
    assert category.background_image.file
    mock_create_thumbnails.assert_called_once_with(category.pk)
    assert data["category"]["backgroundImage"]["alt"] == image_alt

    # test creating subcategory
    parent_id = data["category"]["id"]
    variables = {
        "name": category_name,
        "description": category_description,
        "parentId": parent_id,
        "slug": category_slug,
    }
    response = staff_api_client.post_graphql(query, variables)
    content = get_graphql_content(response)
    data = content["data"]["categoryCreate"]
    assert data["errors"] == []
    assert data["category"]["parent"]["id"] == parent_id