Dodaj prawdziwe wiadomosci miedzy uzytkownikami o ogloszeniach
Deploy Polska Lokalnie / deploy (push) Successful in 12s
Deploy Polska Lokalnie / deploy (push) Successful in 12s
Dotad rozmowy z kupujacymi istnialy tylko w przegladarce nadawcy: nic nie trafialo na serwer, "odczytano" i odpowiedz sprzedajacego byly symulowane timerem. Wzorem Gieldy Komunalnej: Backend (/api/conversations): - Conversation: jeden watek na pare (ogloszenie, kupujacy), sprzedajacy to wlasciciel ogloszenia; tytul ogloszenia zapisany na wypadek jego usuniecia. Wiadomosci w istniejacej tabeli messages z nowa kolumna conversation_id, wiec rozmowa z administracja (conversation_id = null) dziala bez zmian. - start/list/get/reply, blokada (UserBlock, w obu kierunkach), ukrycie rozmowy u siebie (nowa wiadomosc przywraca ja obu stronom). Dostep tylko dla stron rozmowy, filtr niedozwolonych slow jak w reszcie serwisu. - Po zatwierdzeniu transakcji odbiorca dostaje powiadomienie w serwisie i - jesli ma wlaczone powiadomienia o wiadomosciach - e-mail (w tle). - /api/messages/unread-count wlicza rozmowy o ogloszeniach. - Zgloszenie uzytkownika z rozmowy: zgloszonego, ogloszenie i tresc rozmowy serwer bierze z bazy, nie z przegladarki. Frontend: - Adresy /wiadomosci/:conversationId, /wiadomosci/administracja i /wiadomosci/nowa/:listingId zamiast rozmowy w location.state. - Lista rozmow odswiezana co 30 s, otwarta rozmowa co 4 s. - Zdjecia w wiadomosciach usuniete - serwer ich nie przyjmuje (rozmowa z administracja i tak je gubila). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { test, expect, type Page } from '@playwright/test';
|
||||
import { ROUTES } from '../src/routes';
|
||||
import { ROUTES, ADMIN_CONVERSATION_SLUG, conversationPath, newConversationPath } from '../src/routes';
|
||||
|
||||
// Standard projektu (AGENTS.md): kazdy widok ma wlasny URL obslugiwany przez React Router,
|
||||
// a nawigacja odbywa sie przez <Link>/<NavLink>. Te testy pilnuja tej zasady.
|
||||
@@ -28,6 +28,8 @@ const PROTECTED_ROUTES = [
|
||||
ROUTES.account,
|
||||
ROUTES.favorites,
|
||||
ROUTES.messages,
|
||||
conversationPath(ADMIN_CONVERSATION_SLUG),
|
||||
newConversationPath(1),
|
||||
ROUTES.add,
|
||||
ROUTES.admin,
|
||||
`${ROUTES.admin}/leady`,
|
||||
@@ -373,3 +375,25 @@ test.describe('Naglowek', () => {
|
||||
await expect(brand).toContainText('ogłoszenia za darmo');
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('Wiadomosci', () => {
|
||||
test('"Napisz wiadomosc" w ogloszeniu otwiera rozmowe pod wlasnym adresem', 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!);
|
||||
|
||||
await page.getByRole('button', { name: /Napisz wiadomość/ }).first().click();
|
||||
await page.waitForFunction(() => /^\/wiadomosci\/nowa\/\d+$/.test(window.location.pathname));
|
||||
// Adres szkicu dziala po odswiezeniu - rozmowa nie zalezy od stanu nawigacji.
|
||||
await page.reload();
|
||||
await expect(page.locator('.messages-composer input[type=text]')).toBeVisible();
|
||||
});
|
||||
|
||||
test('nieistniejaca rozmowa wraca na liste wiadomosci', async ({ page }) => {
|
||||
await login(page);
|
||||
await goto(page, conversationPath(999999));
|
||||
await page.waitForFunction(() => window.location.pathname === '/wiadomosci');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user