Something went wrong. Try again.
Paper Mario mod hosting site - AT Protocol appview starhaven.dev
appview
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158"""Uploading a mod's media input, and images showing up as a thumbnail/carousel."""
from playwright.sync_api import expect
from conftest import Appviewfrom helpers import PNG, Actor, strip_images
LISTING_COLLECTION = "dev.starhaven.mod.listing"
def test_uploading_images_saves_an_ordered_tagged_gallery_to_the_pds(actor: Actor): actor.login() actor.create_mod("master-quest", title="Master Quest")
actor.page.goto(f"{actor.app_url}/{actor.handle}/master-quest/settings") actor.remove_images() actor.page.locator("media-input input[type=file]").set_input_files( files=[ {"name": "one.png", "mimeType": "image/png", "buffer": PNG}, {"name": "two.png", "mimeType": "image/png", "buffer": PNG}, ] ) expect(actor.page.locator("media-input .item")).to_have_count(2, timeout=15000) actor.page.locator("media-input .alt").first.fill("A screenshot") actor.page.get_by_role("button", name="Save").click() expect(actor.page).to_have_url(f"{actor.app_url}/{actor.handle}/master-quest")
[listing] = actor.records(LISTING_COLLECTION) media = listing["value"]["media"] assert len(media) == 2 assert media[0]["$type"] == "dev.starhaven.mod.listing#image" assert media[0]["alt"] == "A screenshot" assert media[0]["file"]["$type"] == "blob" assert "alt" not in media[1]
def test_the_gallerys_first_image_is_the_carousel_and_search_thumbnail(actor: Actor): actor.login() actor.create_mod("master-quest", title="Master Quest")
actor.page.goto(f"{actor.app_url}/{actor.handle}/master-quest/settings") actor.remove_images() actor.page.locator("media-input input[type=file]").set_input_files( files=[{"name": "one.png", "mimeType": "image/png", "buffer": PNG}] ) expect(actor.page.locator("media-input .item")).to_have_count(1, timeout=15000) actor.page.get_by_role("button", name="Save").click()
expect(actor.page).to_have_url(f"{actor.app_url}/{actor.handle}/master-quest") carousel = actor.page.locator("media-carousel") expect(carousel).to_be_visible() slide = carousel.locator("img").first expect(slide).to_be_visible() # Throws if the image can't be loaded and decoded. slide.evaluate("el => el.decode()")
actor.page.goto(f"{actor.app_url}/search?q=master") expect(actor.page.locator(".mod-card-image img")).to_be_visible()
def test_a_mod_with_no_gallery_shows_the_plain_placeholder(actor: Actor, appview: Appview): actor.login() actor.create_mod("master-quest", title="Master Quest") strip_images(appview.database, "master-quest") actor.page.reload()
expect(actor.page.locator(".mod-image-placeholder")).to_be_visible() expect(actor.page.locator("media-carousel")).to_have_count(0)
def test_a_mod_keeps_at_least_one_image(actor: Actor): actor.login() actor.create_mod("master-quest", title="Master Quest")
actor.page.goto(f"{actor.app_url}/{actor.handle}/master-quest/settings") actor.remove_images() actor.page.get_by_role("button", name="Save").click()
expect(actor.page.locator("#error-summary")).to_contain_text("Add an image") expect(actor.page.locator("#media-error")).to_have_text("Add an image") [listing] = actor.records(LISTING_COLLECTION) assert len(listing["value"]["media"]) == 1
def test_a_video_does_not_count_as_a_image(actor: Actor): actor.login() actor.create_mod("master-quest", title="Master Quest")
actor.page.goto(f"{actor.app_url}/{actor.handle}/master-quest/settings") actor.remove_images() actor.page.locator("media-input .youtube-url").fill("https://youtu.be/aqz-KE-bpKQ") actor.page.get_by_role("button", name="Add video").click() expect(actor.page.locator("media-input .item")).to_have_count(1) actor.page.get_by_role("button", name="Save").click()
expect(actor.page.locator("#media-error")).to_have_text("Add an image") [listing] = actor.records(LISTING_COLLECTION) assert all( item["$type"] == "dev.starhaven.mod.listing#image" for item in listing["value"]["media"] )
def test_a_video_is_saved_beside_a_image_as_a_tagged_link(actor: Actor): actor.login() actor.create_mod("master-quest", title="Master Quest")
actor.page.goto(f"{actor.app_url}/{actor.handle}/master-quest/settings") actor.page.locator("media-input .youtube-url").fill("https://youtu.be/aqz-KE-bpKQ?t=3") actor.page.get_by_role("button", name="Add video").click() actor.page.get_by_role("button", name="Save").click() expect(actor.page).to_have_url(f"{actor.app_url}/{actor.handle}/master-quest")
[listing] = actor.records(LISTING_COLLECTION) media = listing["value"]["media"] assert media[0]["$type"] == "dev.starhaven.mod.listing#image" assert media[-1] == { "$type": "dev.starhaven.mod.listing#youtube", "url": "https://www.youtube.com/watch?v=aqz-KE-bpKQ", }
def test_the_details_show_a_gallery_image_and_keep_it_until_removed(actor: Actor): actor.login() actor.create_mod("master-quest", title="Master Quest") [listing] = actor.records(LISTING_COLLECTION) cid = listing["value"]["media"][0]["file"]["ref"]["$link"]
actor.page.goto(f"{actor.app_url}/{actor.handle}/master-quest/settings") actor.page.get_by_label("Details").fill(f"Look:\n\n") actor.page.get_by_role("button", name="Save").click() expect(actor.page).to_have_url(f"{actor.app_url}/{actor.handle}/master-quest")
image = actor.page.locator(".markdown img") expect(image).to_have_attribute("alt", "The title screen") image.evaluate("el => el.decode()") [listing] = actor.records(LISTING_COLLECTION) assert [i["ref"]["$link"] for i in listing["value"]["detailsImages"]] == [cid]
actor.page.goto(f"{actor.app_url}/{actor.handle}/master-quest/settings") actor.page.get_by_label("Details").fill("No pictures now.") actor.page.get_by_role("button", name="Save").click() expect(actor.page).to_have_url(f"{actor.app_url}/{actor.handle}/master-quest") [listing] = actor.records(LISTING_COLLECTION) assert "detailsImages" not in listing["value"]
def test_the_details_cannot_show_an_unknown_image(actor: Actor): actor.login() actor.create_mod("master-quest", title="Master Quest")
actor.page.goto(f"{actor.app_url}/{actor.handle}/master-quest/settings") actor.page.get_by_label("Details").fill( "" ) actor.page.get_by_role("button", name="Save").click() expect(actor.page.locator("#details-error")).to_contain_text("no longer available")