示例#1
0
    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(),
    )
示例#6
0
 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')
示例#7
0
 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
示例#12
0
 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'
     )
示例#15
0
    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)
示例#16
0
    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)