it_manager/locations: редактор шаблона этикеток, раздельная печать QR/EAN и карточка поставщика.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -436,17 +436,74 @@ class ItManagerEquipmentTests(TestCase):
|
||||
self.assertEqual(len(ean), 13)
|
||||
self.assertTrue(ean.startswith('200'))
|
||||
|
||||
r = self.client.get(f'/it-manager/equipment/labels/?ids={eq.pk}')
|
||||
r = self.client.get(f'/it-manager/equipment/labels/?ids={eq.pk}&codes=both')
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertContains(r, 'INV-LBL-1')
|
||||
self.assertContains(r, 'data:image/png;base64,')
|
||||
self.assertContains(r, ean)
|
||||
|
||||
r_qr = self.client.get(f'/it-manager/equipment/labels/?ids={eq.pk}&codes=qr')
|
||||
self.assertEqual(r_qr.status_code, 200)
|
||||
self.assertContains(r_qr, 'INV-LBL-1')
|
||||
self.assertNotContains(r_qr, f'alt="{ean}"')
|
||||
|
||||
r_ean = self.client.get(f'/it-manager/equipment/labels/?ids={eq.pk}&codes=ean')
|
||||
self.assertEqual(r_ean.status_code, 200)
|
||||
self.assertContains(r_ean, ean)
|
||||
self.assertNotContains(r_ean, f'alt="INV-LBL-1"')
|
||||
|
||||
r2 = self.client.get('/it-manager/', {'tab': 'equipment', 'q': ean})
|
||||
self.assertEqual(r2.status_code, 200)
|
||||
serials = [e.serial_number for e in r2.context['equipment_page']]
|
||||
self.assertIn('LBL-SN-1', serials)
|
||||
|
||||
def test_label_template_editor(self):
|
||||
import json
|
||||
|
||||
from apps.it_manager.models import EquipmentLabelTemplate
|
||||
|
||||
r = self.client.get('/it-manager/equipment/labels/template/')
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertContains(r, 'Шаблон этикетки')
|
||||
|
||||
tmpl = EquipmentLabelTemplate.get_default()
|
||||
payload = {
|
||||
'width_mm': 80,
|
||||
'height_mm': 50,
|
||||
'layout': [
|
||||
{
|
||||
'id': 'qr1', 'type': 'qr',
|
||||
'x_mm': 3, 'y_mm': 3, 'w_mm': 20, 'h_mm': 20,
|
||||
'font_pt': 9, 'bold': False, 'align': 'left', 'text': '',
|
||||
},
|
||||
{
|
||||
'id': 'm1', 'type': 'model',
|
||||
'x_mm': 26, 'y_mm': 3, 'w_mm': 40, 'h_mm': 8,
|
||||
'font_pt': 10, 'bold': True, 'align': 'left', 'text': '',
|
||||
},
|
||||
],
|
||||
}
|
||||
r_save = self.client.post(
|
||||
'/it-manager/equipment/labels/template/',
|
||||
data=json.dumps(payload),
|
||||
content_type='application/json',
|
||||
)
|
||||
self.assertEqual(r_save.status_code, 200)
|
||||
data = r_save.json()
|
||||
self.assertTrue(data.get('ok'))
|
||||
tmpl.refresh_from_db()
|
||||
self.assertEqual(tmpl.width_mm, 80)
|
||||
self.assertEqual(len(tmpl.layout), 2)
|
||||
|
||||
outsider = make_employee(username='no-it-labels')
|
||||
client2 = Client()
|
||||
login_2fa(client2, outsider)
|
||||
forbidden = client2.get('/it-manager/equipment/labels/template/')
|
||||
self.assertIn(forbidden.status_code, (403, 302, 200))
|
||||
if forbidden.status_code == 200:
|
||||
# deny_section_access может вернуть dashboard-фрагмент
|
||||
self.assertNotContains(forbidden, 'label-canvas')
|
||||
|
||||
def test_assignment_history_visible_in_card(self):
|
||||
equipment = make_equipment(serial_number='HIST-UI-1')
|
||||
emp = make_employee(first_name='Иван', last_name='Историков')
|
||||
|
||||
Reference in New Issue
Block a user