Beispiel #1
0
class BackOfficeAssetAPITests(RalphAPITestCase):
    def setUp(self):
        super().setUp()
        self.service_env = ServiceEnvironmentFactory()
        self.model = BackOfficeAssetModelFactory()
        self.warehouse = WarehouseFactory()
        self.bo_asset = BackOfficeAssetFactory(
            warehouse=self.warehouse,
            model=self.model,
        )
        self.bo_asset.user = self.user1
        self.bo_asset.owner = self.user2
        self.bo_asset.save()

    def test_get_back_office_assets_list(self):
        url = reverse('backofficeasset-list')
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['count'],
                         BackOfficeAsset.objects.count())

    def test_get_back_office_asset_details(self):
        url = reverse('backofficeasset-detail', args=(self.bo_asset.id, ))
        response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['hostname'], self.bo_asset.hostname)
        self.assertEqual(response.data['user']['id'], self.bo_asset.user.id)
        self.assertEqual(response.data['owner']['id'], self.bo_asset.owner.id)
        self.assertEqual(response.data['warehouse']['id'],
                         self.bo_asset.warehouse.id)
        self.assertEqual(response.data['model']['id'], self.bo_asset.model.id)

    def test_create_back_office_asset(self):
        region = Region.objects.create(name='EU')
        url = reverse('backofficeasset-list')
        data = {
            'hostname': '12345',
            'user': self.user1.id,
            'owner': self.superuser.id,
            'region': region.id,
            'warehouse': self.warehouse.id,
            'model': self.model.id,
            'service_env': self.service_env.id,
            'force_depreciation': False,
        }
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        bo_asset = BackOfficeAsset.objects.get(pk=response.data['id'])
        self.assertEqual(bo_asset.hostname, '12345')
        self.assertEqual(bo_asset.user, self.user1)
        self.assertEqual(bo_asset.owner, self.superuser)
        self.assertEqual(bo_asset.region, region)
        self.assertEqual(bo_asset.warehouse, self.warehouse)
        self.assertEqual(bo_asset.service_env, self.service_env)

    def test_patch_back_office_asset(self):
        url = reverse('backofficeasset-detail', args=(self.bo_asset.id, ))
        data = {
            'user': self.user2.id,
            'owner': None,
            'force_depreciation': True,
        }
        response = self.client.patch(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.bo_asset.refresh_from_db()
        self.assertEqual(self.bo_asset.user, self.user2)
        self.assertIsNone(self.bo_asset.owner)
        self.assertTrue(self.bo_asset.force_depreciation)
Beispiel #2
0
class BackOfficeAssetFormTest(TransitionTestCase, ClientMixin):
    def setUp(self):
        super().setUp()
        self.asset = BackOfficeAssetFactory()
        self.user = UserFactory()
        self.user.is_superuser = False
        self.user.is_staff = True
        self.passwd = 'ralph'
        self.user.set_password(self.passwd)
        # Grant all permissions to the user
        permissions = Permission.objects.exclude(codename__in=[
            'view_backofficeasset_hostname_field',
            'view_backofficeasset_service_env_field',
            'change_backofficeasset_hostname_field',
            'change_backofficeasset_service_env_field',
        ]).all()

        self.user.user_permissions.add(*permissions)
        self.user.regions.add(self.asset.region)
        self.user.save()
        self.login_as_user(user=self.user, password=self.passwd)
        self.data = {
            'hostname':
            self.asset.hostname,
            'model':
            self.asset.model.pk,
            'status':
            self.asset.status,
            'warehouse':
            self.asset.warehouse.pk,
            'region':
            self.asset.region.pk,
            'barcode':
            self.asset.barcode,
            'depreciation_rate':
            0,
            'custom_fields-customfieldvalue-content_type-object_id-INITIAL_FORMS':
            '0',  # noqa: E501
            'custom_fields-customfieldvalue-content_type-object_id-MAX_NUM_FORMS':
            '1000',  # noqa: E501
            'custom_fields-customfieldvalue-content_type-object_id-MIN_NUM_FORMS':
            '0',  # noqa: E501
            'custom_fields-customfieldvalue-content_type-object_id-TOTAL_FORMS':
            '3',  # noqa: E501fhtml
        }

    def test_bo_admin_form_wo_access_to_service_env_and_hostname(self):
        url = reverse('admin:back_office_backofficeasset_change',
                      args=(self.asset.pk, ))
        resp = self.client.get(url, follow=True)

        self.assertEqual(resp.status_code, 200)

        self.assertIn('model', resp.context['adminform'].form.fields)
        self.assertNotIn('hostname', resp.context['adminform'].form.fields)
        self.assertNotIn('service_env', resp.context['adminform'].form.fields)

    @override_settings(BACKOFFICE_HOSTNAME_FIELD_READONLY=1)
    def test_bo_admin_form_with_readonly_hostname(self):
        self.assertTrue(self.login_as_user())
        asset = BackOfficeAssetFactory()

        url = reverse('admin:back_office_backofficeasset_change',
                      args=(asset.pk, ))
        resp = self.client.get(url, follow=True)

        self.assertEqual(resp.status_code, 200)
        self.assertIn('hostname', resp.context['adminform'].form.fields)
        self.assertTrue(
            resp.context['adminform'].form.fields['hostname'].widget.attrs.get(
                'readonly'))

    def test_model_asset_type_back_office_shall_pass(self):
        back_office_model = DataCenterAssetModelFactory(
            type=ObjectModelType.from_name('back_office'))
        self.data.update({'model': back_office_model.pk})
        response = self.client.post(self.asset.get_absolute_url(), self.data)
        self.asset.refresh_from_db()
        self.assertEqual(response.status_code, 302)
        self.assertEqual(self.asset.model, back_office_model)

    def test_model_asset_type_data_center_asset_shall_not_pass(self):
        back_office_model = DataCenterAssetModelFactory(
            type=ObjectModelType.from_name('data_center'))
        self.data.update({'model': back_office_model.pk})
        response = self.client.post(self.asset.get_absolute_url(), self.data)
        self.asset.refresh_from_db()
        self.assertIn('Model must be of', response.content.decode('utf-8'))
        self.assertNotEqual(self.asset.model, back_office_model)
        self.assertEqual(response.status_code, 200)
Beispiel #3
0
class TestBackOfficeAsset(RalphTestCase):
    @classmethod
    def setUpClass(cls):
        super().setUpClass()
        cls.region_pl = RegionFactory(name='PL', country=Country.pl)
        cls.region_us = RegionFactory(name='US', country=Country.us)
        cls.category = CategoryFactory(code='PC')
        cls.category_without_code = CategoryFactory()
        cls.model = BackOfficeAssetModelFactory(category=cls.category)
        cls.model_without_code = BackOfficeAssetModelFactory(
            category=cls.category_without_code)

    def setUp(self):
        super().setUp()
        AssetLastHostname.objects.create(prefix='POLPC', counter=1000)
        self.bo_asset = BackOfficeAssetFactory(
            model=self.model,
            hostname='abc',
            region=self.region_pl,
        )
        self.bo_asset_2 = BackOfficeAssetFactory(
            model=self.model,
            hostname='abc2',
            region=self.region_pl,
            status=BackOfficeAssetStatus.liquidated.id,
            invoice_date=None)
        self.bo_asset_3 = BackOfficeAssetFactory(
            model=self.model,
            hostname='abc3',
            region=self.region_pl,
            status=BackOfficeAssetStatus.liquidated.id,
            invoice_date=datetime(2016, 1, 11).date(),
            depreciation_rate=50)
        self.bo_asset_4 = BackOfficeAssetFactory(
            model=self.model,
            hostname='abc3',
            region=self.region_pl,
            status=BackOfficeAssetStatus.liquidated.id,
            invoice_date=datetime(2016, 1, 11).date(),
            depreciation_end_date=datetime(2015, 1, 11).date(),
            depreciation_rate=50)
        self.category_parent = CategoryFactory(code='Mob1',
                                               default_depreciation_rate=30)
        self.category_2 = CategoryFactory(code='Mob2',
                                          default_depreciation_rate=25)
        self.category_3 = CategoryFactory(code='Mob3',
                                          parent=self.category_parent,
                                          default_depreciation_rate=0)

    def test_try_assign_hostname(self):
        self.bo_asset._try_assign_hostname(commit=True)
        self.assertEqual(self.bo_asset.hostname, 'POLPC01001')

    def test_try_assign_hostname_no_change(self):
        self.bo_asset.hostname = 'POLPC01001'
        self.bo_asset.save()
        self.bo_asset._try_assign_hostname(commit=True)
        self.assertEqual(self.bo_asset.hostname, 'POLPC01001')

    def test_try_assign_hostname_no_hostname(self):
        self.bo_asset.hostname = ''
        self.bo_asset.save()
        self.bo_asset._try_assign_hostname(commit=True)
        self.assertEqual(self.bo_asset.hostname, 'POLPC01001')

    def test_try_assign_hostname_forced(self):
        self.bo_asset.hostname = 'POLPC001010'
        self.bo_asset.save()
        self.bo_asset._try_assign_hostname(commit=True, force=True)
        self.assertEqual(self.bo_asset.hostname, 'POLPC01001')

    def test_try_assign_hostname_with_country(self):
        self.bo_asset._try_assign_hostname(country='US', commit=True)
        self.assertEqual(self.bo_asset.hostname, 'USPC00001')

    def test_try_assign_hostname_category_without_code(self):
        bo_asset_2 = BackOfficeAssetFactory(model=self.model_without_code,
                                            hostname='abcd')
        bo_asset_2._try_assign_hostname(commit=True)
        self.assertEqual(bo_asset_2.hostname, 'abcd')

    def test_get_autocomplete_queryset(self):
        queryset = BackOfficeAsset.get_autocomplete_queryset()
        self.assertEquals(1, queryset.count())

    def test_buyout_date(self):
        self.assertEqual(self.bo_asset_3.buyout_date,
                         datetime(2018, 2, 11).date())

        self.assertEqual(self.bo_asset_2.buyout_date, None)

    def test_butout_date_with_depreciation_end_date(self):
        self.assertEqual(self.bo_asset_4.buyout_date,
                         datetime(2015, 1, 11).date())

    def test_changing_buyout_date(self):
        self.bo_asset_3.buyout_date += relativedelta(months=3)
        self.bo_asset_3.save()
        self.bo_asset_3.refresh_from_db()
        self.assertEqual(self.bo_asset_3.buyout_date,
                         datetime(2018, 5, 11).date())

    def test_get_depreciation_rate(self):
        self.assertEqual(self.category_2.get_default_depreciation_rate(), 25)
        self.assertEqual(self.category_3.get_default_depreciation_rate(), 30)