You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@juneau.apache.org by Rasa V <fi...@gmail.com> on 2019/12/04 15:17:35 UTC

Mock test task

Hello. I just started writing a mock test. I don`h have much experience
writing integration test. But I am trying to learn. I wrote some code and
would like to be sure I am doing it correctly. I send you a screenshot.
Here you can see that I am stuck with MockRest put method. I don`t know why
do I get an error saying that The method put(String, UpdatePet) is
undefined for the type MockRest.Builder.
Maybe do you have some good examples of Juneau mock tests?

Re: Mock test task

Posted by James Bognar <ja...@apache.org>.
That's correct.  Which is one reason why you can't rely on autogenerated
numbers being the same on every call, and why in the example provided I
captured the IDs from the newly-created test objects and used those in my
test.

On Wed, Dec 18, 2019 at 10:06 AM Rasa V <fi...@gmail.com> wrote:

> Thanks. Few test fails because when the first created pet gets id number
> 2. It should be 1, right?
>
> 2019-12-18, tr, 16:57 James Bognar <ja...@apache.org> rašė:
>
>> Hi Rasa,
>>
>> This is looking better.  I'm able to get 1 of the 17 tests to pass:
>> testPostOrder.  It appears the issue with the other tests appears to be
>> primarily because they're not independent of each other.  JUnit tests are
>> run in random order so you cannot rely on data created in one test to be
>> there for another.
>>
>> For example, the testGettingPets() method below won't work unless
>> testPostPet() has been run first and there's no way to guarantee that in
>> JUnit:
>>
>> @Test
>> public void testPostPet() throws Exception {
>>    petStoreRest
>>       .post("/pet", "{name:'Sunshine',tags:['nice'],
>> price:100.0,species:'BIRD'}")
>>       .execute()
>>       .assertStatus(200)
>>       .assertBody("1");
>> }
>>
>> @Test
>> public void testGettingPets() throws Exception {
>>    petStoreRest
>>       .get("/pet")
>>       .execute()
>>       .assertStatus(200)
>>
>>  .assertBody("[{id:1,species:'BIRD',name:'Sunshine',tags:['nice'],price:100.0,status:'AVAILABLE'}]");
>> }
>>
>>
>> As a general rule, testcases should not leave stuff around in the
>> database that can possibly interfere with other testscases.  So whatever
>> you insert should also be removed.  Here's an example of a test that
>> inserts data, performs your test, and then cleans up after itself:
>>
>> @Test
>> public void testGettingOrders() throws Exception {
>>
>>    // --- Initialize database with test data ---
>>
>>    String petId = petStoreRest
>>       .post("/pet", "{name:'Sunshine',tags:['nice'],
>> price:100.0,species:'BIRD'}")
>>       .execute()
>>       .assertStatus(200)
>>       .getBodyAsString();
>>
>>    String orderId = petStoreRest
>>       .post("/store/order", "petId=1&username=catlover")  // Has to be
>> Form Post format.
>>       .execute()
>>       .assertStatus(200)
>>       .getBodyAsString();
>>
>>    // --- Test our method ---
>>
>>    petStoreRest
>>       .get("/store/order/" + orderId)
>>       .execute()
>>       .assertStatus(200)
>>
>>  .assertBody("{id:"+orderId+",petId:"+petId+",username:'catlover',status:'PLACED'}");
>>
>>    // --- Delete our test data so that it doesn't interfere with other
>> tests ---
>>
>>   petStoreRest
>>       .delete("/store/order/" + orderId)
>>       .execute()
>>       .assertStatus(200);
>>
>>    petStoreRest
>>       .delete("/pet/" + petId)
>>       .execute()
>>       .assertStatus(200);
>> }
>>
>> If you find yourself creating lots of duplicate code, then you can move
>> some of that logic into helper methods like so...
>>
>> @Test
>> public void testGettingOrders() throws Exception {
>>
>>    String petId = createTestPet();
>>    String orderId = createTestOrder();
>>
>>    petStoreRest
>>       .get("/store/order/" + orderId)
>>       .execute()
>>       .assertStatus(200)
>>
>>  .assertBody("{id:"+orderId+",petId:"+petId+",username:'catlover',status:'PLACED'}");
>>
>>    deleteTestPet(petId);
>>    deleteTestOrder(orderId);
>> }
>>
>> Hope that helps!
>>
>>
>>
>>
>>
>> On Tue, Dec 17, 2019 at 2:32 PM Rasa V <fi...@gmail.com> wrote:
>>
>>> Thank you. I did one more commit to a Github. Could you check if my
>>> tests look better now?
>>>
>>> 2019-12-17, an, 18:49 James Bognar <ja...@apache.org> rašė:
>>>
>>>> Hi Rasa,
>>>>
>>>> You'll want to put these tests under
>>>> juneau-petstore-server/src/test/java.  The juneau-petstore-api defines the
>>>> common beans used by both the server and client projects.  You're
>>>> specifically testing the server project so the tests should go in that
>>>> project
>>>>
>>>> Your test class shouldn't contain @Rest or @RestResource at all.
>>>> Instead it should just be referencing PetStoreResource which has that
>>>> annotation.
>>>>
>>>> If you're stuck, go ahead and submit a pull request with what you've
>>>> got and I can help out.
>>>>
>>>>
>>>> On Tue, Dec 17, 2019 at 6:58 AM Rasa V <fi...@gmail.com> wrote:
>>>>
>>>>> I am stuck in many places. Almost all rest tests fail.
>>>>> What is more, I don`t know where to put @Rest or @RestResource
>>>>> annotation after removing static rest class.
>>>>> And where is the best place for the src/test/java catalogue:
>>>>> juneau-petstore-api or juneau-petstore-server? Do I need separate pom.xml
>>>>> for the tests?
>>>>>
>>>>> 2019-12-16, pr, 08:24 Rasa V <fi...@gmail.com> rašė:
>>>>>
>>>>>> Thank you. I will try to fix everything.
>>>>>>
>>>>>> 2019-12-14, št, 22:32 James Bognar <ja...@apache.org> rašė:
>>>>>>
>>>>>>> One other useful note.  If you add debug="true" to the @Rest
>>>>>>> annotation on the PetStoreResource class, the HTTP request/response will be
>>>>>>> printed on the console which can be quite helpful in debugging issues.
>>>>>>>
>>>>>>>
>>>>>>> ---------- Forwarded message ---------
>>>>>>> From: James Bognar <ja...@apache.org>
>>>>>>> Date: Sat, Dec 14, 2019 at 3:27 PM
>>>>>>> Subject: Re: Mock test task
>>>>>>> To: Rasa V <fi...@gmail.com>
>>>>>>> Cc: Ayeshmantha Perera <ak...@gmail.com>, <
>>>>>>> dev@juneau.apache.org>
>>>>>>>
>>>>>>>
>>>>>>> Hi Rasa,
>>>>>>>
>>>>>>> I have suggestions on your pull request.
>>>>>>>
>>>>>>> You should be testing against the actual REST class itself instead
>>>>>>> of creating pieces of it in your test (e.g. UpdatePetMockRest).
>>>>>>> SpringRunner allows you to get access to the real Spring bean via
>>>>>>> auto-wiring, like so:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *   @RunWith(SpringRunner.class)
>>>>>>>  @ContextConfiguration(classes=App.class)*
>>>>>>> *@SpringBootTest*
>>>>>>>
>>>>>>> *public class PetStoreTest {   *   *@Autowired *
>>>>>>>       *PetStoreResource petStoreResource;*
>>>>>>>
>>>>>>>       *MockRest petStoreRest;*
>>>>>>>
>>>>>>>       *@Before*
>>>>>>>       *public void setup() {*
>>>>>>>         * petStoreRest =
>>>>>>> MockRest.create(petStoreResource).simpleJson().build();*
>>>>>>>       *}*
>>>>>>>    *}*
>>>>>>>
>>>>>>> Then just use that petStoreRest object in all of your tests.
>>>>>>>
>>>>>>> The MockRest class doesn't use Juneau serializers/parsers.  It just
>>>>>>> expects you to work with raw string input and output.  So the following
>>>>>>> won't work because it's just going to convert the CreatePet object to a
>>>>>>> String using toString():
>>>>>>>
>>>>>>>    *// Won't work*
>>>>>>>    *petStoreRest.post("/petstore/pet",
>>>>>>> pet).execute().assertStatus(200).assertBody(pet.toString());*
>>>>>>>
>>>>>>> Instead, you'll want something like this:
>>>>>>>
>>>>>>>
>>>>>>> *@Test*
>>>>>>> *public void testCreatePet() throws Exception {  *   * petStoreRest*
>>>>>>>        *  .post("/petstore/pet",
>>>>>>> "{name:'Sunshine',price:100.0,species:'BIRD'}")*
>>>>>>>             *.execute()*
>>>>>>>           *  .assertStatus(200)*
>>>>>>>            * .assertBody("1");  // Returns the auto-generated ID*
>>>>>>>
>>>>>>> *}*
>>>>>>>
>>>>>>> Note that you could use this approach if you defined this method on
>>>>>>> the CreatePet class:
>>>>>>>
>>>>>>> *public String toString() {  *   * return
>>>>>>> SimpleJson.DEFAULT.toString(this);*
>>>>>>>    *}*
>>>>>>>
>>>>>>> But usually I just keep it simple and deal with just plain strings.
>>>>>>>
>>>>>>> One last note:  Your test class should be placed in src/test/java.
>>>>>>> This is standard convention and allows your dependencies to be pulled in
>>>>>>> using only test scope:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *        <!-- Mock rest test -->        <dependency>
>>>>>>>  <groupId>org.apache.juneau</groupId>
>>>>>>>  <artifactId>juneau-rest-mock</artifactId>
>>>>>>>  <version>8.1.2</version>           <scope>test</scope>
>>>>>>> </dependency>        <dependency>           <groupId>junit</groupId>
>>>>>>>    <artifactId>junit</artifactId>           <scope>test</scope>
>>>>>>> </dependency>        <dependency>
>>>>>>>  <groupId>org.springframework.boot</groupId>
>>>>>>>  <artifactId>spring-boot-starter-test</artifactId>
>>>>>>>  <scope>test</scope>         </dependency>*
>>>>>>>
>>>>>>> On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fi...@gmail.com> wrote:
>>>>>>>
>>>>>>>> Pull request sent.
>>>>>>>>
>>>>>>>> 2019-12-14, št, 08:19 Ayeshmantha Perera <ak...@gmail.com>
>>>>>>>> rašė:
>>>>>>>>
>>>>>>>>> Hi Rasa
>>>>>>>>>
>>>>>>>>> Send the PR after removing the commented mock tests.
>>>>>>>>>
>>>>>>>>> On Fri 13. Dec 2019 at 14:46, Rasa V <fi...@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> I dont`understand. Which mock test calls I should remove?
>>>>>>>>>>
>>>>>>>>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <ak...@gmail.com>
>>>>>>>>>> rašė:
>>>>>>>>>>
>>>>>>>>>>> Hi Rasa.Send a PR remove all the commented code and I saw a
>>>>>>>>>>> dummy mock test call ok remove it as well
>>>>>>>>>>>
>>>>>>>>>>> Great work done
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fi...@gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> I have pushed my code into a new branch:
>>>>>>>>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>>>>>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>>>>>>>>> You can check if i should correct something or I can do a pull
>>>>>>>>>>>> request.
>>>>>>>>>>>>
>>>>>>>>>>>> 2019-12-13, pn, 12:01 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks. It works.
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2019-12-12, kt, 17:40 James Bognar <ja...@apache.org>
>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> If the REST class your testing is a Spring bean with injected
>>>>>>>>>>>>>> fields, then using SpringRunner should work.  You get access to the bean
>>>>>>>>>>>>>> instance through autowiring.  So something like this....
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> @RunWith(SpringRunner.class)
>>>>>>>>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>>>>>>>>> @SpringBootTest()
>>>>>>>>>>>>>> public class MyRestTest {
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>     @Autowired
>>>>>>>>>>>>>>     MyRestClass restClass;
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>     @Test
>>>>>>>>>>>>>>     public void myTest() throws Exception {
>>>>>>>>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>>>>>>>>     }
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thank you. I have almost finished writing MockTest class.
>>>>>>>>>>>>>>> Which annotation should I add for running tests? SpringRunner or something
>>>>>>>>>>>>>>> else?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> HTTP GET requests do not typically have a request body.
>>>>>>>>>>>>>>>> They're meant to pull data, not push.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> However, you can use the generic request() methods to do it
>>>>>>>>>>>>>>>> anyway:
>>>>>>>>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thank you. I have one more question. How do you pass @Body
>>>>>>>>>>>>>>>>> parameters (an Object) into GET method? MockRest Get has only one
>>>>>>>>>>>>>>>>> parameter, the path.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> The annotation on your REST class should include the
>>>>>>>>>>>>>>>>>> following:
>>>>>>>>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa V <
>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I tried to keep Json serializer annotation, but I get an
>>>>>>>>>>>>>>>>>>> error message saying that Json serializer cannot be resolved as a type.
>>>>>>>>>>>>>>>>>>> Import doesn`t help here.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar <
>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> rašė:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> @RestResource-annotated methods can return any POJO.
>>>>>>>>>>>>>>>>>>>> That POJO is converted to the body of the HTTP response based on the Juneau
>>>>>>>>>>>>>>>>>>>> Serializer that matches the Accept header on the incoming request (e.g.
>>>>>>>>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29 AM Rasa V <
>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Hello. I have one question about @Rest method. Should
>>>>>>>>>>>>>>>>>>>>> it always return String or the type is not important here?
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> 2019-12-11, tr, 09:06 Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> I will try to fix the documentation when I finish
>>>>>>>>>>>>>>>>>>>>>> writing tests.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> 2019-12-10, an, 22:58 James Bognar <
>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> rašė:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Bonus points if you can verify and fix that in the
>>>>>>>>>>>>>>>>>>>>>>> documentation!  I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>>>>>>>>> The same mistake might exist elsewhere.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Yes I think its already there in the doc James
>>>>>>>>>>>>>>>>>>>>>>>> pointed previously.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Thanks alot James
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> On Tue 10. Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Replace create(MyRest.class) with
>>>>>>>>>>>>>>>>>>>>>>>>> build(MyRest.class).
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 4:28 AM Ayeshmantha Perera
>>>>>>>>>>>>>>>>>>>>>>>>> <ak...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Rasa and James
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> I just came back from a business trip. Sorry to
>>>>>>>>>>>>>>>>>>>>>>>>>> attend this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>>>>>>>>> [image: Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Rasa,
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Unfortunately Apache mail does not support
>>>>>>>>>>>>>>>>>>>>>>>>>>> images so I can't actually
>>>>>>>>>>>>>>>>>>>>>>>>>>> see the error.
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> There's a section in the documentation on the
>>>>>>>>>>>>>>>>>>>>>>>>>>> Mock REST interface:
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> The general idea behind them is to allow you to
>>>>>>>>>>>>>>>>>>>>>>>>>>> execute simulated HTTP
>>>>>>>>>>>>>>>>>>>>>>>>>>> requests against a REST endpoint without the
>>>>>>>>>>>>>>>>>>>>>>>>>>> need for a servlet
>>>>>>>>>>>>>>>>>>>>>>>>>>> container.   I recommend trying out the examples
>>>>>>>>>>>>>>>>>>>>>>>>>>> in the documentation
>>>>>>>>>>>>>>>>>>>>>>>>>>> (a useful exercise to validate the documentation
>>>>>>>>>>>>>>>>>>>>>>>>>>> as well).
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>>>>>>>>>> > Hello. I just started writing a mock test. I
>>>>>>>>>>>>>>>>>>>>>>>>>>> don`h have much experience writing integration test. But I am trying to
>>>>>>>>>>>>>>>>>>>>>>>>>>> learn. I wrote some code and would like to be sure I am doing it correctly.
>>>>>>>>>>>>>>>>>>>>>>>>>>> I send you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>>>>>>>>> method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>>>>>>>>> put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>>>>>>>>> > Maybe do you have some good examples of Juneau
>>>>>>>>>>>>>>>>>>>>>>>>>>> mock tests?
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>> *Software Engineer*
>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>
>>>>>>>>

Re: Mock test task

Posted by Rasa V <fi...@gmail.com>.
Thanks. Few test fails because when the first created pet gets id number 2.
It should be 1, right?

2019-12-18, tr, 16:57 James Bognar <ja...@apache.org> rašė:

> Hi Rasa,
>
> This is looking better.  I'm able to get 1 of the 17 tests to pass:
> testPostOrder.  It appears the issue with the other tests appears to be
> primarily because they're not independent of each other.  JUnit tests are
> run in random order so you cannot rely on data created in one test to be
> there for another.
>
> For example, the testGettingPets() method below won't work unless
> testPostPet() has been run first and there's no way to guarantee that in
> JUnit:
>
> @Test
> public void testPostPet() throws Exception {
>    petStoreRest
>       .post("/pet", "{name:'Sunshine',tags:['nice'],
> price:100.0,species:'BIRD'}")
>       .execute()
>       .assertStatus(200)
>       .assertBody("1");
> }
>
> @Test
> public void testGettingPets() throws Exception {
>    petStoreRest
>       .get("/pet")
>       .execute()
>       .assertStatus(200)
>
>  .assertBody("[{id:1,species:'BIRD',name:'Sunshine',tags:['nice'],price:100.0,status:'AVAILABLE'}]");
> }
>
>
> As a general rule, testcases should not leave stuff around in the database
> that can possibly interfere with other testscases.  So whatever you insert
> should also be removed.  Here's an example of a test that inserts data,
> performs your test, and then cleans up after itself:
>
> @Test
> public void testGettingOrders() throws Exception {
>
>    // --- Initialize database with test data ---
>
>    String petId = petStoreRest
>       .post("/pet", "{name:'Sunshine',tags:['nice'],
> price:100.0,species:'BIRD'}")
>       .execute()
>       .assertStatus(200)
>       .getBodyAsString();
>
>    String orderId = petStoreRest
>       .post("/store/order", "petId=1&username=catlover")  // Has to be
> Form Post format.
>       .execute()
>       .assertStatus(200)
>       .getBodyAsString();
>
>    // --- Test our method ---
>
>    petStoreRest
>       .get("/store/order/" + orderId)
>       .execute()
>       .assertStatus(200)
>
>  .assertBody("{id:"+orderId+",petId:"+petId+",username:'catlover',status:'PLACED'}");
>
>    // --- Delete our test data so that it doesn't interfere with other
> tests ---
>
>   petStoreRest
>       .delete("/store/order/" + orderId)
>       .execute()
>       .assertStatus(200);
>
>    petStoreRest
>       .delete("/pet/" + petId)
>       .execute()
>       .assertStatus(200);
> }
>
> If you find yourself creating lots of duplicate code, then you can move
> some of that logic into helper methods like so...
>
> @Test
> public void testGettingOrders() throws Exception {
>
>    String petId = createTestPet();
>    String orderId = createTestOrder();
>
>    petStoreRest
>       .get("/store/order/" + orderId)
>       .execute()
>       .assertStatus(200)
>
>  .assertBody("{id:"+orderId+",petId:"+petId+",username:'catlover',status:'PLACED'}");
>
>    deleteTestPet(petId);
>    deleteTestOrder(orderId);
> }
>
> Hope that helps!
>
>
>
>
>
> On Tue, Dec 17, 2019 at 2:32 PM Rasa V <fi...@gmail.com> wrote:
>
>> Thank you. I did one more commit to a Github. Could you check if my tests
>> look better now?
>>
>> 2019-12-17, an, 18:49 James Bognar <ja...@apache.org> rašė:
>>
>>> Hi Rasa,
>>>
>>> You'll want to put these tests under
>>> juneau-petstore-server/src/test/java.  The juneau-petstore-api defines the
>>> common beans used by both the server and client projects.  You're
>>> specifically testing the server project so the tests should go in that
>>> project
>>>
>>> Your test class shouldn't contain @Rest or @RestResource at all.
>>> Instead it should just be referencing PetStoreResource which has that
>>> annotation.
>>>
>>> If you're stuck, go ahead and submit a pull request with what you've got
>>> and I can help out.
>>>
>>>
>>> On Tue, Dec 17, 2019 at 6:58 AM Rasa V <fi...@gmail.com> wrote:
>>>
>>>> I am stuck in many places. Almost all rest tests fail.
>>>> What is more, I don`t know where to put @Rest or @RestResource
>>>> annotation after removing static rest class.
>>>> And where is the best place for the src/test/java catalogue:
>>>> juneau-petstore-api or juneau-petstore-server? Do I need separate pom.xml
>>>> for the tests?
>>>>
>>>> 2019-12-16, pr, 08:24 Rasa V <fi...@gmail.com> rašė:
>>>>
>>>>> Thank you. I will try to fix everything.
>>>>>
>>>>> 2019-12-14, št, 22:32 James Bognar <ja...@apache.org> rašė:
>>>>>
>>>>>> One other useful note.  If you add debug="true" to the @Rest
>>>>>> annotation on the PetStoreResource class, the HTTP request/response will be
>>>>>> printed on the console which can be quite helpful in debugging issues.
>>>>>>
>>>>>>
>>>>>> ---------- Forwarded message ---------
>>>>>> From: James Bognar <ja...@apache.org>
>>>>>> Date: Sat, Dec 14, 2019 at 3:27 PM
>>>>>> Subject: Re: Mock test task
>>>>>> To: Rasa V <fi...@gmail.com>
>>>>>> Cc: Ayeshmantha Perera <ak...@gmail.com>, <
>>>>>> dev@juneau.apache.org>
>>>>>>
>>>>>>
>>>>>> Hi Rasa,
>>>>>>
>>>>>> I have suggestions on your pull request.
>>>>>>
>>>>>> You should be testing against the actual REST class itself instead of
>>>>>> creating pieces of it in your test (e.g. UpdatePetMockRest).  SpringRunner
>>>>>> allows you to get access to the real Spring bean via auto-wiring, like so:
>>>>>>
>>>>>>
>>>>>>
>>>>>> *   @RunWith(SpringRunner.class)
>>>>>>  @ContextConfiguration(classes=App.class)*
>>>>>> *@SpringBootTest*
>>>>>>
>>>>>> *public class PetStoreTest {   *   *@Autowired *
>>>>>>       *PetStoreResource petStoreResource;*
>>>>>>
>>>>>>       *MockRest petStoreRest;*
>>>>>>
>>>>>>       *@Before*
>>>>>>       *public void setup() {*
>>>>>>         * petStoreRest =
>>>>>> MockRest.create(petStoreResource).simpleJson().build();*
>>>>>>       *}*
>>>>>>    *}*
>>>>>>
>>>>>> Then just use that petStoreRest object in all of your tests.
>>>>>>
>>>>>> The MockRest class doesn't use Juneau serializers/parsers.  It just
>>>>>> expects you to work with raw string input and output.  So the following
>>>>>> won't work because it's just going to convert the CreatePet object to a
>>>>>> String using toString():
>>>>>>
>>>>>>    *// Won't work*
>>>>>>    *petStoreRest.post("/petstore/pet",
>>>>>> pet).execute().assertStatus(200).assertBody(pet.toString());*
>>>>>>
>>>>>> Instead, you'll want something like this:
>>>>>>
>>>>>>
>>>>>> *@Test*
>>>>>> *public void testCreatePet() throws Exception {  *   * petStoreRest*
>>>>>>        *  .post("/petstore/pet",
>>>>>> "{name:'Sunshine',price:100.0,species:'BIRD'}")*
>>>>>>             *.execute()*
>>>>>>           *  .assertStatus(200)*
>>>>>>            * .assertBody("1");  // Returns the auto-generated ID*
>>>>>>
>>>>>> *}*
>>>>>>
>>>>>> Note that you could use this approach if you defined this method on
>>>>>> the CreatePet class:
>>>>>>
>>>>>> *public String toString() {  *   * return
>>>>>> SimpleJson.DEFAULT.toString(this);*
>>>>>>    *}*
>>>>>>
>>>>>> But usually I just keep it simple and deal with just plain strings.
>>>>>>
>>>>>> One last note:  Your test class should be placed in src/test/java.
>>>>>> This is standard convention and allows your dependencies to be pulled in
>>>>>> using only test scope:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *        <!-- Mock rest test -->        <dependency>
>>>>>>  <groupId>org.apache.juneau</groupId>
>>>>>>  <artifactId>juneau-rest-mock</artifactId>
>>>>>>  <version>8.1.2</version>           <scope>test</scope>
>>>>>> </dependency>        <dependency>           <groupId>junit</groupId>
>>>>>>    <artifactId>junit</artifactId>           <scope>test</scope>
>>>>>> </dependency>        <dependency>
>>>>>>  <groupId>org.springframework.boot</groupId>
>>>>>>  <artifactId>spring-boot-starter-test</artifactId>
>>>>>>  <scope>test</scope>         </dependency>*
>>>>>>
>>>>>> On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fi...@gmail.com> wrote:
>>>>>>
>>>>>>> Pull request sent.
>>>>>>>
>>>>>>> 2019-12-14, št, 08:19 Ayeshmantha Perera <ak...@gmail.com>
>>>>>>> rašė:
>>>>>>>
>>>>>>>> Hi Rasa
>>>>>>>>
>>>>>>>> Send the PR after removing the commented mock tests.
>>>>>>>>
>>>>>>>> On Fri 13. Dec 2019 at 14:46, Rasa V <fi...@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> I dont`understand. Which mock test calls I should remove?
>>>>>>>>>
>>>>>>>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <ak...@gmail.com>
>>>>>>>>> rašė:
>>>>>>>>>
>>>>>>>>>> Hi Rasa.Send a PR remove all the commented code and I saw a dummy
>>>>>>>>>> mock test call ok remove it as well
>>>>>>>>>>
>>>>>>>>>> Great work done
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fi...@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> I have pushed my code into a new branch:
>>>>>>>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>>>>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>>>>>>>> You can check if i should correct something or I can do a pull
>>>>>>>>>>> request.
>>>>>>>>>>>
>>>>>>>>>>> 2019-12-13, pn, 12:01 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>
>>>>>>>>>>>> Thanks. It works.
>>>>>>>>>>>>
>>>>>>>>>>>> 2019-12-12, kt, 17:40 James Bognar <ja...@apache.org>
>>>>>>>>>>>> rašė:
>>>>>>>>>>>>
>>>>>>>>>>>>> If the REST class your testing is a Spring bean with injected
>>>>>>>>>>>>> fields, then using SpringRunner should work.  You get access to the bean
>>>>>>>>>>>>> instance through autowiring.  So something like this....
>>>>>>>>>>>>>
>>>>>>>>>>>>> @RunWith(SpringRunner.class)
>>>>>>>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>>>>>>>> @SpringBootTest()
>>>>>>>>>>>>> public class MyRestTest {
>>>>>>>>>>>>>
>>>>>>>>>>>>>     @Autowired
>>>>>>>>>>>>>     MyRestClass restClass;
>>>>>>>>>>>>>
>>>>>>>>>>>>>     @Test
>>>>>>>>>>>>>     public void myTest() throws Exception {
>>>>>>>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>>>>>>>     }
>>>>>>>>>>>>> }
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thank you. I have almost finished writing MockTest class.
>>>>>>>>>>>>>> Which annotation should I add for running tests? SpringRunner or something
>>>>>>>>>>>>>> else?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> HTTP GET requests do not typically have a request body.
>>>>>>>>>>>>>>> They're meant to pull data, not push.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> However, you can use the generic request() methods to do it
>>>>>>>>>>>>>>> anyway:
>>>>>>>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thank you. I have one more question. How do you pass @Body
>>>>>>>>>>>>>>>> parameters (an Object) into GET method? MockRest Get has only one
>>>>>>>>>>>>>>>> parameter, the path.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The annotation on your REST class should include the
>>>>>>>>>>>>>>>>> following:
>>>>>>>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I tried to keep Json serializer annotation, but I get an
>>>>>>>>>>>>>>>>>> error message saying that Json serializer cannot be resolved as a type.
>>>>>>>>>>>>>>>>>> Import doesn`t help here.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar <
>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> rašė:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> @RestResource-annotated methods can return any POJO.
>>>>>>>>>>>>>>>>>>> That POJO is converted to the body of the HTTP response based on the Juneau
>>>>>>>>>>>>>>>>>>> Serializer that matches the Accept header on the incoming request (e.g.
>>>>>>>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29 AM Rasa V <
>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hello. I have one question about @Rest method. Should
>>>>>>>>>>>>>>>>>>>> it always return String or the type is not important here?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 2019-12-11, tr, 09:06 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> I will try to fix the documentation when I finish
>>>>>>>>>>>>>>>>>>>>> writing tests.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> 2019-12-10, an, 22:58 James Bognar <
>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> rašė:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Bonus points if you can verify and fix that in the
>>>>>>>>>>>>>>>>>>>>>> documentation!  I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>>>>>>>> The same mistake might exist elsewhere.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Yes I think its already there in the doc James
>>>>>>>>>>>>>>>>>>>>>>> pointed previously.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Thanks alot James
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> On Tue 10. Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Replace create(MyRest.class) with
>>>>>>>>>>>>>>>>>>>>>>>> build(MyRest.class).
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 4:28 AM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Hi Rasa and James
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> I just came back from a business trip. Sorry to
>>>>>>>>>>>>>>>>>>>>>>>>> attend this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>>>>>>>> [image: Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Rasa,
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Unfortunately Apache mail does not support images
>>>>>>>>>>>>>>>>>>>>>>>>>> so I can't actually
>>>>>>>>>>>>>>>>>>>>>>>>>> see the error.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> There's a section in the documentation on the
>>>>>>>>>>>>>>>>>>>>>>>>>> Mock REST interface:
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> The general idea behind them is to allow you to
>>>>>>>>>>>>>>>>>>>>>>>>>> execute simulated HTTP
>>>>>>>>>>>>>>>>>>>>>>>>>> requests against a REST endpoint without the need
>>>>>>>>>>>>>>>>>>>>>>>>>> for a servlet
>>>>>>>>>>>>>>>>>>>>>>>>>> container.   I recommend trying out the examples
>>>>>>>>>>>>>>>>>>>>>>>>>> in the documentation
>>>>>>>>>>>>>>>>>>>>>>>>>> (a useful exercise to validate the documentation
>>>>>>>>>>>>>>>>>>>>>>>>>> as well).
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>>>>>>>>> > Hello. I just started writing a mock test. I
>>>>>>>>>>>>>>>>>>>>>>>>>> don`h have much experience writing integration test. But I am trying to
>>>>>>>>>>>>>>>>>>>>>>>>>> learn. I wrote some code and would like to be sure I am doing it correctly.
>>>>>>>>>>>>>>>>>>>>>>>>>> I send you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>>>>>>>> method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>>>>>>>> put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>>>>>>>> > Maybe do you have some good examples of Juneau
>>>>>>>>>>>>>>>>>>>>>>>>>> mock tests?
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>> *Software Engineer*
>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>
>>>>>>>>> --
>>>>>>>> *Software Engineer*
>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>> *Salzburg, Austria*
>>>>>>>>
>>>>>>>

Re: Mock test task

Posted by James Bognar <ja...@apache.org>.
Hi Rasa,

This is looking better.  I'm able to get 1 of the 17 tests to pass:
testPostOrder.  It appears the issue with the other tests appears to be
primarily because they're not independent of each other.  JUnit tests are
run in random order so you cannot rely on data created in one test to be
there for another.

For example, the testGettingPets() method below won't work unless
testPostPet() has been run first and there's no way to guarantee that in
JUnit:

@Test
public void testPostPet() throws Exception {
   petStoreRest
      .post("/pet", "{name:'Sunshine',tags:['nice'],
price:100.0,species:'BIRD'}")
      .execute()
      .assertStatus(200)
      .assertBody("1");
}

@Test
public void testGettingPets() throws Exception {
   petStoreRest
      .get("/pet")
      .execute()
      .assertStatus(200)

 .assertBody("[{id:1,species:'BIRD',name:'Sunshine',tags:['nice'],price:100.0,status:'AVAILABLE'}]");
}


As a general rule, testcases should not leave stuff around in the database
that can possibly interfere with other testscases.  So whatever you insert
should also be removed.  Here's an example of a test that inserts data,
performs your test, and then cleans up after itself:

@Test
public void testGettingOrders() throws Exception {

   // --- Initialize database with test data ---

   String petId = petStoreRest
      .post("/pet", "{name:'Sunshine',tags:['nice'],
price:100.0,species:'BIRD'}")
      .execute()
      .assertStatus(200)
      .getBodyAsString();

   String orderId = petStoreRest
      .post("/store/order", "petId=1&username=catlover")  // Has to be Form
Post format.
      .execute()
      .assertStatus(200)
      .getBodyAsString();

   // --- Test our method ---

   petStoreRest
      .get("/store/order/" + orderId)
      .execute()
      .assertStatus(200)

 .assertBody("{id:"+orderId+",petId:"+petId+",username:'catlover',status:'PLACED'}");

   // --- Delete our test data so that it doesn't interfere with other
tests ---

  petStoreRest
      .delete("/store/order/" + orderId)
      .execute()
      .assertStatus(200);

   petStoreRest
      .delete("/pet/" + petId)
      .execute()
      .assertStatus(200);
}

If you find yourself creating lots of duplicate code, then you can move
some of that logic into helper methods like so...

@Test
public void testGettingOrders() throws Exception {

   String petId = createTestPet();
   String orderId = createTestOrder();

   petStoreRest
      .get("/store/order/" + orderId)
      .execute()
      .assertStatus(200)

 .assertBody("{id:"+orderId+",petId:"+petId+",username:'catlover',status:'PLACED'}");

   deleteTestPet(petId);
   deleteTestOrder(orderId);
}

Hope that helps!





On Tue, Dec 17, 2019 at 2:32 PM Rasa V <fi...@gmail.com> wrote:

> Thank you. I did one more commit to a Github. Could you check if my tests
> look better now?
>
> 2019-12-17, an, 18:49 James Bognar <ja...@apache.org> rašė:
>
>> Hi Rasa,
>>
>> You'll want to put these tests under
>> juneau-petstore-server/src/test/java.  The juneau-petstore-api defines the
>> common beans used by both the server and client projects.  You're
>> specifically testing the server project so the tests should go in that
>> project
>>
>> Your test class shouldn't contain @Rest or @RestResource at all.  Instead
>> it should just be referencing PetStoreResource which has that annotation.
>>
>> If you're stuck, go ahead and submit a pull request with what you've got
>> and I can help out.
>>
>>
>> On Tue, Dec 17, 2019 at 6:58 AM Rasa V <fi...@gmail.com> wrote:
>>
>>> I am stuck in many places. Almost all rest tests fail.
>>> What is more, I don`t know where to put @Rest or @RestResource
>>> annotation after removing static rest class.
>>> And where is the best place for the src/test/java catalogue:
>>> juneau-petstore-api or juneau-petstore-server? Do I need separate pom.xml
>>> for the tests?
>>>
>>> 2019-12-16, pr, 08:24 Rasa V <fi...@gmail.com> rašė:
>>>
>>>> Thank you. I will try to fix everything.
>>>>
>>>> 2019-12-14, št, 22:32 James Bognar <ja...@apache.org> rašė:
>>>>
>>>>> One other useful note.  If you add debug="true" to the @Rest
>>>>> annotation on the PetStoreResource class, the HTTP request/response will be
>>>>> printed on the console which can be quite helpful in debugging issues.
>>>>>
>>>>>
>>>>> ---------- Forwarded message ---------
>>>>> From: James Bognar <ja...@apache.org>
>>>>> Date: Sat, Dec 14, 2019 at 3:27 PM
>>>>> Subject: Re: Mock test task
>>>>> To: Rasa V <fi...@gmail.com>
>>>>> Cc: Ayeshmantha Perera <ak...@gmail.com>, <
>>>>> dev@juneau.apache.org>
>>>>>
>>>>>
>>>>> Hi Rasa,
>>>>>
>>>>> I have suggestions on your pull request.
>>>>>
>>>>> You should be testing against the actual REST class itself instead of
>>>>> creating pieces of it in your test (e.g. UpdatePetMockRest).  SpringRunner
>>>>> allows you to get access to the real Spring bean via auto-wiring, like so:
>>>>>
>>>>>
>>>>>
>>>>> *   @RunWith(SpringRunner.class)
>>>>>  @ContextConfiguration(classes=App.class)*
>>>>> *@SpringBootTest*
>>>>>
>>>>> *public class PetStoreTest {   *   *@Autowired *
>>>>>       *PetStoreResource petStoreResource;*
>>>>>
>>>>>       *MockRest petStoreRest;*
>>>>>
>>>>>       *@Before*
>>>>>       *public void setup() {*
>>>>>         * petStoreRest =
>>>>> MockRest.create(petStoreResource).simpleJson().build();*
>>>>>       *}*
>>>>>    *}*
>>>>>
>>>>> Then just use that petStoreRest object in all of your tests.
>>>>>
>>>>> The MockRest class doesn't use Juneau serializers/parsers.  It just
>>>>> expects you to work with raw string input and output.  So the following
>>>>> won't work because it's just going to convert the CreatePet object to a
>>>>> String using toString():
>>>>>
>>>>>    *// Won't work*
>>>>>    *petStoreRest.post("/petstore/pet",
>>>>> pet).execute().assertStatus(200).assertBody(pet.toString());*
>>>>>
>>>>> Instead, you'll want something like this:
>>>>>
>>>>>
>>>>> *@Test*
>>>>> *public void testCreatePet() throws Exception {  *   * petStoreRest*
>>>>>        *  .post("/petstore/pet",
>>>>> "{name:'Sunshine',price:100.0,species:'BIRD'}")*
>>>>>             *.execute()*
>>>>>           *  .assertStatus(200)*
>>>>>            * .assertBody("1");  // Returns the auto-generated ID*
>>>>>
>>>>> *}*
>>>>>
>>>>> Note that you could use this approach if you defined this method on
>>>>> the CreatePet class:
>>>>>
>>>>> *public String toString() {  *   * return
>>>>> SimpleJson.DEFAULT.toString(this);*
>>>>>    *}*
>>>>>
>>>>> But usually I just keep it simple and deal with just plain strings.
>>>>>
>>>>> One last note:  Your test class should be placed in src/test/java.
>>>>> This is standard convention and allows your dependencies to be pulled in
>>>>> using only test scope:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> *        <!-- Mock rest test -->        <dependency>
>>>>>  <groupId>org.apache.juneau</groupId>
>>>>>  <artifactId>juneau-rest-mock</artifactId>
>>>>>  <version>8.1.2</version>           <scope>test</scope>
>>>>> </dependency>        <dependency>           <groupId>junit</groupId>
>>>>>    <artifactId>junit</artifactId>           <scope>test</scope>
>>>>> </dependency>        <dependency>
>>>>>  <groupId>org.springframework.boot</groupId>
>>>>>  <artifactId>spring-boot-starter-test</artifactId>
>>>>>  <scope>test</scope>         </dependency>*
>>>>>
>>>>> On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fi...@gmail.com> wrote:
>>>>>
>>>>>> Pull request sent.
>>>>>>
>>>>>> 2019-12-14, št, 08:19 Ayeshmantha Perera <ak...@gmail.com>
>>>>>> rašė:
>>>>>>
>>>>>>> Hi Rasa
>>>>>>>
>>>>>>> Send the PR after removing the commented mock tests.
>>>>>>>
>>>>>>> On Fri 13. Dec 2019 at 14:46, Rasa V <fi...@gmail.com> wrote:
>>>>>>>
>>>>>>>> I dont`understand. Which mock test calls I should remove?
>>>>>>>>
>>>>>>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <ak...@gmail.com>
>>>>>>>> rašė:
>>>>>>>>
>>>>>>>>> Hi Rasa.Send a PR remove all the commented code and I saw a dummy
>>>>>>>>> mock test call ok remove it as well
>>>>>>>>>
>>>>>>>>> Great work done
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fi...@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> I have pushed my code into a new branch:
>>>>>>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>>>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>>>>>>> You can check if i should correct something or I can do a pull
>>>>>>>>>> request.
>>>>>>>>>>
>>>>>>>>>> 2019-12-13, pn, 12:01 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>
>>>>>>>>>>> Thanks. It works.
>>>>>>>>>>>
>>>>>>>>>>> 2019-12-12, kt, 17:40 James Bognar <ja...@apache.org>
>>>>>>>>>>> rašė:
>>>>>>>>>>>
>>>>>>>>>>>> If the REST class your testing is a Spring bean with injected
>>>>>>>>>>>> fields, then using SpringRunner should work.  You get access to the bean
>>>>>>>>>>>> instance through autowiring.  So something like this....
>>>>>>>>>>>>
>>>>>>>>>>>> @RunWith(SpringRunner.class)
>>>>>>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>>>>>>> @SpringBootTest()
>>>>>>>>>>>> public class MyRestTest {
>>>>>>>>>>>>
>>>>>>>>>>>>     @Autowired
>>>>>>>>>>>>     MyRestClass restClass;
>>>>>>>>>>>>
>>>>>>>>>>>>     @Test
>>>>>>>>>>>>     public void myTest() throws Exception {
>>>>>>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>>>>>>     }
>>>>>>>>>>>> }
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Thank you. I have almost finished writing MockTest class.
>>>>>>>>>>>>> Which annotation should I add for running tests? SpringRunner or something
>>>>>>>>>>>>> else?
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <ja...@apache.org>
>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> HTTP GET requests do not typically have a request body.
>>>>>>>>>>>>>> They're meant to pull data, not push.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> However, you can use the generic request() methods to do it
>>>>>>>>>>>>>> anyway:
>>>>>>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thank you. I have one more question. How do you pass @Body
>>>>>>>>>>>>>>> parameters (an Object) into GET method? MockRest Get has only one
>>>>>>>>>>>>>>> parameter, the path.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> The annotation on your REST class should include the
>>>>>>>>>>>>>>>> following:
>>>>>>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I tried to keep Json serializer annotation, but I get an
>>>>>>>>>>>>>>>>> error message saying that Json serializer cannot be resolved as a type.
>>>>>>>>>>>>>>>>> Import doesn`t help here.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> @RestResource-annotated methods can return any POJO.
>>>>>>>>>>>>>>>>>> That POJO is converted to the body of the HTTP response based on the Juneau
>>>>>>>>>>>>>>>>>> Serializer that matches the Accept header on the incoming request (e.g.
>>>>>>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29 AM Rasa V <
>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Hello. I have one question about @Rest method. Should it
>>>>>>>>>>>>>>>>>>> always return String or the type is not important here?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> 2019-12-11, tr, 09:06 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> I will try to fix the documentation when I finish
>>>>>>>>>>>>>>>>>>>> writing tests.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 2019-12-10, an, 22:58 James Bognar <
>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> rašė:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Bonus points if you can verify and fix that in the
>>>>>>>>>>>>>>>>>>>>> documentation!  I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>>>>>>> The same mistake might exist elsewhere.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Yes I think its already there in the doc James
>>>>>>>>>>>>>>>>>>>>>> pointed previously.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Thanks alot James
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On Tue 10. Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Replace create(MyRest.class) with
>>>>>>>>>>>>>>>>>>>>>>> build(MyRest.class).
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 4:28 AM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Hi Rasa and James
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> I just came back from a business trip. Sorry to
>>>>>>>>>>>>>>>>>>>>>>>> attend this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>>>>>>> [image: Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Hi Rasa,
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Unfortunately Apache mail does not support images
>>>>>>>>>>>>>>>>>>>>>>>>> so I can't actually
>>>>>>>>>>>>>>>>>>>>>>>>> see the error.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> There's a section in the documentation on the Mock
>>>>>>>>>>>>>>>>>>>>>>>>> REST interface:
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> The general idea behind them is to allow you to
>>>>>>>>>>>>>>>>>>>>>>>>> execute simulated HTTP
>>>>>>>>>>>>>>>>>>>>>>>>> requests against a REST endpoint without the need
>>>>>>>>>>>>>>>>>>>>>>>>> for a servlet
>>>>>>>>>>>>>>>>>>>>>>>>> container.   I recommend trying out the examples
>>>>>>>>>>>>>>>>>>>>>>>>> in the documentation
>>>>>>>>>>>>>>>>>>>>>>>>> (a useful exercise to validate the documentation
>>>>>>>>>>>>>>>>>>>>>>>>> as well).
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>>>>>>>> > Hello. I just started writing a mock test. I
>>>>>>>>>>>>>>>>>>>>>>>>> don`h have much experience writing integration test. But I am trying to
>>>>>>>>>>>>>>>>>>>>>>>>> learn. I wrote some code and would like to be sure I am doing it correctly.
>>>>>>>>>>>>>>>>>>>>>>>>> I send you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>>>>>>> method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>>>>>>> put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>>>>>>> > Maybe do you have some good examples of Juneau
>>>>>>>>>>>>>>>>>>>>>>>>> mock tests?
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>> *Software Engineer*
>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>
>>>>>>>> --
>>>>>>> *Software Engineer*
>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>> *Salzburg, Austria*
>>>>>>>
>>>>>>

Re: Mock test task

Posted by Rasa V <fi...@gmail.com>.
Thank you. I did one more commit to a Github. Could you check if my tests
look better now?

2019-12-17, an, 18:49 James Bognar <ja...@apache.org> rašė:

> Hi Rasa,
>
> You'll want to put these tests under
> juneau-petstore-server/src/test/java.  The juneau-petstore-api defines the
> common beans used by both the server and client projects.  You're
> specifically testing the server project so the tests should go in that
> project
>
> Your test class shouldn't contain @Rest or @RestResource at all.  Instead
> it should just be referencing PetStoreResource which has that annotation.
>
> If you're stuck, go ahead and submit a pull request with what you've got
> and I can help out.
>
>
> On Tue, Dec 17, 2019 at 6:58 AM Rasa V <fi...@gmail.com> wrote:
>
>> I am stuck in many places. Almost all rest tests fail.
>> What is more, I don`t know where to put @Rest or @RestResource annotation
>> after removing static rest class.
>> And where is the best place for the src/test/java catalogue:
>> juneau-petstore-api or juneau-petstore-server? Do I need separate pom.xml
>> for the tests?
>>
>> 2019-12-16, pr, 08:24 Rasa V <fi...@gmail.com> rašė:
>>
>>> Thank you. I will try to fix everything.
>>>
>>> 2019-12-14, št, 22:32 James Bognar <ja...@apache.org> rašė:
>>>
>>>> One other useful note.  If you add debug="true" to the @Rest annotation
>>>> on the PetStoreResource class, the HTTP request/response will be printed on
>>>> the console which can be quite helpful in debugging issues.
>>>>
>>>>
>>>> ---------- Forwarded message ---------
>>>> From: James Bognar <ja...@apache.org>
>>>> Date: Sat, Dec 14, 2019 at 3:27 PM
>>>> Subject: Re: Mock test task
>>>> To: Rasa V <fi...@gmail.com>
>>>> Cc: Ayeshmantha Perera <ak...@gmail.com>, <
>>>> dev@juneau.apache.org>
>>>>
>>>>
>>>> Hi Rasa,
>>>>
>>>> I have suggestions on your pull request.
>>>>
>>>> You should be testing against the actual REST class itself instead of
>>>> creating pieces of it in your test (e.g. UpdatePetMockRest).  SpringRunner
>>>> allows you to get access to the real Spring bean via auto-wiring, like so:
>>>>
>>>>
>>>>
>>>> *   @RunWith(SpringRunner.class)
>>>>  @ContextConfiguration(classes=App.class)*
>>>> *@SpringBootTest*
>>>>
>>>> *public class PetStoreTest {   *   *@Autowired *
>>>>       *PetStoreResource petStoreResource;*
>>>>
>>>>       *MockRest petStoreRest;*
>>>>
>>>>       *@Before*
>>>>       *public void setup() {*
>>>>         * petStoreRest =
>>>> MockRest.create(petStoreResource).simpleJson().build();*
>>>>       *}*
>>>>    *}*
>>>>
>>>> Then just use that petStoreRest object in all of your tests.
>>>>
>>>> The MockRest class doesn't use Juneau serializers/parsers.  It just
>>>> expects you to work with raw string input and output.  So the following
>>>> won't work because it's just going to convert the CreatePet object to a
>>>> String using toString():
>>>>
>>>>    *// Won't work*
>>>>    *petStoreRest.post("/petstore/pet",
>>>> pet).execute().assertStatus(200).assertBody(pet.toString());*
>>>>
>>>> Instead, you'll want something like this:
>>>>
>>>>
>>>> *@Test*
>>>> *public void testCreatePet() throws Exception {  *   * petStoreRest*
>>>>        *  .post("/petstore/pet",
>>>> "{name:'Sunshine',price:100.0,species:'BIRD'}")*
>>>>             *.execute()*
>>>>           *  .assertStatus(200)*
>>>>            * .assertBody("1");  // Returns the auto-generated ID*
>>>>
>>>> *}*
>>>>
>>>> Note that you could use this approach if you defined this method on the
>>>> CreatePet class:
>>>>
>>>> *public String toString() {  *   * return
>>>> SimpleJson.DEFAULT.toString(this);*
>>>>    *}*
>>>>
>>>> But usually I just keep it simple and deal with just plain strings.
>>>>
>>>> One last note:  Your test class should be placed in src/test/java.
>>>> This is standard convention and allows your dependencies to be pulled in
>>>> using only test scope:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> *        <!-- Mock rest test -->        <dependency>
>>>>  <groupId>org.apache.juneau</groupId>
>>>>  <artifactId>juneau-rest-mock</artifactId>
>>>>  <version>8.1.2</version>           <scope>test</scope>
>>>> </dependency>        <dependency>           <groupId>junit</groupId>
>>>>    <artifactId>junit</artifactId>           <scope>test</scope>
>>>> </dependency>        <dependency>
>>>>  <groupId>org.springframework.boot</groupId>
>>>>  <artifactId>spring-boot-starter-test</artifactId>
>>>>  <scope>test</scope>         </dependency>*
>>>>
>>>> On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fi...@gmail.com> wrote:
>>>>
>>>>> Pull request sent.
>>>>>
>>>>> 2019-12-14, št, 08:19 Ayeshmantha Perera <ak...@gmail.com>
>>>>> rašė:
>>>>>
>>>>>> Hi Rasa
>>>>>>
>>>>>> Send the PR after removing the commented mock tests.
>>>>>>
>>>>>> On Fri 13. Dec 2019 at 14:46, Rasa V <fi...@gmail.com> wrote:
>>>>>>
>>>>>>> I dont`understand. Which mock test calls I should remove?
>>>>>>>
>>>>>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <ak...@gmail.com>
>>>>>>> rašė:
>>>>>>>
>>>>>>>> Hi Rasa.Send a PR remove all the commented code and I saw a dummy
>>>>>>>> mock test call ok remove it as well
>>>>>>>>
>>>>>>>> Great work done
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fi...@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> I have pushed my code into a new branch:
>>>>>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>>>>>> You can check if i should correct something or I can do a pull
>>>>>>>>> request.
>>>>>>>>>
>>>>>>>>> 2019-12-13, pn, 12:01 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>
>>>>>>>>>> Thanks. It works.
>>>>>>>>>>
>>>>>>>>>> 2019-12-12, kt, 17:40 James Bognar <ja...@apache.org> rašė:
>>>>>>>>>>
>>>>>>>>>>> If the REST class your testing is a Spring bean with injected
>>>>>>>>>>> fields, then using SpringRunner should work.  You get access to the bean
>>>>>>>>>>> instance through autowiring.  So something like this....
>>>>>>>>>>>
>>>>>>>>>>> @RunWith(SpringRunner.class)
>>>>>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>>>>>> @SpringBootTest()
>>>>>>>>>>> public class MyRestTest {
>>>>>>>>>>>
>>>>>>>>>>>     @Autowired
>>>>>>>>>>>     MyRestClass restClass;
>>>>>>>>>>>
>>>>>>>>>>>     @Test
>>>>>>>>>>>     public void myTest() throws Exception {
>>>>>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>>>>>     }
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Thank you. I have almost finished writing MockTest class.
>>>>>>>>>>>> Which annotation should I add for running tests? SpringRunner or something
>>>>>>>>>>>> else?
>>>>>>>>>>>>
>>>>>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <ja...@apache.org>
>>>>>>>>>>>> rašė:
>>>>>>>>>>>>
>>>>>>>>>>>>> HTTP GET requests do not typically have a request body.
>>>>>>>>>>>>> They're meant to pull data, not push.
>>>>>>>>>>>>>
>>>>>>>>>>>>> However, you can use the generic request() methods to do it
>>>>>>>>>>>>> anyway:
>>>>>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thank you. I have one more question. How do you pass @Body
>>>>>>>>>>>>>> parameters (an Object) into GET method? MockRest Get has only one
>>>>>>>>>>>>>> parameter, the path.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> The annotation on your REST class should include the
>>>>>>>>>>>>>>> following:
>>>>>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I tried to keep Json serializer annotation, but I get an
>>>>>>>>>>>>>>>> error message saying that Json serializer cannot be resolved as a type.
>>>>>>>>>>>>>>>> Import doesn`t help here.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> @RestResource-annotated methods can return any POJO.  That
>>>>>>>>>>>>>>>>> POJO is converted to the body of the HTTP response based on the Juneau
>>>>>>>>>>>>>>>>> Serializer that matches the Accept header on the incoming request (e.g.
>>>>>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hello. I have one question about @Rest method. Should it
>>>>>>>>>>>>>>>>>> always return String or the type is not important here?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 2019-12-11, tr, 09:06 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I will try to fix the documentation when I finish
>>>>>>>>>>>>>>>>>>> writing tests.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> 2019-12-10, an, 22:58 James Bognar <
>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> rašė:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Bonus points if you can verify and fix that in the
>>>>>>>>>>>>>>>>>>>> documentation!  I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>>>>>> The same mistake might exist elsewhere.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Yes I think its already there in the doc James pointed
>>>>>>>>>>>>>>>>>>>>> previously.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Thanks alot James
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Tue 10. Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Replace create(MyRest.class) with build(MyRest.class).
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 4:28 AM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Hi Rasa and James
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> I just came back from a business trip. Sorry to
>>>>>>>>>>>>>>>>>>>>>>> attend this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>>>>>> [image: Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Hi Rasa,
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Unfortunately Apache mail does not support images
>>>>>>>>>>>>>>>>>>>>>>>> so I can't actually
>>>>>>>>>>>>>>>>>>>>>>>> see the error.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> There's a section in the documentation on the Mock
>>>>>>>>>>>>>>>>>>>>>>>> REST interface:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> The general idea behind them is to allow you to
>>>>>>>>>>>>>>>>>>>>>>>> execute simulated HTTP
>>>>>>>>>>>>>>>>>>>>>>>> requests against a REST endpoint without the need
>>>>>>>>>>>>>>>>>>>>>>>> for a servlet
>>>>>>>>>>>>>>>>>>>>>>>> container.   I recommend trying out the examples in
>>>>>>>>>>>>>>>>>>>>>>>> the documentation
>>>>>>>>>>>>>>>>>>>>>>>> (a useful exercise to validate the documentation as
>>>>>>>>>>>>>>>>>>>>>>>> well).
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>>>>>>> > Hello. I just started writing a mock test. I
>>>>>>>>>>>>>>>>>>>>>>>> don`h have much experience writing integration test. But I am trying to
>>>>>>>>>>>>>>>>>>>>>>>> learn. I wrote some code and would like to be sure I am doing it correctly.
>>>>>>>>>>>>>>>>>>>>>>>> I send you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>>>>>> method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>>>>>> put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>>>>>> > Maybe do you have some good examples of Juneau
>>>>>>>>>>>>>>>>>>>>>>>> mock tests?
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> --
>>>>>>>> *Software Engineer*
>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>> *Salzburg, Austria*
>>>>>>>>
>>>>>>> --
>>>>>> *Software Engineer*
>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>> *Salzburg, Austria*
>>>>>>
>>>>>

Re: Mock test task

Posted by James Bognar <ja...@apache.org>.
Hi Rasa,

You'll want to put these tests under juneau-petstore-server/src/test/java.
The juneau-petstore-api defines the common beans used by both the server
and client projects.  You're specifically testing the server project so the
tests should go in that project

Your test class shouldn't contain @Rest or @RestResource at all.  Instead
it should just be referencing PetStoreResource which has that annotation.

If you're stuck, go ahead and submit a pull request with what you've got
and I can help out.


On Tue, Dec 17, 2019 at 6:58 AM Rasa V <fi...@gmail.com> wrote:

> I am stuck in many places. Almost all rest tests fail.
> What is more, I don`t know where to put @Rest or @RestResource annotation
> after removing static rest class.
> And where is the best place for the src/test/java catalogue:
> juneau-petstore-api or juneau-petstore-server? Do I need separate pom.xml
> for the tests?
>
> 2019-12-16, pr, 08:24 Rasa V <fi...@gmail.com> rašė:
>
>> Thank you. I will try to fix everything.
>>
>> 2019-12-14, št, 22:32 James Bognar <ja...@apache.org> rašė:
>>
>>> One other useful note.  If you add debug="true" to the @Rest annotation
>>> on the PetStoreResource class, the HTTP request/response will be printed on
>>> the console which can be quite helpful in debugging issues.
>>>
>>>
>>> ---------- Forwarded message ---------
>>> From: James Bognar <ja...@apache.org>
>>> Date: Sat, Dec 14, 2019 at 3:27 PM
>>> Subject: Re: Mock test task
>>> To: Rasa V <fi...@gmail.com>
>>> Cc: Ayeshmantha Perera <ak...@gmail.com>, <dev@juneau.apache.org
>>> >
>>>
>>>
>>> Hi Rasa,
>>>
>>> I have suggestions on your pull request.
>>>
>>> You should be testing against the actual REST class itself instead of
>>> creating pieces of it in your test (e.g. UpdatePetMockRest).  SpringRunner
>>> allows you to get access to the real Spring bean via auto-wiring, like so:
>>>
>>>
>>>
>>> *   @RunWith(SpringRunner.class)
>>>  @ContextConfiguration(classes=App.class)*
>>> *@SpringBootTest*
>>>
>>> *public class PetStoreTest {   *   *@Autowired *
>>>       *PetStoreResource petStoreResource;*
>>>
>>>       *MockRest petStoreRest;*
>>>
>>>       *@Before*
>>>       *public void setup() {*
>>>         * petStoreRest =
>>> MockRest.create(petStoreResource).simpleJson().build();*
>>>       *}*
>>>    *}*
>>>
>>> Then just use that petStoreRest object in all of your tests.
>>>
>>> The MockRest class doesn't use Juneau serializers/parsers.  It just
>>> expects you to work with raw string input and output.  So the following
>>> won't work because it's just going to convert the CreatePet object to a
>>> String using toString():
>>>
>>>    *// Won't work*
>>>    *petStoreRest.post("/petstore/pet",
>>> pet).execute().assertStatus(200).assertBody(pet.toString());*
>>>
>>> Instead, you'll want something like this:
>>>
>>>
>>> *@Test*
>>> *public void testCreatePet() throws Exception {  *   * petStoreRest*
>>>        *  .post("/petstore/pet",
>>> "{name:'Sunshine',price:100.0,species:'BIRD'}")*
>>>             *.execute()*
>>>           *  .assertStatus(200)*
>>>            * .assertBody("1");  // Returns the auto-generated ID*
>>>
>>> *}*
>>>
>>> Note that you could use this approach if you defined this method on the
>>> CreatePet class:
>>>
>>> *public String toString() {  *   * return
>>> SimpleJson.DEFAULT.toString(this);*
>>>    *}*
>>>
>>> But usually I just keep it simple and deal with just plain strings.
>>>
>>> One last note:  Your test class should be placed in src/test/java.  This
>>> is standard convention and allows your dependencies to be pulled in using
>>> only test scope:
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *        <!-- Mock rest test -->        <dependency>
>>>  <groupId>org.apache.juneau</groupId>
>>>  <artifactId>juneau-rest-mock</artifactId>
>>>  <version>8.1.2</version>           <scope>test</scope>
>>> </dependency>        <dependency>           <groupId>junit</groupId>
>>>    <artifactId>junit</artifactId>           <scope>test</scope>
>>> </dependency>        <dependency>
>>>  <groupId>org.springframework.boot</groupId>
>>>  <artifactId>spring-boot-starter-test</artifactId>
>>>  <scope>test</scope>         </dependency>*
>>>
>>> On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fi...@gmail.com> wrote:
>>>
>>>> Pull request sent.
>>>>
>>>> 2019-12-14, št, 08:19 Ayeshmantha Perera <ak...@gmail.com>
>>>> rašė:
>>>>
>>>>> Hi Rasa
>>>>>
>>>>> Send the PR after removing the commented mock tests.
>>>>>
>>>>> On Fri 13. Dec 2019 at 14:46, Rasa V <fi...@gmail.com> wrote:
>>>>>
>>>>>> I dont`understand. Which mock test calls I should remove?
>>>>>>
>>>>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <ak...@gmail.com>
>>>>>> rašė:
>>>>>>
>>>>>>> Hi Rasa.Send a PR remove all the commented code and I saw a dummy
>>>>>>> mock test call ok remove it as well
>>>>>>>
>>>>>>> Great work done
>>>>>>>
>>>>>>>
>>>>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fi...@gmail.com> wrote:
>>>>>>>
>>>>>>>> I have pushed my code into a new branch:
>>>>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>>>>> You can check if i should correct something or I can do a pull
>>>>>>>> request.
>>>>>>>>
>>>>>>>> 2019-12-13, pn, 12:01 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>
>>>>>>>>> Thanks. It works.
>>>>>>>>>
>>>>>>>>> 2019-12-12, kt, 17:40 James Bognar <ja...@apache.org> rašė:
>>>>>>>>>
>>>>>>>>>> If the REST class your testing is a Spring bean with injected
>>>>>>>>>> fields, then using SpringRunner should work.  You get access to the bean
>>>>>>>>>> instance through autowiring.  So something like this....
>>>>>>>>>>
>>>>>>>>>> @RunWith(SpringRunner.class)
>>>>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>>>>> @SpringBootTest()
>>>>>>>>>> public class MyRestTest {
>>>>>>>>>>
>>>>>>>>>>     @Autowired
>>>>>>>>>>     MyRestClass restClass;
>>>>>>>>>>
>>>>>>>>>>     @Test
>>>>>>>>>>     public void myTest() throws Exception {
>>>>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>>>>     }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fi...@gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Thank you. I have almost finished writing MockTest class.  Which
>>>>>>>>>>> annotation should I add for running tests? SpringRunner or something else?
>>>>>>>>>>>
>>>>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <ja...@apache.org>
>>>>>>>>>>> rašė:
>>>>>>>>>>>
>>>>>>>>>>>> HTTP GET requests do not typically have a request body.
>>>>>>>>>>>> They're meant to pull data, not push.
>>>>>>>>>>>>
>>>>>>>>>>>> However, you can use the generic request() methods to do it
>>>>>>>>>>>> anyway:
>>>>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Thank you. I have one more question. How do you pass @Body
>>>>>>>>>>>>> parameters (an Object) into GET method? MockRest Get has only one
>>>>>>>>>>>>> parameter, the path.
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <ja...@apache.org>
>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> The annotation on your REST class should include the
>>>>>>>>>>>>>> following:
>>>>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I tried to keep Json serializer annotation, but I get an
>>>>>>>>>>>>>>> error message saying that Json serializer cannot be resolved as a type.
>>>>>>>>>>>>>>> Import doesn`t help here.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> @RestResource-annotated methods can return any POJO.  That
>>>>>>>>>>>>>>>> POJO is converted to the body of the HTTP response based on the Juneau
>>>>>>>>>>>>>>>> Serializer that matches the Accept header on the incoming request (e.g.
>>>>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hello. I have one question about @Rest method. Should it
>>>>>>>>>>>>>>>>> always return String or the type is not important here?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> 2019-12-11, tr, 09:06 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I will try to fix the documentation when I finish writing
>>>>>>>>>>>>>>>>>> tests.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 2019-12-10, an, 22:58 James Bognar <
>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> rašė:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Bonus points if you can verify and fix that in the
>>>>>>>>>>>>>>>>>>> documentation!  I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>>>>> The same mistake might exist elsewhere.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Yes I think its already there in the doc James pointed
>>>>>>>>>>>>>>>>>>>> previously.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks alot James
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Tue 10. Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Replace create(MyRest.class) with build(MyRest.class).
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 4:28 AM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Hi Rasa and James
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> I just came back from a business trip. Sorry to
>>>>>>>>>>>>>>>>>>>>>> attend this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>>>>> [image: Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Hi Rasa,
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Unfortunately Apache mail does not support images so
>>>>>>>>>>>>>>>>>>>>>>> I can't actually
>>>>>>>>>>>>>>>>>>>>>>> see the error.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> There's a section in the documentation on the Mock
>>>>>>>>>>>>>>>>>>>>>>> REST interface:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> The general idea behind them is to allow you to
>>>>>>>>>>>>>>>>>>>>>>> execute simulated HTTP
>>>>>>>>>>>>>>>>>>>>>>> requests against a REST endpoint without the need
>>>>>>>>>>>>>>>>>>>>>>> for a servlet
>>>>>>>>>>>>>>>>>>>>>>> container.   I recommend trying out the examples in
>>>>>>>>>>>>>>>>>>>>>>> the documentation
>>>>>>>>>>>>>>>>>>>>>>> (a useful exercise to validate the documentation as
>>>>>>>>>>>>>>>>>>>>>>> well).
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>>>>>> > Hello. I just started writing a mock test. I don`h
>>>>>>>>>>>>>>>>>>>>>>> have much experience writing integration test. But I am trying to learn. I
>>>>>>>>>>>>>>>>>>>>>>> wrote some code and would like to be sure I am doing it correctly. I send
>>>>>>>>>>>>>>>>>>>>>>> you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>>>>> method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>>>>> put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>>>>> > Maybe do you have some good examples of Juneau
>>>>>>>>>>>>>>>>>>>>>>> mock tests?
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> --
>>>>>>> *Software Engineer*
>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>> *Salzburg, Austria*
>>>>>>>
>>>>>> --
>>>>> *Software Engineer*
>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>> *Salzburg, Austria*
>>>>>
>>>>

Re: Mock test task

Posted by Rasa V <fi...@gmail.com>.
I am stuck in many places. Almost all rest tests fail.
What is more, I don`t know where to put @Rest or @RestResource annotation
after removing static rest class.
And where is the best place for the src/test/java catalogue:
juneau-petstore-api or juneau-petstore-server? Do I need separate pom.xml
for the tests?

2019-12-16, pr, 08:24 Rasa V <fi...@gmail.com> rašė:

> Thank you. I will try to fix everything.
>
> 2019-12-14, št, 22:32 James Bognar <ja...@apache.org> rašė:
>
>> One other useful note.  If you add debug="true" to the @Rest annotation
>> on the PetStoreResource class, the HTTP request/response will be printed on
>> the console which can be quite helpful in debugging issues.
>>
>>
>> ---------- Forwarded message ---------
>> From: James Bognar <ja...@apache.org>
>> Date: Sat, Dec 14, 2019 at 3:27 PM
>> Subject: Re: Mock test task
>> To: Rasa V <fi...@gmail.com>
>> Cc: Ayeshmantha Perera <ak...@gmail.com>, <de...@juneau.apache.org>
>>
>>
>> Hi Rasa,
>>
>> I have suggestions on your pull request.
>>
>> You should be testing against the actual REST class itself instead of
>> creating pieces of it in your test (e.g. UpdatePetMockRest).  SpringRunner
>> allows you to get access to the real Spring bean via auto-wiring, like so:
>>
>>
>>
>> *   @RunWith(SpringRunner.class)
>>  @ContextConfiguration(classes=App.class)*
>> *@SpringBootTest*
>>
>> *public class PetStoreTest {   *   *@Autowired *
>>       *PetStoreResource petStoreResource;*
>>
>>       *MockRest petStoreRest;*
>>
>>       *@Before*
>>       *public void setup() {*
>>         * petStoreRest =
>> MockRest.create(petStoreResource).simpleJson().build();*
>>       *}*
>>    *}*
>>
>> Then just use that petStoreRest object in all of your tests.
>>
>> The MockRest class doesn't use Juneau serializers/parsers.  It just
>> expects you to work with raw string input and output.  So the following
>> won't work because it's just going to convert the CreatePet object to a
>> String using toString():
>>
>>    *// Won't work*
>>    *petStoreRest.post("/petstore/pet",
>> pet).execute().assertStatus(200).assertBody(pet.toString());*
>>
>> Instead, you'll want something like this:
>>
>>
>> *@Test*
>> *public void testCreatePet() throws Exception {  *   * petStoreRest*
>>        *  .post("/petstore/pet",
>> "{name:'Sunshine',price:100.0,species:'BIRD'}")*
>>             *.execute()*
>>           *  .assertStatus(200)*
>>            * .assertBody("1");  // Returns the auto-generated ID*
>>
>> *}*
>>
>> Note that you could use this approach if you defined this method on the
>> CreatePet class:
>>
>> *public String toString() {  *   * return
>> SimpleJson.DEFAULT.toString(this);*
>>    *}*
>>
>> But usually I just keep it simple and deal with just plain strings.
>>
>> One last note:  Your test class should be placed in src/test/java.  This
>> is standard convention and allows your dependencies to be pulled in using
>> only test scope:
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *        <!-- Mock rest test -->        <dependency>
>>  <groupId>org.apache.juneau</groupId>
>>  <artifactId>juneau-rest-mock</artifactId>
>>  <version>8.1.2</version>           <scope>test</scope>
>> </dependency>        <dependency>           <groupId>junit</groupId>
>>    <artifactId>junit</artifactId>           <scope>test</scope>
>> </dependency>        <dependency>
>>  <groupId>org.springframework.boot</groupId>
>>  <artifactId>spring-boot-starter-test</artifactId>
>>  <scope>test</scope>         </dependency>*
>>
>> On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fi...@gmail.com> wrote:
>>
>>> Pull request sent.
>>>
>>> 2019-12-14, št, 08:19 Ayeshmantha Perera <ak...@gmail.com> rašė:
>>>
>>>> Hi Rasa
>>>>
>>>> Send the PR after removing the commented mock tests.
>>>>
>>>> On Fri 13. Dec 2019 at 14:46, Rasa V <fi...@gmail.com> wrote:
>>>>
>>>>> I dont`understand. Which mock test calls I should remove?
>>>>>
>>>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <ak...@gmail.com>
>>>>> rašė:
>>>>>
>>>>>> Hi Rasa.Send a PR remove all the commented code and I saw a dummy
>>>>>> mock test call ok remove it as well
>>>>>>
>>>>>> Great work done
>>>>>>
>>>>>>
>>>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fi...@gmail.com> wrote:
>>>>>>
>>>>>>> I have pushed my code into a new branch:
>>>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>>>> You can check if i should correct something or I can do a pull
>>>>>>> request.
>>>>>>>
>>>>>>> 2019-12-13, pn, 12:01 Rasa V <fi...@gmail.com> rašė:
>>>>>>>
>>>>>>>> Thanks. It works.
>>>>>>>>
>>>>>>>> 2019-12-12, kt, 17:40 James Bognar <ja...@apache.org> rašė:
>>>>>>>>
>>>>>>>>> If the REST class your testing is a Spring bean with injected
>>>>>>>>> fields, then using SpringRunner should work.  You get access to the bean
>>>>>>>>> instance through autowiring.  So something like this....
>>>>>>>>>
>>>>>>>>> @RunWith(SpringRunner.class)
>>>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>>>> @SpringBootTest()
>>>>>>>>> public class MyRestTest {
>>>>>>>>>
>>>>>>>>>     @Autowired
>>>>>>>>>     MyRestClass restClass;
>>>>>>>>>
>>>>>>>>>     @Test
>>>>>>>>>     public void myTest() throws Exception {
>>>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>>>     }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fi...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Thank you. I have almost finished writing MockTest class.  Which
>>>>>>>>>> annotation should I add for running tests? SpringRunner or something else?
>>>>>>>>>>
>>>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <ja...@apache.org> rašė:
>>>>>>>>>>
>>>>>>>>>>> HTTP GET requests do not typically have a request body.  They're
>>>>>>>>>>> meant to pull data, not push.
>>>>>>>>>>>
>>>>>>>>>>> However, you can use the generic request() methods to do it
>>>>>>>>>>> anyway:
>>>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Thank you. I have one more question. How do you pass @Body
>>>>>>>>>>>> parameters (an Object) into GET method? MockRest Get has only one
>>>>>>>>>>>> parameter, the path.
>>>>>>>>>>>>
>>>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <ja...@apache.org>
>>>>>>>>>>>> rašė:
>>>>>>>>>>>>
>>>>>>>>>>>>> The annotation on your REST class should include the following:
>>>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> I tried to keep Json serializer annotation, but I get an
>>>>>>>>>>>>>> error message saying that Json serializer cannot be resolved as a type.
>>>>>>>>>>>>>> Import doesn`t help here.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> @RestResource-annotated methods can return any POJO.  That
>>>>>>>>>>>>>>> POJO is converted to the body of the HTTP response based on the Juneau
>>>>>>>>>>>>>>> Serializer that matches the Accept header on the incoming request (e.g.
>>>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hello. I have one question about @Rest method. Should it
>>>>>>>>>>>>>>>> always return String or the type is not important here?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2019-12-11, tr, 09:06 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I will try to fix the documentation when I finish writing
>>>>>>>>>>>>>>>>> tests.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> 2019-12-10, an, 22:58 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Bonus points if you can verify and fix that in the
>>>>>>>>>>>>>>>>>> documentation!  I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>>>> The same mistake might exist elsewhere.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Yes I think its already there in the doc James pointed
>>>>>>>>>>>>>>>>>>> previously.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Thanks alot James
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Tue 10. Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Replace create(MyRest.class) with build(MyRest.class).
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 4:28 AM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Hi Rasa and James
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> I just came back from a business trip. Sorry to attend
>>>>>>>>>>>>>>>>>>>>> this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>>>> [image: Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Hi Rasa,
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Unfortunately Apache mail does not support images so
>>>>>>>>>>>>>>>>>>>>>> I can't actually
>>>>>>>>>>>>>>>>>>>>>> see the error.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> There's a section in the documentation on the Mock
>>>>>>>>>>>>>>>>>>>>>> REST interface:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> The general idea behind them is to allow you to
>>>>>>>>>>>>>>>>>>>>>> execute simulated HTTP
>>>>>>>>>>>>>>>>>>>>>> requests against a REST endpoint without the need for
>>>>>>>>>>>>>>>>>>>>>> a servlet
>>>>>>>>>>>>>>>>>>>>>> container.   I recommend trying out the examples in
>>>>>>>>>>>>>>>>>>>>>> the documentation
>>>>>>>>>>>>>>>>>>>>>> (a useful exercise to validate the documentation as
>>>>>>>>>>>>>>>>>>>>>> well).
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>>>>> > Hello. I just started writing a mock test. I don`h
>>>>>>>>>>>>>>>>>>>>>> have much experience writing integration test. But I am trying to learn. I
>>>>>>>>>>>>>>>>>>>>>> wrote some code and would like to be sure I am doing it correctly. I send
>>>>>>>>>>>>>>>>>>>>>> you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>>>> method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>>>> put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>>>> > Maybe do you have some good examples of Juneau mock
>>>>>>>>>>>>>>>>>>>>>> tests?
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> --
>>>>>> *Software Engineer*
>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>> *Salzburg, Austria*
>>>>>>
>>>>> --
>>>> *Software Engineer*
>>>> *Salzburg Research Forschungsgesellschaft *
>>>> *Salzburg, Austria*
>>>>
>>>

Re: Mock test task

Posted by Rasa V <fi...@gmail.com>.
Thank you. I will try to fix everything.

2019-12-14, št, 22:32 James Bognar <ja...@apache.org> rašė:

> One other useful note.  If you add debug="true" to the @Rest annotation on
> the PetStoreResource class, the HTTP request/response will be printed on
> the console which can be quite helpful in debugging issues.
>
>
> ---------- Forwarded message ---------
> From: James Bognar <ja...@apache.org>
> Date: Sat, Dec 14, 2019 at 3:27 PM
> Subject: Re: Mock test task
> To: Rasa V <fi...@gmail.com>
> Cc: Ayeshmantha Perera <ak...@gmail.com>, <de...@juneau.apache.org>
>
>
> Hi Rasa,
>
> I have suggestions on your pull request.
>
> You should be testing against the actual REST class itself instead of
> creating pieces of it in your test (e.g. UpdatePetMockRest).  SpringRunner
> allows you to get access to the real Spring bean via auto-wiring, like so:
>
>
>
> *   @RunWith(SpringRunner.class)
>  @ContextConfiguration(classes=App.class)*
> *@SpringBootTest*
>
> *public class PetStoreTest {   *   *@Autowired *
>       *PetStoreResource petStoreResource;*
>
>       *MockRest petStoreRest;*
>
>       *@Before*
>       *public void setup() {*
>         * petStoreRest =
> MockRest.create(petStoreResource).simpleJson().build();*
>       *}*
>    *}*
>
> Then just use that petStoreRest object in all of your tests.
>
> The MockRest class doesn't use Juneau serializers/parsers.  It just
> expects you to work with raw string input and output.  So the following
> won't work because it's just going to convert the CreatePet object to a
> String using toString():
>
>    *// Won't work*
>    *petStoreRest.post("/petstore/pet",
> pet).execute().assertStatus(200).assertBody(pet.toString());*
>
> Instead, you'll want something like this:
>
>
> *@Test*
> *public void testCreatePet() throws Exception {  *   * petStoreRest*
>        *  .post("/petstore/pet",
> "{name:'Sunshine',price:100.0,species:'BIRD'}")*
>             *.execute()*
>           *  .assertStatus(200)*
>            * .assertBody("1");  // Returns the auto-generated ID*
>
> *}*
>
> Note that you could use this approach if you defined this method on the
> CreatePet class:
>
> *public String toString() {  *   * return
> SimpleJson.DEFAULT.toString(this);*
>    *}*
>
> But usually I just keep it simple and deal with just plain strings.
>
> One last note:  Your test class should be placed in src/test/java.  This
> is standard convention and allows your dependencies to be pulled in using
> only test scope:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> *        <!-- Mock rest test -->        <dependency>
>  <groupId>org.apache.juneau</groupId>
>  <artifactId>juneau-rest-mock</artifactId>
>  <version>8.1.2</version>           <scope>test</scope>
> </dependency>        <dependency>           <groupId>junit</groupId>
>    <artifactId>junit</artifactId>           <scope>test</scope>
> </dependency>        <dependency>
>  <groupId>org.springframework.boot</groupId>
>  <artifactId>spring-boot-starter-test</artifactId>
>  <scope>test</scope>         </dependency>*
>
> On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fi...@gmail.com> wrote:
>
>> Pull request sent.
>>
>> 2019-12-14, št, 08:19 Ayeshmantha Perera <ak...@gmail.com> rašė:
>>
>>> Hi Rasa
>>>
>>> Send the PR after removing the commented mock tests.
>>>
>>> On Fri 13. Dec 2019 at 14:46, Rasa V <fi...@gmail.com> wrote:
>>>
>>>> I dont`understand. Which mock test calls I should remove?
>>>>
>>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <ak...@gmail.com>
>>>> rašė:
>>>>
>>>>> Hi Rasa.Send a PR remove all the commented code and I saw a dummy mock
>>>>> test call ok remove it as well
>>>>>
>>>>> Great work done
>>>>>
>>>>>
>>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fi...@gmail.com> wrote:
>>>>>
>>>>>> I have pushed my code into a new branch:
>>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>>> You can check if i should correct something or I can do a pull
>>>>>> request.
>>>>>>
>>>>>> 2019-12-13, pn, 12:01 Rasa V <fi...@gmail.com> rašė:
>>>>>>
>>>>>>> Thanks. It works.
>>>>>>>
>>>>>>> 2019-12-12, kt, 17:40 James Bognar <ja...@apache.org> rašė:
>>>>>>>
>>>>>>>> If the REST class your testing is a Spring bean with injected
>>>>>>>> fields, then using SpringRunner should work.  You get access to the bean
>>>>>>>> instance through autowiring.  So something like this....
>>>>>>>>
>>>>>>>> @RunWith(SpringRunner.class)
>>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>>> @SpringBootTest()
>>>>>>>> public class MyRestTest {
>>>>>>>>
>>>>>>>>     @Autowired
>>>>>>>>     MyRestClass restClass;
>>>>>>>>
>>>>>>>>     @Test
>>>>>>>>     public void myTest() throws Exception {
>>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>>     }
>>>>>>>> }
>>>>>>>>
>>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fi...@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> Thank you. I have almost finished writing MockTest class.  Which
>>>>>>>>> annotation should I add for running tests? SpringRunner or something else?
>>>>>>>>>
>>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <ja...@apache.org> rašė:
>>>>>>>>>
>>>>>>>>>> HTTP GET requests do not typically have a request body.  They're
>>>>>>>>>> meant to pull data, not push.
>>>>>>>>>>
>>>>>>>>>> However, you can use the generic request() methods to do it
>>>>>>>>>> anyway:
>>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>>
>>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fi...@gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Thank you. I have one more question. How do you pass @Body
>>>>>>>>>>> parameters (an Object) into GET method? MockRest Get has only one
>>>>>>>>>>> parameter, the path.
>>>>>>>>>>>
>>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <ja...@apache.org>
>>>>>>>>>>> rašė:
>>>>>>>>>>>
>>>>>>>>>>>> The annotation on your REST class should include the following:
>>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa V <fi...@gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> I tried to keep Json serializer annotation, but I get an error
>>>>>>>>>>>>> message saying that Json serializer cannot be resolved as a type. Import
>>>>>>>>>>>>> doesn`t help here.
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar <ja...@apache.org>
>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> @RestResource-annotated methods can return any POJO.  That
>>>>>>>>>>>>>> POJO is converted to the body of the HTTP response based on the Juneau
>>>>>>>>>>>>>> Serializer that matches the Accept header on the incoming request (e.g.
>>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hello. I have one question about @Rest method. Should it
>>>>>>>>>>>>>>> always return String or the type is not important here?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2019-12-11, tr, 09:06 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I will try to fix the documentation when I finish writing
>>>>>>>>>>>>>>>> tests.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2019-12-10, an, 22:58 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Bonus points if you can verify and fix that in the
>>>>>>>>>>>>>>>>> documentation!  I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>>> The same mistake might exist elsewhere.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Yes I think its already there in the doc James pointed
>>>>>>>>>>>>>>>>>> previously.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Thanks alot James
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Tue 10. Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Replace create(MyRest.class) with build(MyRest.class).
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 4:28 AM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hi Rasa and James
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> I just came back from a business trip. Sorry to attend
>>>>>>>>>>>>>>>>>>>> this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>>> [image: Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Hi Rasa,
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Unfortunately Apache mail does not support images so I
>>>>>>>>>>>>>>>>>>>>> can't actually
>>>>>>>>>>>>>>>>>>>>> see the error.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> There's a section in the documentation on the Mock
>>>>>>>>>>>>>>>>>>>>> REST interface:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> The general idea behind them is to allow you to
>>>>>>>>>>>>>>>>>>>>> execute simulated HTTP
>>>>>>>>>>>>>>>>>>>>> requests against a REST endpoint without the need for
>>>>>>>>>>>>>>>>>>>>> a servlet
>>>>>>>>>>>>>>>>>>>>> container.   I recommend trying out the examples in
>>>>>>>>>>>>>>>>>>>>> the documentation
>>>>>>>>>>>>>>>>>>>>> (a useful exercise to validate the documentation as
>>>>>>>>>>>>>>>>>>>>> well).
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>>>> > Hello. I just started writing a mock test. I don`h
>>>>>>>>>>>>>>>>>>>>> have much experience writing integration test. But I am trying to learn. I
>>>>>>>>>>>>>>>>>>>>> wrote some code and would like to be sure I am doing it correctly. I send
>>>>>>>>>>>>>>>>>>>>> you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>>> method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>>> put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>>> > Maybe do you have some good examples of Juneau mock
>>>>>>>>>>>>>>>>>>>>> tests?
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>> *Software Engineer*
>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>> *Salzburg, Austria*
>>>>>
>>>> --
>>> *Software Engineer*
>>> *Salzburg Research Forschungsgesellschaft *
>>> *Salzburg, Austria*
>>>
>>

Fwd: Mock test task

Posted by James Bognar <ja...@apache.org>.
One other useful note.  If you add debug="true" to the @Rest annotation on
the PetStoreResource class, the HTTP request/response will be printed on
the console which can be quite helpful in debugging issues.


---------- Forwarded message ---------
From: James Bognar <ja...@apache.org>
Date: Sat, Dec 14, 2019 at 3:27 PM
Subject: Re: Mock test task
To: Rasa V <fi...@gmail.com>
Cc: Ayeshmantha Perera <ak...@gmail.com>, <de...@juneau.apache.org>


Hi Rasa,

I have suggestions on your pull request.

You should be testing against the actual REST class itself instead of
creating pieces of it in your test (e.g. UpdatePetMockRest).  SpringRunner
allows you to get access to the real Spring bean via auto-wiring, like so:



*   @RunWith(SpringRunner.class)
 @ContextConfiguration(classes=App.class)*
*@SpringBootTest*

*public class PetStoreTest {   *   *@Autowired *
      *PetStoreResource petStoreResource;*

      *MockRest petStoreRest;*

      *@Before*
      *public void setup() {*
        * petStoreRest =
MockRest.create(petStoreResource).simpleJson().build();*
      *}*
   *}*

Then just use that petStoreRest object in all of your tests.

The MockRest class doesn't use Juneau serializers/parsers.  It just expects
you to work with raw string input and output.  So the following won't work
because it's just going to convert the CreatePet object to a String using
toString():

   *// Won't work*
   *petStoreRest.post("/petstore/pet",
pet).execute().assertStatus(200).assertBody(pet.toString());*

Instead, you'll want something like this:


*@Test*
*public void testCreatePet() throws Exception {  *   * petStoreRest*
       *  .post("/petstore/pet",
"{name:'Sunshine',price:100.0,species:'BIRD'}")*
            *.execute()*
          *  .assertStatus(200)*
           * .assertBody("1");  // Returns the auto-generated ID*

*}*

Note that you could use this approach if you defined this method on the
CreatePet class:

*public String toString() {  *   * return
SimpleJson.DEFAULT.toString(this);*
   *}*

But usually I just keep it simple and deal with just plain strings.

One last note:  Your test class should be placed in src/test/java.  This is
standard convention and allows your dependencies to be pulled in using only
test scope:



















*        <!-- Mock rest test -->        <dependency>
 <groupId>org.apache.juneau</groupId>
 <artifactId>juneau-rest-mock</artifactId>
 <version>8.1.2</version>           <scope>test</scope>
</dependency>        <dependency>           <groupId>junit</groupId>
   <artifactId>junit</artifactId>           <scope>test</scope>
</dependency>        <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>         </dependency>*

On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fi...@gmail.com> wrote:

> Pull request sent.
>
> 2019-12-14, št, 08:19 Ayeshmantha Perera <ak...@gmail.com> rašė:
>
>> Hi Rasa
>>
>> Send the PR after removing the commented mock tests.
>>
>> On Fri 13. Dec 2019 at 14:46, Rasa V <fi...@gmail.com> wrote:
>>
>>> I dont`understand. Which mock test calls I should remove?
>>>
>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <ak...@gmail.com> rašė:
>>>
>>>> Hi Rasa.Send a PR remove all the commented code and I saw a dummy mock
>>>> test call ok remove it as well
>>>>
>>>> Great work done
>>>>
>>>>
>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fi...@gmail.com> wrote:
>>>>
>>>>> I have pushed my code into a new branch:
>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>> You can check if i should correct something or I can do a pull request.
>>>>>
>>>>> 2019-12-13, pn, 12:01 Rasa V <fi...@gmail.com> rašė:
>>>>>
>>>>>> Thanks. It works.
>>>>>>
>>>>>> 2019-12-12, kt, 17:40 James Bognar <ja...@apache.org> rašė:
>>>>>>
>>>>>>> If the REST class your testing is a Spring bean with injected
>>>>>>> fields, then using SpringRunner should work.  You get access to the bean
>>>>>>> instance through autowiring.  So something like this....
>>>>>>>
>>>>>>> @RunWith(SpringRunner.class)
>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>> @SpringBootTest()
>>>>>>> public class MyRestTest {
>>>>>>>
>>>>>>>     @Autowired
>>>>>>>     MyRestClass restClass;
>>>>>>>
>>>>>>>     @Test
>>>>>>>     public void myTest() throws Exception {
>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>     }
>>>>>>> }
>>>>>>>
>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fi...@gmail.com> wrote:
>>>>>>>
>>>>>>>> Thank you. I have almost finished writing MockTest class.  Which
>>>>>>>> annotation should I add for running tests? SpringRunner or something else?
>>>>>>>>
>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <ja...@apache.org> rašė:
>>>>>>>>
>>>>>>>>> HTTP GET requests do not typically have a request body.  They're
>>>>>>>>> meant to pull data, not push.
>>>>>>>>>
>>>>>>>>> However, you can use the generic request() methods to do it anyway:
>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>
>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fi...@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Thank you. I have one more question. How do you pass @Body
>>>>>>>>>> parameters (an Object) into GET method? MockRest Get has only one
>>>>>>>>>> parameter, the path.
>>>>>>>>>>
>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <ja...@apache.org> rašė:
>>>>>>>>>>
>>>>>>>>>>> The annotation on your REST class should include the following:
>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa V <fi...@gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> I tried to keep Json serializer annotation, but I get an error
>>>>>>>>>>>> message saying that Json serializer cannot be resolved as a type. Import
>>>>>>>>>>>> doesn`t help here.
>>>>>>>>>>>>
>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar <ja...@apache.org>
>>>>>>>>>>>> rašė:
>>>>>>>>>>>>
>>>>>>>>>>>>> @RestResource-annotated methods can return any POJO.  That
>>>>>>>>>>>>> POJO is converted to the body of the HTTP response based on the Juneau
>>>>>>>>>>>>> Serializer that matches the Accept header on the incoming request (e.g.
>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hello. I have one question about @Rest method. Should it
>>>>>>>>>>>>>> always return String or the type is not important here?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2019-12-11, tr, 09:06 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I will try to fix the documentation when I finish writing
>>>>>>>>>>>>>>> tests.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2019-12-10, an, 22:58 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Bonus points if you can verify and fix that in the
>>>>>>>>>>>>>>>> documentation!  I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>> The same mistake might exist elsewhere.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Yes I think its already there in the doc James pointed
>>>>>>>>>>>>>>>>> previously.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks alot James
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Tue 10. Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Replace create(MyRest.class) with build(MyRest.class).
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 4:28 AM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Hi Rasa and James
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I just came back from a business trip. Sorry to attend
>>>>>>>>>>>>>>>>>>> this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>> [image: Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hi Rasa,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Unfortunately Apache mail does not support images so I
>>>>>>>>>>>>>>>>>>>> can't actually
>>>>>>>>>>>>>>>>>>>> see the error.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> There's a section in the documentation on the Mock REST
>>>>>>>>>>>>>>>>>>>> interface:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> The general idea behind them is to allow you to execute
>>>>>>>>>>>>>>>>>>>> simulated HTTP
>>>>>>>>>>>>>>>>>>>> requests against a REST endpoint without the need for a
>>>>>>>>>>>>>>>>>>>> servlet
>>>>>>>>>>>>>>>>>>>> container.   I recommend trying out the examples in the
>>>>>>>>>>>>>>>>>>>> documentation
>>>>>>>>>>>>>>>>>>>> (a useful exercise to validate the documentation as
>>>>>>>>>>>>>>>>>>>> well).
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>>> > Hello. I just started writing a mock test. I don`h
>>>>>>>>>>>>>>>>>>>> have much experience writing integration test. But I am trying to learn. I
>>>>>>>>>>>>>>>>>>>> wrote some code and would like to be sure I am doing it correctly. I send
>>>>>>>>>>>>>>>>>>>> you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>> method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>> put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>> > Maybe do you have some good examples of Juneau mock
>>>>>>>>>>>>>>>>>>>> tests?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> --
>>>> *Software Engineer*
>>>> *Salzburg Research Forschungsgesellschaft *
>>>> *Salzburg, Austria*
>>>>
>>> --
>> *Software Engineer*
>> *Salzburg Research Forschungsgesellschaft *
>> *Salzburg, Austria*
>>
>

Re: Mock test task

Posted by James Bognar <ja...@apache.org>.
Hi Rasa,

I have suggestions on your pull request.

You should be testing against the actual REST class itself instead of
creating pieces of it in your test (e.g. UpdatePetMockRest).  SpringRunner
allows you to get access to the real Spring bean via auto-wiring, like so:



*   @RunWith(SpringRunner.class)
 @ContextConfiguration(classes=App.class)*
*@SpringBootTest*

*public class PetStoreTest {   *   *@Autowired *
      *PetStoreResource petStoreResource;*

      *MockRest petStoreRest;*

      *@Before*
      *public void setup() {*
        * petStoreRest =
MockRest.create(petStoreResource).simpleJson().build();*
      *}*
   *}*

Then just use that petStoreRest object in all of your tests.

The MockRest class doesn't use Juneau serializers/parsers.  It just expects
you to work with raw string input and output.  So the following won't work
because it's just going to convert the CreatePet object to a String using
toString():

   *// Won't work*
   *petStoreRest.post("/petstore/pet",
pet).execute().assertStatus(200).assertBody(pet.toString());*

Instead, you'll want something like this:


*@Test*
*public void testCreatePet() throws Exception {  *   * petStoreRest*
       *  .post("/petstore/pet",
"{name:'Sunshine',price:100.0,species:'BIRD'}")*
            *.execute()*
          *  .assertStatus(200)*
           * .assertBody("1");  // Returns the auto-generated ID*

*}*

Note that you could use this approach if you defined this method on the
CreatePet class:

*public String toString() {  *   * return
SimpleJson.DEFAULT.toString(this);*
   *}*

But usually I just keep it simple and deal with just plain strings.

One last note:  Your test class should be placed in src/test/java.  This is
standard convention and allows your dependencies to be pulled in using only
test scope:



















*        <!-- Mock rest test -->        <dependency>
 <groupId>org.apache.juneau</groupId>
 <artifactId>juneau-rest-mock</artifactId>
 <version>8.1.2</version>           <scope>test</scope>
</dependency>        <dependency>           <groupId>junit</groupId>
   <artifactId>junit</artifactId>           <scope>test</scope>
</dependency>        <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>         </dependency>*

On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fi...@gmail.com> wrote:

> Pull request sent.
>
> 2019-12-14, št, 08:19 Ayeshmantha Perera <ak...@gmail.com> rašė:
>
>> Hi Rasa
>>
>> Send the PR after removing the commented mock tests.
>>
>> On Fri 13. Dec 2019 at 14:46, Rasa V <fi...@gmail.com> wrote:
>>
>>> I dont`understand. Which mock test calls I should remove?
>>>
>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <ak...@gmail.com> rašė:
>>>
>>>> Hi Rasa.Send a PR remove all the commented code and I saw a dummy mock
>>>> test call ok remove it as well
>>>>
>>>> Great work done
>>>>
>>>>
>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fi...@gmail.com> wrote:
>>>>
>>>>> I have pushed my code into a new branch:
>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>> You can check if i should correct something or I can do a pull request.
>>>>>
>>>>> 2019-12-13, pn, 12:01 Rasa V <fi...@gmail.com> rašė:
>>>>>
>>>>>> Thanks. It works.
>>>>>>
>>>>>> 2019-12-12, kt, 17:40 James Bognar <ja...@apache.org> rašė:
>>>>>>
>>>>>>> If the REST class your testing is a Spring bean with injected
>>>>>>> fields, then using SpringRunner should work.  You get access to the bean
>>>>>>> instance through autowiring.  So something like this....
>>>>>>>
>>>>>>> @RunWith(SpringRunner.class)
>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>> @SpringBootTest()
>>>>>>> public class MyRestTest {
>>>>>>>
>>>>>>>     @Autowired
>>>>>>>     MyRestClass restClass;
>>>>>>>
>>>>>>>     @Test
>>>>>>>     public void myTest() throws Exception {
>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>     }
>>>>>>> }
>>>>>>>
>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fi...@gmail.com> wrote:
>>>>>>>
>>>>>>>> Thank you. I have almost finished writing MockTest class.  Which
>>>>>>>> annotation should I add for running tests? SpringRunner or something else?
>>>>>>>>
>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <ja...@apache.org> rašė:
>>>>>>>>
>>>>>>>>> HTTP GET requests do not typically have a request body.  They're
>>>>>>>>> meant to pull data, not push.
>>>>>>>>>
>>>>>>>>> However, you can use the generic request() methods to do it anyway:
>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>
>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fi...@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Thank you. I have one more question. How do you pass @Body
>>>>>>>>>> parameters (an Object) into GET method? MockRest Get has only one
>>>>>>>>>> parameter, the path.
>>>>>>>>>>
>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <ja...@apache.org> rašė:
>>>>>>>>>>
>>>>>>>>>>> The annotation on your REST class should include the following:
>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa V <fi...@gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> I tried to keep Json serializer annotation, but I get an error
>>>>>>>>>>>> message saying that Json serializer cannot be resolved as a type. Import
>>>>>>>>>>>> doesn`t help here.
>>>>>>>>>>>>
>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar <ja...@apache.org>
>>>>>>>>>>>> rašė:
>>>>>>>>>>>>
>>>>>>>>>>>>> @RestResource-annotated methods can return any POJO.  That
>>>>>>>>>>>>> POJO is converted to the body of the HTTP response based on the Juneau
>>>>>>>>>>>>> Serializer that matches the Accept header on the incoming request (e.g.
>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29 AM Rasa V <fi...@gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hello. I have one question about @Rest method. Should it
>>>>>>>>>>>>>> always return String or the type is not important here?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2019-12-11, tr, 09:06 Rasa V <fi...@gmail.com> rašė:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I will try to fix the documentation when I finish writing
>>>>>>>>>>>>>>> tests.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2019-12-10, an, 22:58 James Bognar <ja...@apache.org>
>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Bonus points if you can verify and fix that in the
>>>>>>>>>>>>>>>> documentation!  I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>> The same mistake might exist elsewhere.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Yes I think its already there in the doc James pointed
>>>>>>>>>>>>>>>>> previously.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks alot James
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Tue 10. Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Replace create(MyRest.class) with build(MyRest.class).
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Tue, Dec 10, 2019 at 4:28 AM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Hi Rasa and James
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I just came back from a business trip. Sorry to attend
>>>>>>>>>>>>>>>>>>> this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>> [image: Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hi Rasa,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Unfortunately Apache mail does not support images so I
>>>>>>>>>>>>>>>>>>>> can't actually
>>>>>>>>>>>>>>>>>>>> see the error.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> There's a section in the documentation on the Mock REST
>>>>>>>>>>>>>>>>>>>> interface:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> The general idea behind them is to allow you to execute
>>>>>>>>>>>>>>>>>>>> simulated HTTP
>>>>>>>>>>>>>>>>>>>> requests against a REST endpoint without the need for a
>>>>>>>>>>>>>>>>>>>> servlet
>>>>>>>>>>>>>>>>>>>> container.   I recommend trying out the examples in the
>>>>>>>>>>>>>>>>>>>> documentation
>>>>>>>>>>>>>>>>>>>> (a useful exercise to validate the documentation as
>>>>>>>>>>>>>>>>>>>> well).
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>> fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>>>>>>> > Hello. I just started writing a mock test. I don`h
>>>>>>>>>>>>>>>>>>>> have much experience writing integration test. But I am trying to learn. I
>>>>>>>>>>>>>>>>>>>> wrote some code and would like to be sure I am doing it correctly. I send
>>>>>>>>>>>>>>>>>>>> you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>> method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>> put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>> > Maybe do you have some good examples of Juneau mock
>>>>>>>>>>>>>>>>>>>> tests?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>> *Salzburg, Austria*
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> --
>>>> *Software Engineer*
>>>> *Salzburg Research Forschungsgesellschaft *
>>>> *Salzburg, Austria*
>>>>
>>> --
>> *Software Engineer*
>> *Salzburg Research Forschungsgesellschaft *
>> *Salzburg, Austria*
>>
>

Re: Mock test task

Posted by James Bognar <ja...@apache.org>.
Hi Rasa,

Unfortunately Apache mail does not support images so I can't actually
see the error.

There's a section in the documentation on the Mock REST interface:
http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock

The general idea behind them is to allow you to execute simulated HTTP
requests against a REST endpoint without the need for a servlet
container.   I recommend trying out the examples in the documentation
(a useful exercise to validate the documentation as well).

On Wed, Dec 4, 2019 at 10:17 AM Rasa V <fi...@gmail.com> wrote:
>
> Hello. I just started writing a mock test. I don`h have much experience writing integration test. But I am trying to learn. I wrote some code and would like to be sure I am doing it correctly. I send you a screenshot. Here you can see that I am stuck with MockRest put method. I don`t know why do I get an error saying that The method put(String, UpdatePet) is undefined for the type MockRest.Builder.
> Maybe do you have some good examples of Juneau mock tests?