Mam w swojej aplikacji trzy role i chciałbym przetestować czy zostanie zwrócony odpowiedni błąd jeśli użytkownik nie ma roli admina i próbuje strzelić na endpoint dla admina. W testach mam porobione metody np. sendRequestAsUser, która wyciąga użytkownika z rolą USER z bazy, generuje JWT i zwraca token jako String. Pierwsze co przyszło mi do głowy to napisanie testu sparametryzowanego żeby nie powtarzać kodu, ale tutaj pojawia się problem, bo do adnotacji MethodSource
W gwoli jasności, to możliwe jest przekazanie niestatycznej metody do @MethodSource zmieniając cykl życia testu adnotacją - @TestInstance(PER_CLASS).

Możliwe, że twoją weryfikację da się zrealizować jeszcze łatwiej (bez bazy danych). Z MockMvc mogłoby to wyglądać w następujący sposób: mockMvc.perform(get(...).with(SecurityMockMvcRequestPostProcessors.user().roles(Role.ADMIN))
więc @MethodSource mógłby parametryzować Role albo cały RequestPostProcessor. Tutaj będzie zwykły Springowy User ale tych RequestPostProcessor jest sporo (są też związane z OAuth2).

Jeżeli chcesz WebTestClient to tam to się nazywa
Chcę stworzyć metodę w springowym kontrolerze, z endpointem pod który wyślę dużo danych (dostałem jsona z 20 polami, ale może być ich więcej w przyszłości). i te dane prześlę dalej robiąc calla do zewnętrznego api żeby wyciągnąć jakieś tam dane biznesowe.

No i tu pytanie. Mówią, że GET służy do pobierania danych a POST tylko do zmiany stanu. Ale raczej nie jest to bezpieczne wysyłać te dane w urlu, co wtedy? Można
@mirek_dev: GET może mieć body

Niestety nie jest to dobrym pomysłem bo dużo bibliotek / serwerów / proxy HTTP nadinterpretuje specyfikację (lub zostało zakodowana na bazie nieaktualnej, sprzed 2014) i potrafi robić różne dziwne rzeczy jak np. ignorować body w GET albo nie pozwala go dodać po stronie klienta itp. - jeśli tak jest to jest to radosna twórczość tychże bibliotek, bo obecnie obowiązująca specyfikacja HTTP nie zabrania.

A payload within
Mirasy chciałem napisać integracyjny test uderzając pod dany endpoint w controllerze gdzie używam spring webfluxa i w którymś z kolei serwisie uderzam do dwóch zewnętrznych apek. I właśnie te dwa calle chciałem zmockować, ale otrzymuję timeout. Korzystam z WebTestClient i MockWebServer.
Tutaj więcej szczegółów i kod. Pomoże ktoś? Bo siedzę już którąś godzinę nad tym ( ͡° ʖ̯ ͡°)
https://stackoverflow.com/questions/77957328/mocking-webclient-response-in-integration-test-using-mockwebserver-or-alternativ

#spring #springboot #programista15k #programowanie #java
@mirek_dev: akurat z webfluxa nie korzystałem nigdy. Próbowałeś na próbę użyć jakiegoś standardowego, niereaktywnego rest clienta?
To co opisał @farowy to też rozwiązanie, ale to już znacznie więcej roboty, żeby później to jeszcze osetapować na środowisku testowym itp
@Nofenak: Imho największy sens ma dzielenie według konsumenta API. Np. jeśli masz publiczne API, API pod frontend użytkownika i pod frontend admina, to powinny mieć one własne ścieżki. Wtedy masz największą elastyczność przy zmianie poszczególnych endpointów i wiesz na których konsumentów wpłyną te zmiany. Dodatkowo można pod każdego konsumenta ustawić stosowne nagłówki, caching, itp.
Cześć,
stworzyłem sobie klasę pomocniczą do rejestracji w której trzymam jsony:

public class RegistrationControllerHelper {
public static final String validCredentials =
"{\"username\": \"New\", \"email\": \"new@mail.com\", \"password\": \"Password#3\"}";
public static final String invalidCredentials =
"{\"username\": \"invalid\", \"email\": \"invalid\", \"password\": \"invalid\"}";
public static final String malformedRequest =
"{\"username\": \"New\", \"email\": \"new@mail.com\", \"password\": \"Password#3\"";
public static final String emptyCredentials =
"{\"username\": \"\", \"email\": \"\", \"password\": \"\"}";
}

I teraz pytanie na takim przykładzie. Mam taki
@Kamishimi:
1. Nie tworzyłbym żadnych Helperów - co taka klasa oznacza? Sam widzisz, że nie do końca wiesz co ona robi i tak ją nazwałeś ( ͡° ͜ʖ ͡°)
2. Jeżeli jest to używane tylko przez test to dałbym to do klasy testowej
3. W nowszej wersji Java możesz użyć """ aby zrobić wielolinijkowy String i wtedy nie bedziesz musiał escepować \"
4. Nie wiem jaka jest
@Kamishimi:
1. Dalej nie widzę sensu wydzielanai osobnej klasy

new RegisterRequest("New", "new@mail.com", "Password#3");
to nie jest jakaś skomplikowana logika którą należy wydzielić, tylko integralna część testu
2. Jak już chcesz coś wydzielac to raczej to mapowanie
.content(asJsonString(new EmployeeVO(null, "firstName4", "lastName4", "email4@mail.com")))
https://howtodoinjava.com/spring-boot2/testing/spring-boot-mockmvc-example/
3. Ten @Transactional raczej nie jest potrzebny
Cześć,
bawię się trochę w refactor testów w celu zwiększenia ich czytelności. Miałbym dwa pytania, zobrazujmy sobie je na przykładzie.
Oto klasa którą testuję:

@Component
class CookieDeleterImpl implements CookieDeleter {
@OverRide
public void deleteCookie(HttpServletRequest request, HttpServletResponse response, String name) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
Arrays.stream(cookies)
.filter(cookie -> name.equals(cookie.getName()))
.forEach(cookie -> {
cookie.setValue(null);
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
});
}
}
}

Klasa testowa:

public class CookieDeleterImplTest {
private CookieDeleterImpl
zainteresowałem się spring webflux oraz jego functional api i jakieś takie chu*owe to się wydaje, ale może mam do tego złe podejście? zamiast czytelnych deklaracji endpointów z jawnie zadeklarowanymi parametrami i zwrotką mam jakieś routingi i handlery bez jawnych typów. bez wczytywania się w kod nie wiadomo co jaki endpoint przyjmuje i co zwraca. to trochę tak jakby się cofnąć w czasie z typów generycznych do typów, które po prostu przechowują Object,
@ly000: Ogólnie to bym chyba odpuścił webflux, bo wraz z nadejściem Project Loom (Java 21) mamy wirtualne wątki, które częściowo rozwiązują problemy które ma rozwiązywać webflux

@Saly:

a handler nie jest mocno typowany? Nie rozumiem gdzie jest problem. Możesz podać przykład z kodem?

no nie jest w tym sensie, że masz ServerResponse i ServerRequest, które mogą przechowywać wszystko. musisz się wczytać w definicję metody, żeby sprawdzić czego oczekuje dany endpoint i co zwraca.

w podejściu z kontrolerem miałbyś coś w tym stylu:

public class PersonController {
public List<Person> listPeople() {
}

public Person createPerson(Person person) {
}
Cześć, potrzebuję pomocy. Pracuję nad konfiguracją Spring Security, która jest skupiona na zabezpieczaniu endpointów z podziałem na role: USER i ADMIN. Utworzyłem endpoint DELETE "/api/users/{userId}", który jest dostępny tylko dla roli ADMIN. Napisałem testy z użyciem bazy danych, aby sprawdzić, czy wszystko działa poprawnie. Jednakże, dowiedziałem się, że takie testy nie powinny być zależne od bazy danych i powinny być izolowane. Czy moglibyście doradzić mi, jak najlepiej przetestować te konfiguracje bez angażowania
Potrzebuję pobrać miejsca na seans w formie DTO (Spring Data JPA). Jedno pole - isFree zależy od tego czy na dane miejsce jest już zarezerwowany bilet.
Sala ma przypisane miejsca, seans sale a bilet seans i miejsce. Chat GPT podał coś takiego:

@query("SELECT new com.cinema.tickets.application.queries.dto.SeatDto(s.rowNumber, s.number, " +
"CASE WHEN (SELECT COUNT(t) FROM Ticket t WHERE t.seatId = s.id) > 0 THEN false ELSE true END) " +
"FROM Seat s WHERE
✨️ Szkolenie Live: Własny Web Framework w Java! Poznaj ServerSocket i HttpHandler ✨️

Odkryj, jak samodzielnie stworzyć i wykorzystać framework webowy w Javie.
Podczas szkolenia:
✅ Zrozumiesz mechanizmy obsługi żądań HTTP w czystej Javie, kluczowe dla tworzenia aplikacji internetowych,
✅ Zobaczysz, jak możliwe jest projektowanie i implementacja własnego frameworka webowego, od podstaw,
✅ Dowiesz się, jak adnotacje mogą upraszczać logikę aplikacji, zmieniając zarządzanie i konfigurację.

Poznaj, jak z głębszym zrozumieniem Java może
SoftBull - ✨️ Szkolenie Live: Własny Web Framework w Java! Poznaj ServerSocket i Http...

źródło: wlasny-java-web-framework

Pobierz
@nad__czlowiek: JavaEE jest mi całkiem dobrze znana, gdyż sam spędziłem w niej trochę śmiesznych, a momentami bolesnych lat. I jestem z tych, którzy tworzyli web appki z wykorzystaniem JSF/PrimeFaces - więc potwierdzam plotki ( ͡° ͜ʖ ͡°) Ciekawe czasy, ale nie wiem czy chciałbym wracać. ¯\(ツ)/¯ Stack top-technologiczny dla Java Developerów kilkanaście lat temu był ciekawy...
Moje pominięcie JavaEE/JakartaEE było celowe, ponieważ temat dotyczy frameworków, a JavaEE/JakartaEE
✨️ Obserwuj #mirkoanonim
Pytanie do mirków #programista15k #java #spring oraz #programowanie #naukaprogramowania

Czy kojarzycie może jakiś dobry kurs pokazujący jak ktoś tworzy przykładową praktyczną apkę java + spring w chmurze? Taka która by np korzystała z AWS: S3, EC2, SQS/SNS, Aurora MySQL itd. Jest sporo kursów gdzie ktoś pokazuje od A do Z jak np tworzy pseudo sklep ecommerce z użyciem java, spring, hibernate, ale nie mogę znaleźć żadnego praktycznego kursu chmury
W trakcie odpalania kilkudziesięciu springowych integracyjnych testów z Testcontainers, po 10 testach dostaję taki błąd:

org.springframework.dao.DataAccessResourceFailureException: Unable to acquire JDBC Connection [HikariPool-1 - Connection is not available, request timed out after 30003ms.] [n/a]
Szczegóły na 4programmers: https://4programmers.net/Forum/Java/370632-problem_z_testcontainers_przy_wielu_testach?p=1936802#id1936802
#java #spring #naukaprogramowania #programowanie #programista15k
@AfterAll

static void afterAll() {

postgres.stop();

}


@Nofenak: ale to musisz użyć po wszystkich testach integracyjnych. Postgresa w kontenerze startujesz raz a potem raz wyłączasz, kasujesz kontener. Co innego pula polączeń.

jeśli stosujesz beforeAll i afterAll do stopowania i startowania kontenera to lipa wydajnościowa. Startujesz kontener per klase? Tracisz mnóstwo czasu na połączenie i twoje testy trwają z 5x tyle czasu. A mogłby trwać z 5 razy mniej xD
✨️ Szkolenie Live: Własne Adnotacje w Java i Sprytne Ich Użycie!

Odkryj tajniki adnotacji w Javie i naucz się, jak wykorzystać je do zwiększenia efektywności i czytelności Twojego kodu. Dołącz do naszego szkolenia, gdzie:

✅ Zrozumiesz zasady stosowania adnotacji w Javie, ich strukturę i główne zastosowania.
✅ Nauczysz się projektować i przetwarzać własne adnotacje, co otworzy przed Tobą nowe możliwości w personalizowaniu kodu.
✅ Zobaczysz, jak popularne frameworki, takie jak Spring Boot,
SoftBull - ✨️ Szkolenie Live: Własne Adnotacje w Java i Sprytne Ich Użycie! 

Odkryj ...

źródło: adnotacje-w-java

Pobierz
✨️ Szkolenie Live: Śledzenie w Czasie Rzeczywistym z Zipkin!

Odkryj, jak Zipkin rewolucjonizuje śledzenie w aplikacjach opartych na Spring Boot. Podczas szkolenia:
✅ Poznamy główne funkcje i korzyści płynące z wykorzystania Zipkina,
✅ Przejściemy przez proces integracji Zipkina z aplikacją Spring Boot, uruchamiając przykładowe usługi,
✅ Zobaczymy w praktyce, jak wizualizować przepływ żądań w systemie i śledzić ich trasę między usługami.

Zrozum, jak efektywnie monitorować i analizować dane w mikrousługach w czasie
SoftBull - ✨️ Szkolenie Live: Śledzenie w Czasie Rzeczywistym z Zipkin!

Odkryj, jak ...

źródło: zipkin

Pobierz
Mirasy, pytanie o tracing w appce spring bootowej. Jest to nowa apka, którą robimy od zera i potrzebuję dodać tracing do logów.

Mamy eventy w Azure Event Hubs, które na razie (bo nie mamy jeszcze proda - trochę taka zabaw póki co) - generujemy ręcznie poprzez feature Azurowy "Data Generator", gdzie możemy podać jsona i dodać do "kolejki", a w naszej appce spring bootowej consumer sobie je pobiera i wywołuje odpowiednią akcję.
@exori_vis: Ale jak napisałem wyżej, taki sidecar container działa poza procesem aplikacji więc ilość informacji jakie może zgromadzić na jej temat jest mocno ograniczona. Do podstawowego observability i monitoringu wystarczy. Przy bardziej zaawansowanych use case'ach trzeba robić instrumentację.
@Volantie: publikacja danych bez kontekstu powinna być karana batożeniem OPa

Sądząc po Pythonie na czele, to musi być TIOBE, czyli index oparty na statystykach haseł z wyszukiwarek internetowych, long story short: wskazuje, którego języka uczy się aktualnie najczęściej, a że kilkanaście lat temu w szkołach i na uczelniach (a teraz i w bootcampach) Python zajął miejsce, które zajmował kiedyś Turbo Pascal, to od lat wygrywa ten ranking.

Żeby nie było, oczywiście
@Volantie
Legacy to szersze pojęcie, np brak testów, słaba dokumentacja, długi technologiczne.
Odpowiadając krótko to słabo, coraz więcej frameworków nie wspiera już dawno tej wersji, nie będzie poprawek, wsparcia itp
✨️ Tworzenie aplikacji do strumieniowania obrazu w Spring Boot.

✅ Przejdź razem z nami przez projektowanie i tworzenie aplikacji do LiveStreamingu obrazu w Springu z wykorzystaniem Websocketów! W trakcie wydarzenia, krok po kroku, omówimy proces budowy aplikacji, zapewniając płynność i jakość strumieniowania w czasie rzeczywistym.

✅ Łącz świetną zabawę i cenną naukę podczas naszej sesji LiveCodingu! Dołącz do mnie w trakcie kodowania, gdzie razem stworzymy aplikację i zbadamy jej kluczowe elementy. To
SoftBull - ✨️ Tworzenie aplikacji do strumieniowania obrazu w Spring Boot.

✅ Przejdź...

źródło: live-strumieniowanie-obrazu

Pobierz