Permette titolo, testo e link diversi per Android e iOS negli avvisi.
Separa i canali app e mostra il nodo ingest nelle sessioni admin. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -10,7 +10,8 @@ RSpec.describe AppAnnouncement do
|
||||
status: "published",
|
||||
title: "Avviso",
|
||||
body: "Testo",
|
||||
show_on_app: true,
|
||||
show_on_android: true,
|
||||
show_on_ios: true,
|
||||
show_on_web_public: false,
|
||||
show_on_web_private: false
|
||||
}.merge(attrs))
|
||||
@@ -35,22 +36,55 @@ RSpec.describe AppAnnouncement do
|
||||
|
||||
it "filters by selected channels" do
|
||||
public_item = create_notice!(
|
||||
title: "Pubblico", show_on_app: false, show_on_web_public: true
|
||||
title: "Pubblico", show_on_android: false, show_on_ios: false, show_on_web_public: true
|
||||
)
|
||||
private_item = create_notice!(
|
||||
title: "Privato", show_on_app: false, show_on_web_private: true
|
||||
title: "Privato", show_on_android: false, show_on_ios: false, show_on_web_private: true
|
||||
)
|
||||
app_item = create_notice!(title: "App")
|
||||
android_item = create_notice!(title: "Android", show_on_ios: false)
|
||||
ios_item = create_notice!(title: "iOS", show_on_android: false, show_on_ios: true)
|
||||
|
||||
expect(described_class.for_channel(:web_public)).to contain_exactly(public_item)
|
||||
expect(described_class.for_channel(:web_private)).to contain_exactly(private_item)
|
||||
expect(described_class.for_app).to contain_exactly(app_item)
|
||||
expect(described_class.for_platform("android")).to contain_exactly(android_item)
|
||||
expect(described_class.for_platform("ios")).to contain_exactly(ios_item)
|
||||
expect(described_class.for_app).to contain_exactly(android_item, ios_item)
|
||||
end
|
||||
|
||||
it "uses platform-specific copy and links when present" 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"
|
||||
)
|
||||
|
||||
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")
|
||||
end
|
||||
|
||||
it "requires at least one channel" do
|
||||
item = described_class.new(
|
||||
kind: "info", status: "draft", title: "X", body: "Y",
|
||||
show_on_app: false, show_on_web_public: false, show_on_web_private: false
|
||||
show_on_android: false, show_on_ios: false,
|
||||
show_on_web_public: false, show_on_web_private: false
|
||||
)
|
||||
expect(item).not_to be_valid
|
||||
expect(item.errors[:base]).to be_present
|
||||
|
||||
@@ -18,7 +18,8 @@ RSpec.describe "Admin announcements", type: :request do
|
||||
title: "Nuova versione",
|
||||
body: "Aggiorna l'app dallo store.",
|
||||
dismissible: "1",
|
||||
show_on_app: "1",
|
||||
show_on_android: "1",
|
||||
show_on_ios: "1",
|
||||
show_on_web_public: "1",
|
||||
show_on_web_private: "0"
|
||||
}
|
||||
@@ -28,7 +29,8 @@ RSpec.describe "Admin announcements", type: :request do
|
||||
notice = AppAnnouncement.last
|
||||
expect(notice.title).to eq("Nuova versione")
|
||||
expect(notice).to be_published
|
||||
expect(notice.show_on_app).to be(true)
|
||||
expect(notice.show_on_android).to be(true)
|
||||
expect(notice.show_on_ios).to be(true)
|
||||
expect(notice.show_on_web_public).to be(true)
|
||||
expect(notice.show_on_web_private).to be(false)
|
||||
|
||||
|
||||
@@ -3,21 +3,23 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Api::V1::Announcements", type: :request do
|
||||
it "GET /api/v1/announcements senza autenticazione restituisce solo gli avvisi attivi per l'app" do
|
||||
it "GET /api/v1/announcements senza autenticazione restituisce solo gli avvisi attivi per la piattaforma" do
|
||||
AppAnnouncement.create!(
|
||||
kind: "maintenance",
|
||||
severity: "warning",
|
||||
status: "published",
|
||||
title: "Manutenzione stasera",
|
||||
body: "Dalle 23:00 alle 01:00 il servizio sarà offline.",
|
||||
show_on_app: true
|
||||
show_on_android: true,
|
||||
show_on_ios: true
|
||||
)
|
||||
AppAnnouncement.create!(
|
||||
kind: "info",
|
||||
status: "published",
|
||||
title: "Solo sito",
|
||||
body: "Non in app",
|
||||
show_on_app: false,
|
||||
show_on_android: false,
|
||||
show_on_ios: false,
|
||||
show_on_web_public: true
|
||||
)
|
||||
AppAnnouncement.create!(
|
||||
@@ -26,14 +28,27 @@ RSpec.describe "Api::V1::Announcements", type: :request do
|
||||
title: "Bozza",
|
||||
body: "Non deve uscire"
|
||||
)
|
||||
AppAnnouncement.create!(
|
||||
kind: "update",
|
||||
status: "published",
|
||||
title: "Aggiorna",
|
||||
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"
|
||||
)
|
||||
|
||||
get "/api/v1/announcements", params: { platform: "android" }
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
body = JSON.parse(response.body)
|
||||
expect(body.length).to eq(1)
|
||||
expect(body.first["title"]).to eq("Manutenzione stasera")
|
||||
expect(body.first["kind"]).to eq("maintenance")
|
||||
expect(body.first["dismissible"]).to eq(true)
|
||||
android_body = JSON.parse(response.body)
|
||||
expect(android_body.map { |row| row["title"] }).to contain_exactly("Manutenzione stasera", "Aggiorna Android")
|
||||
|
||||
get "/api/v1/announcements", params: { platform: "ios" }
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
ios_body = JSON.parse(response.body)
|
||||
expect(ios_body.map { |row| row["title"] }).to eq(["Manutenzione stasera"])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -11,12 +11,12 @@ RSpec.describe "Public site announcements", type: :request do
|
||||
AppAnnouncement.create!(
|
||||
kind: "maintenance", status: "published", title: "Manutenzione sito",
|
||||
body: "Stasera il sito sarà offline.",
|
||||
show_on_app: false, show_on_web_public: true, show_on_web_private: false
|
||||
show_on_android: false, show_on_ios: false, show_on_web_public: true, show_on_web_private: false
|
||||
)
|
||||
AppAnnouncement.create!(
|
||||
kind: "info", status: "published", title: "Solo soci",
|
||||
body: "Messaggio interno.",
|
||||
show_on_app: false, show_on_web_public: false, show_on_web_private: true
|
||||
show_on_android: false, show_on_ios: false, show_on_web_public: false, show_on_web_private: true
|
||||
)
|
||||
|
||||
get root_path
|
||||
@@ -30,12 +30,12 @@ RSpec.describe "Public site announcements", type: :request do
|
||||
AppAnnouncement.create!(
|
||||
kind: "info", status: "published", title: "Solo soci",
|
||||
body: "Messaggio interno.",
|
||||
show_on_app: false, show_on_web_public: false, show_on_web_private: true
|
||||
show_on_android: false, show_on_ios: false, show_on_web_public: false, show_on_web_private: true
|
||||
)
|
||||
AppAnnouncement.create!(
|
||||
kind: "info", status: "published", title: "Manutenzione sito",
|
||||
body: "Stasera il sito sarà offline.",
|
||||
show_on_app: false, show_on_web_public: true, show_on_web_private: false
|
||||
show_on_android: false, show_on_ios: false, show_on_web_public: true, show_on_web_private: false
|
||||
)
|
||||
|
||||
post public_login_path, params: { email: coach.email, password: "Password123" }
|
||||
|
||||
Reference in New Issue
Block a user