misc: split some api tests
This commit is contained in:
parent
cdada0578b
commit
e21a9560f9
|
@ -14,13 +14,8 @@ from chrono.agendas.models import (
|
|||
Category,
|
||||
Desk,
|
||||
Event,
|
||||
MeetingType,
|
||||
Person,
|
||||
Resource,
|
||||
SharedCustodyAgenda,
|
||||
TimePeriod,
|
||||
TimePeriodException,
|
||||
VirtualMember,
|
||||
)
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
@ -313,121 +308,6 @@ def test_agendas_api(app):
|
|||
assert len(ctx.captured_queries) == 4
|
||||
|
||||
|
||||
def test_agendas_meetingtypes_api(app, some_data, meetings_agenda):
|
||||
resp = app.get('/api/agenda/%s/meetings/' % meetings_agenda.slug)
|
||||
expected_resp = {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Blah',
|
||||
'id': 'blah',
|
||||
'duration': 30,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/foo-bar-meeting/meetings/blah/datetimes/',
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
assert resp.json == expected_resp
|
||||
|
||||
# deleted meeting type does not show up
|
||||
MeetingType.objects.create(agenda=meetings_agenda, slug='deleted-meeting-type', duration=43, deleted=True)
|
||||
resp = app.get('/api/agenda/%s/meetings/' % meetings_agenda.slug)
|
||||
assert resp.json == expected_resp
|
||||
|
||||
# wrong kind
|
||||
agenda1 = Agenda.objects.filter(label='Foo bar')[0]
|
||||
resp = app.get('/api/agenda/%s/meetings/' % agenda1.slug, status=404)
|
||||
|
||||
# unknown
|
||||
resp = app.get('/api/agenda/xxxx/meetings/', status=404)
|
||||
|
||||
|
||||
def test_agendas_meetingtype_api(app):
|
||||
agenda = Agenda.objects.create(label='Foo bar meeting', kind='meetings')
|
||||
MeetingType.objects.create(agenda=agenda, label='Blah', duration=30)
|
||||
resp = app.get('/api/agenda/%s/meetings/blah/' % agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': {
|
||||
'text': 'Blah',
|
||||
'id': 'blah',
|
||||
'duration': 30,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/foo-bar-meeting/meetings/blah/datetimes/',
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
# unknown
|
||||
resp = app.get('/api/agenda/xxxx/meetings/', status=404)
|
||||
resp = app.get('/api/agenda/%s/meetings/xxxx/' % agenda.slug, status=404)
|
||||
|
||||
# wrong kind
|
||||
agenda.kind = 'virtual'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug, status=404)
|
||||
agenda.kind = 'events'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug, status=404)
|
||||
|
||||
|
||||
def test_agendas_desks_api(app):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
|
||||
Desk.objects.create(agenda=agenda, label='Desk 1')
|
||||
resp = app.get('/api/agenda/%s/desks/' % agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Desk 1',
|
||||
'id': 'desk-1',
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# unknown
|
||||
resp = app.get('/api/agenda/xxxx/resources/', status=404)
|
||||
|
||||
# wrong kind
|
||||
agenda.kind = 'virtual'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug, status=404)
|
||||
agenda.kind = 'events'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug, status=404)
|
||||
|
||||
|
||||
def test_agendas_resources_api(app):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
|
||||
resource1 = Resource.objects.create(label='Resource 1', description='Foo bar Resource 1')
|
||||
resource2 = Resource.objects.create(label='Resource 2')
|
||||
agenda.resources.add(resource1, resource2)
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Resource 1',
|
||||
'id': 'resource-1',
|
||||
'description': 'Foo bar Resource 1',
|
||||
},
|
||||
{
|
||||
'text': 'Resource 2',
|
||||
'id': 'resource-2',
|
||||
'description': '',
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
# unknown
|
||||
resp = app.get('/api/agenda/xxxx/resources/', status=404)
|
||||
|
||||
# wrong kind
|
||||
agenda.kind = 'virtual'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug, status=404)
|
||||
agenda.kind = 'events'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug, status=404)
|
||||
|
||||
|
||||
def test_agenda_detail_api(app):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events', minimal_booking_delay=0)
|
||||
event1 = Event.objects.create(
|
||||
|
@ -574,85 +454,6 @@ def test_agenda_api_delete_busy(app, user):
|
|||
assert not Agenda.objects.exists()
|
||||
|
||||
|
||||
def test_virtual_agendas_meetingtypes_api(app):
|
||||
virt_agenda = Agenda.objects.create(label='Virtual agenda', kind='virtual')
|
||||
|
||||
# No meetings because no real agenda
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# One real agenda : every meetings exposed
|
||||
foo_agenda = Agenda.objects.create(label='Foo', kind='meetings')
|
||||
MeetingType.objects.create(agenda=foo_agenda, label='Meeting1', duration=30)
|
||||
MeetingType.objects.create(agenda=foo_agenda, label='Meeting2', duration=15)
|
||||
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=foo_agenda)
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Meeting1',
|
||||
'id': 'meeting1',
|
||||
'duration': 30,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/virtual-agenda/meetings/meeting1/datetimes/',
|
||||
},
|
||||
},
|
||||
{
|
||||
'text': 'Meeting2',
|
||||
'id': 'meeting2',
|
||||
'duration': 15,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/virtual-agenda/meetings/meeting2/datetimes/',
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
# Several real agendas
|
||||
|
||||
bar_agenda = Agenda.objects.create(label='Bar', kind='meetings')
|
||||
MeetingType.objects.create(agenda=bar_agenda, label='Meeting Bar', duration=30)
|
||||
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=bar_agenda)
|
||||
|
||||
# Bar agenda has no meeting type: no meetings exposed
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# Bar agenda has a meetings wih different label, slug, duration: no meetings exposed
|
||||
mt = MeetingType.objects.create(agenda=bar_agenda, label='Meeting Type Bar', duration=15)
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# Bar agenda has a meetings wih same label, but different slug and duration: no meetings exposed
|
||||
mt.label = 'Meeting1'
|
||||
mt.save()
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# Bar agenda has a meetings wih same label and slug, but different duration: no meetings exposed
|
||||
mt.slug = 'meeting1'
|
||||
mt.save()
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# Bar agenda has a meetings wih same label, slug and duration: only this meeting exposed
|
||||
mt.duration = 30
|
||||
mt.save()
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Meeting1',
|
||||
'id': 'meeting1',
|
||||
'duration': 30,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/virtual-agenda/meetings/meeting1/datetimes/',
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2021-07-09')
|
||||
def test_add_agenda(app, user, settings):
|
||||
category_a = Category.objects.create(label='Category A')
|
||||
|
@ -784,151 +585,3 @@ def test_add_agenda(app, user, settings):
|
|||
|
||||
resp = app.get('/api/agendas/datetimes/?agendas=%s' % agenda.slug)
|
||||
assert 'data' in resp.json
|
||||
|
||||
|
||||
def test_add_shared_custody_agenda(app, user, settings):
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
|
||||
params = {
|
||||
'first_guardian_name': 'John Doe',
|
||||
'first_guardian_id': 'xxx',
|
||||
'second_guardian_name': 'Jane Doe',
|
||||
'second_guardian_id': 'yyy',
|
||||
}
|
||||
resp = app.post_json('/api/shared-custody/', params=params)
|
||||
|
||||
john = Person.objects.get(user_external_id='xxx', name='John Doe')
|
||||
jane = Person.objects.get(user_external_id='yyy', name='Jane Doe')
|
||||
|
||||
agenda = SharedCustodyAgenda.objects.get()
|
||||
assert agenda.first_guardian == john
|
||||
assert agenda.second_guardian == jane
|
||||
|
||||
assert resp.json['data'] == {
|
||||
'id': agenda.pk,
|
||||
'settings_url': 'http://testserver/manage/shared-custody/%s/settings/' % agenda.pk,
|
||||
}
|
||||
|
||||
params = {
|
||||
'first_guardian_name': 'John Doe',
|
||||
'first_guardian_id': 'xxx',
|
||||
'second_guardian_name': 'Other',
|
||||
'second_guardian_id': 'zzz',
|
||||
}
|
||||
resp = app.post_json('/api/shared-custody/', params=params)
|
||||
assert resp.json['data']['id'] != agenda.pk
|
||||
assert SharedCustodyAgenda.objects.filter(first_guardian=john).count() == 2
|
||||
|
||||
|
||||
def test_shared_custody_agenda_add_child(app, user, settings):
|
||||
father = Person.objects.create(user_external_id='father_id', name='John Doe')
|
||||
mother = Person.objects.create(user_external_id='mother_id', name='Jane Doe')
|
||||
agenda = SharedCustodyAgenda.objects.create(first_guardian=father, second_guardian=mother)
|
||||
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
params = {
|
||||
'name': 'James Doe',
|
||||
'user_external_id': 'xxx',
|
||||
}
|
||||
resp = app.post_json('/api/shared-custody/%s/add-child/' % agenda.pk, params=params)
|
||||
child = Person.objects.get(name='James Doe', user_external_id='xxx')
|
||||
assert resp.json['data']['child_id'] == child.pk
|
||||
|
||||
assert agenda.children.count() == 1
|
||||
assert Person.objects.count() == 3
|
||||
|
||||
# adding again throws error
|
||||
resp = app.post_json('/api/shared-custody/%s/add-child/' % agenda.pk, params=params)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == 'This child already has one custody agenda.'
|
||||
|
||||
assert agenda.children.count() == 1
|
||||
assert Person.objects.count() == 3
|
||||
|
||||
params = {
|
||||
'name': 'Jack Doe',
|
||||
'user_external_id': 'yyy',
|
||||
}
|
||||
resp = app.post_json('/api/shared-custody/%s/add-child/' % agenda.pk, params=params)
|
||||
child = Person.objects.get(name='Jack Doe', user_external_id='yyy')
|
||||
assert resp.json['data']['child_id'] == child.pk
|
||||
|
||||
assert agenda.children.count() == 2
|
||||
assert Person.objects.count() == 4
|
||||
|
||||
other_father = Person.objects.create(user_external_id='other_father_id', name='John Doe')
|
||||
other_mother = Person.objects.create(user_external_id='other_mother_id', name='Jane Doe')
|
||||
other_agenda = SharedCustodyAgenda.objects.create(
|
||||
first_guardian=other_father, second_guardian=other_mother
|
||||
)
|
||||
|
||||
resp = app.post_json('/api/shared-custody/%s/add-child/' % other_agenda.pk, params=params)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == 'This child already has one custody agenda.'
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2022-03-30 08:00') # wednesday
|
||||
def test_virtual_honor_real_agenda_booking_delay(app, user):
|
||||
foo_agenda = Agenda.objects.create(
|
||||
label='Foo', kind='meetings', minimal_booking_delay=0, maximal_booking_delay=1
|
||||
)
|
||||
foo_meeting_type = MeetingType.objects.create(agenda=foo_agenda, label='Plop', duration=60)
|
||||
foo_desk = Desk.objects.create(agenda=foo_agenda, label='desk')
|
||||
bar_agenda = Agenda.objects.create(
|
||||
label='Foo', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=2
|
||||
)
|
||||
MeetingType.objects.create(agenda=bar_agenda, label='Plop', duration=60)
|
||||
bar_desk = Desk.objects.create(agenda=bar_agenda, label='desk')
|
||||
for desk in (foo_desk, bar_desk):
|
||||
TimePeriod.objects.create(
|
||||
weekday=2, # wednesday
|
||||
start_time=datetime.time(11, 0),
|
||||
end_time=datetime.time(12, 0),
|
||||
desk=desk,
|
||||
)
|
||||
TimePeriod.objects.create(
|
||||
weekday=3, # thursday
|
||||
start_time=datetime.time(11, 0),
|
||||
end_time=datetime.time(12, 0),
|
||||
desk=desk,
|
||||
)
|
||||
virtual_agenda = Agenda.objects.create(
|
||||
label='Agenda Virtual', kind='virtual', minimal_booking_delay=None, maximal_booking_delay=None
|
||||
)
|
||||
virtual_agenda.real_agendas.add(foo_agenda, bar_agenda)
|
||||
api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (virtual_agenda.slug, foo_meeting_type.slug)
|
||||
|
||||
datetimes_resp = app.get(api_url)
|
||||
assert len(datetimes_resp.json['data']) == 2
|
||||
assert datetimes_resp.json['data'][0]['datetime'] == '2022-03-30 11:00:00' # comes from foo_agenda
|
||||
assert datetimes_resp.json['data'][1]['datetime'] == '2022-03-31 11:00:00' # comes from bar_agenda
|
||||
|
||||
assert Booking.objects.count() == 0
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
|
||||
# minimal_booking_delay of bar_agenda must be honored
|
||||
fillslot_url = datetimes_resp.json['data'][0]['api']['fillslot_url']
|
||||
# book, this must end up in foo_agenda
|
||||
resp = app.post(fillslot_url)
|
||||
assert resp.json['err'] == 0
|
||||
assert Booking.objects.count() == 1
|
||||
booking = Booking.objects.first()
|
||||
assert booking.event.agenda == foo_agenda
|
||||
# try to book again, this must fail
|
||||
resp = app.post(fillslot_url)
|
||||
assert resp.json['err'] == 1
|
||||
|
||||
booking.delete()
|
||||
assert Booking.objects.count() == 0
|
||||
|
||||
# maximal_booking_delay of foo_agenda must be honored
|
||||
fillslot_url = datetimes_resp.json['data'][1]['api']['fillslot_url']
|
||||
# book, this must end up in bar_agenda
|
||||
resp = app.post(fillslot_url)
|
||||
assert resp.json['err'] == 0
|
||||
assert Booking.objects.count() == 1
|
||||
booking = Booking.objects.first()
|
||||
assert booking.event.agenda == bar_agenda
|
||||
# try to book again, this must fail
|
||||
resp = app.post(fillslot_url)
|
||||
assert resp.json['err'] == 1
|
|
@ -0,0 +1,30 @@
|
|||
import pytest
|
||||
|
||||
from chrono.agendas.models import Agenda, Desk
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
def test_agendas_desks_api(app):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
|
||||
Desk.objects.create(agenda=agenda, label='Desk 1')
|
||||
resp = app.get('/api/agenda/%s/desks/' % agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Desk 1',
|
||||
'id': 'desk-1',
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# unknown
|
||||
resp = app.get('/api/agenda/xxxx/desks/', status=404)
|
||||
|
||||
# wrong kind
|
||||
agenda.kind = 'virtual'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/desks/' % agenda.slug, status=404)
|
||||
agenda.kind = 'events'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/desks/' % agenda.slug, status=404)
|
|
@ -1997,6 +1997,73 @@ def test_virtual_agendas_meetings_booking_default_policy(app, user):
|
|||
assert bar_num_bookings == 4
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2022-03-30 08:00') # wednesday
|
||||
def test_virtual_honor_real_agenda_booking_delay(app, user):
|
||||
foo_agenda = Agenda.objects.create(
|
||||
label='Foo', kind='meetings', minimal_booking_delay=0, maximal_booking_delay=1
|
||||
)
|
||||
foo_meeting_type = MeetingType.objects.create(agenda=foo_agenda, label='Plop', duration=60)
|
||||
foo_desk = Desk.objects.create(agenda=foo_agenda, label='desk')
|
||||
bar_agenda = Agenda.objects.create(
|
||||
label='Foo', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=2
|
||||
)
|
||||
MeetingType.objects.create(agenda=bar_agenda, label='Plop', duration=60)
|
||||
bar_desk = Desk.objects.create(agenda=bar_agenda, label='desk')
|
||||
for desk in (foo_desk, bar_desk):
|
||||
TimePeriod.objects.create(
|
||||
weekday=2, # wednesday
|
||||
start_time=datetime.time(11, 0),
|
||||
end_time=datetime.time(12, 0),
|
||||
desk=desk,
|
||||
)
|
||||
TimePeriod.objects.create(
|
||||
weekday=3, # thursday
|
||||
start_time=datetime.time(11, 0),
|
||||
end_time=datetime.time(12, 0),
|
||||
desk=desk,
|
||||
)
|
||||
virtual_agenda = Agenda.objects.create(
|
||||
label='Agenda Virtual', kind='virtual', minimal_booking_delay=None, maximal_booking_delay=None
|
||||
)
|
||||
virtual_agenda.real_agendas.add(foo_agenda, bar_agenda)
|
||||
api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (virtual_agenda.slug, foo_meeting_type.slug)
|
||||
|
||||
datetimes_resp = app.get(api_url)
|
||||
assert len(datetimes_resp.json['data']) == 2
|
||||
assert datetimes_resp.json['data'][0]['datetime'] == '2022-03-30 11:00:00' # comes from foo_agenda
|
||||
assert datetimes_resp.json['data'][1]['datetime'] == '2022-03-31 11:00:00' # comes from bar_agenda
|
||||
|
||||
assert Booking.objects.count() == 0
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
|
||||
# minimal_booking_delay of bar_agenda must be honored
|
||||
fillslot_url = datetimes_resp.json['data'][0]['api']['fillslot_url']
|
||||
# book, this must end up in foo_agenda
|
||||
resp = app.post(fillslot_url)
|
||||
assert resp.json['err'] == 0
|
||||
assert Booking.objects.count() == 1
|
||||
booking = Booking.objects.first()
|
||||
assert booking.event.agenda == foo_agenda
|
||||
# try to book again, this must fail
|
||||
resp = app.post(fillslot_url)
|
||||
assert resp.json['err'] == 1
|
||||
|
||||
booking.delete()
|
||||
assert Booking.objects.count() == 0
|
||||
|
||||
# maximal_booking_delay of foo_agenda must be honored
|
||||
fillslot_url = datetimes_resp.json['data'][1]['api']['fillslot_url']
|
||||
# book, this must end up in bar_agenda
|
||||
resp = app.post(fillslot_url)
|
||||
assert resp.json['err'] == 0
|
||||
assert Booking.objects.count() == 1
|
||||
booking = Booking.objects.first()
|
||||
assert booking.event.agenda == bar_agenda
|
||||
# try to book again, this must fail
|
||||
resp = app.post(fillslot_url)
|
||||
assert resp.json['err'] == 1
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2017-04-01')
|
||||
def test_duration_on_booking_api_fillslot_response(app, user):
|
||||
agenda = Agenda(label='Foo bar')
|
||||
|
|
|
@ -0,0 +1,141 @@
|
|||
import pytest
|
||||
|
||||
from chrono.agendas.models import Agenda, MeetingType, VirtualMember
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
def test_agendas_meetingtypes_api(app):
|
||||
agenda = Agenda.objects.create(label='Foo bar meeting', kind='meetings')
|
||||
MeetingType.objects.create(agenda=agenda, label='Blah', duration=30)
|
||||
resp = app.get('/api/agenda/%s/meetings/' % agenda.slug)
|
||||
expected_resp = {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Blah',
|
||||
'id': 'blah',
|
||||
'duration': 30,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/foo-bar-meeting/meetings/blah/datetimes/',
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
assert resp.json == expected_resp
|
||||
|
||||
# deleted meeting type does not show up
|
||||
MeetingType.objects.create(agenda=agenda, slug='deleted-meeting-type', duration=43, deleted=True)
|
||||
resp = app.get('/api/agenda/%s/meetings/' % agenda.slug)
|
||||
assert resp.json == expected_resp
|
||||
|
||||
# wrong kind
|
||||
agenda.kind = 'events'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/meetings/' % agenda.slug, status=404)
|
||||
|
||||
# unknown
|
||||
resp = app.get('/api/agenda/xxxx/meetings/', status=404)
|
||||
|
||||
|
||||
def test_agendas_meetingtype_api(app):
|
||||
agenda = Agenda.objects.create(label='Foo bar meeting', kind='meetings')
|
||||
MeetingType.objects.create(agenda=agenda, label='Blah', duration=30)
|
||||
resp = app.get('/api/agenda/%s/meetings/blah/' % agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': {
|
||||
'text': 'Blah',
|
||||
'id': 'blah',
|
||||
'duration': 30,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/foo-bar-meeting/meetings/blah/datetimes/',
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
# unknown
|
||||
resp = app.get('/api/agenda/xxxx/meetings/', status=404)
|
||||
resp = app.get('/api/agenda/%s/meetings/xxxx/' % agenda.slug, status=404)
|
||||
|
||||
# wrong kind
|
||||
agenda.kind = 'events'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/meetings/' % agenda.slug, status=404)
|
||||
|
||||
|
||||
def test_virtual_agendas_meetingtypes_api(app):
|
||||
virt_agenda = Agenda.objects.create(label='Virtual agenda', kind='virtual')
|
||||
|
||||
# No meetings because no real agenda
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# One real agenda : every meetings exposed
|
||||
foo_agenda = Agenda.objects.create(label='Foo', kind='meetings')
|
||||
MeetingType.objects.create(agenda=foo_agenda, label='Meeting1', duration=30)
|
||||
MeetingType.objects.create(agenda=foo_agenda, label='Meeting2', duration=15)
|
||||
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=foo_agenda)
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Meeting1',
|
||||
'id': 'meeting1',
|
||||
'duration': 30,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/virtual-agenda/meetings/meeting1/datetimes/',
|
||||
},
|
||||
},
|
||||
{
|
||||
'text': 'Meeting2',
|
||||
'id': 'meeting2',
|
||||
'duration': 15,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/virtual-agenda/meetings/meeting2/datetimes/',
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
# Several real agendas
|
||||
|
||||
bar_agenda = Agenda.objects.create(label='Bar', kind='meetings')
|
||||
MeetingType.objects.create(agenda=bar_agenda, label='Meeting Bar', duration=30)
|
||||
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=bar_agenda)
|
||||
|
||||
# Bar agenda has no meeting type: no meetings exposed
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# Bar agenda has a meetings wih different label, slug, duration: no meetings exposed
|
||||
mt = MeetingType.objects.create(agenda=bar_agenda, label='Meeting Type Bar', duration=15)
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# Bar agenda has a meetings wih same label, but different slug and duration: no meetings exposed
|
||||
mt.label = 'Meeting1'
|
||||
mt.save()
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# Bar agenda has a meetings wih same label and slug, but different duration: no meetings exposed
|
||||
mt.slug = 'meeting1'
|
||||
mt.save()
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {'data': []}
|
||||
|
||||
# Bar agenda has a meetings wih same label, slug and duration: only this meeting exposed
|
||||
mt.duration = 30
|
||||
mt.save()
|
||||
resp = app.get('/api/agenda/%s/meetings/' % virt_agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Meeting1',
|
||||
'id': 'meeting1',
|
||||
'duration': 30,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/virtual-agenda/meetings/meeting1/datetimes/',
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
import pytest
|
||||
|
||||
from chrono.agendas.models import Agenda, Resource
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
def test_agendas_resources_api(app):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
|
||||
resource1 = Resource.objects.create(label='Resource 1', description='Foo bar Resource 1')
|
||||
resource2 = Resource.objects.create(label='Resource 2')
|
||||
agenda.resources.add(resource1, resource2)
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug)
|
||||
assert resp.json == {
|
||||
'data': [
|
||||
{
|
||||
'text': 'Resource 1',
|
||||
'id': 'resource-1',
|
||||
'description': 'Foo bar Resource 1',
|
||||
},
|
||||
{
|
||||
'text': 'Resource 2',
|
||||
'id': 'resource-2',
|
||||
'description': '',
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
# unknown
|
||||
resp = app.get('/api/agenda/xxxx/resources/', status=404)
|
||||
|
||||
# wrong kind
|
||||
agenda.kind = 'virtual'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug, status=404)
|
||||
agenda.kind = 'events'
|
||||
agenda.save()
|
||||
resp = app.get('/api/agenda/%s/resources/' % agenda.slug, status=404)
|
|
@ -0,0 +1,86 @@
|
|||
import pytest
|
||||
|
||||
from chrono.agendas.models import Person, SharedCustodyAgenda
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
def test_add_shared_custody_agenda(app, user, settings):
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
|
||||
params = {
|
||||
'first_guardian_name': 'John Doe',
|
||||
'first_guardian_id': 'xxx',
|
||||
'second_guardian_name': 'Jane Doe',
|
||||
'second_guardian_id': 'yyy',
|
||||
}
|
||||
resp = app.post_json('/api/shared-custody/', params=params)
|
||||
|
||||
john = Person.objects.get(user_external_id='xxx', name='John Doe')
|
||||
jane = Person.objects.get(user_external_id='yyy', name='Jane Doe')
|
||||
|
||||
agenda = SharedCustodyAgenda.objects.get()
|
||||
assert agenda.first_guardian == john
|
||||
assert agenda.second_guardian == jane
|
||||
|
||||
assert resp.json['data'] == {
|
||||
'id': agenda.pk,
|
||||
'settings_url': 'http://testserver/manage/shared-custody/%s/settings/' % agenda.pk,
|
||||
}
|
||||
|
||||
params = {
|
||||
'first_guardian_name': 'John Doe',
|
||||
'first_guardian_id': 'xxx',
|
||||
'second_guardian_name': 'Other',
|
||||
'second_guardian_id': 'zzz',
|
||||
}
|
||||
resp = app.post_json('/api/shared-custody/', params=params)
|
||||
assert resp.json['data']['id'] != agenda.pk
|
||||
assert SharedCustodyAgenda.objects.filter(first_guardian=john).count() == 2
|
||||
|
||||
|
||||
def test_shared_custody_agenda_add_child(app, user, settings):
|
||||
father = Person.objects.create(user_external_id='father_id', name='John Doe')
|
||||
mother = Person.objects.create(user_external_id='mother_id', name='Jane Doe')
|
||||
agenda = SharedCustodyAgenda.objects.create(first_guardian=father, second_guardian=mother)
|
||||
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
params = {
|
||||
'name': 'James Doe',
|
||||
'user_external_id': 'xxx',
|
||||
}
|
||||
resp = app.post_json('/api/shared-custody/%s/add-child/' % agenda.pk, params=params)
|
||||
child = Person.objects.get(name='James Doe', user_external_id='xxx')
|
||||
assert resp.json['data']['child_id'] == child.pk
|
||||
|
||||
assert agenda.children.count() == 1
|
||||
assert Person.objects.count() == 3
|
||||
|
||||
# adding again throws error
|
||||
resp = app.post_json('/api/shared-custody/%s/add-child/' % agenda.pk, params=params)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == 'This child already has one custody agenda.'
|
||||
|
||||
assert agenda.children.count() == 1
|
||||
assert Person.objects.count() == 3
|
||||
|
||||
params = {
|
||||
'name': 'Jack Doe',
|
||||
'user_external_id': 'yyy',
|
||||
}
|
||||
resp = app.post_json('/api/shared-custody/%s/add-child/' % agenda.pk, params=params)
|
||||
child = Person.objects.get(name='Jack Doe', user_external_id='yyy')
|
||||
assert resp.json['data']['child_id'] == child.pk
|
||||
|
||||
assert agenda.children.count() == 2
|
||||
assert Person.objects.count() == 4
|
||||
|
||||
other_father = Person.objects.create(user_external_id='other_father_id', name='John Doe')
|
||||
other_mother = Person.objects.create(user_external_id='other_mother_id', name='Jane Doe')
|
||||
other_agenda = SharedCustodyAgenda.objects.create(
|
||||
first_guardian=other_father, second_guardian=other_mother
|
||||
)
|
||||
|
||||
resp = app.post_json('/api/shared-custody/%s/add-child/' % other_agenda.pk, params=params)
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == 'This child already has one custody agenda.'
|
Loading…
Reference in New Issue