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