Allow variations to override item meta data (#2965)

This commit is contained in:
Raphael Michel
2022-12-12 12:06:09 +01:00
committed by GitHub
parent 5f899ed5c5
commit 3d9679a144
22 changed files with 440 additions and 55 deletions

View File

@@ -384,7 +384,8 @@ def test_item_detail_variations(token_client, organizer, event, team, item):
"available_from": None,
"available_until": None,
"hide_without_voucher": False,
"original_price": None
"original_price": None,
"meta_data": {}
}]
res["has_variations"] = True
resp = token_client.get('/api/v1/organizers/{}/events/{}/items/{}/'.format(organizer.slug, event.slug,
@@ -551,7 +552,10 @@ def test_item_create_with_variation(token_client, organizer, event, item, catego
"description": None,
"position": 0,
"default_price": None,
"price": "23.00"
"price": "23.00",
"meta_data": {
"day": "Wednesday",
},
}
]
},
@@ -564,6 +568,7 @@ def test_item_create_with_variation(token_client, organizer, event, item, catego
assert new_item.variations.first().value.localize('en') == "Comment"
assert new_item.variations.first().require_approval is True
assert set(new_item.variations.first().sales_channels) == set(get_all_sales_channels().keys())
assert new_item.variations.first().meta_data == {"day": "Wednesday"}
@pytest.mark.django_db
@@ -1258,7 +1263,8 @@ TEST_VARIATIONS_RES = {
"available_from": None,
"available_until": None,
"hide_without_voucher": False,
"original_price": None
"original_price": None,
"meta_data": {}
}
TEST_VARIATIONS_UPDATE = {
@@ -1277,7 +1283,8 @@ TEST_VARIATIONS_UPDATE = {
"available_from": None,
"available_until": None,
"hide_without_voucher": False,
"original_price": None
"original_price": None,
"meta_data": {}
}
@@ -1314,7 +1321,10 @@ def test_variations_create(token_client, organizer, event, item, variation):
"position": 1,
"default_price": None,
"original_price": "23.42",
"price": 23.0
"price": 23.0,
"meta_data": {
"day": "Wednesday",
},
},
format='json'
)
@@ -1324,6 +1334,7 @@ def test_variations_create(token_client, organizer, event, item, variation):
assert var.position == 1
assert var.price == 23.0
assert set(var.sales_channels) == set(get_all_sales_channels().keys())
assert var.meta_data == {"day": "Wednesday"}
@pytest.mark.django_db
@@ -1355,6 +1366,7 @@ def test_variations_update(token_client, organizer, event, item, item3, variatio
res["price"] = "20.00"
res["default_price"] = "20.00"
res["original_price"] = "50.00"
res["meta_data"] = {"day": "Thursday"}
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/items/{}/variations/{}/'.format(organizer.slug, event.slug, item.pk, variation.pk),
{
@@ -1364,7 +1376,10 @@ def test_variations_update(token_client, organizer, event, item, item3, variatio
"position": 1,
"sales_channels": ["web"],
"default_price": "20.00",
"original_price": "50.00"
"original_price": "50.00",
"meta_data": {
"day": "Thursday",
},
},
format='json'
)

View File

@@ -73,6 +73,7 @@ def test_full_clone_same_organizer():
assert item1.meta_data
item2 = event.items.create(category=category, tax_rule=tax_rule, name="T-shirt", default_price=15)
item2v = item2.variations.create(value="red", default_price=15)
item2v.meta_values.create(property=item_meta, value="Bar")
item2.require_membership_types.add(membership_type)
ItemAddOn.objects.create(base_item=item1, addon_category=category)
ItemBundle.objects.create(base_item=item1, bundled_item=item2, bundled_variation=item2v)
@@ -147,6 +148,7 @@ def test_full_clone_same_organizer():
assert copied_item1.tax_rule == copied_event.tax_rules.get()
assert copied_item1.category == copied_event.categories.get()
assert copied_item1.meta_data == item1.meta_data
assert copied_item2.variations.get().meta_data == item2v.meta_data
assert copied_item1.hidden_if_available == copied_q2
assert copied_item1.grant_membership_type == membership_type
assert copied_item2.variations.count() == 1

View File

@@ -1962,6 +1962,32 @@ class ItemTest(TestCase):
assert not Item.objects.filter_available().exists()
assert Item.objects.filter_available(voucher=v).exists()
@classscope(attr='o')
def test_meta_data_inheritance(self):
prop = self.event.item_meta_properties.create(name="day", default="Monday")
i = Item.objects.create(
event=self.event, name="Ticket", default_price=23,
active=True, available_until=now() + timedelta(days=1),
)
v = i.variations.create(value="Day 1")
assert i.meta_data == {"day": "Monday"}
assert v.meta_data == {"day": "Monday"}
i.meta_values.create(property=prop, value="Tuesday")
i = Item.objects.get(pk=i.pk)
v = ItemVariation.objects.get(pk=v.pk)
assert i.meta_data == {"day": "Tuesday"}
assert v.meta_data == {"day": "Tuesday"}
v.meta_values.create(property=prop, value="Wednesday")
i = Item.objects.get(pk=i.pk)
v = ItemVariation.objects.get(pk=v.pk)
assert i.meta_data == {"day": "Tuesday"}
assert v.meta_data == {"day": "Wednesday"}
class EventTest(TestCase):
@classmethod

View File

@@ -637,6 +637,8 @@ class ItemsTest(ItemFormTest):
q = Question.objects.create(event=self.event1, question="Size", type="N")
q.items.add(self.item2)
self.item2.sales_channels = ["web", "bar"]
prop = self.event1.item_meta_properties.create(name="Foo")
self.item2.meta_values.create(property=prop, value="Bar")
self.client.post('/control/event/%s/%s/items/add' % (self.orga1.slug, self.event1.slug), {
'name_0': 'Intermediate',
@@ -657,6 +659,7 @@ class ItemsTest(ItemFormTest):
assert i_new.hide_without_voucher == i_old.hide_without_voucher
assert i_new.allow_cancel == i_old.allow_cancel
assert i_new.sales_channels == i_old.sales_channels
assert i_new.meta_data == i_old.meta_data == {"Foo": "Bar"}
assert set(i_new.questions.all()) == set(i_old.questions.all())
assert set([str(v.value) for v in i_new.variations.all()]) == set([str(v.value) for v in i_old.variations.all()])