user14793041
user14793041

Reputation:

'url' should start with a path or be a complete HTTP URL:

I did write an application that pulls customer info.

When I run the application in postman it works fine.

But when trying to run some initial tests but it gives bean error ,

The exact same configuration with the same annotations works fine in another component .

Thanks in advance

'url' should start with a path or be a complete HTTP URL: v1/customers/2503427 java.lang.IllegalArgumentException: 'url' should start with a path or be a complete HTTP URL: v1/customers/2503427

package az.iba.ms.customer.controller;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpStatus;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
@SpringBootTest
public class CustomerControllerTest {

    String endpoint = "v1/customers/";
    String cifs = "2503427";

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private CustomerController customerController;

    @Test
    public void controllerInitializedCorrectly() {
        Assertions.assertThat(customerController).isNotNull();
    }

    @Test
    public void whenValidInput_providedToCustomerQueryThenReturns200() throws Exception {

        mockMvc.perform(get(endpoint + cifs)
                .contentType("application/json"))
                .andExpect(MockMvcResultMatchers.status().is(HttpStatus.OK.value()));
    }

    @Test
    void whenValidNotInput_providedToCustomerQueryThenReturns400() throws Exception {

        mockMvc.perform(get(endpoint)
                .contentType("application/json"))
                .andExpect(MockMvcResultMatchers.status().is(HttpStatus.BAD_REQUEST.value()));
    }

    @Test
    void whenValidNotMethod_providedToCustomerQueryThenReturns405() throws Exception {

        mockMvc.perform(post(endpoint + cifs)
                .contentType("application/json"))
                .andExpect(MockMvcResultMatchers.status().is(HttpStatus.METHOD_NOT_ALLOWED.value()));
    }

}

Upvotes: 9

Views: 8329

Answers (2)

Andrey Lebedenko
Andrey Lebedenko

Reputation: 1988

In case you are using a pattern, make sure it starts with "/" (the pattern itself, not what it is resolved into).

Upvotes: 1

Zhenyria
Zhenyria

Reputation: 448

I was fixing the same error now... Error arise because endpoint must start with /.

Change your's variable endpoint from v1/customers/ to /v1/customers/.

Upvotes: 24

Related Questions