def test_personform_get_or_create(d): form = PersonForm(d) form.full_clean() result0 = form.get_or_create() Fixture('./src/person/tests/test_personform.json', models=[Person]).assertNoDiff() # Second call should not create a new instance result1 = form.get_or_create() assert result0 == result1 Fixture('person/tests/test_personform.json', models=[Person]).assertNoDiff()
def test_mrsrequestcreateview_post_save_integration(p, caisse): data = dict(mrsrequest_uuid=p.mrsrequest.id) data['caisse'] = caisse.pk data['date_depart'] = '2017-02-02' data['date_return'] = '2017-02-02' data['1-date_depart'] = '2017-01-02' data['1-date_return'] = '2017-01-02' data['distance'] = '100' data['expense'] = '10' data['first_name'] = 'jamesy' data['last_name'] = 'wuzere' data['birth_date'] = '2007-02-07' data['email'] = '*****@*****.**' data['nir'] = '1234567890123' # da key data['certify'] = True PMT.objects.create( mrsrequest_uuid=p.mrsrequest.id, filename='test_mrsrequestcreateview_story.jpg', binary=b'test_mrsrequestcreateview_story', ) Bill.objects.create( mrsrequest_uuid=p.mrsrequest.id, filename='test_mrsrequestcreateview_story.jpg', binary=b'test_mrsrequestcreateview_story', ) p.post(**data) Fixture( './src/mrsrequest/tests/test_mrsrequestcreateview.json', # noqa models=[MRSAttachment, MRSRequest, PMT, Person, Bill, Transport] ).assertNoDiff()
def test_stat_update(): Fixture('mrs/tests/data.json').load() req = MRSRequest.objects.get(display_id=201805020002) assert req, 'MRSRequest with saving required for this test !' MRSRequest.objects.filter(pk=req.pk).update(saving=None) req.refresh_from_db() assert req.saving is None stat_update_person(Person, instance=req.insured) req.refresh_from_db() assert f'{req.saving}' == '8.83' stats = Stat.objects.filter( date=req.status_datetime.date(), caisse__in=(req.caisse, None), ) for stat in stats: assert str(stat.savings) == '8.83' req.distancevp *= 2 req.save() req.refresh_from_db() assert f'{req.saving}' == '16.20' # test that it refreshed stats ! update_stat_for_mrsrequest(pk=req.pk) stats = Stat.objects.filter( date=req.status_datetime.date(), caisse__in=(req.caisse, None), ) for stat in stats: assert str(stat.savings) == '16.20'
def test_single_city(self): """Load single city.""" fixture_dir = FixtureDir('import') self.import_data(fixture_dir, 'angouleme_country', 'angouleme_region', 'angouleme_subregion', 'angouleme_city', 'angouleme_translations') Fixture(fixture_dir.get_file_path('angouleme.json')).assertNoDiff()
def person_transport_formset(): Fixture('./src/mrs/tests/data.json').load() person = Person.objects.get(pk=4) formset = TransportFormSet({ # base new one, should not have duplicate errors 'transport-0-date_depart': '2018-05-01', 'transport-0-date_return': '2018-05-02', # this one should not raise any error 'transport-1-date_depart': '2018-06-01', 'transport-1-date_return': '2018-06-02', # this should be detected as duplicate of transport-0 'transport-2-date_depart': '2018-05-01', 'transport-2-date_return': '2018-05-02', # this depart should be detected as dupe of return-0 'transport-3-date_depart': '2018-05-02', 'transport-3-date_return': '2018-05-07', # this return should be detected as dupe of depart-0 'transport-4-date_depart': '2018-04-02', 'transport-4-date_return': '2018-05-01', 'iterative_number': '5', }) formset.full_clean() # make cleaned_data for form in formset.forms: # let's keep a copy of those for assertions form.cleaned_data_copy = copy.copy(form.cleaned_data) return person, formset
def test_mrsfiledownloadview_admins(groups, request_factory, caisse, upload): Fixture('./src/mrs/tests/data.json').load() mrsrequest = MRSRequest(caisse=caisse) mrsrequest.pmt = PMT.objects.create( mrsrequest_uuid=mrsrequest.id, filename='test_mrsrequestcreateview_story.jpg', attachment_file=upload) mrsrequest.save() mrsrequest.save_pmt() user = User(username='******') user.set_password('secret') user.save() user.add_groups(groups) user.caisses.add(caisse) client = Client(user=user) client.login(username='******', password='******') response = client.get(mrsrequest.pmt.get_download_url()) assert response.status_code == 200 user.caisses.remove(caisse) response = client.get(mrsrequest.pmt.get_download_url()) assert response.status_code == 404
def test_progress_validate_success(mailoutbox, ur, mrsrequest): request = ur('post', caisse=mrsrequest.caisse) view('progress')(request, pk=mrsrequest.pk) with pytest.raises(http.Http404): view('progress')(request, pk=mrsrequest.pk) # test in_status_by result = list(MRSRequest.objects.all().in_status_by( 'inprogress', request.user)) assert len(result) == 1 assert str(result[0].pk) == str(mrsrequest.pk) response = view('validate')(request, pk=mrsrequest.pk) assert response['Location'] == mrsrequest.get_absolute_url() assert mrsrequest.caisse.liquidation_email in mailoutbox[0].reply_to assert len(mailoutbox[0].reply_to) == 1 Fixture( './src/mrsrequest/tests/test_mrsrequest_admin_progress_validate.json', # noqa models=[MRSRequest, MRSRequestLogEntry]).assertNoDiff() for v in ('progress', 'reject', 'validate'): with pytest.raises(http.Http404): view(v)(request, pk=mrsrequest.pk)
def test_mrsrequestcreateview_modevp_post_save_integration(p, caisse): data = form_data(mrsrequest_uuid=p.mrsrequest.id, caisse=caisse.pk) p.post(**data) Fixture('./src/mrsrequest/tests/test_mrsrequestcreateview_modevp.json', models=[MRSAttachment, MRSRequest, PMT, Person, Bill, Transport]).assertNoDiff()
def test_mrsrequestcreateview_vote(p, caisse, other_caisse): data = dict(mrsrequest_uuid=p.mrsrequest.id) data['caisse'] = 'other' data['other-caisse'] = other_caisse.pk p.post(**data) Fixture( './src/mrsrequest/tests/test_mrsrequestcreateview_caisse.json', # noqa models=[Caisse, MRSRequest, Email]).assertNoDiff()
def test_mrsrequest_duplicates_transport(): Fixture('./src/mrs/tests/data.json').load() req = MRSRequest.objects.get(display_id=201805030001) assert req.duplicates_by_transport == { MRSRequest.objects.get(display_id=201805020001): [datetime.date(2018, 5, 1)], MRSRequest.objects.get(display_id=201805030000): [datetime.date(2018, 5, 1)] }
def test_mrsstat(self): Stat.objects.create_missing() for m in MRSRequest.objects.all(): update_stat_for_mrsrequest(pk=m.pk) m.save() Fixture('mrsstat/tests/test_mrsstat.json', models=[Stat]).assertNoDiff()
def test_add_records(self): """Test that new records are added.""" fixture_dir = FixtureDir('update') self.import_data(fixture_dir, 'initial_country', 'initial_region', 'initial_city', 'initial_translations') self.import_data(fixture_dir, 'add_country', 'add_region', 'add_city', 'add_translations') Fixture(fixture_dir.get_file_path('add_records.json')).assertNoDiff()
def test_load_fixture(self): """Test loaded fixture matches database content.""" destination = 'cities_light/tests/fixtures/angouleme.json' with mock.patch.object(Downloader, 'download') as mock_func: cmd = Command() cmd.load_fixture(source='/abcdefg.json', destination=destination, force=True) Fixture(destination).assertNoDiff() mock_func.assert_called_with(source='/abcdefg.json', destination=destination, force=True)
def test_load_fixture(self): """Test loaded fixture matches database content.""" destination = FixtureDir('import').get_file_path('angouleme.json') with mock.patch.object(Downloader, 'download') as mock_func: cmd = Command() cmd.load_fixture(source='/abcdefg.json', destination=destination, force=True) Fixture(destination).assertNoDiff() mock_func.assert_called_with(source='/abcdefg.json', destination=destination, force=True)
def test_city_wrong_timezone(self): """Load single city with wrong timezone.""" fixture_dir = FixtureDir('import') self.import_data(fixture_dir, 'angouleme_country', 'angouleme_region', 'angouleme_subregion', 'angouleme_city_wtz', 'angouleme_translations') Fixture(fixture_dir.get_file_path('angouleme_wtz.json')).assertNoDiff() from ..loading import get_cities_model city_model = get_cities_model('City') cities = city_model.objects.all() for city in cities: print(city.get_timezone_info().zone)
def test_remove_records(self): """Test that obsolete records are removed.""" fixture_dir = FixtureDir('update') self.import_data(fixture_dir, 'remove_initial_country', 'remove_initial_region', 'remove_initial_city', 'remove_initial_translations') self.import_data(fixture_dir, 'remove_country', 'remove_region', 'remove_city', 'remove_translations') Fixture( fixture_dir.get_file_path('remove_records.json')).assertNoDiff()
def test_personform_twins_get_or_create(d, s): # We first make a call for jamesy form = PersonForm(d) form.full_clean() result0 = form.get_or_create() # Second call should create a new instance, # since seb is another person form = PersonForm(s) form.full_clean() result1 = form.get_or_create() assert result0 != result1 Fixture('person/tests/test_personform_twins.json', models=[Person]).assertNoDiff()
def test_keep_slugs(self): """Test --keep-slugs option.""" fixture_dir = FixtureDir('update') self.import_data(fixture_dir, 'initial_country', 'initial_region', 'initial_city', 'initial_translations') self.import_data(fixture_dir, 'update_country', 'update_region', 'update_city', 'update_translations', keep_slugs=True) Fixture(fixture_dir.get_file_path('keep_slugs.json'), ).assertNoDiff()
def test_noinsert(self): """Test --noinsert option.""" fixture_dir = FixtureDir('update') self.import_data(fixture_dir, 'initial_country', 'initial_region', 'initial_city', 'initial_translations') self.import_data(fixture_dir, 'add_country', 'add_region', 'add_city', 'add_translations', noinsert=True) Fixture(fixture_dir.get_file_path('noinsert.json'), ).assertNoDiff()
def test_monthly_mail(mailoutbox, django_assert_num_queries): Fixture('./src/mrs/tests/data.json').load() with django_assert_num_queries(5): monthly_mail() assert mailoutbox[0].attachments[0][0] == '2018-7-stats.csv' assert mailoutbox[0].attachments[0][ 1] == 'caisse;id;nir;naissance;transport;mandatement;base;montant;bascule;finess;adeli\n111;201805020000;3212312312312;06/05/2000;26/03/2018;;;;;;' # noqa assert mailoutbox[0].attachments[0][2] == 'text/csv' assert mailoutbox[1].attachments[0][0] == '2018-7-stats.csv' assert mailoutbox[1].attachments[0][ 1] == 'caisse;id;nir;naissance;transport;mandatement;base;montant;bascule;finess;adeli\n222;201805010001;2333333333333;30/04/2000;29/04/2018;;;;;;\n222;201805030000;1223123123123;29/05/2000;01/05/2018;;;;;;\n222;201805030001;1223123123123;29/05/2000;01/04/2018;;;;;;' # noqa assert mailoutbox[1].attachments[0][2] == 'text/csv' assert len(mailoutbox) == 2
def test_update_fields(self): """Test all fields are updated.""" fixture_dir = FixtureDir('update') self.import_data(fixture_dir, 'initial_country', 'initial_region', 'initial_city', 'initial_translations') self.import_data( fixture_dir, 'update_country', 'update_region', 'update_city', 'update_translations', ) Fixture(fixture_dir.get_file_path('update_fields.json')).assertNoDiff()
def test_single_city_zip(self): """Load single city.""" filelist = glob.glob(os.path.join(DATA_DIR, "angouleme_*.txt")) for f in filelist: os.remove(f) fixture_dir = FixtureDir('import_zip') self.import_data(fixture_dir, 'angouleme_country', 'angouleme_region', 'angouleme_subregion', 'angouleme_city', 'angouleme_translations', file_type="zip") Fixture(FixtureDir('import').get_file_path( 'angouleme.json')).assertNoDiff()
def test_mrsrequestcreateview_post_save_integration(p, finess, institution_uuid, caisse): data = dict(mrsrequest_uuid=p.mrsrequest.id) data['caisse'] = caisse.pk data['trip_kind'] = 'return' data['iterative_number'] = 2 data['transport-0-date_depart'] = '2017-02-02' data['transport-0-date_return'] = '2017-02-02' data['transport-1-date_depart'] = '2017-01-02' data['transport-1-date_return'] = '2017-01-02' data['distancevp'] = '100' data['expensevp_toll'] = '10' data['modevp'] = 'modevp' data['first_name'] = 'jamesy' data['last_name'] = 'wuzere' data['birth_date'] = '2007-02-07' data['email'] = '*****@*****.**' data['use_email'] = False data['nir'] = '1234567890123' data['pmt_pel'] = 'pmt' # da key data['certify'] = True PMT.objects.create( mrsrequest_uuid=p.mrsrequest.id, filename='test_institutionmrsrequestcreateview_story.jpg', binary=b'test_institutionmrsrequestcreateview_story', ) Bill.objects.create( mrsrequest_uuid=p.mrsrequest.id, filename='test_institutionmrsrequestcreateview_story.jpg', binary=b'test_institutionmrsrequestcreateview_story', ) Institution.objects.create(finess=finess, id=institution_uuid, origin='o') p.view_class = InstitutionMRSRequestCreateView p.view_kwargs = {'finess': finess} p.url = reverse('institution:mrsrequest_iframe', args=[finess]) p.post(**data) assert not p.view.form_errors() Fixture( './src/institution/tests/test_mrsrequest_iframe.json', # noqa models=[MRSAttachment, MRSRequest, PMT, Person, Bill, Transport]).assertNoDiff()
def test_update_fields_wrong_timezone(self): """Test all fields are updated, but timezone field is wrong.""" fixture_dir = FixtureDir('update') self.import_data(fixture_dir, 'initial_country', 'initial_region', 'initial_city', 'initial_translations') self.import_data( fixture_dir, 'update_country', 'update_region', 'update_city_wtz', 'update_translations', ) Fixture(fixture_dir.get_file_path( 'update_fields_wtz.json')).assertNoDiff()
def test_change_region_and_country(self): """Test change region and country.""" fixture_dir = FixtureDir('update') self.import_data(fixture_dir, 'initial_country', 'initial_region', 'initial_city', 'initial_translations') self.import_data( fixture_dir, 'change_country', 'change_region', 'update_city', 'update_translations', ) Fixture(fixture_dir.get_file_path( 'change_region_and_country.json')).assertNoDiff()
def test_mrsrequestcreateview_modeatp_post_save_integration(p, caisse): data = form_data(mrsrequest_uuid=p.mrsrequest.id, caisse=caisse.pk) data['expensevp_toll'] = '' data['expenseatp'] = '10' data['modevp'] = '' data['modeatp'] = 'modeatp' BillATP.objects.create( mrsrequest_uuid=data['mrsrequest_uuid'], filename='test_mrsrequestcreateview_story.jpg', binary=b'test_mrsrequestcreateview_story', ) p.post(**data) Fixture('./src/mrsrequest/tests/test_mrsrequestcreateview_modeatp.json', models=[MRSAttachment, MRSRequest, PMT, Person, Bill, Transport]).assertNoDiff()
def test_form_save_m2m(monkeypatch, person, caisse): mrsrequest_uuid = '6bf490e6-4521-458a-adfe-8d4ef5a64687' monkeypatch.setattr( 'mrsattachment.models.MRSAttachment.get_upload_body', lambda upload: upload.read() ) with io.BytesIO(b'test_mrsattachmentform0') as f: f.name = 'test_mrsattachmentform0.jpg' f.content_type = 'image/jpg' PMT.objects.record_upload(mrsrequest_uuid, f) with io.BytesIO(b'test_mrsattachmentform1') as f: f.name = 'test_mrsattachmentform1.jpg' f.content_type = 'image/jpg' Bill.objects.record_upload(mrsrequest_uuid, f) data = dict(mrsrequest_uuid=[mrsrequest_uuid]) data['caisse'] = [caisse.pk] data['date_depart'] = ['2017-02-02'] data['date_return'] = ['2017-02-02'] data['distance'] = ['100'] data['expense'] = ['10'] data['insured'] = [str(person.pk)] # If this test method goes wrong about the uuid, make sure its not # lost during ctor form = MRSRequestAdminForm(data) # Emulate what djang admin loves to do form.full_clean() assert not form.non_field_errors() assert not form.errors assert form.is_valid() obj = form.save(commit=False) obj.save() form.save_m2m() Fixture( './src/mrsrequest/tests/test_mrsrequest_form.json', # noqa models=[MRSAttachment, MRSRequest, PMT, Person, Bill, Transport] ).assertNoDiff()
def test_dump_fixture(self): """ Test dump_fixture calls dumpdata management command and tries to save it to file.""" # Load test data call_command('loaddata', 'cities_light/tests/fixtures/angouleme.json') # Dump try: fixture_path = 'cities_light/tests/fixtures/test_dump_fixture.json' cmd = Command() cmd.dump_fixture('cities_light.City', fixture_path) with bz2.BZ2File(fixture_path, mode='r') as bzfile: data = bzfile.read() with open(fixture_path, mode='wb') as file: file.write(data) Fixture(fixture_path, models=[City]).assertNoDiff() finally: if os.path.exists(fixture_path): os.remove(fixture_path)
def test_progress_reject_success(ur, mrsrequest, emailtemplate): request = ur('post', caisse=mrsrequest.caisse) view('progress')(request, pk=mrsrequest.pk) with pytest.raises(http.Http404): view('progress')(request, pk=mrsrequest.pk) request.POST = dict( template=emailtemplate.pk, subject='reject {}'.format(mrsrequest.pk), body='reject body {}'.format(mrsrequest.pk), ) response = view('reject')(request, pk=mrsrequest.pk) assert response['Location'] == mrsrequest.get_absolute_url() Fixture( './src/mrsrequest/tests/test_mrsrequest_admin_progress_reject.json', # noqa models=[MRSRequest, MRSRequestLogEntry]).assertNoDiff() for v in ('progress', 'reject', 'validate'): with pytest.raises(http.Http404): view(v)(request, pk=mrsrequest.pk)
def test_dump_fixture(self): """ Test dump_fixture calls dumpdata management command and tries to save it to file.""" # Load test data destination = FixtureDir('import').get_file_path('angouleme.json') call_command('loaddata', destination) # Dump try: fixture_path = os.path.join(os.path.dirname(__file__), "fixtures", "test_dump_fixture.json") cmd = Command() cmd.dump_fixture('cities_light.City', fixture_path) with bz2.BZ2File(fixture_path, mode='r') as bzfile: data = bzfile.read() with open(fixture_path, mode='wb') as file: file.write(data) Fixture(fixture_path, models=[City]).assertNoDiff() finally: if os.path.exists(fixture_path): os.remove(fixture_path)