Aggiunge la possibilità di inviare notifiche push personalizzate dall'admin
Nella tab Notifiche della dashboard admin è ora possibile mostrare anche i giocatori senza notifiche attive e inviare un messaggio libero a tutta la squadra o a un singolo giocatore, tramite un nuovo endpoint /api/public/notifica-personalizzata che riusa lo stesso pattern di invio delle altre route push admin. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -230,6 +230,13 @@ try {
|
||||
}
|
||||
});
|
||||
|
||||
await prova("l'invio di un messaggio personalizzato chiede le credenziali", async () => {
|
||||
assert.equal(
|
||||
(await postJson("/api/public/notifica-personalizzata", { messaggio: "prova" })).status,
|
||||
401,
|
||||
);
|
||||
});
|
||||
|
||||
await prova("un token malformato non passa", async () => {
|
||||
const res = await fetch(url("/api/public/sollecita-presenze"), {
|
||||
method: "POST",
|
||||
|
||||
@@ -107,6 +107,31 @@ if (!locale) {
|
||||
assert.equal(res.status, 404, `${percorso}: superato l'accesso, evento inesistente`);
|
||||
}
|
||||
});
|
||||
|
||||
/** Messaggio libero: stesso controllo d'accesso, corpo diverso. */
|
||||
const chiamaMessaggio = (intestazioni: Record<string, string> = {}) =>
|
||||
fetch(`${server.baseUrl}/api/public/notifica-personalizzata`, {
|
||||
method: "POST",
|
||||
headers: { "content-type": "application/json", ...intestazioni },
|
||||
body: JSON.stringify({ messaggio: "prova" }),
|
||||
});
|
||||
|
||||
await prova("senza token non si manda un messaggio personalizzato", async () => {
|
||||
assert.equal((await chiamaMessaggio()).status, 401);
|
||||
});
|
||||
|
||||
await prova("un giocatore autenticato non manda messaggi personalizzati", async () => {
|
||||
const res = await chiamaMessaggio({ authorization: `Bearer ${tokenGiocatore}` });
|
||||
assert.equal(res.status, 403);
|
||||
});
|
||||
|
||||
await prova("un amministratore manda il messaggio (nessun dispositivo iscritto)", async () => {
|
||||
const res = await chiamaMessaggio({ authorization: `Bearer ${tokenAdmin}` });
|
||||
assert.equal(res.status, 200);
|
||||
const corpo = (await res.json()) as { inviate: number; destinatari: number };
|
||||
assert.equal(corpo.destinatari, 0);
|
||||
assert.equal(corpo.inviate, 0);
|
||||
});
|
||||
} finally {
|
||||
server.stop();
|
||||
for (const id of idUtenti) {
|
||||
|
||||
Reference in New Issue
Block a user