mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-11-03 18:53:17 -05:00 
			
		
		
		
	* add document title to server spa meta * removed conflicting useMeta * replaced head with useMeta * formalized metadata injection * small injection refactor * added tests * added missing global tag * fixed setting tab title for logged-in users * simplified metadata update * remove duplicate tag and fix for foreign users * add metadata for shared recipes * added default recipe image * fixed shared URL --------- Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from bs4 import BeautifulSoup
 | 
						|
 | 
						|
from mealie.routes.spa import MetaTag, inject_meta, inject_recipe_json
 | 
						|
from tests import data as test_data
 | 
						|
from tests.utils.factories import random_string
 | 
						|
 | 
						|
 | 
						|
def test_spa_metadata_injection():
 | 
						|
    fp = test_data.html_mealie_recipe
 | 
						|
    with open(fp) as f:
 | 
						|
        soup = BeautifulSoup(f, "lxml")
 | 
						|
        assert soup.html and soup.html.head
 | 
						|
 | 
						|
        tags = soup.find_all("meta")
 | 
						|
        assert tags
 | 
						|
 | 
						|
        title_tag = None
 | 
						|
        for tag in tags:
 | 
						|
            if tag.get("data-hid") == "og:title":
 | 
						|
                title_tag = tag
 | 
						|
                break
 | 
						|
 | 
						|
        assert title_tag and title_tag["content"]
 | 
						|
 | 
						|
        new_title_tag = MetaTag(hid="og:title", property_name="og:title", content=random_string())
 | 
						|
        new_arbitrary_tag = MetaTag(hid=random_string(), property_name=random_string(), content=random_string())
 | 
						|
        new_html = inject_meta(str(soup), [new_title_tag, new_arbitrary_tag])
 | 
						|
 | 
						|
    # verify changes were injected
 | 
						|
    soup = BeautifulSoup(new_html, "lxml")
 | 
						|
    assert soup.html and soup.html.head
 | 
						|
 | 
						|
    tags = soup.find_all("meta")
 | 
						|
    assert tags
 | 
						|
 | 
						|
    title_tag = None
 | 
						|
    for tag in tags:
 | 
						|
        if tag.get("data-hid") == "og:title":
 | 
						|
            title_tag = tag
 | 
						|
            break
 | 
						|
 | 
						|
    assert title_tag and title_tag["content"] == new_title_tag.content
 | 
						|
 | 
						|
    arbitrary_tag = None
 | 
						|
    for tag in tags:
 | 
						|
        if tag.get("data-hid") == new_arbitrary_tag.hid:
 | 
						|
            arbitrary_tag = tag
 | 
						|
            break
 | 
						|
 | 
						|
    assert arbitrary_tag and arbitrary_tag["content"] == new_arbitrary_tag.content
 | 
						|
 | 
						|
 | 
						|
def test_spa_recipe_json_injection():
 | 
						|
    recipe_name = random_string()
 | 
						|
    schema = {
 | 
						|
        "@context": "https://schema.org",
 | 
						|
        "@type": "Recipe",
 | 
						|
        "name": recipe_name,
 | 
						|
    }
 | 
						|
 | 
						|
    fp = test_data.html_mealie_recipe
 | 
						|
    with open(fp) as f:
 | 
						|
        soup = BeautifulSoup(f, "lxml")
 | 
						|
        assert "https://schema.org" not in str(soup)
 | 
						|
 | 
						|
        html = inject_recipe_json(str(soup), schema)
 | 
						|
 | 
						|
    assert "@context" in html
 | 
						|
    assert "https://schema.org" in html
 | 
						|
    assert recipe_name in html
 |