Wysłanie multiparta bez żadnych plików

0

Hej, czy ktoś z was wysyłał kiedyś requesta za pomoca restassured'a gdzie odtwarzał sytuacje, że nie miał dodanych zadnych plików ?multiintput.PNG

@Test
void shouldThrow {
   given()
       .when()
       .multiPart(new MultiStub())
       .queryParams(Map.of("test")))
       .post(ROOT_PATH)
       .then()
       .statusCode(OK.getStatusCode())
       .assertThat()
       .body("response", notNullValue());
}
0

@witu12:

REST i multipart ... kurcze , czego jeszcze się dowiem o "zgwałconym RESTcie" (ktoś tu mnie uznał autorem tego słowa, a jak go tylko pożyczyłem, ale jak widzę słusznie)

0
ZrobieDobrze napisał(a):

@witu12:

REST i multipart ... kurcze , czego jeszcze się dowiem o "zgwałconym RESTcie" (ktoś tu mnie uznał autorem tego słowa, a jak go tylko pożyczyłem, ale jak widzę słusznie)

hmm rozwiniesz? Dlaczego REST i multipart to coś nie tak? Możesz zapodać linka.

1

@victordeleco2:

Pokaż, gdzie jest "tak".
Prawdziwy REST to cztery (ew nieco więcej) SŁÓW HTTP w stosunku do wyrazistego - będącego rzeczownikiem - obiektu, w stosunku do JEDNEGO obiektu

Gwałcony REST: realizowanie na tym nośniku tak naprawdę RPC (np: de facto nie dających się wyrazić jedną encją / zmianą stanu jedne encji) czy jak u kolegi wszelkich dowolnych pomysłów HTTP.

Że realne biblioteki restowe na to pewnie pozwalają (bo mają HTTP pod maską), że "real coding" to robi, ale nie nazywajmy że to ok.

Ja tam, jak mam robić RPC (czyli operacje, które maja swój stan przejściowy - nie dające się nazwać prostym czasownikiem) - to robię RPC, czy to Thrifetem, czy gRPC.

0

@witu12:
Jeżeli w endpoincie używasz @RequestPart to zapewne poleci exception w zależności od ustawienia properta required.

	/**
	 * Whether the part is required.
	 * <p>Defaults to {@code true}, leading to an exception being thrown
	 * if the part is missing in the request. Switch this to
	 * {@code false} if you prefer a {@code null} value if the part is
	 * not present in the request.
	 */
	boolean required() default true;

A więc zapewne coś takiego zasymuluje taki case:

      given()
      .contentType(MULTIPART_FORM_DATA_VALUE)
      .multiPart('test', null)
      .when()
      .post(url())
      .then()
      ...

Opcjonalnie możesz zbudować mulitparta w dowolnych konfiguracjach poprzez MultiPartSpecification i jego dostarczoną implementację MultiPartSpecificationImpl w RestAssured.

0
victordeleco2 napisał(a):

@witu12:
Jeżeli w endpoincie używasz @RequestPart to zapewne poleci exception w zależności od ustawienia properta required.

	/**
	 * Whether the part is required.
	 * <p>Defaults to {@code true}, leading to an exception being thrown
	 * if the part is missing in the request. Switch this to
	 * {@code false} if you prefer a {@code null} value if the part is
	 * not present in the request.
	 */
	boolean required() default true;

A więc zapewne coś takiego zasymuluje taki case:

      given()
      .contentType(MULTIPART_FORM_DATA_VALUE)
      .multiPart('test', null)
      .when()
      .post(url())
      .then()
      ...

Opcjonalnie możesz zbudować mulitparta w dowolnych konfiguracjach poprzez MultiPartSpecification i jego dostarczoną implementację MultiPartSpecificationImpl w RestAssured.

a jesteś mi w stanie podpowiedzieć jak zbudować tym sposobem 'input' z tak zudowaną listą 'parts' jak na screenie ?multiin2.PNG

0

@witu12: Nie do końca rozumiem. Przecież masz obiekt MultiPartSpecificationImpl lub konstruktor w tym builderze i wstawiasz to co chcesz. Jeżeli chcesz to co pokazałeś na screenie to po prostu taki stwórz.

            def multipart = new MultiPartSpecificationImpl();
            multipart.setControlName('input')
            multipart.setCharset('UTF-8')
            multipart.setFileName('nazwa_pliku_jaka_chcesz')
            multipart.setMimeType('text/plain')
            multipart.setContent(null) // podajesz body takie jakie chcesz

