kopia lustrzana https://github.com/jedie/PyInventory
Expand Playwright tests and add a Item with Tag and Image
rodzic
a4c328e6d4
commit
ef5164e14f
|
@ -1,6 +1,8 @@
|
|||
import os
|
||||
import tempfile
|
||||
|
||||
import pytest
|
||||
from PIL import Image
|
||||
|
||||
|
||||
# Avoid django.core.exceptions.SynchronousOnlyOperation:
|
||||
|
@ -11,3 +13,14 @@ os.environ.setdefault('DJANGO_ALLOW_ASYNC_UNSAFE', '1')
|
|||
def browser_context_args(browser_context_args):
|
||||
browser_context_args['ignore_https_errors'] = True
|
||||
return browser_context_args
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def png_image():
|
||||
format = 'png'
|
||||
with tempfile.NamedTemporaryFile(prefix='test_image', suffix=f'.{format}') as tmp:
|
||||
image_size = (1, 1)
|
||||
pil_image = Image.new('RGB', image_size)
|
||||
pil_image.save(tmp, format=format)
|
||||
tmp.seek(0)
|
||||
yield tmp
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
from django.contrib.auth.models import User
|
||||
from model_bakery import baker
|
||||
|
||||
from inventory.permissions import get_or_create_normal_user_group
|
||||
|
||||
|
||||
def get_normal_user():
|
||||
user = baker.make(
|
||||
User,
|
||||
id=1,
|
||||
username='NormalUser',
|
||||
is_staff=True,
|
||||
is_active=True,
|
||||
is_superuser=False,
|
||||
)
|
||||
assert user.user_permissions.count() == 0
|
||||
group = get_or_create_normal_user_group()[0]
|
||||
user.groups.set([group])
|
||||
user.full_clean()
|
||||
return user
|
|
@ -18,6 +18,7 @@ from model_bakery import baker
|
|||
from inventory import __version__
|
||||
from inventory.models import ItemImageModel, ItemModel
|
||||
from inventory.permissions import get_or_create_normal_user_group
|
||||
from inventory_project.tests.fixtures import get_normal_user
|
||||
|
||||
|
||||
ITEM_FORM_DEFAULTS = {
|
||||
|
@ -88,14 +89,7 @@ class AdminAnonymousTests(HtmlAssertionMixin, TestCase):
|
|||
class AdminTestCase(HtmlAssertionMixin, TestCase):
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
cls.normaluser = baker.make(
|
||||
User,
|
||||
id=1, username='NormalUser',
|
||||
is_staff=True, is_active=True, is_superuser=False
|
||||
)
|
||||
assert cls.normaluser.user_permissions.count() == 0
|
||||
group = get_or_create_normal_user_group()[0]
|
||||
cls.normaluser.groups.set([group])
|
||||
cls.normaluser = get_normal_user()
|
||||
|
||||
def test_normal_user_create_minimal_item(self):
|
||||
offset = datetime.timedelta(minutes=1)
|
||||
|
|
|
@ -6,6 +6,8 @@ from django.http import HttpRequest
|
|||
from playwright.sync_api import Page, expect
|
||||
|
||||
from inventory import __version__
|
||||
from inventory.models import ItemImageModel, ItemLinkModel, ItemModel
|
||||
from inventory_project.tests.fixtures import get_normal_user
|
||||
from inventory_project.tests.playwright_utils import login
|
||||
|
||||
|
||||
|
@ -50,3 +52,87 @@ def test_admin(live_server, client, page: Page):
|
|||
page.goto(f'{live_server}/admin/')
|
||||
expect(page).to_have_url(f'{live_server}/admin/')
|
||||
expect(page).to_have_title(f'Site administration | PyInventory v{__version__}')
|
||||
|
||||
|
||||
@pytest.mark.playwright
|
||||
def test_normal_user_create_item(live_server, client, page: Page, png_image):
|
||||
normal_user = get_normal_user()
|
||||
login(page, client, url=live_server.url, user=normal_user)
|
||||
|
||||
page.goto(f'{live_server}/admin/inventory/itemmodel/add/')
|
||||
expect(page).to_have_title(f'Add Item | PyInventory v{__version__}')
|
||||
|
||||
page.locator('label:has-text("Kind:")')
|
||||
kind_field = page.locator('//input[@id="id_kind"]/..//input[@role="searchbox"]')
|
||||
kind_field.click()
|
||||
kind_field.fill('Mainboard')
|
||||
kind_field.press('Enter')
|
||||
|
||||
page.locator('label:has-text("Producer:")')
|
||||
producer_field = page.locator('//input[@id="id_producer"]/..//input[@role="searchbox"]')
|
||||
producer_field.click()
|
||||
producer_field.fill('Triple D Int.Ltd.')
|
||||
producer_field.press('Enter')
|
||||
|
||||
page.locator('label:has-text("Name:")')
|
||||
page.fill('//input[@id="id_name"]', 'TD-20 (8088)')
|
||||
|
||||
# Add a Link:
|
||||
page.locator('text=Add another Link').click()
|
||||
link_tags = page.locator(
|
||||
'//input[@id="id_itemlinkmodel_set-0-tags"]/..//input[@role="searchbox"]'
|
||||
)
|
||||
link_tags.click()
|
||||
link_tags.fill('a-link-tag')
|
||||
link_tags.press('Enter')
|
||||
page.locator('input[name="itemlinkmodel_set-0-name"]').fill('The First Link')
|
||||
page.locator('input[name="itemlinkmodel_set-0-url"]').fill('http://test.tld/foo/bar')
|
||||
|
||||
# Add Image
|
||||
page.locator("text=Add another Image").click()
|
||||
choose_file = page.locator("input[name=\"itemimagemodel_set-0-image\"]")
|
||||
choose_file.set_input_files(png_image.name)
|
||||
page.fill("input[name=\"itemimagemodel_set-0-name\"]", "The Image Name")
|
||||
image_tags = page.locator(
|
||||
'//input[@id="id_itemimagemodel_set-0-tags"]/..//input[@role="searchbox"]'
|
||||
)
|
||||
image_tags.click()
|
||||
image_tags.fill('a-image-tag')
|
||||
image_tags.press("Enter")
|
||||
|
||||
assert ItemModel.objects.count() == 0
|
||||
|
||||
# Save the item:
|
||||
page.locator('input:has-text("Save and continue editing")').click()
|
||||
page.locator(
|
||||
'text=The Tunes Item “A Test Tunes Item” was added successfully. You may edit it again'
|
||||
)
|
||||
page.locator('text="Triple D Int.Ltd." - TD-20 (8088)')
|
||||
|
||||
assert ItemModel.objects.count() == 1
|
||||
item = ItemModel.objects.first()
|
||||
assert item.verbose_name() == 'Mainboard - "Triple D Int.Ltd." - TD-20 (8088)'
|
||||
|
||||
# Save & continue?
|
||||
expect(page).to_have_url(f'{live_server}/admin/inventory/itemmodel/{item.id}/change/')
|
||||
|
||||
# Check added image:
|
||||
page.locator('text=The Image Name')
|
||||
img = page.locator('//a[@class="image_file_input_preview"]/img')
|
||||
img.scroll_into_view_if_needed()
|
||||
img.is_visible()
|
||||
assert img.evaluate('image => image.complete') is True
|
||||
|
||||
assert item.itemimagemodel_set.count() == 1
|
||||
image: ItemImageModel = item.itemimagemodel_set.first()
|
||||
assert str(image) == 'The Image Name'
|
||||
assert image.user == normal_user
|
||||
assert image.tags.get_tag_list() == ['a-image-tag']
|
||||
|
||||
# Check the added link:
|
||||
page.locator('text=The First Link')
|
||||
page.locator('text=Currently: http://test.tld/foo/bar')
|
||||
links = list(item.itemlinkmodel_set.values_list('name', 'url'))
|
||||
assert links == [('The First Link', 'http://test.tld/foo/bar')]
|
||||
link: ItemLinkModel = item.itemlinkmodel_set.first()
|
||||
assert link.tags.get_tag_list() == ['a-link-tag']
|
||||
|
|
Ładowanie…
Reference in New Issue