fix: creacion repetida de categoria de productos.
This commit is contained in:
		@@ -0,0 +1,18 @@
 | 
			
		||||
# Generated by Django 5.0.6 on 2024-06-29 21:04
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('don_confiao', '0009_productcategory_product'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='productcategory',
 | 
			
		||||
            name='name',
 | 
			
		||||
            field=models.CharField(max_length=100, unique=True),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
@@ -21,7 +21,7 @@ class MeasuringUnits(models.TextChoices):
 | 
			
		||||
    UNIT = 'UNIT', _('Unit')
 | 
			
		||||
 | 
			
		||||
class ProductCategory(models.Model):
 | 
			
		||||
    name = models.CharField(max_length=100)
 | 
			
		||||
    name = models.CharField(max_length=100, unique=True)
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ from django.contrib.auth.models import AnonymousUser, User
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
 | 
			
		||||
from .views import import_products, products
 | 
			
		||||
from .models import ProductCategory
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
import json
 | 
			
		||||
@@ -12,19 +13,37 @@ class TestProducts(TestCase):
 | 
			
		||||
        self.client = Client()
 | 
			
		||||
 | 
			
		||||
    def test_import_products(self):
 | 
			
		||||
        self._import_csv()
 | 
			
		||||
        all_products = self._get_products()
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            len(all_products),
 | 
			
		||||
            3
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_import_products_with_categories(self):
 | 
			
		||||
        self._import_csv()
 | 
			
		||||
        all_products = self._get_products()
 | 
			
		||||
        self.assertIn("Aceites", all_products[0]["categories"])
 | 
			
		||||
 | 
			
		||||
    def test_don_repeat_categories_on_import(self):
 | 
			
		||||
        self._import_csv()
 | 
			
		||||
        categories_on_csv = ["Cafes", "Alimentos", "Aceites"]
 | 
			
		||||
        categories = ProductCategory.objects.all()
 | 
			
		||||
        self.assertCountEqual(
 | 
			
		||||
            [c.name for c in categories],
 | 
			
		||||
            categories_on_csv
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def _get_products(self):
 | 
			
		||||
        products_response = self.client.get("/don_confiao/productos")
 | 
			
		||||
        return json.loads(products_response.content.decode('utf-8'))
 | 
			
		||||
 | 
			
		||||
    def _import_csv(self, csv_file='example_products.csv'):
 | 
			
		||||
        app_name = "don_confiao"
 | 
			
		||||
        app_dir = os.path.join(settings.BASE_DIR, app_name)
 | 
			
		||||
        example_csv = os.path.join(app_dir, 'example_products.csv')
 | 
			
		||||
        products_in_example = 3
 | 
			
		||||
        with open(example_csv, 'rb') as csv:
 | 
			
		||||
            self.client.post(
 | 
			
		||||
                "/don_confiao/importar_productos",
 | 
			
		||||
                {"csv_file": csv}
 | 
			
		||||
            )
 | 
			
		||||
        products_response = self.client.get("/don_confiao/productos")
 | 
			
		||||
        all_products = json.loads(products_response.content.decode('utf-8'))
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            len(all_products),
 | 
			
		||||
            products_in_example
 | 
			
		||||
        )
 | 
			
		||||
        self.assertIn("Aceites", all_products[0]["categories"])
 | 
			
		||||
 
 | 
			
		||||
@@ -65,9 +65,11 @@ def handle_import_products_file(csv_file):
 | 
			
		||||
        product.measuring_unit = row['unidad']
 | 
			
		||||
        product.save()
 | 
			
		||||
 | 
			
		||||
        categories = [n.strip for n in row["categorias"].split("&")]
 | 
			
		||||
        categories = [n.strip() for n in row["categorias"].split("&")]
 | 
			
		||||
        for category in categories:
 | 
			
		||||
            category_model, _ = ProductCategory.objects.get_or_create(
 | 
			
		||||
                name=category
 | 
			
		||||
            )
 | 
			
		||||
            category_model.save()
 | 
			
		||||
            product.categories.add(category_model)
 | 
			
		||||
        product.save()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user