lub

given()
   .contentType(MULTIPART_FORM_DATA_VALUE)
   .multiPart('input', "nazwa_pliku_jaka_chcesz", null, 'text/plain')

Musisz doprecyzować pytanie.

0
victordeleco2 napisał(a):

@witu12: Nie do końca rozumiem. Przecież masz obiekt MultiPartSpecificationImpl lub konstruktor w tym builderze i wstawiasz to co chcesz. Jeżeli chcesz to co pokazałeś na screenie to po prostu taki stwórz.

            def multipart = new MultiPartSpecificationImpl();
            multipart.setControlName('input')
            multipart.setCharset('UTF-8')
            multipart.setFileName('nazwa_pliku_jaka_chcesz')
            multipart.setMimeType('text/plain')
            multipart.setContent(null) // podajesz body takie jakie chcesz

lub

given()
   .contentType(MULTIPART_FORM_DATA_VALUE)
   .multiPart('input', "nazwa_pliku_jaka_chcesz", null, 'text/plain')

Musisz doprecyzować pytanie.

chodzi mi o ustawienie(tak jak na screenie powyżej) jednoelementowej listy parts w środku, której element będzie miał pusty filename, czyli dokłądnie tak jak na screenie. Która metodą i w jaki sposób mogę coś takiego osiągnąć ?

0
witu12 napisał(a):
victordeleco2 napisał(a):

@witu12: Nie do końca rozumiem. Przecież masz obiekt MultiPartSpecificationImpl lub konstruktor w tym builderze i wstawiasz to co chcesz. Jeżeli chcesz to co pokazałeś na screenie to po prostu taki stwórz.

            def multipart = new MultiPartSpecificationImpl();
            multipart.setControlName('input')
            multipart.setCharset('UTF-8')
            multipart.setFileName('nazwa_pliku_jaka_chcesz')
            multipart.setMimeType('text/plain')
            multipart.setContent(null) // podajesz body takie jakie chcesz

lub

given()
   .contentType(MULTIPART_FORM_DATA_VALUE)
   .multiPart('input', "nazwa_pliku_jaka_chcesz", null, 'text/plain')

Musisz doprecyzować pytanie.

chodzi mi o ustawienie(tak jak na screenie powyżej) jednoelementowej listy parts w środku, której element będzie miał pusty filename, czyli dokłądnie tak jak na screenie. Która metodą i w jaki sposób mogę coś takiego osiągnąć ?

@victordeleco2: w ten sposób :

> >     @Test
> >     void test(){
> >         var multipart = new MultiPartSpecificationImpl();
> >         multipart.setControlName("input");
> >         multipart.setCharset("UTF-8");
> >         multipart.setFileName("nazwa_pliku_jaka_chcesz");
> >     }

nie tworzy się lista parts nazwajaka.PNG

0
witu12 napisał(a):
witu12 napisał(a):
victordeleco2 napisał(a):

@witu12: Nie do końca rozumiem. Przecież masz obiekt MultiPartSpecificationImpl lub konstruktor w tym builderze i wstawiasz to co chcesz. Jeżeli chcesz to co pokazałeś na screenie to po prostu taki stwórz.

            def multipart = new MultiPartSpecificationImpl();
            multipart.setControlName('input')
            multipart.setCharset('UTF-8')
            multipart.setFileName('nazwa_pliku_jaka_chcesz')
            multipart.setMimeType('text/plain')
            multipart.setContent(null) // podajesz body takie jakie chcesz

lub

given()
   .contentType(MULTIPART_FORM_DATA_VALUE)
   .multiPart('input', "nazwa_pliku_jaka_chcesz", null, 'text/plain')

Musisz doprecyzować pytanie.

chodzi mi o ustawienie(tak jak na screenie powyżej) jednoelementowej listy parts w środku, której element będzie miał pusty filename, czyli dokłądnie tak jak na screenie. Która metodą i w jaki sposób mogę coś takiego osiągnąć ?

@victordeleco2: w ten sposób :

> >     @Test
> >     void test(){
> >         var multipart = new MultiPartSpecificationImpl();
> >         multipart.setControlName("input");
> >         multipart.setCharset("UTF-8");
> >         multipart.setFileName("nazwa_pliku_jaka_chcesz");
> >     }

nie tworzy się lista parts nazwajaka.PNG

@victordeleco2: albo może jak napisać Body zeby było tak jak chce ? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1