chore: settle product naming across app, widget and deployments
One word everywhere: ReplyPier in UI copy, package and image names, the replypier.site domains (app/api/docs/help), REPLYPIER_* settings and the --rp-* design tokens. - public widget API is window.ReplyPier with replypierId / replypierBaseUrl / replypierConfig / replypierToken, loader at webclient/replypier.min.js; both bundles rebuilt from source - NOTICE, llms.txt, CONTRIBUTING, HELP_CENTER_INFRA and the demo runtime config rewritten; the demo config ships no third-party keys - migration adds the ReplyPier managed model value to the AI model enum - local compose project, database, role, volume and Docker network carry the same name
This commit is contained in:
1 parent
ff0a09f0e5
commit
20fef2b9f3
1156 files changed
+7267
-7148
No files matched your search
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
Copyright 2024-2026 ChatterMate
|
||||
Copyright 2024-2026 ReplyPier
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -34,7 +34,7 @@ from app.models.help_center import HelpCenterSettings
|
||||
from app.repositories.faq import FAQRepository
|
||||
from app.services.help_center_public import contrast_ink, resolve_help_center, slug_for_host
|
||||
|
||||
HOST = "test-org.chattermate.help"
|
||||
HOST = "test-org.help.replypier.site"
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
@@ -108,9 +108,9 @@ def path_client(db, monkeypatch):
|
||||
# ---------- helpers ----------
|
||||
|
||||
def test_slug_for_host():
|
||||
assert slug_for_host("acme.chattermate.help") == "acme"
|
||||
assert slug_for_host("a.b.chattermate.help") is None
|
||||
assert slug_for_host("chattermate.help") is None
|
||||
assert slug_for_host("acme.help.replypier.site") == "acme"
|
||||
assert slug_for_host("a.b.help.replypier.site") is None
|
||||
assert slug_for_host("help.replypier.site") is None
|
||||
assert slug_for_host("help.acme.com") is None
|
||||
|
||||
|
||||
@@ -279,7 +279,7 @@ def test_widget_embed_points_at_this_install(
|
||||
client, db, test_organization, help_center, test_widget, monkeypatch
|
||||
):
|
||||
"""The loader falls back to the API URL baked in at build time (the vendor
|
||||
cloud) unless the page sets window.chattermateBaseUrl. Without it, a
|
||||
cloud) unless the page sets window.replypierBaseUrl. Without it, a
|
||||
self-hosted help center asks the wrong backend for its widget and the
|
||||
visitor gets "Chat Unavailable"."""
|
||||
monkeypatch.setattr(settings, "BACKEND_URL", "https://api.selfhosted.example")
|
||||
@@ -287,8 +287,8 @@ def test_widget_embed_points_at_this_install(
|
||||
db.commit()
|
||||
|
||||
r = client.get("/", headers={"host": HOST})
|
||||
assert f'window.chattermateId = "{test_widget.id}"' in r.text
|
||||
assert 'window.chattermateBaseUrl = "https://api.selfhosted.example/api/v1"' in r.text
|
||||
assert f'window.replypierId = "{test_widget.id}"' in r.text
|
||||
assert 'window.replypierBaseUrl = "https://api.selfhosted.example/api/v1"' in r.text
|
||||
|
||||
|
||||
def test_custom_domain_page_is_self_contained(
|
||||
@@ -316,7 +316,7 @@ def test_custom_domain_page_is_self_contained(
|
||||
'<meta property="og:image" content="https://help.customer.com/api/v1/uploads/help_center/logo.png">'
|
||||
in r.text
|
||||
)
|
||||
assert 'window.chattermateBaseUrl = "https://api.selfhosted.example/api/v1"' in r.text
|
||||
assert 'window.replypierBaseUrl = "https://api.selfhosted.example/api/v1"' in r.text
|
||||
|
||||
|
||||
def test_og_card_degrades_without_a_logo(client, db, test_organization, help_center):
|
||||
@@ -336,7 +336,7 @@ def test_search_filters_results(client, db, test_organization, help_center):
|
||||
|
||||
|
||||
def test_disabled_or_unknown_hosts_404(client, db, test_organization, help_center):
|
||||
assert client.get("/", headers={"host": "nope.chattermate.help"}).status_code == 404
|
||||
assert client.get("/", headers={"host": "nope.help.replypier.site"}).status_code == 404
|
||||
help_center.enabled = False
|
||||
db.commit()
|
||||
assert client.get("/", headers={"host": HOST}).status_code == 404
|
||||
@@ -480,9 +480,9 @@ def test_ask_unanswerable_503(client, db, test_organization, help_center, test_a
|
||||
# ---------- host dispatch ----------
|
||||
|
||||
def test_is_help_center_host_matches_subdomains_only():
|
||||
assert is_help_center_host("acme.chattermate.help") is True
|
||||
assert is_help_center_host("chattermate.help") is False
|
||||
assert is_help_center_host("api.chattermate.chat") is False
|
||||
assert is_help_center_host("acme.help.replypier.site") is True
|
||||
assert is_help_center_host("help.replypier.site") is False
|
||||
assert is_help_center_host("api.replypier.site") is False
|
||||
assert is_help_center_host("") is False
|
||||
|
||||
|
||||
@@ -566,7 +566,7 @@ def test_preserved_path_drives_canonical_and_json_ld(
|
||||
|
||||
r = client.get(MIGRATED_PATH, headers={"host": HOST})
|
||||
|
||||
expected = f"https://test-org.chattermate.help{MIGRATED_PATH}"
|
||||
expected = f"https://test-org.help.replypier.site{MIGRATED_PATH}"
|
||||
assert f'<link rel="canonical" href="{expected}">' in r.text
|
||||
assert f'<meta property="og:url" content="{expected}">' in r.text
|
||||
graph = json.loads(re.search(
|
||||
@@ -583,7 +583,7 @@ def test_sitemap_lists_the_preserved_path(client, db, test_organization, help_ce
|
||||
|
||||
r = client.get("/sitemap.xml", headers={"host": HOST})
|
||||
|
||||
assert f"<loc>https://test-org.chattermate.help{MIGRATED_PATH}</loc>" in r.text
|
||||
assert f"<loc>https://test-org.help.replypier.site{MIGRATED_PATH}</loc>" in r.text
|
||||
assert "/a/how-do-i-reset-my-password" not in r.text
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user