Alerty cenowe na serwerze - powiadomienia tylko w serwisie
Deploy Polska Lokalnie / deploy (push) Successful in 22s

Alerty liczyla dotad przegladarka, wiec dzialaly wylacznie przy otwartej
stronie, a rynek porownywaly malymi literami ("wtorny" vs "Wtórny"),
przez co alert lokalizacji z wybranym rynkiem nigdy nie mial danych.

Teraz: tabele price_alerts i price_alert_events, /api/price-alerts oraz
codzienny przeglad o 03:00 (po nocnym zapisie srednich cen). Ogloszenie -
powiadomienie przy kazdej zmianie ceny; lokalizacja - przy zmianie
sredniej o co najmniej 2%. Wynik trafia wylacznie na liste powiadomien
uzytkownika; alerty nie wysylaja zadnych e-maili.

Alerty zalozone w przegladarce przenosimy raz przy pierwszym wejsciu.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-23 18:00:40 +02:00
parent 008223f311
commit a4457df5f8
11 changed files with 1040 additions and 535 deletions
+35
View File
@@ -620,3 +620,38 @@ test.describe('Historia cen', () => {
await expect(page.locator('main')).toContainText('Kraków');
});
});
// Alerty cenowe sa na koncie: zmiany wykrywa serwer, a powiadomienie trafia na liste w serwisie.
test.describe('Alerty cenowe', () => {
test('alert ogloszenia przezywa wyczyszczenie pamieci przegladarki', async ({ page }) => {
await login(page);
await goto(page, ROUTES.buy);
await page.locator('.real-result-card').first().waitFor();
const href = await page.locator('.real-result-card .card-stretched-link').first().getAttribute('href');
await goto(page, href!);
const alertButton = page.locator('.listing-detail-alert');
if ((await alertButton.innerText()).includes('aktywny')) {
await alertButton.click();
await expect(alertButton).toHaveText(/Utwórz alert ceny/);
}
await alertButton.click();
await expect(alertButton).toHaveText(/Alert aktywny/);
// Symulacja innego urzadzenia: zostaje sam token logowania.
await page.evaluate(() => {
const token = window.localStorage.getItem('polskalokalnie-auth-token');
window.localStorage.clear();
if (token) {
window.localStorage.setItem('polskalokalnie-auth-token', token);
}
});
await goto(page, ROUTES.accountPriceAlerts);
await expect(page.locator('.price-alerts-list-section')).not.toContainText('Nie obserwujesz jeszcze żadnego ogłoszenia');
// Sprzatanie: alert zdejmujemy tam, gdzie zostal zalozony.
await goto(page, href!);
await page.locator('.listing-detail-alert').click();
await expect(page.locator('.listing-detail-alert')).toHaveText(/Utwórz alert ceny/);
});
});