Aggiunge annunci in-app/sito, contatti e migliora UI copertina sul portale.
Include admin/API/banner nativi, form contatti e reset copertina standard con layout edit più ampio. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Admin announcements", type: :request do
|
||||
let!(:admin) { AdminAccount.create!(username: "ops-news", password: "Password123") }
|
||||
|
||||
before do
|
||||
post admin_login_path, params: { username: "ops-news", password: "Password123" }
|
||||
end
|
||||
|
||||
it "crea e pubblica un avviso visibile alle app e al sito" do
|
||||
post admin_announcements_path, params: {
|
||||
app_announcement: {
|
||||
kind: "update",
|
||||
severity: "info",
|
||||
status: "published",
|
||||
title: "Nuova versione",
|
||||
body: "Aggiorna l'app dallo store.",
|
||||
dismissible: "1",
|
||||
show_on_app: "1",
|
||||
show_on_web_public: "1",
|
||||
show_on_web_private: "0"
|
||||
}
|
||||
}
|
||||
|
||||
expect(response).to redirect_to(admin_announcements_path)
|
||||
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_web_public).to be(true)
|
||||
expect(notice.show_on_web_private).to be(false)
|
||||
|
||||
get admin_announcements_path
|
||||
expect(response.body).to include("Nuova versione")
|
||||
expect(response.body).to include(I18n.t("admin.announcements.channels.web_public"))
|
||||
end
|
||||
|
||||
it "elimina un avviso" do
|
||||
item = AppAnnouncement.create!(
|
||||
kind: "info", status: "published", title: "Da togliere", body: "Test"
|
||||
)
|
||||
|
||||
delete admin_announcement_path(item)
|
||||
|
||||
expect(response).to redirect_to(admin_announcements_path)
|
||||
expect(AppAnnouncement.find_by(id: item.id)).to be_nil
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,39 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
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
|
||||
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
|
||||
)
|
||||
AppAnnouncement.create!(
|
||||
kind: "info",
|
||||
status: "published",
|
||||
title: "Solo sito",
|
||||
body: "Non in app",
|
||||
show_on_app: false,
|
||||
show_on_web_public: true
|
||||
)
|
||||
AppAnnouncement.create!(
|
||||
kind: "info",
|
||||
status: "draft",
|
||||
title: "Bozza",
|
||||
body: "Non deve uscire"
|
||||
)
|
||||
|
||||
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)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,48 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Public site announcements", type: :request do
|
||||
let!(:coach) do
|
||||
User.create!(email: "news-coach@test.it", name: "Coach", password: "Password123", role: "coach")
|
||||
end
|
||||
|
||||
it "mostra gli avvisi pubblici in home e non quelli privati" 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
|
||||
)
|
||||
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
|
||||
)
|
||||
|
||||
get root_path
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).to include("Manutenzione sito")
|
||||
expect(response.body).not_to include("Solo soci")
|
||||
end
|
||||
|
||||
it "mostra gli avvisi privati nell'area account dopo il login" 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
|
||||
)
|
||||
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
|
||||
)
|
||||
|
||||
post public_login_path, params: { email: coach.email, password: "Password123" }
|
||||
get public_account_path
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body).to include("Solo soci")
|
||||
expect(response.body).not_to include("Manutenzione sito")
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user