pricing: add an agenda selector in test tool (#67675)

This commit is contained in:
Lauréline Guérin 2022-07-28 11:36:04 +02:00
parent 35c27548df
commit 9531507e12
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 27 additions and 34 deletions

View File

@ -290,6 +290,7 @@ class PricingMatrixForm(forms.Form):
class PricingTestToolForm(forms.Form):
agenda = forms.ModelChoiceField(label=_('Agenda'), empty_label=None, queryset=Agenda.objects.none())
event_slug = forms.CharField(label=_('Event identifier'))
user_external_id = forms.CharField(label=_('User external identifier'))
adult_external_id = forms.CharField(label=_('Adult external identifier'))
@ -299,13 +300,14 @@ class PricingTestToolForm(forms.Form):
self.request = kwargs.pop('request')
self.agenda_pricing = kwargs.pop('agenda_pricing')
self.agenda = None
if kwargs['data'] and kwargs['data'].get('event_slug'):
self.init_agenda(kwargs['data']['event_slug'])
if kwargs['data'] and kwargs['data'].get('agenda'):
self.init_agenda(kwargs['data']['agenda'])
self.serialized_event = None
self.serialized_subscription = None
self.check_type_slug = None
self.booking_status = None
super().__init__(*args, **kwargs)
self.fields['agenda'].queryset = self.agenda_pricing.agendas.all()
presence_check_types = (
self.agenda.check_type_group.check_types.presences()
if self.agenda and self.agenda.check_type_group
@ -328,22 +330,18 @@ class PricingTestToolForm(forms.Form):
]
self.fields['booking_status'].choices = status_choices
def init_agenda(self, event_slug):
agenda_slug = event_slug.split('@')[0]
def init_agenda(self, agenda_id):
try:
self.agenda = self.agenda_pricing.agendas.get(slug=agenda_slug)
self.agenda = self.agenda_pricing.agendas.get(pk=agenda_id)
except Agenda.DoesNotExist:
pass
def clean_event_slug(self):
event_slug = self.cleaned_data['event_slug']
if '@' not in event_slug:
raise ValidationError(_('Missing agenda identifier'))
agenda_slug = event_slug.split('@')[0]
if not self.agenda:
raise ValidationError(_('The agenda identifier is wrong (%s)') % agenda_slug)
return event_slug
try:
self.serialized_event = get_event(event_slug)
self.serialized_event = get_event('%s@%s' % (self.agenda.slug, event_slug))
except ChronoError as e:
raise forms.ValidationError(e)

View File

@ -79,29 +79,29 @@
var presences = {};
var absences = {};
{% for agenda in agendas %}
presences['{{ agenda.slug }}'] = [];
absences['{{ agenda.slug }}'] = [];
presences['{{ agenda.pk }}'] = [];
absences['{{ agenda.pk }}'] = [];
{% for check_type in agenda.check_type_group.check_types.all %}
{% if check_type.kind == "presence" %}
presences['{{ agenda.slug }}'].push({slug: '{{ check_type.slug }}', label: '{{ check_type.label }}'});
presences['{{ agenda.pk }}'].push({slug: '{{ check_type.slug }}', label: '{{ check_type.label }}'});
{% else %}
absences['{{ agenda.slug }}'].push({slug: '{{ check_type.slug }}', label: '{{ check_type.label }}'});
absences['{{ agenda.pk }}'].push({slug: '{{ check_type.slug }}', label: '{{ check_type.label }}'});
{% endif %}
{% endfor %}
{% endfor %}
$('#id_event_slug').on('change', function() {
var agenda_slug = $(this).val().split('@')[0];
$('#id_agenda').on('change', function() {
var agenda_id = $(this).val();
var $select = $('#id_booking_status');
var current_value = $select.val();
$select.find('option').remove().end().append('<option value="presence">' + '{% trans "Presence" %}' + '</option>');
if (presences[agenda_slug]) {
$.each(presences[agenda_slug], function(index, value) {
if (presences[agenda_id]) {
$.each(presences[agenda_id], function(index, value) {
$select.append('<option value="presence::' + value.slug + '">' + '{% trans "Presence" %} (' + value.label + ')</option>');
});
}
$select.append('<option value="absence">' + '{% trans "Absence" %}' + '</option>');
if (absences[agenda_slug]) {
$.each(absences[agenda_slug], function(index, value) {
if (absences[agenda_id]) {
$.each(absences[agenda_id], function(index, value) {
$select.append('<option value="absence::' + value.slug + '">' + '{% trans "Absence" %} (' + value.label + ')</option>');
});
}

View File

@ -840,7 +840,8 @@ def test_detail_agenda_pricing_test_tool(
# check event date
mock_event.return_value = {'start_datetime': '2021-08-31T12:00:00+02:00'}
resp.form['event_slug'] = 'foo-bar@foo'
resp.form['agenda'] = agenda.pk
resp.form['event_slug'] = 'foo'
resp.form['user_external_id'] = 'user:1'
resp.form['adult_external_id'] = 'adult:1'
resp.form['booking_status'] = 'presence'
@ -859,18 +860,9 @@ def test_detail_agenda_pricing_test_tool(
mock_event.return_value = {'start_datetime': '2021-09-01T12:00:00+02:00'}
# check event_slug & agenda
resp.form['event_slug'] = 'foo'
resp = resp.form.submit().follow()
assert resp.context['test_tool_form'].errors['event_slug'] == ['Missing agenda identifier']
resp.form['event_slug'] = 'foo@foo'
resp = resp.form.submit().follow()
assert resp.context['test_tool_form'].errors['event_slug'] == ['The agenda identifier is wrong (foo)']
# check subscriptions dates
mock_subscriptions.return_value = []
mock_event.reset_mock()
resp.form['event_slug'] = 'foo-bar@foo'
resp = resp.form.submit().follow()
assert mock_pricing_data_event.call_args_list == []
assert 'Computed pricing data' not in resp
@ -944,16 +936,17 @@ def test_detail_agenda_pricing_test_tool_event_error(mock_subscriptions, mock_ev
)
agenda_pricing.agendas.add(agenda)
mock_event.side_effect = ChronoError('foo bar foo-bar@foo-event')
mock_event.side_effect = ChronoError('foo bar foo-event')
app = login(app)
resp = app.get('/manage/pricing/agenda-pricing/%s/' % agenda_pricing.pk)
resp.form['event_slug'] = 'foo-bar@foo-event'
resp.form['agenda'] = agenda.pk
resp.form['event_slug'] = 'foo-event'
resp.form['user_external_id'] = 'user:1'
resp.form['adult_external_id'] = 'adult:1'
resp.form['booking_status'] = 'presence'
resp = resp.form.submit().follow()
assert resp.context['test_tool_form'].errors['event_slug'] == ['foo bar foo-bar@foo-event']
assert resp.context['test_tool_form'].errors['event_slug'] == ['foo bar foo-event']
@mock.patch('lingo.pricing.forms.get_event')
@ -973,6 +966,7 @@ def test_detail_agenda_pricing_test_tool_subscription_error(mock_subscriptions,
app = login(app)
resp = app.get('/manage/pricing/agenda-pricing/%s/' % agenda_pricing.pk)
resp.form['agenda'] = agenda.pk
resp.form['event_slug'] = 'foo-bar@foo-event'
resp.form['user_external_id'] = 'user:1'
resp.form['adult_external_id'] = 'adult:1'
@ -1022,7 +1016,8 @@ def test_detail_agenda_pricing_test_tool_booking_status(
('presence', False, 'Presence'),
('absence', False, 'Absence'),
]
resp.form['event_slug'] = 'foo-bar@foo'
resp.form['agenda'] = agenda.pk
resp.form['event_slug'] = 'foo'
resp.form['user_external_id'] = 'user:1'
resp.form['adult_external_id'] = 'adult:1'
resp.form['booking_status'] = 'presence'