misc: split some api tests

This commit is contained in:
Lauréline Guérin 2022-04-04 15:14:39 +02:00
parent cdada0578b
commit e21a9560f9
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
6 changed files with 362 additions and 347 deletions

View File

@ -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

30
tests/api/test_desk.py Normal file
View File

@ -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)

View File

@ -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')

View File

@ -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/',
},
},
]
}

View File

@ -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)

View File

@ -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.'