def test_create(self): user = self.prisoner_location_admins[0] repeated_p_num_1 = random_prisoner_number() repeated_p_num_2 = random_prisoner_number() # create two pre-existing PrisonerLocations so that we test the overwrite mommy.make(PrisonerLocation, prisoner_number=repeated_p_num_1, prison=self.prisons[0], active=True) mommy.make(PrisonerLocation, prisoner_number=repeated_p_num_2, prison=self.prisons[0], active=True) self.assertEqual( PrisonerLocation.objects.filter(active=True).count(), 2) self.assertEqual( PrisonerLocation.objects.filter(active=False).count(), 0) data = [ { 'prisoner_name': random_prisoner_name(), 'prisoner_number': random_prisoner_number(), 'prisoner_dob': random_prisoner_dob(), 'prison': self.prisons[0].pk }, { 'prisoner_name': random_prisoner_name(), 'prisoner_number': repeated_p_num_1, 'prisoner_dob': random_prisoner_dob(), 'prison': self.prisons[1].pk }, { 'prisoner_name': random_prisoner_name(), 'prisoner_number': repeated_p_num_2, 'prisoner_dob': random_prisoner_dob(), 'prison': self.prisons[1].pk }, ] response = self.client.post( self.list_url, data=data, format='json', HTTP_AUTHORIZATION=self.get_http_authorization_for_user(user)) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual( PrisonerLocation.objects.filter(active=True).count(), 2) # test that inactive prisoner location records is now 3 latest_created = PrisonerLocation.objects.filter(active=False) self.assertEqual(latest_created.count(), 3) for item in data: self.assertEqual(latest_created.filter(**item).count(), 1) return data
def test_updates_to_active_location_when_inactive_duplicate_exists(self): self.assertNotEqual(self.credit.prison, None) existing_prison = self.credit.prison new_prison = Prison.objects.exclude(pk=existing_prison.pk).first() prisoner_name = random_prisoner_name() PrisonerLocation.objects.create( created_by=User.objects.first(), prisoner_name=prisoner_name, prisoner_number=self.credit.prisoner_number, prisoner_dob=self.credit.prisoner_dob, prison=new_prison, active=False ) PrisonerLocation.objects.create( created_by=User.objects.first(), prisoner_name=prisoner_name, prisoner_number=self.credit.prisoner_number, prisoner_dob=self.credit.prisoner_dob, prison=existing_prison, active=True ) credit_prisons_need_updating.send(sender=None) self.credit.refresh_from_db() self.assertEqual(self.credit.prison.pk, existing_prison.pk) self.assertEqual(self.credit.prisoner_name, prisoner_name)
def test_updates_to_active_location_when_inactive_duplicate_exists(self): self.assertNotEqual(self.credit.prison, None) existing_prison = self.credit.prison new_prison = Prison.objects.exclude(pk=existing_prison.pk).first() prisoner_name = random_prisoner_name() PrisonerLocation.objects.create( created_by=User.objects.first(), prisoner_name=prisoner_name, prisoner_number=self.credit.prisoner_number, prisoner_dob=self.credit.prisoner_dob, prison=new_prison, active=False ) PrisonerLocation.objects.create( created_by=User.objects.first(), prisoner_name=prisoner_name, prisoner_number=self.credit.prisoner_number, prisoner_dob=self.credit.prisoner_dob, prison=existing_prison, active=True ) credit_prisons_need_updating.send(sender=None) self.credit.refresh_from_db() self.assertEqual(self.credit.prison.pk, existing_prison.pk) self.assertEqual(self.credit.prisoner_name, prisoner_name)
def test_create(self): user = self.prisoner_location_admins[0] repeated_p_num_1 = random_prisoner_number() repeated_p_num_2 = random_prisoner_number() # create two pre-existing PrisonerLocations so that we test the overwrite mommy.make(PrisonerLocation, prisoner_number=repeated_p_num_1, prison=self.prisons[0], active=True) mommy.make(PrisonerLocation, prisoner_number=repeated_p_num_2, prison=self.prisons[0], active=True) self.assertEqual(PrisonerLocation.objects.filter(active=True).count(), 2) self.assertEqual(PrisonerLocation.objects.filter(active=False).count(), 0) data = [ { 'prisoner_name': random_prisoner_name(), 'prisoner_number': random_prisoner_number(), 'prisoner_dob': random_prisoner_dob(), 'prison': self.prisons[0].pk }, { 'prisoner_name': random_prisoner_name(), 'prisoner_number': repeated_p_num_1, 'prisoner_dob': random_prisoner_dob(), 'prison': self.prisons[1].pk }, { 'prisoner_name': random_prisoner_name(), 'prisoner_number': repeated_p_num_2, 'prisoner_dob': random_prisoner_dob(), 'prison': self.prisons[1].pk }, ] response = self.client.post( self.list_url, data=data, format='json', HTTP_AUTHORIZATION=self.get_http_authorization_for_user(user) ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(PrisonerLocation.objects.filter(active=True).count(), 2) # test that inactive prisoner location records is now 3 latest_created = PrisonerLocation.objects.filter(active=False) self.assertEqual(latest_created.count(), 3) for item in data: self.assertEqual(latest_created.filter(**item).count(), 1) return data
def make_prisoner(): return mommy.make( PrisonerProfile, prisoner_name=random_prisoner_name(), prisoner_number=random_prisoner_number(), prisoner_dob=random_prisoner_dob(), current_prison=Prison.objects.order_by('?').first(), )
def test_create_error_invalid_prison(self): self._test_validation_error( data=[{ 'prisoner_name': random_prisoner_name(), 'prisoner_number': random_prisoner_number(), 'prisoner_dob': random_prisoner_dob(), 'prison': 'invalid' }], assert_error_msg='Should fail because invalid prison')
def test_create_error_invalid_dob(self): self._test_validation_error( data=[{ 'prisoner_name': random_prisoner_name(), 'prisoner_number': random_prisoner_number(), 'prisoner_dob': '01//02//2015', 'prison': self.prisons[0].pk }], assert_error_msg='Should fail because invalid dob')
def _get_credit_data(self): data = super()._get_credit_data() data.update({ 'prison': Prison.objects.first(), 'prisoner_name': random_prisoner_name(), 'owner': User.objects.first(), 'resolution': CREDIT_RESOLUTION.CREDITED, }) return data
def _get_credit_data(self): data = super()._get_credit_data() data.update({ 'prison': Prison.objects.first(), 'prisoner_name': random_prisoner_name(), 'owner': User.objects.first(), 'resolution': CREDIT_RESOLUTION.CREDITED, }) return data
def _get_credit_data(self): data = super()._get_credit_data() data.update({ 'prison': Prison.objects.first(), 'prisoner_name': random_prisoner_name(), 'owner': None, 'resolution': CREDIT_RESOLUTION.PENDING, 'reconciled': True }) return data
def _get_credit_data(self): data = super()._get_credit_data() data.update({ 'prison': Prison.objects.first(), 'prisoner_name': random_prisoner_name(), 'owner': None, 'resolution': CREDIT_RESOLUTION.PENDING, 'reconciled': True }) return data
def random_prisoner(self): full_name = random_prisoner_name() first_name = full_name.split(' ')[0] last_name = full_name.split(' ')[1] return { 'given_name': first_name, 'middle_names': '', 'surname': last_name, 'date_of_birth': str(random_prisoner_dob()), # HMPPS Prison API returns more information not included here }
def test_create_error_invalid_prison(self): self._test_validation_error( data=[ { 'prisoner_name': random_prisoner_name(), 'prisoner_number': random_prisoner_number(), 'prisoner_dob': random_prisoner_dob(), 'prison': 'invalid' } ], assert_error_msg='Should fail because invalid prison' )
def test_create_error_invalid_dob(self): self._test_validation_error( data=[ { 'prisoner_name': random_prisoner_name(), 'prisoner_number': random_prisoner_number(), 'prisoner_dob': '01//02//2015', 'prison': self.prisons[0].pk } ], assert_error_msg='Should fail because invalid dob' )
def test_prisoner_location_doesnt_update_credit(self): existing_prison = self.credit.prison other_prison = Prison.objects.exclude(pk=existing_prison.pk).first() new_prisoner_name = random_prisoner_name() PrisonerLocation.objects.create( created_by=User.objects.first(), prisoner_name=new_prisoner_name, prisoner_number=self.credit.prisoner_number, prisoner_dob=self.credit.prisoner_dob, prison=other_prison, active=True) credit_prisons_need_updating.send(sender=None) self.credit.refresh_from_db() self.assertNotEqual(self.credit.prisoner_name, new_prisoner_name) self.assertEqual(self.credit.prison.pk, existing_prison.pk)
def test_with_prisoner_locations_sets_prison(self): self.assertEqual(self.credit.prison, None) prison = Prison.objects.first() prisoner_name = random_prisoner_name() PrisonerLocation.objects.create( created_by=User.objects.first(), prisoner_name=prisoner_name, prisoner_number=self.credit.prisoner_number, prisoner_dob=self.credit.prisoner_dob, prison=prison, active=True) credit_prisons_need_updating.send(sender=None) self.credit.refresh_from_db() self.assertEqual(self.credit.prison.pk, prison.pk) self.assertEqual(self.credit.prisoner_name, prisoner_name)
def test_prisoner_location_doesnt_update_credit(self): existing_prison = self.credit.prison other_prison = Prison.objects.exclude(pk=existing_prison.pk).first() new_prisoner_name = random_prisoner_name() PrisonerLocation.objects.create( created_by=User.objects.first(), prisoner_name=new_prisoner_name, prisoner_number=self.credit.prisoner_number, prisoner_dob=self.credit.prisoner_dob, prison=other_prison, active=True ) credit_prisons_need_updating.send(sender=None) self.credit.refresh_from_db() self.assertNotEqual(self.credit.prisoner_name, new_prisoner_name) self.assertEqual(self.credit.prison.pk, existing_prison.pk)
def test_with_prisoner_locations_sets_prison(self): self.assertEqual(self.credit.prison, None) prison = Prison.objects.first() prisoner_name = random_prisoner_name() PrisonerLocation.objects.create( created_by=User.objects.first(), prisoner_name=prisoner_name, prisoner_number=self.credit.prisoner_number, prisoner_dob=self.credit.prisoner_dob, prison=prison, active=True ) credit_prisons_need_updating.send(sender=None) self.credit.refresh_from_db() self.assertEqual(self.credit.prison.pk, prison.pk) self.assertEqual(self.credit.prisoner_name, prisoner_name)