Aktywne Wpisy
daeun +243
W tym wpisie wrzucamy wszystkie kobiece RED FLAGI dyskwalifikujące je jako potencjalne partnerki, matki czy małżonki. Ja zaczynam
1. Tatuaże - widzisz taki brudnopis i od razu wiesz że trafił ci sie egzemplarz z defektem, nieprzepracowanymi traumami wymagającymi dlugotrwalej terapii, której w poczatkowym okresie dziecinstwa zabrakło silnych wzorców i autorytetów
#tatuaze #bekazpodludzi #rozowepaski #logikarozowychpaskow #zwiazki #glupiewykopowezabawy #tatuazboners
1. Tatuaże - widzisz taki brudnopis i od razu wiesz że trafił ci sie egzemplarz z defektem, nieprzepracowanymi traumami wymagającymi dlugotrwalej terapii, której w poczatkowym okresie dziecinstwa zabrakło silnych wzorców i autorytetów
#tatuaze #bekazpodludzi #rozowepaski #logikarozowychpaskow #zwiazki #glupiewykopowezabawy #tatuazboners
restofme +1101
Napisałem ten komentarz pod znaleziskiem 44-latek spędził niemal dobę na SOR-ze. Był po udarze i trafił na laryngologię.
Ktoś zasugerował że dobrze go tu wrzucić.
To ja coś z życia. Historia taka jak tu. Udar SOR itp. Długo będzie ale mam nadzieję że coś wniosę.
Jak się ogarnąłem to przez moment pisałem coś na Mirko
Chce Wam opowiedzieć swoją historię trochę terapeutycznie a trochę Wam ku przestrodze.
Nie chce pisać o szpitalach,
Ktoś zasugerował że dobrze go tu wrzucić.
To ja coś z życia. Historia taka jak tu. Udar SOR itp. Długo będzie ale mam nadzieję że coś wniosę.
Jak się ogarnąłem to przez moment pisałem coś na Mirko
Chce Wam opowiedzieć swoją historię trochę terapeutycznie a trochę Wam ku przestrodze.
Nie chce pisać o szpitalach,
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 deleter;
private MockHttpServletRequest request;
private MockHttpServletResponse response;
@BeforeEach
void setUp() {
deleter = new CookieDeleterImpl();
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
}
@test
void whenCookiePresent_Delete() {
addCookieToRequest("cookie", "value");
deleter.deleteCookie(request, response, "cookie");
assertCookieDeleted(response, "cookie");
}
private void addCookieToRequest(String name, String value) {
Cookie cookie = new Cookie(name, value);
request.setCookies(cookie);
}
private void assertCookieDeleted(MockHttpServletResponse response, String cookieName) {
Cookie[] cookies = response.getCookies();
assertNotNull(cookies);
assertTrue(Arrays.stream(cookies).anyMatch(cookie ->
cookieName.equals(cookie.getName()) &&
cookie.getMaxAge() == 0 &&
cookie.getValue() == null),
"Cookie should be set to deleted");
}
}
1. Czy test dla Was jest czytelny i zrozumiały ? Zastanawiam się, czy zbyt dużo szczegółów nie przeniosłem do metod pomocniczych.
2. Czy metody pomocnicze powinienem przenieś do oddzielnej klasy, czy też w sytuacji, gdzie jest mało testów, mogą zostać w klasie testowej?
#java #spring #naukaprogramowania
@Kamishimi: czemu dodajesz puste cookie do responsa i czemu w ogole czyścisz request z cookiesów?
Jak chcesz nie dodawac w responsie cookiesów po prostu ich nie ustawiaj xD
Pytania, które mi się nasuwają:
1. O co w ogóle chodzi? Usuwanie ciasteczek? To ma być klient czy serwer http? Klient może go po prostu nie wysłać, serwer nie ustawiać, więc o co kaman?
2. Usuwanie ciasteczek? To co oznacza "Cookie should be set to deleted"?
Also, fatalny angielski w tej [:-3] linijce.
//given
//when
//then
nazwa testu moze byc typu: ShouldRemoveCookieIfExist, ShouldThrowAnErrorWhen.. itd
Czemu?
Proces usuwania ciasteczek odnosi się do serwera HTTP.
W projekcie wykorzystuję JWT dla autentykacji użytkowników. W momencie logowania, tworzę ciasteczko zawierające ten token, które jest następnie wykorzystywane do autentykacji. Gdy użytkownik decyduje się na wylogowanie, chcę wysłać polecenie do przeglądarki klienta, aby usunęła to ciasteczko z tokenem.
Ten kontroler odpowiada za to:
@Slf4j
@RestController
@RequestMapping("/api/v1/users")
public class LogoutController {
private final CookieDeleter cookieDeleter;
private final ApplicationMessageService messageService;
public LogoutController(CookieDeleter
Web serwer nie ma możliwości wysyłania żadnych poleceń do przeglądarki - takie rzeczy załatwia się w nagłówkach protokołu HTTP. Nie lepiej uczyć się na realnych przykładach?
Czy to jest złe podejście ?
Oczywiście masz rację z tym, że jakaś część przeglądarek zareaguje na to co ustawiłeś i w zależności od konfiguracji - usunie ciasteczko po stronie klienta.
Teraz nie rozumiem tylko jednego - dlaczego miałbyś się upewniać, że ciasteczko istnieje? Da się wylogować nie mając
assertTrue(Arrays.stream(cookies).anyMatch(cookie ->
cookieName.equals(cookie.getName()) &&
cookie.getMaxAge() == 0 &&
cookie.getValue() == null),
"Cookie should be set to deleted");
bo to jest zupełnie niezrozumiały na pierwszy rzut oka krzaczek, a testy powinny być przejrzyste i powinieneś wiedzieć która linia nie przechodzi i dlaczego nie przechodzi. Co do funkcji pomocniczych w testach,
@test
void whenCookiePresent_Delete() {
Cookie cookie = new Cookie("cookie", "value");
request.setCookies(cookie);
deleter.deleteCookie(request, response, "cookie");
Optional<Cookie> optionalCookie = Arrays.stream(response.getCookies())
.filter(c -> "cookie".equals(c.getName()))
.findFirst();
optionalCookie.ifPresent(deletedCookie -> {
assertThat(deletedCookie.getName()).isEqualTo("cookie");
assertThat(deletedCookie.getMaxAge()).isEqualTo(0);
assertThat(deletedCookie.getValue()).isNull();
});
}
@test
void whenCookiePresent_Delete() {
Cookie cookie = new Cookie("cookie", "value");
request.setCookies(cookie);
deleter.deleteCookie(request, response, "cookie");
Optional<Cookie> optionalCookie = Arrays.stream(response.getCookies())
.filter(c -> "cookie".equals(c.getName()))
.findFirst();
optionalCookie.ifPresent(deletedCookie -> {
assertThat(deletedCookie.getName()).isEqualTo("cookie");
assertThat(deletedCookie.getMaxAge()).isEqualTo(0);
assertThat(deletedCookie.getValue()).isNull();
});
}
verify(response, times(1)).addCookie(any(Cookie.class));
orazassertThat(optionalCookie).isPresent();
przed assertami optionala.