Aggiunge traduzioni it/en/fr/de/es agli avvisi e toglie gli override Android/iOS.
Un avviso ha un testo per lingua; per differenziare le piattaforme si creano due avvisi. L'app riceve già il copy risolto da Accept-Language. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -51,33 +51,22 @@ RSpec.describe AppAnnouncement do
|
||||
expect(described_class.for_app).to contain_exactly(android_item, ios_item)
|
||||
end
|
||||
|
||||
it "uses platform-specific copy and links when present" do
|
||||
it "serves translated copy and falls back to English then Italian" do
|
||||
item = create_notice!(
|
||||
title: "Comune",
|
||||
body: "Testo comune",
|
||||
action_url: "https://example.com/comune",
|
||||
action_label: "Apri",
|
||||
android_title: "Aggiorna su Android",
|
||||
android_body: "Apri Play Store",
|
||||
android_action_url: "https://play.google.com/store/apps/details?id=com.matchlivetv.match_live_tv",
|
||||
android_action_label: "Play Store",
|
||||
ios_title: "Aggiorna su iOS",
|
||||
ios_body: "Apri App Store",
|
||||
ios_action_url: "https://apps.apple.com/app/id000",
|
||||
ios_action_label: "App Store"
|
||||
title: "Titolo IT",
|
||||
body: "Testo IT",
|
||||
translations: {
|
||||
"en" => { "title" => "EN title", "body" => "EN body" },
|
||||
"de" => { "title" => "DE title", "body" => "DE body" }
|
||||
}
|
||||
)
|
||||
|
||||
android = item.as_api_json(platform: "android")
|
||||
ios = item.as_api_json(platform: "ios")
|
||||
|
||||
expect(android[:title]).to eq("Aggiorna su Android")
|
||||
expect(android[:body]).to eq("Apri Play Store")
|
||||
expect(android[:action_url]).to include("play.google.com")
|
||||
expect(android[:action_label]).to eq("Play Store")
|
||||
expect(ios[:title]).to eq("Aggiorna su iOS")
|
||||
expect(ios[:body]).to eq("Apri App Store")
|
||||
expect(ios[:action_url]).to include("apps.apple.com")
|
||||
expect(ios[:action_label]).to eq("App Store")
|
||||
expect(item.as_api_json(locale: :en)[:title]).to eq("EN title")
|
||||
expect(item.as_api_json(locale: :de)[:title]).to eq("DE title")
|
||||
expect(item.as_api_json(locale: :fr)[:title]).to eq("EN title")
|
||||
expect(item.as_api_json(locale: :it)[:title]).to eq("Titolo IT")
|
||||
expect(item.filled_locale_codes).to include("it", "en", "de")
|
||||
expect(item.filled_locale_codes).not_to include("fr")
|
||||
end
|
||||
|
||||
it "requires at least one channel" do
|
||||
|
||||
@@ -39,6 +39,42 @@ RSpec.describe "Admin announcements", type: :request do
|
||||
expect(response.body).to include(I18n.t("admin.announcements.channels.web_public"))
|
||||
end
|
||||
|
||||
it "salva le traduzioni e mostra le schede lingua nel form" do
|
||||
get new_admin_announcement_path
|
||||
expect(response.body).to include(I18n.t("admin.announcements.form.locales_legend"))
|
||||
expect(response.body).to include("English")
|
||||
expect(response.body).to include("Français")
|
||||
expect(response.body).to include("Deutsch")
|
||||
expect(response.body).to include("Español")
|
||||
expect(response.body).not_to include("name=\"app_announcement[android_title]\"")
|
||||
expect(response.body).not_to include("name=\"app_announcement[ios_title]\"")
|
||||
|
||||
post admin_announcements_path, params: {
|
||||
app_announcement: {
|
||||
kind: "info",
|
||||
severity: "info",
|
||||
status: "published",
|
||||
title: "Nuova versione",
|
||||
body: "Aggiorna l'app dallo store.",
|
||||
dismissible: "1",
|
||||
show_on_android: "1",
|
||||
show_on_ios: "1",
|
||||
show_on_web_public: "1",
|
||||
show_on_web_private: "0",
|
||||
translations: {
|
||||
en: { title: "A new version is out", body: "Update the app from the store." },
|
||||
fr: { title: "Nouvelle version", body: "Mettez à jour l'application." }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
expect(response).to redirect_to(admin_announcements_path)
|
||||
notice = AppAnnouncement.last
|
||||
expect(notice.translations["en"]["title"]).to eq("A new version is out")
|
||||
expect(notice.translations["fr"]["title"]).to eq("Nouvelle version")
|
||||
expect(notice.as_api_json(locale: :en)[:title]).to eq("A new version is out")
|
||||
end
|
||||
|
||||
it "elimina un avviso" do
|
||||
item = AppAnnouncement.create!(
|
||||
kind: "info", status: "published", title: "Da togliere", body: "Test"
|
||||
|
||||
@@ -31,12 +31,10 @@ RSpec.describe "Api::V1::Announcements", type: :request do
|
||||
AppAnnouncement.create!(
|
||||
kind: "update",
|
||||
status: "published",
|
||||
title: "Aggiorna",
|
||||
title: "Aggiorna Android",
|
||||
body: "Versione nuova",
|
||||
show_on_android: true,
|
||||
show_on_ios: false,
|
||||
android_title: "Aggiorna Android",
|
||||
android_action_url: "https://play.google.com/store/apps/details?id=com.matchlivetv.match_live_tv"
|
||||
show_on_ios: false
|
||||
)
|
||||
|
||||
get "/api/v1/announcements", params: { platform: "android" }
|
||||
@@ -51,4 +49,29 @@ RSpec.describe "Api::V1::Announcements", type: :request do
|
||||
ios_body = JSON.parse(response.body)
|
||||
expect(ios_body.map { |row| row["title"] }).to eq(["Manutenzione stasera"])
|
||||
end
|
||||
|
||||
it "GET /api/v1/announcements localizza il testo da Accept-Language" do
|
||||
AppAnnouncement.create!(
|
||||
kind: "info",
|
||||
status: "published",
|
||||
title: "Manutenzione stasera",
|
||||
body: "Dalle 23:00 il servizio sarà offline.",
|
||||
show_on_android: true,
|
||||
show_on_ios: true,
|
||||
translations: {
|
||||
"en" => { "title" => "Maintenance tonight", "body" => "The service will be offline from 23:00." }
|
||||
}
|
||||
)
|
||||
|
||||
get "/api/v1/announcements", params: { platform: "android" }, headers: { "Accept-Language" => "en-US,en;q=0.9" }
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
payload = JSON.parse(response.body)
|
||||
expect(payload.first["title"]).to eq("Maintenance tonight")
|
||||
expect(payload.first["body"]).to include("offline")
|
||||
|
||||
get "/api/v1/announcements", params: { platform: "android" }, headers: { "Accept-Language" => "fr" }
|
||||
|
||||
expect(JSON.parse(response.body).first["title"]).to eq("Maintenance tonight")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,6 +26,24 @@ RSpec.describe "Public site announcements", type: :request do
|
||||
expect(response.body).not_to include("Solo soci")
|
||||
end
|
||||
|
||||
it "mostra la traduzione inglese sul sito pubblico" do
|
||||
AppAnnouncement.create!(
|
||||
kind: "maintenance", status: "published", title: "Manutenzione sito",
|
||||
body: "Stasera il sito sarà offline.",
|
||||
show_on_android: false, show_on_ios: false, show_on_web_public: true, show_on_web_private: false,
|
||||
translations: {
|
||||
"en" => { "title" => "Website maintenance", "body" => "The site will be offline tonight." }
|
||||
}
|
||||
)
|
||||
|
||||
cookies[:mltv_locale] = "en"
|
||||
get root_path
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).to include("Website maintenance")
|
||||
expect(response.body).not_to include("Manutenzione sito")
|
||||
end
|
||||
|
||||
it "mostra gli avvisi privati nell'area account dopo il login" do
|
||||
AppAnnouncement.create!(
|
||||
kind: "info", status: "published", title: "Solo soci",
|
||||
|
||||
Reference in New Issue
Block a user